-
Notifications
You must be signed in to change notification settings - Fork 5
/
db.go
94 lines (80 loc) · 1.37 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
package db
import (
"database/sql"
"os"
_ "github.com/mattn/go-sqlite3"
metafs "github.com/hideckies/hermit/pkg/common/meta/fs"
)
type Database struct {
DB *sql.DB
}
func NewDatabase() (*Database, error) {
database := Database{}
dbPath, err := metafs.GetDBPath()
if err != nil {
return nil, err
}
exist := false
if _, err := os.Stat(dbPath); err == nil {
exist = true
}
database.DB, err = sql.Open("sqlite3", dbPath)
if err != nil {
return nil, err
}
if !exist {
err := database.init()
if err != nil {
return &database, err
}
}
return &database, nil
}
func (d *Database) init() error {
_, err := d.DB.Exec(`
CREATE TABLE operator (
id INTEGER NOT NULL PRIMARY KEY,
uuid TEXT,
name TEXT,
login TEXT
)`)
if err != nil {
return err
}
_, err = d.DB.Exec(`
CREATE TABLE listener (
id INTEGER NOT NULL PRIMARY KEY,
uuid TEXT,
name TEXT,
protocol TEXT,
host TEXT,
port INTEGER,
domains TEXT,
active TEXT
)`)
if err != nil {
return err
}
_, err = d.DB.Exec(`
CREATE TABLE agent (
id INTEGER NOT NULL PRIMARY KEY,
uuid TEXT,
name TEXT,
ip TEXT,
os TEXT,
arch TEXT,
hostname TEXT,
listenerURL TEXT,
implantType TEXT,
checkin TEXT,
sleep INTEGER,
jitter INTEGER,
killdate INTEGER,
aesKey TEXT,
aesIV TEXT
)`)
if err != nil {
return err
}
return nil
}