Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
import * as fs from 'fs';
import * as path from 'path';
import * as express from 'express';
import * as samlp from 'samlp';
// Example
const app = express();
app.get('/samlp', samlp.auth({
issuer: 'the-issuer',
cert: fs.readFileSync(path.join(__dirname, 'some-cert.pem')),
key: fs.readFileSync(path.join(__dirname, 'some-cert.key')),
getPostURL: function (wtrealm, wreply, req, cb) {
return cb( null, 'http://someurl.com')
}
}));
app.get('/samlp/FederationMetadata/2007-06/FederationMetadata.xml', samlp.metadata({
issuer: 'the-issuer',
cert: fs.readFileSync(path.join(__dirname, 'some-cert.pem')),
}));
app.use((req: express.Request, res: express.Response, next: express.NextFunction) => {
samlp.parseRequest(req, (err: any, data: any) => {
import * as samlp from 'samlp';
// Example
const app = express();
app.get('/samlp', samlp.auth({
issuer: 'the-issuer',
cert: fs.readFileSync(path.join(__dirname, 'some-cert.pem')),
key: fs.readFileSync(path.join(__dirname, 'some-cert.key')),
getPostURL: function (wtrealm, wreply, req, cb) {
return cb( null, 'http://someurl.com')
}
}));
app.get('/samlp/FederationMetadata/2007-06/FederationMetadata.xml', samlp.metadata({
issuer: 'the-issuer',
cert: fs.readFileSync(path.join(__dirname, 'some-cert.pem')),
}));
app.use((req: express.Request, res: express.Response, next: express.NextFunction) => {
samlp.parseRequest(req, (err: any, data: any) => {
next();
});
});
} catch (error) {
res.body(error.message);
res.end();
console.error(error);
}
} else {
// continue with issuing token using samlp
next();
}
} else {
res.send("go away!");
res.end();
}
});
app.get("/issue/", samlp.auth(samlpoptions));
app.get("/issue/FederationMetadata/2007-06/FederationMetadata.xml", samlp.metadata({
issuer: Config.saml_issuer,
cert: cert,
}));
// var SessionParticipants = require('samlp/lib/sessionParticipants');
// https://github.com/mcguinness/saml-idp/blob/master/app.js
// https://www.diycode.cc/projects/auth0/node-samlp
// https://github.com/auth0/node-samlp/blob/master/lib/sessionParticipants/index.js
// app.get('/logout', samlp.logout({
// deflate: true,
// issuer: 'the-issuer',
// protocolBinding: 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect',
// cert: cert,
// key: key
// }));
}
// Set Session Index
authOptions.sessionIndex = getSessionIndex(req);
// Keep calm and Single Sign On
console.log(dedent(chalk`
Generating SAML Response using =>
{bold User} => ${Object.entries(req.user).map(([key, value]) => chalk`
${key}: {cyan ${value}}`
).join('')}
{bold SAMLP Options} => ${Object.entries(authOptions).map(([key, value]) => chalk`
${key}: {cyan ${formatOptionValue(key, value)}}`
).join('')}
`));
samlp.auth(authOptions)(req, res);
})
res.body(error.message);
res.end();
console.error(error);
}
} else {
// continue with issuing token using samlp
next();
}
} else {
res.send("go away!");
res.end();
}
});
app.get("/issue/", samlp.auth(samlpoptions));
app.get("/issue/FederationMetadata/2007-06/FederationMetadata.xml", samlp.metadata({
issuer: Config.saml_issuer,
cert: cert,
}));
// var SessionParticipants = require('samlp/lib/sessionParticipants');
// https://github.com/mcguinness/saml-idp/blob/master/app.js
// https://www.diycode.cc/projects/auth0/node-samlp
// https://github.com/auth0/node-samlp/blob/master/lib/sessionParticipants/index.js
// app.get('/logout', samlp.logout({
// deflate: true,
// issuer: 'the-issuer',
// protocolBinding: 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect',
// cert: cert,
// key: key
// }));
app.get("/issue/", (req: any, res: any, next: any): void => {
// passport.authenticate("session");
if (req.query.SAMLRequest !== undefined && req.query.SAMLRequest !== null) {
if ((req.user === undefined || req.user === null)) {
try {
// tslint:disable-next-line: max-line-length
samlp.parseRequest(req, samlpoptions, async (_err: any, samlRequestDom: any): Promise => {
res.cookie("originalUrl", req.originalUrl, { maxAge: 900000, httpOnly: true });
res.redirect("/");
});
} catch (error) {
res.body(error.message);
res.end();
console.error(error);
}
} else {
// continue with issuing token using samlp
next();
}
} else {
res.send("go away!");
res.end();
}
app.use((req: express.Request, res: express.Response, next: express.NextFunction) => {
samlp.parseRequest(req, (err: any, data: any) => {
next();
});
});
const parseSamlRequest = function(req, res, next) {
samlp.parseRequest(req, function(err, data) {
if (err) {
return res.render('error', {
message: 'SAML AuthnRequest Parse Error: ' + err.message,
error: err
});
};
if (data) {
req.authnRequest = {
relayState: req.query.RelayState || req.body.RelayState,
id: data.id,
issuer: data.issuer,
destination: data.destination,
acsUrl: data.assertionConsumerServiceURL,
forceAuthn: data.forceAuthn === 'true'
};
console.log('Received AuthnRequest => \n', req.authnRequest);
const parseLogoutRequest = function(req, res, next) {
if (!req.idp.options.sloUrl) {
return res.render('error', {
message: 'SAML Single Logout Service URL not defined for Service Provider'
});
};
console.log('Processing SAML SLO request for participant => \n', req.participant);
return samlp.logout({
issuer: req.idp.options.issuer,
cert: req.idp.options.cert,
key: req.idp.options.key,
digestAlgorithm: req.idp.options.digestAlgorithm,
signatureAlgorithm: req.idp.options.signatureAlgorithm,
sessionParticipants: new SessionParticipants(
[
req.participant
]),
clearIdPSession: function(callback) {
console.log('Destroying session ' + req.session.id + ' for participant', req.participant);
req.session.destroy();
callback();
}
})(req, res, next);
}
app.get(IDP_PATHS.METADATA, function(req, res, next) {
samlp.metadata(req.idp.options)(req, res);
});