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
|
|
|
|
2023-02-07 18:06:18 -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-02-07 18:06:18 -05:00
|
|
|
];
|
|
|
|
|
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
|
|
|
}
|
|
|
|
|
2023-02-07 18:06:18 -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
|
|
|
|
};
|