This repository has been archived by the owner on Dec 26, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 8
/
InitializeDB.go
116 lines (111 loc) · 2.97 KB
/
InitializeDB.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
package settings
import (
"database/sql"
_ "github.com/mattn/go-sqlite3"
"github.com/number571/hiddenlake/utils"
)
func InitializeDB(dbname string) {
var err error
if !utils.FileIsExist(dbname) {
err = utils.CreateFile(dbname)
if err != nil {
panic("can't create database")
}
}
DB, err = sql.Open("sqlite3", dbname)
if err != nil {
panic("can't open database")
}
// Username = sha256(username)
// Hashpasw = sha256(sha256(password+salt))
// Hashname = sha256(pubkey)
// Hash = sha256(file)
_, err = DB.Exec(`
CREATE TABLE IF NOT EXISTS User (
Id INTEGER PRIMARY KEY AUTOINCREMENT,
Username VARCHAR(44) UNIQUE,
Salt VARCHAR(32),
Hashpasw VARCHAR(44) UNIQUE,
PrivateKey VARCHAR(4096) UNIQUE
);
CREATE TABLE IF NOT EXISTS Email (
Id INTEGER PRIMARY KEY AUTOINCREMENT,
IdUser INTEGER,
Incoming BOOLEAN,
Temporary BOOLEAN,
LastTime VARCHAR(128),
SenderPub VARCHAR(1024),
Receiver VARCHAR(44),
Session VARCHAR(128) NULL,
Title VARCHAR(128),
Message VARCHAR(2048),
Salt VARCHAR(32),
Hash VARCHAR(44),
Sign VARCHAR(512),
Nonce INTEGER,
FOREIGN KEY (IdUser) REFERENCES User (Id) ON UPDATE CASCADE,
FOREIGN KEY (IdUser) REFERENCES User (Id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS Client (
Id INTEGER PRIMARY KEY AUTOINCREMENT,
IdUser INTEGER,
Hashname VARCHAR(44),
Address VARCHAR(64),
PublicKey VARCHAR(1024),
ThrowClient VARCHAR(1024),
Certificate VARCHAR(3072),
FOREIGN KEY (IdUser) REFERENCES User (Id) ON UPDATE CASCADE,
FOREIGN KEY (IdUser) REFERENCES User (Id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS Chat (
Id INTEGER PRIMARY KEY AUTOINCREMENT,
IdUser INTEGER,
IdClient INTEGER,
Name VARCHAR(44),
Message VARCHAR(1024),
LastTime VARCHAR(128),
FOREIGN KEY (IdClient) REFERENCES Client (Id) ON UPDATE CASCADE,
FOREIGN KEY (IdClient) REFERENCES Client (Id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS GlobalChat (
Id INTEGER PRIMARY KEY AUTOINCREMENT,
IdUser INTEGER,
Founder VARCHAR(44),
Name VARCHAR(44),
Message VARCHAR(1024),
LastTime VARCHAR(128),
FOREIGN KEY (IdUser) REFERENCES User (Id) ON UPDATE CASCADE,
FOREIGN KEY (IdUser) REFERENCES User (Id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS File (
Id INTEGER PRIMARY KEY AUTOINCREMENT,
IdUser INTEGER,
Hash VARCHAR(44),
Name VARCHAR(128),
PathName VARCHAR(44),
Size INTEGER,
Encr BOOLEAN,
FOREIGN KEY (IdUser) REFERENCES User (Id) ON UPDATE CASCADE,
FOREIGN KEY (IdUser) REFERENCES User (Id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS Friend (
Id INTEGER PRIMARY KEY AUTOINCREMENT,
IdUser INTEGER,
Hashname VARCHAR(44),
FOREIGN KEY (IdUser) REFERENCES User (Id) ON UPDATE CASCADE,
FOREIGN KEY (IdUser) REFERENCES User (Id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS State (
Id INTEGER PRIMARY KEY AUTOINCREMENT,
IdUser INTEGER,
UsedF2F BOOLEAN,
UsedFSH BOOLEAN,
UsedGCH BOOLEAN,
FOREIGN KEY (IdUser) REFERENCES User (Id) ON UPDATE CASCADE,
FOREIGN KEY (IdUser) REFERENCES User (Id) ON DELETE CASCADE
);
`)
if err != nil {
panic("can't exec database")
}
}