summaryrefslogtreecommitdiffstats
path: root/storage/storage.go
diff options
context:
space:
mode:
Diffstat (limited to 'storage/storage.go')
-rw-r--r--storage/storage.go62
1 files changed, 57 insertions, 5 deletions
diff --git a/storage/storage.go b/storage/storage.go
index 1dcea40..28f2564 100644
--- a/storage/storage.go
+++ b/storage/storage.go
@@ -2,7 +2,6 @@ package storage
import (
"database/sql"
- "fmt"
"log"
"time"
@@ -16,6 +15,12 @@ type Database struct {
const initSql = `
CREATE TABLE IF NOT EXISTS messages
(id INTEGER NOT NULL PRIMARY KEY, source STRING, target STRING, timestamp INT, content STRING);
+
+ CREATE TABLE IF NOT EXISTS users
+ (name STRING NOT NULL PRIMARY KEY, pass STRING);
+
+ CREATE TABLE IF NOT EXISTS permissions
+ (user STRING, channel STRING, read INT, write INT, PRIMARY KEY (user, channel));
`
func InitDb(path string) (*Database, error) {
@@ -28,9 +33,7 @@ func InitDb(path string) (*Database, error) {
return &Database{db}, nil
}
-func (db *Database) Write(msg core.Message) (err error) {
- fmt.Println(msg.Timestamp)
-
+func (db *Database) AddMessage(msg core.Message) (err error) {
_, err = db.Exec(
"INSERT INTO messages (source, target, timestamp, content) VALUES (?, ?, ?, ?);",
msg.Source, msg.Target, msg.Timestamp.Unix(), msg.Content,
@@ -39,7 +42,7 @@ func (db *Database) Write(msg core.Message) (err error) {
return err
}
-func (db *Database) Read(channel string, since time.Time, num int, offset int) (history []core.Message, err error) {
+func (db *Database) GetHistory(channel string, since time.Time, num int, offset int) (history []core.Message, err error) {
rows, err := db.Query(
`SELECT source, target, timestamp, content FROM messages WHERE target = ? AND timestamp > ? LIMIT ? OFFSET ?`,
channel, since.Unix(), num, offset,
@@ -70,3 +73,52 @@ func (db *Database) Read(channel string, since time.Time, num int, offset int) (
return history, nil
}
+
+func (db *Database) SetUser(user core.UserData) error {
+ _, err := db.Exec(
+ "INSERT OR REPLACE INTO users (name, pass) VALUES (?, ?);",
+ user.Name, user.Pass,
+ )
+
+ return err
+}
+
+func (db *Database) DelUser(name string) error {
+ _, err := db.Exec("DELETE FROM users WHERE name = ?", name)
+ return err
+}
+
+func (db *Database) GetUserPass(name string) (string, error) {
+ var pass string
+
+ err := db.QueryRow("SELECT pass FROM users WHERE name = ?", name).Scan(&pass)
+ if err != nil {
+ return "", err
+ }
+
+ return pass, nil
+}
+
+func (db *Database) SetPermission(perm core.PermissionData) error {
+ _, err := db.Exec(
+ "INSERT OR REPLACE INTO permissions (user, channel, read, write) VALUES (?, ?, ?, ?);",
+ perm.User, perm.Channel, perm.Read, perm.Write, perm.User, perm.Channel,
+ )
+
+ return err
+}
+
+func (db *Database) GetPermission(user, channel string) (core.PermissionData, error) {
+ var perm core.PermissionData
+
+ err := db.QueryRow(
+ "SELECT (read, write) FROM permissions WHERE user = ? AND channel = ?", user, channel).
+ Scan(&perm.Read, &perm.Write)
+ if err != nil {
+ return core.PermissionData{}, err
+ }
+
+ perm.User = user
+ perm.Channel = channel
+ return perm, nil
+}