import { Response, Request, NextFunction } from "express"; import { SequelizeOptions } from "sequelize-typescript"; import DFWInstance from "./scripts/system/DFWInstance"; import SessionManager, { DFWSessionSchema } from "./scripts/modules/SessionManager"; import APIManager, { DFWAPISchema } from "./scripts/modules/APIManager"; import SecurityManager, { DFWSecuritySchema } from "./scripts/modules/SecurityManager"; import { isString } from "util"; import DatabaseManager, { Database } from "./scripts/modules/DatabaseManager"; import dfw_user from "./model/dfw_user.model"; import dfw_access from "./model/dfw_access.model"; import dfw_credential from "./model/dfw_credential.model"; import dfw_session from "./model/dfw_session.model"; import UploadManager, { DFWFileSystemSchema, UploadedFile } from "./scripts/modules/UploadManager"; export default class DFWCore { public static instances:{[id:string]:DFWInstance} = {} public static getIstance(name:string = "main"){ return this.instances[name?name:"main"]; } public static createInstance(name?:string|DFWConfig,cfg?:DFWConfig):DFWInstance{ var _name:string; var _cfg:DFWConfig|undefined; if(name === undefined || isString(name) === true){ _name = name as string?name as string:"main"; _cfg = cfg; }else{ _name = "main"; _cfg = name as DFWConfig; } this.instances[_name] = new DFWInstance(_cfg); return this.instances[_name] } /// DFW MODELS /// public static dfw_user:typeof dfw_user = dfw_user; public static dfw_access:typeof dfw_access = dfw_access; public static dfw_credentials:typeof dfw_credential = dfw_credential; public static dfw_session:typeof dfw_session = dfw_session; public static SecurityManager = SecurityManager; public static SessionManager = SessionManager; public static APIManager = APIManager; public static DatabaseManager = DatabaseManager; public static UploadManager = UploadManager; } export interface DFWScheme { request: Request & { files:{[x:string]:UploadedFile} }; // express request object response: Response; // express response object security: DFWSecuritySchema; session: DFWSessionSchema; api: DFWAPISchema; // API scheme db: Database; // Default database asociated file: DFWFileSystemSchema; // FileSystem scheme next: NextFunction; // modules:DFWModuleSchema; DFWInstance: DFWInstance; } export interface DFWModuleSchema{ securityManager:SecurityManager; sessionManager: SessionManager; APIManager:APIManager; databaseManager:DatabaseManager; uploadManager:UploadManager; } /** * Configuration script */ export interface DFWConfig { /** * */ databases?: { [id: string]: SequelizeOptions }; // Database config /** * */ database?:SequelizeOptions; // Single database config /** * */ session?:{ /** * Session token name space in cookie */ stk?:string /** * Session id name space in cookie */ sid?:string } /** * */ server?:{ // Express DFW server params requestBody?:"json"|"urlencoded"|"form-data"|"none"; // Select specific request body method ( by default dfw uses json and urlencoded ) requestBodyConfig?:any; } upload?:busboy.BusboyConfig & { localPrivateUploadDir?:string; // Path for local private resurces (by defaul its relative to execution directory) example upload -> C:/var/www/resources/upload/private localUploadDir?:string; // Path for local resurces (by defaul its relative to execution directory) example upload -> C:/var/www/resources/upload/public staticUploadPath?:string; // Path for URL example: /upload -> https://site.com/upload tempDir?:string; // temp directory for uploaded files, by default is a os.tmpdir }; }