-
Notifications
You must be signed in to change notification settings - Fork 0
/
ProjectTapebucket.go
65 lines (54 loc) · 1.33 KB
/
ProjectTapebucket.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package ProjectTapebucket
import (
"crypto/sha256"
"database/sql"
"fmt"
"github.com/gidoBOSSftw5731/log"
)
const (
URLLen = 8
)
// AddToDB adds a block of text to the database and returns both the url and error
// database should be mysql
func AddToDB(text, identity *string, db *sql.DB) (string, error) {
textHash := fmt.Sprintf("%x", sha256.Sum256([]byte(*text)))
url := textHash[:URLLen]
log.Traceln(textHash)
var out bool
err := db.QueryRow("SELECT 1 FROM tapebucket WHERE url=?", url).Scan(&out)
switch err {
case sql.ErrNoRows:
log.Debug("New paste, adding..")
_, err := db.Exec("INSERT INTO tapebucket VALUES(?, ?, ?, ?)",
*text, textHash, url, *identity)
if err != nil {
return "", err
}
//defer insert.Close()
log.Debug("Added paste to table")
case nil:
default:
return "", err
}
return url, nil
}
// ReturnFromDB returns a pointer to the paste from a database and an error.
func ReturnFromDB(url string, db *sql.DB) (*string, error) {
if len(url) != URLLen {
return nil, fmt.Errorf("badurlformat")
}
// so now we know the URL could be valid
var paste string
err := db.QueryRow("SELECT paste FROM tapebucket WHERE url=?", url).Scan(&paste)
if err != nil {
return nil, err
}
return &paste, nil
}
/*
CREATE TABLE tapebucket (
paste LONGTEXT,
hash char(64),
url char(8),
identity tinytext);
*/