Browse Source

wildcard import

main
Nikky 4 years ago
parent
commit
be89767bb5
  1. 12
      src/index.js
  2. 6
      src/logic/cache.js
  3. 2
      src/logic/security.js
  4. 2
      src/logic/session.js
  5. 4
      src/route/auth.controller.js
  6. 17
      src/utils/common.utils.js
  7. 22
      src/utils/module.utils.js
  8. 17
      src/utils/web.utils.js

12
src/index.js

@ -5,9 +5,7 @@ import fastifyMultipart from 'fastify-multipart';
import Sequelize from 'sequelize'; import Sequelize from 'sequelize';
import { DatabaseConfig } from './config/database.config.js'; import { DatabaseConfig } from './config/database.config.js';
import { ServerConfig } from './config/server.config.js'; import { ServerConfig } from './config/server.config.js';
import UserEntity from './model/user.model.js'; import { importAll } from './utils/module.utils.js';
import AuthController from './route/auth.controller.js';
import UserController from './route/user.controller.js';
const app = Fastify({logger: false}); const app = Fastify({logger: false});
const db = new Sequelize(DatabaseConfig); const db = new Sequelize(DatabaseConfig);
@ -15,7 +13,7 @@ const db = new Sequelize(DatabaseConfig);
async function Database(){ async function Database(){
{ //models { //models
const opts = {db}; const opts = {db};
UserEntity(opts); await importAll('model', opts);
} }
await db.authenticate(); //connect to your database of choice await db.authenticate(); //connect to your database of choice
await db.sync({alter: true}); //add missing tables and columns await db.sync({alter: true}); //add missing tables and columns
@ -26,8 +24,7 @@ async function WebApp(){
app.register(fastifyMultipart); //file uploads app.register(fastifyMultipart); //file uploads
{ //routes, bloody routes { //routes, bloody routes
const opts = {app, db}; const opts = {app, db};
AuthController(opts); await importAll('route', opts);
UserController(opts);
} }
app.get('/', () => 'Hello. D:'); app.get('/', () => 'Hello. D:');
const address = await app.listen(ServerConfig); const address = await app.listen(ServerConfig);
@ -49,4 +46,5 @@ async function WebApp(){
}; };
await step(Database, 'DB'); await step(Database, 'DB');
await step(WebApp, 'Fastify'); await step(WebApp, 'Fastify');
})(); })()
.catch(console.error);

6
src/logic/cache.js

@ -1,4 +1,7 @@
/**
* A map with a limited number of entries. (unspecified order)
*/
export class CacheTable{ export class CacheTable{
constructor(threshold){ constructor(threshold){
@ -31,6 +34,9 @@ export class CacheTable{
} }
/**
* A cache table that keeps track of access within multiple time intervals.
*/
export class SpamCache extends CacheTable{ export class SpamCache extends CacheTable{
constructor(){ constructor(){

2
src/logic/security.js

@ -1,6 +1,6 @@
import bcrypt from 'bcrypt'; import bcrypt from 'bcrypt';
import crypto from 'crypto'; import crypto from 'crypto';
import { days, hours } from './utils.js'; import { days, hours } from '../utils/common.utils.js';
//-- endpoints -- //-- endpoints --

2
src/logic/session.js

@ -1,5 +1,5 @@
import { CacheTable, SpamCache } from "./cache.js"; import { CacheTable, SpamCache } from "./cache.js";
import { ipAddress } from "./utils.js"; import { ipAddress } from "../utils/web.utils.js";
export class UserSession{ export class UserSession{

4
src/route/auth.controller.js

@ -1,4 +1,5 @@
import { checkStringParam, errorOut, notYet, randomElement, ipAddress, reverseString, hours, minutes, localeFromHeader } from '../logic/utils.js'; import { notYet, randomElement, reverseString, hours, minutes } from '../utils/common.utils.js';
import { checkStringParam, errorOut, ipAddress, localeFromHeader } from '../utils/web.utils.js';
import { Animals } from '../misc/animals.js'; import { Animals } from '../misc/animals.js';
import { reissueToken, generateToken, newTokenExpiry, hashPassword, doesPasswordMatch, isEndpointAllowedForBannedUsers, isEndpointProtected, generateRestoreCode, restoreValidity, restoreAttempts } from '../logic/security.js'; import { reissueToken, generateToken, newTokenExpiry, hashPassword, doesPasswordMatch, isEndpointAllowedForBannedUsers, isEndpointProtected, generateRestoreCode, restoreValidity, restoreAttempts } from '../logic/security.js';
import { sendRestorationLink } from '../logic/email.js'; import { sendRestorationLink } from '../logic/email.js';
@ -25,7 +26,6 @@ function AuthController({app, db}){
let session = UserSession.find(token); let session = UserSession.find(token);
if(!session){ if(!session){
const userData = await Users.findOne({where: {token}}); const userData = await Users.findOne({where: {token}});
userData.role = '232';
if(userData){ if(userData){
session = new UserSession(userData, request); session = new UserSession(userData, request);
} }

17
src/utils/common.utils.js

@ -0,0 +1,17 @@
export function reverseString(str){
return str.split("").reverse().join("");
}
export function randomElement(arr){
return arr[Math.floor(Math.random()*arr.length)];
}
export const minutes = 60*1000;
export const hours = 3600*1000;
export const days = 24*hours;
export function notYet(date){
if(!date) return false;
return (new Date() <= date);
}

22
src/utils/module.utils.js

@ -0,0 +1,22 @@
import fs from 'fs';
import path from 'path';
import { fileURLToPath } from 'url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
function defaultFileFilter(filename){
return !!filename.match(/\.js$/);
}
export async function importAll(folder, opts){
const controllerPaths = (
fs.readdirSync(path.join(__dirname, '../'+folder))
.filter(defaultFileFilter)
.map(file => path.join(__dirname, '../'+folder, file))
);
for (const path of controllerPaths) {
const submodule = await import('file://'+path);
submodule.default(opts);
}
}

17
src/logic/utils.js → src/utils/web.utils.js

@ -21,20 +21,3 @@ export function localeFromHeader(input){
//https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language //https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language
return checkStringParam(input, 1, 64) ? input : 'en'; return checkStringParam(input, 1, 64) ? input : 'en';
} }
export function reverseString(str){
return str.split("").reverse().join("");
}
export function randomElement(arr){
return arr[Math.floor(Math.random()*arr.length)];
}
export const minutes = 60*1000;
export const hours = 3600*1000;
export const days = 24*hours;
export function notYet(date){
if(!date) return false;
return (new Date() <= date);
}
Loading…
Cancel
Save