This commit is contained in:
hexlocation 2024-12-25 15:02:06 +01:00
commit 6e222f7529
Signed by: hex
GPG key ID: A19EFFAAF8C00FCF
5 changed files with 123 additions and 0 deletions

58
src/gw.nim Normal file
View file

@ -0,0 +1,58 @@
import prologue, prologue/middlewares/staticfile, std/json, sysrandom, asyncdispatch, std/strutils, db_connector/db_sqlite, std/asyncnet
const key_len = 128
const refer_len = 16
const debug = false
let db = open("real.db", "", "", "")
db.exec(
sql"""CREATE TABLE IF NOT EXISTS keys(
referral VARCHAR(255) NOT NULL,
key VARCHAR(255) NOT NULL,
ip VARCHAR(255) NOT NULL
)""")
proc index*(ctx: Context) {.async.} =
for x in db.fastRows(sql"SELECT * FROM keys"):
echo x
await ctx.staticFileResponse("web/index.html", "")
proc ip_exists*(ip: string): bool =
return len(db.getAllRows(sql"SELECT * FROM keys WHERE ip=?", ip)) != 0
proc referral_exists*(refer: string): bool =
let results = db.getAllRows(sql"SELECT * FROM keys WHERE referral=?", refer)
return len(results) != 0
proc generate_referral*(key, referral: var string, ip: string): void =
key = "K-" & getRandomString(key_len)
referral = "R-" & getRandomString(refer_len)
db.exec(sql"INSERT INTO keys (referral, key, ip) VALUES (?, ?, ?)", referral, key, ip)
proc gentry*(ctx: Context) {.async.} =
var key: string = ""
var referral: string = ""
var err: bool = true
if (not ctx.request.hasHeader("referral") or
not referral_exists($ctx.request.getHeader("referral")) or
ip_exists(ctx.request.hostName)) and not debug:
err = true
else:
generate_referral(key,referral, ctx.request.hostName)
err = false
var info = %*
{
"referral": referral,
"key": key,
"err": err
}
resp jsonResponse(info)
var app = newApp()
app.use(staticFileMiddleware("./public"))
app.addRoute("/", index)
app.addRoute("/entry", gentry)
app.run()