sanifae/src/lib/db/db.js

139 lines
3.1 KiB
JavaScript
Raw Normal View History

2023-03-09 19:12:15 -05:00
import { backend } from './handlers.js';
2023-03-09 19:12:17 -05:00
import { mkdir, access } from 'node:fs/promises';
2023-02-05 09:50:49 -05:00
const AUTH_ACTIONS = [
'postCreate',
2023-02-07 19:36:32 -05:00
'fileCreate',
2023-02-11 02:11:45 -05:00
'vote',
2023-03-06 02:26:57 -05:00
'postDelete',
2023-03-06 16:15:27 -05:00
'pfp',
2023-03-15 02:04:33 -04:00
'follow',
'chatAdd'
];
2023-03-09 19:12:17 -05:00
const FILE_DIRS = [
'/db',
'/db/files/upload',
'/db/files/pfp'
]
2023-02-05 09:50:49 -05:00
import sqlite3 from 'sqlite3'
import { open } from 'sqlite'
var db;
2023-03-09 19:12:15 -05:00
2023-03-09 19:12:17 -05:00
async function newDir(dir) {
await access(newDir)
.then(() => {})
.catch(async () => await mkdir(dir, { recursive: true }));
}
async function initFolders() {
for (var i = 0; i < FILE_DIRS.length; i++) {
await newDir( `${process.cwd()}/${FILE_DIRS[i]}`);
}
}
2023-02-05 09:50:49 -05:00
async function initDb() {
2023-03-09 19:12:17 -05:00
await initFolders();
2023-02-05 09:50:49 -05:00
db = await open({
filename: `${process.cwd()}/db/main.db`,
driver: sqlite3.Database
});
2023-03-09 19:12:17 -05:00
await db.run('CREATE TABLE IF NOT EXISTS auth ( \
username CHAR(64), \
password CHAR(1024) \
)');
await db.run('CREATE TABLE IF NOT EXISTS token ( \
username CHAR(64), \
token CHAR(1024) \
)');
await db.run('CREATE TABLE IF NOT EXISTS post ( \
username CHAR(64), \
id CHAR(64), \
content CHAR(10240), \
upvotes INTEGER, \
downvotes INTEGER, \
rating REAL, \
reply CHAR(64), \
time INTEGER \
)');
2023-03-18 23:02:25 -04:00
await db.run('CREATE TABLE IF NOT EXISTS tag ( \
id CHAR(64), \
reply CHAR(64) \
)');
2023-03-15 02:04:33 -04:00
await db.run('CREATE TABLE IF NOT EXISTS chat ( \
username CHAR(64), \
content CHAR(10240), \
time INTEGER, \
room CONTENT(64) \
)');
2023-03-09 19:12:17 -05:00
await db.run('CREATE TABLE IF NOT EXISTS vote ( \
id CHAR(64), \
username CHAR(64), \
type INTEGER \
)');
await db.run('CREATE TABLE IF NOT EXISTS user ( \
username CHAR(64), \
followers INTEGER, \
following INTEGER, \
upvotes INTEGER, \
downvotes INTEGER, \
reputation REAL, \
roles INTEGER, \
pinned CHAR(64) \
)');
await db.run('CREATE TABLE IF NOT EXISTS follow (\
username CHAR(64), \
following CHAR(64) \
)');
2023-03-11 12:51:19 -05:00
await db.run('CREATE TABLE IF NOT EXISTS messages (\
username CHAR(64), \
content CHAR(10240), \
time INTEGER, \
read INTEGER \
)');
2023-02-05 09:50:49 -05:00
}
let backendProxy = async ({route, backendParams}) => {
if (!db) await initDb();
2023-03-09 19:12:15 -05:00
let extraParams = {};
2023-02-05 09:50:49 -05:00
2023-03-09 19:12:15 -05:00
extraParams['db'] = db;
2023-02-11 02:11:45 -05:00
2023-03-15 02:04:33 -04:00
let jason = {cookies: backendParams.cookies};
if (backendParams.token)
jason.token = backendParams.token;
let user = (await backend.token(jason,extraParams)) || {};
2023-02-05 09:50:49 -05:00
2023-03-09 19:12:15 -05:00
user = user.data;
2023-03-10 18:32:46 -05:00
console.log(user);
2023-03-08 20:09:51 -05:00
2023-03-09 19:12:15 -05:00
if ((!user || user == '') && AUTH_ACTIONS.indexOf(route) != -1) return {'success': 'Not authorized.' };
2023-03-11 12:51:19 -05:00
2023-03-09 19:12:15 -05:00
let isAdmin = false;
2023-03-10 18:32:46 -05:00
if (user && user != '') isAdmin = ((await backend.userRoles({user}, {db})) || []).indexOf('Admin') != -1;
2023-02-05 09:50:49 -05:00
2023-03-09 19:12:15 -05:00
extraParams['admin'] = isAdmin;
extraParams['user'] = user;
2023-02-05 09:50:49 -05:00
2023-03-09 19:12:15 -05:00
return backend[route](backendParams, extraParams) || {};
2023-02-05 09:50:49 -05:00
}
export {
2023-03-09 19:12:15 -05:00
backendProxy
};