Environment Config

This commit is contained in:
Felix Kaspar 2024-05-29 23:45:56 +02:00
parent 09a3d83dc5
commit c19bc8d07a
7 changed files with 44 additions and 27 deletions

View File

@ -1,2 +1,7 @@
JOBS_ENABLED=True
JOBS_DIR="./jobs"
SESSION_SECRET="default-secret"
AUTH_ENABLED=True
AUTH_SESSION_SECRET="default-secret"
SEQUELIZE_LOGGING=False

View File

@ -0,0 +1,22 @@
import passport from "passport";
import session from "express-session";
import { initialize } from "./passport-config";
import auth from "../routes/auth/auth-controller";
import { Express } from "express";
export function connect(app: Express) {
app.use(session({
secret: process.env.SESSION_SECRET || "default-secret",
resave: false,
saveUninitialized: false
}));
app.use(passport.initialize());
app.use(passport.authenticate(['headerapikey', 'session'], {
session: false, // Only set a session on the login request.
}));
initialize(passport);
app.use("/auth", auth);
}

View File

@ -38,7 +38,7 @@ export function initialize(passport: typeof import("passport")) {
));
passport.serializeUser((user, done) => {
done(null, user.id) //TODO: Extend Express.User to include id wich is set by passport
done(null, user.id)
});
passport.deserializeUser((id: number, done) => {

View File

@ -33,13 +33,13 @@ export async function verifyPassword(user: User, password: string): Promise<bool
if(!passwordRecord) {
throw new Error("This user does not have a password set!");
}
return passwordRecord.password == password;
return passwordRecord.password == password; // TODO: Replace with web-crypto
}
export function createUser(params: { username: string, password: string }, cb: (err: SequelizeError | null, user: User | null) => void ) {
User.create({ username: params.username, authenticationMethod: "password" }).then(async user => {
user.setPassword(await Password.create({
password: params.password,
password: params.password, // TODO: Replace with web-crypto
})).then(password => {
cb(null, user as any as User)
}).catch(e =>

View File

@ -1,7 +1,11 @@
import 'dotenv/config';
import { Sequelize, DataTypes } from "sequelize";
//TODO: Make this configurable
const sequelize = new Sequelize("sqlite::memory:");
const sequelize = new Sequelize("sqlite::memory:", {
logging: process.env.SEQUELIZE_LOGGING === "True" ? console.log : false
});
import { User, AccessRule, APIKey, Password } from "../auth/user/user-model";

View File

@ -1,3 +1,5 @@
import 'dotenv/config';
/*
* translation
*/
@ -25,13 +27,15 @@ console.log("Available Modules: ", listOperatorNames());
* jobs
*/
import "./jobs/jobs-controller";
if(process.env.JOBS_ENABLED === "True")
import("./jobs/jobs-controller");
/**
* database
*/
import "./data/sequelize-relations";
if(process.env.AUTH_ENABLED === "True")
import("./data/sequelize-relations");
/*
* EXPRESS
@ -45,25 +49,8 @@ const PORT = 8000;
* auth
*/
import passport from "passport";
import session from "express-session";
import { initialize } from "./auth/passport-config";
import auth from "./routes/auth/auth-controller";
app.use(session({
secret: process.env.SESSION_SECRET || "default-secret",
resave: false,
saveUninitialized: false
}));
app.use(passport.initialize());
app.use(passport.authenticate(['headerapikey', 'session'], {
session: false, // Only set a session on the login request.
}));
initialize(passport);
app.use("/auth", auth);
if(process.env.AUTH_ENABLED === "True")
import("./auth/auth-controller.ts").then(router => router.connect(app));
/*
* api

View File

@ -1,6 +1,5 @@
import { traverseOperations } from '@stirling-pdf/shared-operations/src/workflow/traverseOperations';
import { PdfFile, RepresentationType } from '@stirling-pdf/shared-operations/src/wrappers/PdfFile';
import { JoiPDFFileSchema } from '@stirling-pdf/shared-operations/src/wrappers/PdfFileJoi';
import 'dotenv/config';
import fs from 'fs';
import path from "path";