Files
conquest/server/db/database.nim

85 lines
2.5 KiB
Nim

import tiny_sqlite, net
import ../types
import system, terminal, strformat
proc dbInit*(console: Console) =
try:
let conquestDb = openDatabase(console.dbPath, mode=dbReadWrite)
# Create tables
conquestDb.execScript("""
CREATE TABLE listener (
name TEXT PRIMARY KEY,
address TEXT NOT NULL,
port INTEGER NOT NULL UNIQUE,
protocol TEXT NOT NULL CHECK (protocol IN ('http')),
sleep INTEGER NOT NULL,
jitter REAL NOT NULL
);
""")
console.writeLine(fgGreen, "[+] ", console.dbPath, ": Database created.")
conquestDb.close()
except SqliteError:
console.writeLine(fgGreen, "[+] ", console.dbPath, ": Database file found.")
proc dbStore*(console: Console, listener: Listener): bool =
try:
let conquestDb = openDatabase(console.dbPath, mode=dbReadWrite)
conquestDb.exec("""
INSERT INTO listener (name, address, port, protocol, sleep, jitter)
VALUES (?, ?, ?, ?, ?, ?);
""", listener.name, listener.address, listener.port, $listener.protocol, listener.sleep, listener.jitter)
conquestDb.close()
except:
console.writeLine(fgRed, styleBright, "[-] ", getCurrentExceptionMsg())
return false
return true
proc dbGetAllListeners*(console: Console): seq[Listener] =
var listeners: seq[Listener] = @[]
try:
let conquestDb = openDatabase(console.dbPath, mode=dbReadWrite)
for row in conquestDb.iterate("SELECT name, address, port, protocol, sleep, jitter FROM listener;"):
let (name, address, port, protocol, sleep, jitter) = row.unpack((string, string, int, string, int, float ))
let l = Listener(
name: name,
address: address,
port: port,
protocol: stringToProtocol(protocol),
sleep: sleep,
jitter: jitter
)
listeners.add(l)
conquestDb.close()
except:
console.writeLine(fgRed, styleBright, "[-] ", getCurrentExceptionMsg())
return listeners
proc dbDeleteListenerByName*(console: Console, name: string): bool =
try:
let conquestDb = openDatabase(console.dbPath, mode=dbReadWrite)
conquestDb.exec("DELETE FROM listener WHERE name = ?", name)
conquestDb.close()
except:
return false
return true
proc dbStore*(agent: Agent): bool =
discard