issuer.rest.walnut.js/rest.js

61 lines
2.6 KiB
JavaScript

'use strict';
module.exports.create = function (bigconf, deps, app) {
var Jwks = require('./jwks').create(app);
var Grants = require('./grants').create(app);
var Accounts = require('./accounts').create(app);
// This tablename is based on the tablename found in the objects in model.js.
// Instead of the snake_case the name with be UpperCammelCase, converted by masterquest-sqlite3.
function attachSiteModels(req, res, next) {
return req.getSiteStore().then(function (store) {
req.Models = store;
next();
});
}
function attachSiteStore(tablename, req, res, next) {
return req.getSiteStore().then(function (store) {
req.Store = store[tablename];
next();
});
}
function detachSiteStore(req, res, next) {
delete req.Store;
next();
}
function authorizeIssuer(req, res, next) {
var promise = require('./common').checkIssuerToken(req, req.params.sub).then(function () {
next();
});
app.handleRejection(req, res, promise, '[issuer@oauth3.org] authorize req as issuer');
}
app.get( '/jwks/:sub/:kid.json', Jwks.restful.get);
app.get( '/jwks/:sub/:kid', Jwks.restful.get);
// Everything but getting keys is only for the issuer
app.use( '/jwks/:sub', authorizeIssuer, attachSiteStore.bind(null, 'IssuerOauth3OrgJwks'));
app.post( '/jwks/:sub', Jwks.restful.saveNew);
// Everything regarding grants is only for the issuer
app.use( '/grants/:sub', authorizeIssuer, attachSiteStore.bind(null, 'IssuerOauth3OrgGrants'));
app.get( '/grants/:sub', Grants.restful.getAll);
app.get( '/grants/:sub/:azp', Grants.restful.getOne);
app.post( '/grants/:sub/:azp', Grants.restful.saveNew);
app.use( '/access_token', attachSiteModels);
app.post( '/access_token/send_otp', Accounts.restful.sendOtp);
app.post( '/access_token/:sub/:aud/:azp', Accounts.restful.createToken);
app.post( '/access_token', Accounts.restful.createToken);
app.use( '/acl/profile', attachSiteModels);
app.get( '/acl/profile', Accounts.restful.getProfile);
app.post( '/acl/profile', Accounts.restful.setProfile);
app.use( '/acl/contact_nodes', attachSiteModels);
app.post( '/acl/contact_nodes', Accounts.restful.claimContact);
app.post( '/acl/contact_nodes/:id', Accounts.restful.verifyContact);
app.use(detachSiteStore);
};