From 5b32698ec5bc4d10e75cca6e4933e0cfc635f644 Mon Sep 17 00:00:00 2001 From: Alexey Date: Tue, 5 Aug 2025 18:37:58 +0300 Subject: [PATCH] some scripts changes --- com/Auth/GetAccess.lua | 63 ++++++++++++++++++++++++++++ com/Auth/NewUnit.lua | 77 ++++++++++++++++++++++++++++++++++ com/List.lua | 2 +- com/{DB => _DB}/Put.lua | 0 com/{Net => _Net}/GetExpl.lua | 0 com/{Net => _Net}/PostExpl.lua | 0 6 files changed, 141 insertions(+), 1 deletion(-) create mode 100644 com/Auth/GetAccess.lua create mode 100644 com/Auth/NewUnit.lua rename com/{DB => _DB}/Put.lua (100%) rename com/{Net => _Net}/GetExpl.lua (100%) rename com/{Net => _Net}/PostExpl.lua (100%) diff --git a/com/Auth/GetAccess.lua b/com/Auth/GetAccess.lua new file mode 100644 index 0000000..9876131 --- /dev/null +++ b/com/Auth/GetAccess.lua @@ -0,0 +1,63 @@ +---@diagnostic disable: redefined-local +local db = require("internal.database-sqlite").connect("db/user-database.db", {log = true}) +local log = require("internal.log") +local session = require("internal.session") +local crypt = require("internal.crypt.bcrypt") + +local function close_db() + if db then + db:close() + db = nil + end +end + +local function error_response(message, code, data) + session.response.error = { + code = code or -32600, + message = message, + data = data or nil + } + close_db() +end + +local params = session.request.params +if not params then + return error_response("No params provided") +end + +if not (params.username and params.email and params.password) then + return error_response("Missing username, email or password", -32602) +end + +local unit, err = db:query( + "SELECT id, username, email, password, created_at FROM users WHERE email = ? AND username = ? LIMIT 1", + {params.email, params.username} +) + +if err then + log.error("DB query error: " .. tostring(err)) + return error_response("Database query failed") +end + +if not unit or #unit == 0 then + return error_response("Unit not found", -32604) +end + +unit = unit[1] + +local ok = crypt.compare(unit.password, params.password) +if not ok then + log.warn("Login failed: wrong password for " .. params.username) + return error_response("Invalid password", -32605) +end + +session.response.result = { + user = { + id = unit.id, + username = unit.username, + email = unit.email, + created_at = unit.created_at + } +} + +close_db() diff --git a/com/Auth/NewUnit.lua b/com/Auth/NewUnit.lua new file mode 100644 index 0000000..b92a5be --- /dev/null +++ b/com/Auth/NewUnit.lua @@ -0,0 +1,77 @@ +---@diagnostic disable: redefined-local +local db = require("internal.database-sqlite").connect("db/user-database.db", {log = true}) +local log = require("internal.log") +local session = require("internal.session") +local crypt = require("internal.crypt.bcrypt") + +if not session.request.params then + session.response.error = { + message = "no params provided" + } + return +end + +local params = session.request.params + +if not (params.username and params.email and params.password) then + session.response.error = { + message = "no username/email/password provided" + } + return +end + +local hashPass = crypt.generate(params.password, crypt.DefaultCost) + +local existing, err = db:query("SELECT 1 FROM users WHERE email = ? OR username = ? LIMIT 1", { + params.email, + params.username +}) +if err ~= nil then + session.response.error = { + message = "Database check failed: "..tostring(err) + } + log.error("Email check failed: "..tostring(err)) + return +end + +if existing and #existing > 0 then + session.response.error = { + code = -32604, + message = "Unit already exists" + } + return +end + +local ctx, err = db:exec( + "INSERT INTO users (username, email, password) VALUES (?, ?, ?)", + { + params.username, + params.email, + hashPass + } +) +if err ~= nil then + session.response.error = { + code = -32605, + message = "Insert failed: "..tostring(err) + } + log.error("Insert failed: "..tostring(err)) + return +end + +local res, err = ctx:wait() +if err ~= nil then + session.response.error = { + code = -32606, + message = "Insert confirmation failed: "..tostring(err) + } + log.error("Insert confirmation failed: "..tostring(err)) + return +end + +session.response.result = { + rows_affected = res, + message = "Unit created successfully" +} + +db:close() \ No newline at end of file diff --git a/com/List.lua b/com/List.lua index 53fb24a..8e329b9 100644 --- a/com/List.lua +++ b/com/List.lua @@ -2,7 +2,7 @@ local session = require("internal.session") -if session.request and session.request.params and session.request.params.about then +if session.request.params.about then session.response.result = { description = "Returns a list of available methods", params = { diff --git a/com/DB/Put.lua b/com/_DB/Put.lua similarity index 100% rename from com/DB/Put.lua rename to com/_DB/Put.lua diff --git a/com/Net/GetExpl.lua b/com/_Net/GetExpl.lua similarity index 100% rename from com/Net/GetExpl.lua rename to com/_Net/GetExpl.lua diff --git a/com/Net/PostExpl.lua b/com/_Net/PostExpl.lua similarity index 100% rename from com/Net/PostExpl.lua rename to com/_Net/PostExpl.lua