UNPKG

@subu1979/saml2

Version:

Comprehensive SAML 2.0 implementation for Node.js covering all major use cases

123 lines (103 loc) • 4.64 kB
#!/usr/bin/env node /** * 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();