-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdb.go
131 lines (101 loc) · 2.24 KB
/
db.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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
package main
import (
"strconv"
"strings"
_ "github.com/mattn/go-sqlite3"
"database/sql"
)
type dbHelper struct {
DBpath string
db *sql.DB
}
type ResultKeys struct {
Keys []ResultKey
IsError bool
Error string
}
type ResultKey struct {
KeyID int
Name string
Key string
Signature string
}
func (d *dbHelper) NewHelper(DBpath string) {
d.DBpath = DBpath
db, err := sql.Open("sqlite3", d.DBpath)
if err != nil {
panic(err)
}
d.db = db
}
func (d *dbHelper) CreateDatabase(DBpath string) error {
db, _ := sql.Open("sqlite3", DBpath)
stmt, err := db.Prepare("CREATE TABLE Keys(ID INTEGER PRIMARY KEY,Name TEXT,Key TEXT UNIQUE,Signature TEXT)")
if err != nil {
panic(err)
}
_, err = stmt.Exec()
if err != nil {
panic(err)
}
stmt, err = db.Prepare("CREATE TABLE Groups(ID INTEGER PRIMARY KEY,Name TEXT UNIQUE)")
if err != nil {
panic(err)
}
_, err = stmt.Exec()
if err != nil {
panic(err)
}
stmt, err = db.Prepare("CREATE TABLE GroupKeys(GroupName TEXT,KeyID INTERGER,FOREIGN KEY (GroupName) REFERENCES Groups (Name), FOREIGN KEY (KeyID) REFERENCES Keys (ID) )")
if err != nil {
panic(err)
}
_, err = stmt.Exec()
if err != nil {
panic(err)
}
db.Close()
return nil
}
func (d *dbHelper) DoesGroupExist(groupName string) (bool, error) {
var result string
err := d.db.QueryRow("SELECT Name FROM Groups WHERE Name=?", groupName).Scan(&result)
if err != nil {
if err == sql.ErrNoRows {
return false, nil
}
return false, err
}
return true, nil
}
func (d *dbHelper) GetGroupKeys(groupName string) ([]ResultKey, error) {
var KeyIDs []int
rows, err := d.db.Query("SELECT KeyID FROM GroupKeys WHERE GroupName=?", groupName)
if err != nil {
return []ResultKey{}, err
}
for rows.Next() {
var id int
rows.Scan(&id)
KeyIDs = append(KeyIDs, id)
}
rows.Close()
var stmtStr string
stmtStr = "SELECT * FROM Keys WHERE ID IN ("
for x := range KeyIDs {
stmtStr += strconv.Itoa(KeyIDs[x]) + ","
}
stmtStr = strings.TrimSuffix(stmtStr, ",")
stmtStr += ")"
rows, err = d.db.Query(stmtStr)
if err != nil {
return []ResultKey{}, err
}
var r []ResultKey
for rows.Next() {
var x ResultKey
rows.Scan(&x.KeyID, &x.Name, &x.Key, &x.Signature)
r = append(r, x)
}
return r, nil
}