46 lines
1.2 KiB
JavaScript
46 lines
1.2 KiB
JavaScript
/** @type {import('./$types').Actions} */
|
|
import {hash} from 'bcrypt';
|
|
import {initDb} from '$lib/db/db.js';
|
|
|
|
const db = await initDb();
|
|
|
|
const saltRounds = 10;
|
|
|
|
/** @type {import('./$types').RequestHandler} */
|
|
export async function POST(event) {
|
|
var data = await event.request.formData();
|
|
var user = data.get("username");
|
|
|
|
var rows = await db.all(
|
|
"SELECT * from auth WHERE user = ?",
|
|
[user]
|
|
);
|
|
|
|
if (rows.length == 0) {
|
|
var state = await register(data);
|
|
return {success: state};
|
|
} else {
|
|
return {success: 'exists'};
|
|
}
|
|
};
|
|
|
|
async function register(data) {
|
|
var user = data.get("username");
|
|
var email = data.get("email");
|
|
var password = data.get("password");
|
|
|
|
if (!password || !email || !user) return 'missing';
|
|
if (password.length > 256 || email.length > 64 || user.length > 32) return 'long';
|
|
|
|
const userTest = new RegExp("^[A-Za-z0-9_-]+$");
|
|
if (!userTest.test(user)) return 'invalid';
|
|
|
|
var passHash = await hash(password,saltRounds);
|
|
|
|
await db.run(
|
|
"INSERT INTO auth (user,email,password) VALUES (?,?,?)",
|
|
[user,email,passHash]
|
|
);
|
|
|
|
return 'login';
|
|
}
|