webssh2-server
Version:
A Websocket to SSH2 gateway using xterm.js, socket.io, ssh2
47 lines (46 loc) • 1.66 kB
JavaScript
// app/middleware/auth.middleware.ts
// Authentication middleware for handling basic auth
import basicAuth from 'basic-auth';
import { HTTP } from '../constants.js';
import { processAuthentication, createSessionData } from './auth-processor.js';
import { isErr } from '../utils/index.js';
import { createNamespacedDebug } from '../logger.js';
const debug = createNamespacedDebug('middleware:auth');
/**
* Create authentication middleware that handles basic auth
* @param config - Application configuration
* @returns Express middleware handler
*/
export function createAuthMiddleware(config) {
return (req, res, next) => {
const r = req;
// Extract basic auth credentials from request
const credentials = basicAuth(req);
// Process authentication using pure function
const authResult = processAuthentication(config, credentials);
if (isErr(authResult)) {
// Authentication failed
res.setHeader(HTTP.AUTHENTICATE, HTTP.REALM);
res.status(authResult.error.code).send(authResult.error.message);
return;
}
// Create session data from auth result
const sessionData = createSessionData(authResult.value);
const session = r.session;
if (session == null) {
next();
return;
}
Object.assign(session, sessionData);
if (typeof session.save !== 'function') {
next();
return;
}
session.save((err) => {
if (err != null) {
debug('Session save error: %O', err);
}
next();
});
};
}