top 10 boilerplate ever
This commit is contained in:
commit
153c74bd22
17 changed files with 567 additions and 0 deletions
27
form/auth.js
Normal file
27
form/auth.js
Normal file
|
@ -0,0 +1,27 @@
|
|||
import Route from "../route.js";
|
||||
import initDb from "../db.js";
|
||||
|
||||
let db = await initDb();
|
||||
|
||||
let main = new Route([], async function (req, res, input) {
|
||||
let body = { ...req.cookies, ...req.body };
|
||||
|
||||
let { token } = body;
|
||||
|
||||
let match = await db.all('SELECT * FROM token WHERE token = ?', [
|
||||
token || 'blah'
|
||||
]);
|
||||
|
||||
let username = match[0] ? match[0].username : '!nobody';
|
||||
|
||||
let valid = await db.all('SELECT * FROM auth WHERE username = ?', [
|
||||
username
|
||||
]);
|
||||
|
||||
return {
|
||||
username,
|
||||
valid: valid[0] ? valid[0].valid : 'noexist'
|
||||
};
|
||||
});
|
||||
|
||||
export default main;
|
44
form/login.js
Normal file
44
form/login.js
Normal file
|
@ -0,0 +1,44 @@
|
|||
// from an old project: https://git.zenoverse.net/bigly-archive/auth-thing/raw/branch/main/src/routes/login/+page.server.js
|
||||
import Route from "../route.js";
|
||||
import initDb from "../db.js";
|
||||
import { compare } from "bcrypt";
|
||||
import { randomBytes } from 'node:crypto';
|
||||
|
||||
let db = await initDb();
|
||||
|
||||
function isValid(user) {
|
||||
return user.search(/[^A-Za-z0-9\-\_]/g) == -1;
|
||||
}
|
||||
|
||||
// TODO: rewrite
|
||||
let main = new Route([], async function (req, res, input) {
|
||||
let { user, pass } = req.body;
|
||||
|
||||
if (!pass || !user) return { 'success': false, 'message': 'Some fields are missing' };
|
||||
|
||||
if (!isValid(user)) return { 'success': false, 'message': 'Username is invalid' };
|
||||
|
||||
let isExist = await db.all('SELECT * FROM auth WHERE UPPER(username) LIKE UPPER(?)', [
|
||||
user
|
||||
]);
|
||||
|
||||
if (isExist.length < 1) return { 'success': false, 'message': 'Account does not exist' };
|
||||
|
||||
let passHash = await compare(pass,isExist[0].password);
|
||||
|
||||
if (!passHash)
|
||||
return { 'success': false, 'message': 'Incorrect password' };
|
||||
|
||||
let token = randomBytes(32).toString('hex');
|
||||
|
||||
await db.run('INSERT INTO token (username, token) VALUES (?, ?)', [
|
||||
user,
|
||||
token
|
||||
])
|
||||
|
||||
res.cookie('token',token);
|
||||
|
||||
return {'success': true, 'message': 'Log in succeeded', 'redirect': '/', 'data': token};
|
||||
});
|
||||
|
||||
export default main;
|
44
form/register.js
Normal file
44
form/register.js
Normal file
|
@ -0,0 +1,44 @@
|
|||
// from an old project: https://git.zenoverse.net/bigly-archive/auth-thing/raw/branch/main/src/routes/register/+page.server.js
|
||||
import Route from "../route.js";
|
||||
import initDb from "../db.js";
|
||||
import { hash } from "bcrypt";
|
||||
|
||||
const minChar = 1;
|
||||
const maxChar = 32;
|
||||
|
||||
let db = await initDb();
|
||||
|
||||
function isValid(user) {
|
||||
return user.search(/[^A-Za-z0-9\-\_]/g) == -1;
|
||||
}
|
||||
|
||||
// TODO: rewrite
|
||||
let main = new Route([], async function (req, res, input) {
|
||||
let { user, pass, pass2 } = req.body;
|
||||
|
||||
if (pass != pass2) return { 'success': false, 'message': 'Passwords do not match' };
|
||||
|
||||
if (!pass || !user || !pass2) return { 'success': false, 'message': 'Some fields are missing' };
|
||||
|
||||
if (!isValid(user)) return { 'success': false, 'message': 'Username is invalid' };
|
||||
|
||||
if (user.length < minChar || user.length > maxChar)
|
||||
return { 'success': false, 'message': `Username must be ${minChar} to ${maxChar} characters` };
|
||||
|
||||
let isExist = await db.all('SELECT username FROM auth WHERE UPPER(username) LIKE UPPER(?)', [
|
||||
user
|
||||
]);
|
||||
|
||||
if (isExist.length > 0) return { 'success': false, 'message': 'Account already exists' };
|
||||
|
||||
var passHash = await hash(pass, 10);
|
||||
|
||||
await db.run('INSERT INTO auth (username, password) VALUES (?, ?)', [
|
||||
user,
|
||||
passHash
|
||||
]);
|
||||
|
||||
return { 'message': 'Account created', 'success': true, 'redirect': '/client/login' };
|
||||
});
|
||||
|
||||
export default main;
|
Loading…
Add table
Add a link
Reference in a new issue