@subu1979/saml2
Version:
Comprehensive SAML 2.0 implementation for Node.js covering all major use cases
123 lines (103 loc) ⢠4.64 kB
JavaScript
/**
* Startup script for @subu1979/saml2 Application
* Provides additional startup checks and configuration validation
*/
const fs = require('fs-extra');
const path = require('path');
const { samlConfig, validateConfig, loadCertificates } = require('./src/config/saml');
console.log('š Starting SAML 2.0 Application...\n');
async function startup() {
try {
// 1. Validate configuration
console.log('1. Validating configuration...');
validateConfig(samlConfig);
console.log('ā
Configuration validation passed\n');
// 2. Check certificates
console.log('2. Checking certificates...');
const certs = await loadCertificates();
if (certs.idpPrivateKey && certs.idpCertificate) {
console.log('ā
IdP certificates found');
} else {
console.log('ā ļø IdP certificates not found - using sample certificates');
}
if (certs.spPrivateKey && certs.spCertificate) {
console.log('ā
SP certificates found');
} else {
console.log('ā ļø SP certificates not found - using sample certificates');
}
console.log('');
// 3. Create necessary directories
console.log('3. Creating necessary directories...');
const dirs = ['certs', 'logs', 'temp'];
for (const dir of dirs) {
await fs.ensureDir(path.join(__dirname, dir));
console.log(`ā
Created directory: ${dir}`);
}
console.log('');
// 4. Display configuration summary
console.log('4. Configuration Summary:');
console.log(` š IdP Entity ID: ${samlConfig.idp.entityID}`);
console.log(` š SP Entity ID: ${samlConfig.sp.entityID}`);
console.log(` š IdP SSO URL: ${samlConfig.idp.singleSignOnService.location}`);
console.log(` š SP ACS URL: ${samlConfig.sp.assertionConsumerService.location}`);
console.log(` š Signature Algorithm: ${samlConfig.security.signatureAlgorithm}`);
console.log(` ā° Clock Skew: ${samlConfig.security.clockSkew} seconds`);
console.log(` š”ļø Replay Protection: ${samlConfig.security.replayProtection ? 'Enabled' : 'Disabled'}`);
console.log('');
// 5. Start the application
console.log('5. Starting application...');
console.log(' Importing main application...');
// Import and start the main application
const app = require('./src/index');
console.log('ā
Application started successfully!');
console.log('');
console.log('š SAML 2.0 is now running!');
console.log('');
console.log('š Available endpoints:');
console.log(' - Health Check: http://localhost:3000/health');
console.log(' - SAML Health: http://localhost:3000/saml/health');
console.log(' - Auth Health: http://localhost:3000/auth/health');
console.log(' - Metadata Health: http://localhost:3000/metadata/health');
console.log('');
console.log('š SAML Endpoints:');
console.log(' - SP-Initiated SSO: http://localhost:3000/saml/login');
console.log(' - IdP-Initiated SSO: http://localhost:3000/saml/sso');
console.log(' - Assertion Consumer: http://localhost:3000/saml/acs');
console.log(' - Single Logout: http://localhost:3000/saml/logout');
console.log('');
console.log('š Metadata Endpoints:');
console.log(' - SP Metadata: http://localhost:3000/metadata/sp');
console.log(' - IdP Metadata: http://localhost:3000/metadata/idp');
console.log(' - Federation: http://localhost:3000/metadata/federation');
console.log('');
console.log('š Testing:');
console.log(' - Run tests: node test.js');
console.log(' - Check health: curl http://localhost:3000/health');
console.log('');
} catch (error) {
console.error('ā Startup failed:', error.message);
console.error('Stack trace:', error.stack);
process.exit(1);
}
}
// Handle process termination
process.on('SIGINT', () => {
console.log('\nš Received SIGINT, shutting down gracefully...');
process.exit(0);
});
process.on('SIGTERM', () => {
console.log('\nš Received SIGTERM, shutting down gracefully...');
process.exit(0);
});
process.on('uncaughtException', (error) => {
console.error('ā Uncaught Exception:', error.message);
console.error('Stack trace:', error.stack);
process.exit(1);
});
process.on('unhandledRejection', (reason, promise) => {
console.error('ā Unhandled Rejection at:', promise, 'reason:', reason);
process.exit(1);
});
// Start the application
startup();