fortify2-js
Version:
MOST POWERFUL JavaScript Security Library! Military-grade cryptography + 19 enhanced object methods + quantum-resistant algorithms + perfect TypeScript support. More powerful than Lodash with built-in security.
205 lines (201 loc) • 8.51 kB
JavaScript
'use strict';
var MiddlewareAPI = require('./MiddlewareAPI.js');
var Logger = require('../../../utils/Logger.js');
/**
* MiddlewareMethodsManager - Adds middleware methods to the UltraFastApp
* Follows the same pattern as RouteManager for adding methods to the app
*/
class MiddlewareMethodsManager {
constructor(dependencies) {
this.dependencies = dependencies;
}
/**
* Add all middleware methods to the Express app
*/
addMiddlewareMethods() {
Logger.logger.debug("middleware", "Adding middleware methods to UltraFastApp...");
this.addMiddlewareMethod();
this.addSecureMiddlewareMethods();
this.addPerformanceMiddlewareMethods();
this.addCachedMiddlewareMethods();
this.addMiddlewareManagementMethods();
this.addConvenienceMethods();
Logger.logger.debug("middleware", "Middleware methods added successfully");
Logger.logger.debug("middleware", "All middleware methods added successfully\n");
}
/**
* Add the main middleware() method that returns MiddlewareAPI
*/
addMiddlewareMethod() {
this.dependencies.app.middleware = (config) => {
const api = new MiddlewareAPI.MiddlewareAPI(this.dependencies.middlewareManager, this.dependencies.app, config || {});
return api;
};
// Add a marker to identify this is the real implementation
this.dependencies.app.middleware.__isRealImplementation = true;
}
/**
* Add secure middleware methods
*/
addSecureMiddlewareMethods() {
this.dependencies.app.useSecure = (middleware) => {
const middlewareArray = Array.isArray(middleware)
? middleware
: [middleware];
middlewareArray.forEach((mw, index) => {
this.dependencies.middlewareManager.register(mw, {
name: `secure-middleware-${index}`,
priority: "critical",
cacheable: false,
});
});
Logger.logger.debug("middleware", `Registered ${middlewareArray.length} secure middleware`);
return this.dependencies.app;
};
}
/**
* Add performance middleware methods
*/
addPerformanceMiddlewareMethods() {
this.dependencies.app.usePerformance = (middleware) => {
const middlewareArray = Array.isArray(middleware)
? middleware
: [middleware];
middlewareArray.forEach((mw, index) => {
this.dependencies.middlewareManager.register(mw, {
name: `performance-middleware-${index}`,
priority: "high",
cacheable: true,
});
});
Logger.logger.debug("middleware", `Registered ${middlewareArray.length} performance middleware`);
return this.dependencies.app;
};
}
/**
* Add cached middleware methods
*/
addCachedMiddlewareMethods() {
this.dependencies.app.useCached = (middleware, ttl) => {
const middlewareArray = Array.isArray(middleware)
? middleware
: [middleware];
middlewareArray.forEach((mw, index) => {
this.dependencies.middlewareManager.register(mw, {
name: `cached-middleware-${index}`,
priority: "normal",
cacheable: true,
ttl: ttl || 300000, // 5 minutes default
});
});
Logger.logger.debug("middleware", `Registered ${middlewareArray.length} cached middleware`);
return this.dependencies.app;
};
}
/**
* Add middleware management methods
*/
addMiddlewareManagementMethods() {
// Get middleware information
this.dependencies.app.getMiddleware = (name) => {
return this.dependencies.middlewareManager.getInfo(name);
};
// Remove middleware
this.dependencies.app.removeMiddleware = (name) => {
try {
// Find middleware by name and get its ID from the manager's registry
const middlewareId = this.findMiddlewareIdByName(name);
if (middlewareId) {
const success = this.dependencies.middlewareManager.unregister(middlewareId);
if (success) {
Logger.logger.debug("middleware", `Middleware removed: ${name} (${middlewareId})`);
return true;
}
}
Logger.logger.warn("middleware", `Middleware not found: ${name}`);
return false;
}
catch (error) {
Logger.logger.error("middleware", `Failed to remove middleware: ${error}`);
return false;
}
};
// Get middleware statistics
this.dependencies.app.getMiddlewareStats = () => {
return this.dependencies.middlewareManager.getStats();
};
}
/**
* Find middleware ID by name from the manager's registry
* This method accesses the internal registry to get the ID
*/
findMiddlewareIdByName(name) {
try {
// Access the middleware manager's internal registry
// Since we need to access private members, we'll use a workaround
const manager = this.dependencies.middlewareManager;
if (manager.middlewareRegistry &&
manager.middlewareRegistry instanceof Map) {
// Iterate through the registry to find middleware by name
for (const [id, entry,] of manager.middlewareRegistry.entries()) {
if (entry.name === name) {
return id;
}
}
}
// Alternative approach: try to use reflection to access the registry
const registryKeys = Object.getOwnPropertyNames(manager);
for (const key of registryKeys) {
if (key.includes("registry") || key.includes("Registry")) {
const registry = manager[key];
if (registry instanceof Map) {
for (const [id, entry] of registry.entries()) {
if (entry &&
typeof entry === "object" &&
entry.name === name) {
return id;
}
}
}
}
}
Logger.logger.warn("middleware", `Could not find ID for middleware: ${name}`);
return null;
}
catch (error) {
Logger.logger.error("middleware", `Error finding middleware ID: ${error}`);
return null;
}
}
/**
* Add convenience methods for common middleware types
*/
addConvenienceMethods() {
// Enable security middleware
this.dependencies.app.enableSecurity = (options) => {
this.dependencies.middlewareManager.enableSecurity(options);
Logger.logger.debug("middleware", "Security middleware enabled via convenience method");
return this.dependencies.app;
};
// Enable compression middleware
this.dependencies.app.enableCompression = (options) => {
this.dependencies.middlewareManager.enableCompression(options);
Logger.logger.debug("middleware", "Compression middleware enabled via convenience method");
return this.dependencies.app;
};
// Enable rate limiting middleware
this.dependencies.app.enableRateLimit = (options) => {
this.dependencies.middlewareManager.enableRateLimit(options);
Logger.logger.debug("middleware", "Rate limiting middleware enabled via convenience method");
return this.dependencies.app;
};
// Enable CORS middleware
this.dependencies.app.enableCors = (options) => {
this.dependencies.middlewareManager.enableCors(options);
Logger.logger.debug("middleware", "CORS middleware enabled via convenience method");
return this.dependencies.app;
};
}
}
exports.MiddlewareMethodsManager = MiddlewareMethodsManager;
//# sourceMappingURL=MiddlewareMethodsManager.js.map