@hmcts/opal-frontend-common-node 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app-insights/app-insights-configuration.d.ts +5 -0
- package/app-insights/app-insights-configuration.d.ts.map +1 -0
- package/app-insights/app-insights-configuration.js +15 -0
- package/app-insights/app-insights-configuration.js.map +1 -0
- package/app-insights/index.d.ts +5 -0
- package/app-insights/index.d.ts.map +1 -0
- package/app-insights/index.js +34 -0
- package/app-insights/index.js.map +1 -0
- package/csrf-token/index.d.ts +5 -0
- package/csrf-token/index.d.ts.map +1 -0
- package/csrf-token/index.js +33 -0
- package/csrf-token/index.js.map +1 -0
- package/health/index.d.ts +8 -0
- package/health/index.d.ts.map +1 -0
- package/health/index.js +30 -0
- package/health/index.js.map +1 -0
- package/helmet/index.d.ts +10 -0
- package/helmet/index.d.ts.map +1 -0
- package/helmet/index.js +54 -0
- package/helmet/index.js.map +1 -0
- package/index.d.ts +9 -0
- package/index.d.ts.map +1 -0
- package/{src/index.ts → index.js} +1 -1
- package/index.js.map +1 -0
- package/interfaces/app-insights-config.d.ts +7 -0
- package/interfaces/app-insights-config.d.ts.map +1 -0
- package/interfaces/app-insights-config.js +7 -0
- package/interfaces/app-insights-config.js.map +1 -0
- package/interfaces/index.d.ts +12 -0
- package/interfaces/index.d.ts.map +1 -0
- package/{src/interfaces/index.ts → interfaces/index.js} +2 -13
- package/interfaces/index.js.map +1 -0
- package/interfaces/launch-darkly-config.d.ts +7 -0
- package/interfaces/launch-darkly-config.d.ts.map +1 -0
- package/interfaces/launch-darkly-config.js +7 -0
- package/interfaces/launch-darkly-config.js.map +1 -0
- package/interfaces/routes-config.d.ts +8 -0
- package/interfaces/routes-config.d.ts.map +1 -0
- package/interfaces/routes-config.js +8 -0
- package/interfaces/routes-config.js.map +1 -0
- package/interfaces/securityToken.d.ts +7 -0
- package/interfaces/securityToken.d.ts.map +1 -0
- package/interfaces/securityToken.js +6 -0
- package/interfaces/securityToken.js.map +1 -0
- package/interfaces/session-config.d.ts +6 -0
- package/interfaces/session-config.d.ts.map +1 -0
- package/interfaces/session-config.js +6 -0
- package/interfaces/session-config.js.map +1 -0
- package/interfaces/session-expiry-config.d.ts +7 -0
- package/interfaces/session-expiry-config.d.ts.map +1 -0
- package/interfaces/session-expiry-config.js +7 -0
- package/interfaces/session-expiry-config.js.map +1 -0
- package/interfaces/session-storage-config.d.ts +12 -0
- package/interfaces/session-storage-config.d.ts.map +1 -0
- package/interfaces/session-storage-config.js +12 -0
- package/interfaces/session-storage-config.js.map +1 -0
- package/interfaces/sso-config.d.ts +9 -0
- package/interfaces/sso-config.d.ts.map +1 -0
- package/interfaces/sso-config.js +9 -0
- package/interfaces/sso-config.js.map +1 -0
- package/interfaces/transfer-server-state.d.ts +9 -0
- package/interfaces/transfer-server-state.d.ts.map +1 -0
- package/interfaces/transfer-server-state.js +7 -0
- package/interfaces/transfer-server-state.js.map +1 -0
- package/interfaces/userState.d.ts +16 -0
- package/interfaces/userState.d.ts.map +1 -0
- package/interfaces/userState.js +16 -0
- package/interfaces/userState.js.map +1 -0
- package/launch-darkly/index.d.ts +5 -0
- package/launch-darkly/index.d.ts.map +1 -0
- package/launch-darkly/index.js +14 -0
- package/launch-darkly/index.js.map +1 -0
- package/package.json +1 -1
- package/properties-volume/index.d.ts +6 -0
- package/properties-volume/index.d.ts.map +1 -0
- package/properties-volume/index.js +10 -0
- package/properties-volume/index.js.map +1 -0
- package/proxy/index.d.ts +2 -0
- package/proxy/index.d.ts.map +1 -0
- package/{src/proxy/index.ts → proxy/index.js} +1 -0
- package/proxy/index.js.map +1 -0
- package/proxy/opal-api-proxy/index.d.ts +3 -0
- package/proxy/opal-api-proxy/index.d.ts.map +1 -0
- package/proxy/opal-api-proxy/index.js +18 -0
- package/proxy/opal-api-proxy/index.js.map +1 -0
- package/routes/index.d.ts +10 -0
- package/routes/index.d.ts.map +1 -0
- package/routes/index.js +36 -0
- package/routes/index.js.map +1 -0
- package/session/index.d.ts +5 -0
- package/session/index.d.ts.map +1 -0
- package/{src/session/index.ts → session/index.js} +1 -1
- package/session/index.js.map +1 -0
- package/session/session-expiry/index.d.ts +4 -0
- package/session/session-expiry/index.d.ts.map +1 -0
- package/session/session-expiry/index.js +23 -0
- package/session/session-expiry/index.js.map +1 -0
- package/session/session-storage/index.d.ts +7 -0
- package/session/session-storage/index.d.ts.map +1 -0
- package/session/session-storage/index.js +58 -0
- package/session/session-storage/index.js.map +1 -0
- package/session/session-user-state/index.d.ts +4 -0
- package/session/session-user-state/index.d.ts.map +1 -0
- package/session/session-user-state/index.js +20 -0
- package/session/session-user-state/index.js.map +1 -0
- package/sso/index.d.ts +7 -0
- package/sso/index.d.ts.map +1 -0
- package/{src/sso/index.ts → sso/index.js} +1 -1
- package/sso/index.js.map +1 -0
- package/sso/sso-authenticated.d.ts +4 -0
- package/sso/sso-authenticated.d.ts.map +1 -0
- package/sso/sso-authenticated.js +14 -0
- package/sso/sso-authenticated.js.map +1 -0
- package/sso/sso-login-callback.d.ts +4 -0
- package/sso/sso-login-callback.d.ts.map +1 -0
- package/sso/sso-login-callback.js +26 -0
- package/sso/sso-login-callback.js.map +1 -0
- package/sso/sso-login.d.ts +4 -0
- package/sso/sso-login.d.ts.map +1 -0
- package/sso/sso-login.js +24 -0
- package/sso/sso-login.js.map +1 -0
- package/sso/sso-logout-callback.d.ts +4 -0
- package/sso/sso-logout-callback.d.ts.map +1 -0
- package/sso/sso-logout-callback.js +13 -0
- package/sso/sso-logout-callback.js.map +1 -0
- package/sso/sso-logout.d.ts +4 -0
- package/sso/sso-logout.d.ts.map +1 -0
- package/sso/sso-logout.js +31 -0
- package/sso/sso-logout.js.map +1 -0
- package/stubs/sso/index.d.ts +7 -0
- package/stubs/sso/index.d.ts.map +1 -0
- package/{src/stubs/sso/index.ts → stubs/sso/index.js} +1 -1
- package/stubs/sso/index.js.map +1 -0
- package/stubs/sso/sso-authenticated.stub.d.ts +4 -0
- package/stubs/sso/sso-authenticated.stub.d.ts.map +1 -0
- package/stubs/sso/sso-authenticated.stub.js +14 -0
- package/stubs/sso/sso-authenticated.stub.js.map +1 -0
- package/stubs/sso/sso-login-callback.stub.d.ts +4 -0
- package/stubs/sso/sso-login-callback.stub.d.ts.map +1 -0
- package/stubs/sso/sso-login-callback.stub.js +26 -0
- package/stubs/sso/sso-login-callback.stub.js.map +1 -0
- package/stubs/sso/sso-login.stub.d.ts +4 -0
- package/stubs/sso/sso-login.stub.d.ts.map +1 -0
- package/stubs/sso/sso-login.stub.js +14 -0
- package/stubs/sso/sso-login.stub.js.map +1 -0
- package/stubs/sso/sso-logout-callback.stub.d.ts +4 -0
- package/stubs/sso/sso-logout-callback.stub.d.ts.map +1 -0
- package/stubs/sso/sso-logout-callback.stub.js +13 -0
- package/stubs/sso/sso-logout-callback.stub.js.map +1 -0
- package/stubs/sso/sso-logout.stub.d.ts +4 -0
- package/stubs/sso/sso-logout.stub.d.ts.map +1 -0
- package/stubs/sso/sso-logout.stub.js +5 -0
- package/stubs/sso/sso-logout.stub.js.map +1 -0
- package/utils/base64.d.ts +3 -0
- package/utils/base64.d.ts.map +1 -0
- package/utils/base64.js +7 -0
- package/utils/base64.js.map +1 -0
- package/utils/index.d.ts +3 -0
- package/utils/index.d.ts.map +1 -0
- package/{src/utils/index.ts → utils/index.js} +1 -1
- package/utils/index.js.map +1 -0
- package/utils/jwt.d.ts +5 -0
- package/utils/jwt.d.ts.map +1 -0
- package/utils/jwt.js +32 -0
- package/utils/jwt.js.map +1 -0
- package/.editorconfig +0 -16
- package/.github/renovate.json +0 -11
- package/.github/workflows/npm_build.yml +0 -67
- package/.prettierignore +0 -12
- package/.prettierrc +0 -7
- package/.vscode/settings.json +0 -6
- package/LICENSE +0 -21
- package/README.md +0 -109
- package/eslint.config.js +0 -22
- package/sonar-project.properties +0 -9
- package/src/app-insights/app-insights-configuration.ts +0 -18
- package/src/app-insights/index.ts +0 -39
- package/src/csrf-token/index.ts +0 -36
- package/src/health/index.ts +0 -32
- package/src/helmet/index.ts +0 -60
- package/src/interfaces/app-insights-config.ts +0 -7
- package/src/interfaces/launch-darkly-config.ts +0 -7
- package/src/interfaces/routes-config.ts +0 -8
- package/src/interfaces/securityToken.ts +0 -8
- package/src/interfaces/session-config.ts +0 -5
- package/src/interfaces/session-expiry-config.ts +0 -7
- package/src/interfaces/session-storage-config.ts +0 -12
- package/src/interfaces/sso-config.ts +0 -9
- package/src/interfaces/transfer-server-state.ts +0 -10
- package/src/interfaces/userState.ts +0 -18
- package/src/launch-darkly/index.ts +0 -17
- package/src/properties-volume/index.ts +0 -12
- package/src/proxy/opal-api-proxy/index.ts +0 -19
- package/src/routes/index.ts +0 -91
- package/src/session/session-expiry/index.ts +0 -31
- package/src/session/session-storage/index.ts +0 -68
- package/src/session/session-user-state/index.ts +0 -24
- package/src/sso/sso-authenticated.ts +0 -15
- package/src/sso/sso-login-callback.ts +0 -30
- package/src/sso/sso-login.ts +0 -31
- package/src/sso/sso-logout-callback.ts +0 -17
- package/src/sso/sso-logout.ts +0 -41
- package/src/stubs/sso/sso-authenticated.stub.ts +0 -16
- package/src/stubs/sso/sso-login-callback.stub.ts +0 -29
- package/src/stubs/sso/sso-login.stub.ts +0 -16
- package/src/stubs/sso/sso-logout-callback.stub.ts +0 -16
- package/src/stubs/sso/sso-logout.stub.ts +0 -6
- package/src/utils/base64.ts +0 -7
- package/src/utils/jwt.ts +0 -35
- package/tsconfig.json +0 -72
- /package/{src/global.d.ts → global.d.ts} +0 -0
- /package/{src/session.d.ts → session.d.ts} +0 -0
- /package/{src/type.d.ts → type.d.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/launch-darkly/index.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,MAAM,oCAAoC,CAAC;AAEpE,qBAAa,YAAY;IAChB,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,kBAAkB;CAajG"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export class LaunchDarkly {
|
|
2
|
+
enableFor(enabled, stream, clientId) {
|
|
3
|
+
const launchDarklyConfig = {
|
|
4
|
+
enabled: enabled,
|
|
5
|
+
clientId: null,
|
|
6
|
+
stream: stream,
|
|
7
|
+
};
|
|
8
|
+
if (launchDarklyConfig.enabled && clientId) {
|
|
9
|
+
launchDarklyConfig.clientId = clientId;
|
|
10
|
+
}
|
|
11
|
+
return launchDarklyConfig;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/launch-darkly/index.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,YAAY;IAChB,SAAS,CAAC,OAAgB,EAAE,MAAe,EAAE,QAAuB;QACzE,MAAM,kBAAkB,GAAuB;YAC7C,OAAO,EAAE,OAAO;YAChB,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,MAAM;SACf,CAAC;QAEF,IAAI,kBAAkB,CAAC,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC3C,kBAAkB,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzC,CAAC;QAED,OAAO,kBAAkB,CAAC;IAC5B,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/properties-volume/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,qBAAa,gBAAgB;IAC3B,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO;CAMzD"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as propertiesVolume from '@hmcts/properties-volume';
|
|
2
|
+
export class PropertiesVolume {
|
|
3
|
+
enableFor(server, config) {
|
|
4
|
+
if (server.locals['ENV'] !== 'development') {
|
|
5
|
+
propertiesVolume.addTo(config);
|
|
6
|
+
}
|
|
7
|
+
return config;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/properties-volume/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,gBAAgB,MAAM,0BAA0B,CAAC;AAI7D,MAAM,OAAO,gBAAgB;IAC3B,SAAS,CAAC,MAAmB,EAAE,MAAe;QAC5C,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,aAAa,EAAE,CAAC;YAC3C,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
|
package/proxy/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/proxy/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/proxy/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/proxy/opal-api-proxy/index.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,YAAY,GAAI,eAAe,MAAM,4IAc1C,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { createProxyMiddleware } from 'http-proxy-middleware';
|
|
2
|
+
const opalApiProxy = (opalApiTarget) => {
|
|
3
|
+
return createProxyMiddleware({
|
|
4
|
+
target: opalApiTarget,
|
|
5
|
+
changeOrigin: true,
|
|
6
|
+
logger: console,
|
|
7
|
+
on: {
|
|
8
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
9
|
+
proxyReq: (proxyReq, req) => {
|
|
10
|
+
if (req.session.securityToken?.access_token) {
|
|
11
|
+
proxyReq.setHeader('Authorization', `Bearer ${req.session.securityToken.access_token}`);
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
});
|
|
16
|
+
};
|
|
17
|
+
export default opalApiProxy;
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/proxy/opal-api-proxy/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,MAAM,YAAY,GAAG,CAAC,aAAqB,EAAE,EAAE;IAC7C,OAAO,qBAAqB,CAAC;QAC3B,MAAM,EAAE,aAAa;QACrB,YAAY,EAAE,IAAI;QAClB,MAAM,EAAE,OAAO;QACf,EAAE,EAAE;YACF,8DAA8D;YAC9D,QAAQ,EAAE,CAAC,QAAQ,EAAE,GAAQ,EAAE,EAAE;gBAC/B,IAAI,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,YAAY,EAAE,CAAC;oBAC5C,QAAQ,CAAC,SAAS,CAAC,eAAe,EAAE,UAAU,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC,CAAC;gBAC1F,CAAC;YACH,CAAC;SACF;KACF,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Application } from 'express';
|
|
2
|
+
import ExpiryConfiguration from '@hmcts/opal-frontend-common-node/interfaces/session-expiry-config';
|
|
3
|
+
import RoutesConfiguration from '@hmcts/opal-frontend-common-node/interfaces/routes-config';
|
|
4
|
+
import SsoConfiguration from '@hmcts/opal-frontend-common-node/interfaces/sso-config';
|
|
5
|
+
import SessionConfiguration from '@hmcts/opal-frontend-common-node/interfaces/session-config';
|
|
6
|
+
export declare class Routes {
|
|
7
|
+
enableFor(app: Application, ssoEnabled: boolean, expiryConfiguration: ExpiryConfiguration, routesConfiguration: RoutesConfiguration, sessionConfiguration: SessionConfiguration, ssoConfiguration: SsoConfiguration): void;
|
|
8
|
+
private setupSSORoutes;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAatC,OAAO,mBAAmB,MAAM,mEAAmE,CAAC;AACpG,OAAO,mBAAmB,MAAM,2DAA2D,CAAC;AAC5F,OAAO,gBAAgB,MAAM,wDAAwD,CAAC;AACtF,OAAO,oBAAoB,MAAM,4DAA4D,CAAC;AAE9F,qBAAa,MAAM;IACV,SAAS,CACd,GAAG,EAAE,WAAW,EAChB,UAAU,EAAE,OAAO,EACnB,mBAAmB,EAAE,mBAAmB,EACxC,mBAAmB,EAAE,mBAAmB,EACxC,oBAAoB,EAAE,oBAAoB,EAC1C,gBAAgB,EAAE,gBAAgB,GACjC,IAAI;IA0BP,OAAO,CAAC,cAAc;CAsCvB"}
|
package/routes/index.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import bodyParser from 'body-parser';
|
|
2
|
+
import { ssoAuthenticated, ssoLoginCallback, ssoLogin, ssoLogout, ssoLogoutCallback } from '../sso';
|
|
3
|
+
import { ssoLoginStub, ssoLoginCallbackStub, ssoAuthenticatedStub, ssoLogoutStub, ssoLogoutCallbackStub, } from '../stubs/sso';
|
|
4
|
+
import sessionExpiry from '@hmcts/opal-frontend-common-node/session/session-expiry';
|
|
5
|
+
import sessionUserState from '@hmcts/opal-frontend-common-node/session/session-user-state';
|
|
6
|
+
export class Routes {
|
|
7
|
+
enableFor(app, ssoEnabled, expiryConfiguration, routesConfiguration, sessionConfiguration, ssoConfiguration) {
|
|
8
|
+
// Declare use of body-parser AFTER the use of proxy https://github.com/villadora/express-http-proxy
|
|
9
|
+
app.use(bodyParser.json());
|
|
10
|
+
app.use(bodyParser.urlencoded({ extended: false }));
|
|
11
|
+
this.setupSSORoutes(app, ssoEnabled, routesConfiguration.opalApiTarget, routesConfiguration.frontendHostname, routesConfiguration.prefix, ssoConfiguration);
|
|
12
|
+
app.get(sessionConfiguration.userStateUrl, (req, res) => sessionUserState(req, res));
|
|
13
|
+
app.get(sessionConfiguration.sessionExpiryUrl, (req, res) => sessionExpiry(req, res, expiryConfiguration.testMode, expiryConfiguration.expiryTimeInMilliseconds, expiryConfiguration.warningThresholdInMilliseconds));
|
|
14
|
+
}
|
|
15
|
+
setupSSORoutes(app, ssoEnabled, opalApiUrl, frontendHostname, prefix, ssoConfiguration) {
|
|
16
|
+
const login = ssoEnabled ? ssoLogin : ssoLoginStub;
|
|
17
|
+
const loginCallback = ssoEnabled ? ssoLoginCallback : ssoLoginCallbackStub;
|
|
18
|
+
const logout = ssoEnabled ? ssoLogout : ssoLogoutStub;
|
|
19
|
+
const logoutCallback = ssoEnabled ? ssoLogoutCallback : ssoLogoutCallbackStub;
|
|
20
|
+
const authenticated = ssoEnabled ? ssoAuthenticated : ssoAuthenticatedStub;
|
|
21
|
+
const loginCallbackType = ssoEnabled ? 'post' : 'get';
|
|
22
|
+
app.get(ssoConfiguration.login, (req, res, next) => login(req, res, next, opalApiUrl, frontendHostname));
|
|
23
|
+
const routePath = ssoConfiguration.loginCallback;
|
|
24
|
+
const callbackHandler = (req, res, next) => loginCallback(req, res, next, opalApiUrl);
|
|
25
|
+
if (loginCallbackType === 'post') {
|
|
26
|
+
app.post(routePath, callbackHandler);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
app.get(routePath, callbackHandler);
|
|
30
|
+
}
|
|
31
|
+
app.get(ssoConfiguration.logout, (req, res, next) => logout(req, res, next, opalApiUrl, frontendHostname));
|
|
32
|
+
app.get(ssoConfiguration.logoutCallback, (req, res, next) => logoutCallback(req, res, next, prefix));
|
|
33
|
+
app.get(ssoConfiguration.authenticated, (req, res) => authenticated(req, res));
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,mBAAmB,CAAC;AAC/C,OAAO,aAAa,MAAM,kBAAkB,CAAC;AAC7C,OAAO,gBAAgB,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,aAAa,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,mBAAmB,CAAC;AAC/C,OAAO,aAAa,MAAM,kBAAkB,CAAC;AAC7C,OAAO,gBAAgB,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,aAAa,EAAE,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Request, Response } from 'express';
|
|
2
|
+
declare const sessionExpiry: (req: Request, res: Response, testMode: boolean, expiryTimeInMilliseconds: number, warningThresholdInMilliseconds: number) => void;
|
|
3
|
+
export default sessionExpiry;
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/session/session-expiry/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAI5C,QAAA,MAAM,aAAa,GACjB,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,UAAU,OAAO,EACjB,0BAA0B,MAAM,EAChC,gCAAgC,MAAM,SAmBvC,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { DateTime } from 'luxon';
|
|
2
|
+
import { Jwt } from '../../utils';
|
|
3
|
+
const sessionExpiry = (req, res, testMode, expiryTimeInMilliseconds, warningThresholdInMilliseconds) => {
|
|
4
|
+
const accessToken = req.session.securityToken?.access_token;
|
|
5
|
+
if (accessToken) {
|
|
6
|
+
const payload = Jwt.parseJwt(accessToken);
|
|
7
|
+
const jwtExpiry = testMode
|
|
8
|
+
? DateTime.now().plus({ milliseconds: expiryTimeInMilliseconds }).toISO()
|
|
9
|
+
: DateTime.fromMillis(payload.exp * 1000).toISO();
|
|
10
|
+
res.status(200).send({
|
|
11
|
+
expiry: jwtExpiry,
|
|
12
|
+
warningThresholdInMilliseconds: warningThresholdInMilliseconds,
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
res.status(200).send({
|
|
17
|
+
expiry: null,
|
|
18
|
+
warningThresholdInMilliseconds: null,
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
export default sessionExpiry;
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/session/session-expiry/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAElC,MAAM,aAAa,GAAG,CACpB,GAAY,EACZ,GAAa,EACb,QAAiB,EACjB,wBAAgC,EAChC,8BAAsC,EACtC,EAAE;IACF,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,YAAY,CAAC;IAC5D,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAC1C,MAAM,SAAS,GAAG,QAAQ;YACxB,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,wBAAwB,EAAE,CAAC,CAAC,KAAK,EAAE;YACzE,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QAEpD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,MAAM,EAAE,SAAS;YACjB,8BAA8B,EAAE,8BAA8B;SAC/D,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,MAAM,EAAE,IAAI;YACZ,8BAA8B,EAAE,IAAI;SACrC,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import SessionStorageConfiguration from '@hmcts/opal-frontend-common-node/interfaces/session-storage-config';
|
|
2
|
+
import { Application } from 'express';
|
|
3
|
+
export default class SessionStorage {
|
|
4
|
+
enableFor(app: Application, sessionStorage: SessionStorageConfiguration): void;
|
|
5
|
+
private getStore;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/session/session-storage/index.ts"],"names":[],"mappings":"AACA,OAAO,2BAA2B,MAAM,oEAAoE,CAAC;AAG7G,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAQtC,MAAM,CAAC,OAAO,OAAO,cAAc;IAC1B,SAAS,CAAC,GAAG,EAAE,WAAW,EAAE,cAAc,EAAE,2BAA2B,GAAG,IAAI;IAuBrF,OAAO,CAAC,QAAQ;CA+BjB"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { Logger } from '@hmcts/nodejs-logging';
|
|
2
|
+
import { RedisStore } from 'connect-redis';
|
|
3
|
+
import cookieParser from 'cookie-parser';
|
|
4
|
+
import session from 'express-session';
|
|
5
|
+
import { createClient } from 'redis';
|
|
6
|
+
import FileStoreFactory from 'session-file-store';
|
|
7
|
+
const FileStore = FileStoreFactory(session);
|
|
8
|
+
const logger = Logger.getLogger('session-storage');
|
|
9
|
+
export default class SessionStorage {
|
|
10
|
+
enableFor(app, sessionStorage) {
|
|
11
|
+
app.use(cookieParser(sessionStorage.secret));
|
|
12
|
+
app.set('trust proxy', 1);
|
|
13
|
+
app.use(session({
|
|
14
|
+
name: sessionStorage.prefix,
|
|
15
|
+
resave: false,
|
|
16
|
+
saveUninitialized: false,
|
|
17
|
+
secret: sessionStorage.secret,
|
|
18
|
+
cookie: {
|
|
19
|
+
httpOnly: true,
|
|
20
|
+
maxAge: sessionStorage.maxAge,
|
|
21
|
+
sameSite: sessionStorage.sameSite,
|
|
22
|
+
secure: sessionStorage.secure,
|
|
23
|
+
domain: sessionStorage.domain,
|
|
24
|
+
},
|
|
25
|
+
rolling: true,
|
|
26
|
+
store: this.getStore(app, sessionStorage.redisEnabled, sessionStorage.redisConnectionString),
|
|
27
|
+
}));
|
|
28
|
+
}
|
|
29
|
+
getStore(app, enabled, connectionString) {
|
|
30
|
+
if (enabled && connectionString) {
|
|
31
|
+
logger.info('Using Redis session store', connectionString);
|
|
32
|
+
const client = createClient({
|
|
33
|
+
url: connectionString,
|
|
34
|
+
socket: {
|
|
35
|
+
reconnectStrategy: function (retries) {
|
|
36
|
+
if (retries > 20) {
|
|
37
|
+
logger.log('Too many attempts to reconnect. Redis connection was terminated');
|
|
38
|
+
return new Error('Too many retries.');
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
return retries * 500;
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
client.on('error', (err) => {
|
|
47
|
+
logger.error('Redis Client Error', err);
|
|
48
|
+
});
|
|
49
|
+
client.connect().catch(() => {
|
|
50
|
+
process.exit();
|
|
51
|
+
});
|
|
52
|
+
app.locals['redisClient'] = client;
|
|
53
|
+
return new RedisStore({ client });
|
|
54
|
+
}
|
|
55
|
+
return new FileStore({ path: '/tmp' });
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/session/session-storage/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,YAAY,MAAM,eAAe,CAAC;AAEzC,OAAO,OAAO,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAElD,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;AAEnD,MAAM,CAAC,OAAO,OAAO,cAAc;IAC1B,SAAS,CAAC,GAAgB,EAAE,cAA2C;QAC5E,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7C,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QAE1B,GAAG,CAAC,GAAG,CACL,OAAO,CAAC;YACN,IAAI,EAAE,cAAc,CAAC,MAAM;YAC3B,MAAM,EAAE,KAAK;YACb,iBAAiB,EAAE,KAAK;YACxB,MAAM,EAAE,cAAc,CAAC,MAAM;YAC7B,MAAM,EAAE;gBACN,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,cAAc,CAAC,MAAM;gBAC7B,QAAQ,EAAE,cAAc,CAAC,QAAQ;gBACjC,MAAM,EAAE,cAAc,CAAC,MAAM;gBAC7B,MAAM,EAAE,cAAc,CAAC,MAAM;aAC9B;YACD,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC,YAAY,EAAE,cAAc,CAAC,qBAAqB,CAAC;SAC7F,CAAC,CACH,CAAC;IACJ,CAAC;IAEO,QAAQ,CAAC,GAAgB,EAAE,OAAgB,EAAE,gBAA+B;QAClF,IAAI,OAAO,IAAI,gBAAgB,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,gBAAgB,CAAC,CAAC;YAC3D,MAAM,MAAM,GAAG,YAAY,CAAC;gBAC1B,GAAG,EAAE,gBAAgB;gBACrB,MAAM,EAAE;oBACN,iBAAiB,EAAE,UAAU,OAAO;wBAClC,IAAI,OAAO,GAAG,EAAE,EAAE,CAAC;4BACjB,MAAM,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC;4BAC9E,OAAO,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;wBACxC,CAAC;6BAAM,CAAC;4BACN,OAAO,OAAO,GAAG,GAAG,CAAC;wBACvB,CAAC;oBACH,CAAC;iBACF;aACF,CAAC,CAAC;YAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACzB,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;gBAC1B,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,CAAC,CAAC,CAAC;YAEH,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,MAAM,CAAC;YACnC,OAAO,IAAI,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QACpC,CAAC;QAED,OAAO,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACzC,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/session/session-user-state/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAI5C,QAAA,MAAM,gBAAgB,GAAI,KAAK,OAAO,EAAE,KAAK,QAAQ,SAiBpD,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Jwt } from '../../utils';
|
|
2
|
+
const sessionUserState = (req, res) => {
|
|
3
|
+
const userState = req.session.securityToken?.user_state;
|
|
4
|
+
const accessToken = req.session.securityToken?.access_token;
|
|
5
|
+
const name = accessToken && userState ? Jwt.parseJwt(accessToken).name : '';
|
|
6
|
+
// Don't allow caching of this endpoint
|
|
7
|
+
res.set({
|
|
8
|
+
'Cache-Control': 'no-store, no-cache, must-revalidate, max-age=0',
|
|
9
|
+
Pragma: 'no-cache',
|
|
10
|
+
Expires: '0',
|
|
11
|
+
});
|
|
12
|
+
if (!userState) {
|
|
13
|
+
res.send({});
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
res.send({ ...userState, name });
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
export default sessionUserState;
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/session/session-user-state/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAElC,MAAM,gBAAgB,GAAG,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;IACvD,MAAM,SAAS,GAA0B,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,UAAU,CAAC;IAC/E,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,YAAY,CAAC;IAC5D,MAAM,IAAI,GAAG,WAAW,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAE5E,uCAAuC;IACvC,GAAG,CAAC,GAAG,CAAC;QACN,eAAe,EAAE,gDAAgD;QACjE,MAAM,EAAE,UAAU;QAClB,OAAO,EAAE,GAAG;KACb,CAAC,CAAC;IAEH,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACnC,CAAC;AACH,CAAC,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
package/sso/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import ssoLogin from './sso-login';
|
|
2
|
+
import ssoLogout from './sso-logout';
|
|
3
|
+
import ssoLoginCallback from './sso-login-callback';
|
|
4
|
+
import ssoLogoutCallback from './sso-logout-callback';
|
|
5
|
+
import ssoAuthenticated from './sso-authenticated';
|
|
6
|
+
export { ssoLogin, ssoLoginCallback, ssoLogout, ssoAuthenticated, ssoLogoutCallback };
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sso/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,aAAa,CAAC;AACnC,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,gBAAgB,MAAM,sBAAsB,CAAC;AACpD,OAAO,iBAAiB,MAAM,uBAAuB,CAAC;AACtD,OAAO,gBAAgB,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,SAAS,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,CAAC"}
|
|
@@ -3,5 +3,5 @@ import ssoLogout from './sso-logout';
|
|
|
3
3
|
import ssoLoginCallback from './sso-login-callback';
|
|
4
4
|
import ssoLogoutCallback from './sso-logout-callback';
|
|
5
5
|
import ssoAuthenticated from './sso-authenticated';
|
|
6
|
-
|
|
7
6
|
export { ssoLogin, ssoLoginCallback, ssoLogout, ssoAuthenticated, ssoLogoutCallback };
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
package/sso/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sso/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,aAAa,CAAC;AACnC,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,gBAAgB,MAAM,sBAAsB,CAAC;AACpD,OAAO,iBAAiB,MAAM,uBAAuB,CAAC;AACtD,OAAO,gBAAgB,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,SAAS,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sso-authenticated.d.ts","sourceRoot":"","sources":["../../src/sso/sso-authenticated.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;yBAG5B,KAAK,OAAO,EAAE,KAAK,QAAQ;AAA3C,wBAWE"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Jwt } from '../utils';
|
|
2
|
+
export default (req, res) => {
|
|
3
|
+
const isJwtExpired = Jwt.isJwtExpired(req.session.securityToken?.access_token);
|
|
4
|
+
const userId = req.session.securityToken?.user_state?.user_id;
|
|
5
|
+
// Don't allow caching of this endpoint
|
|
6
|
+
res.header('Cache-Control', 'no-store, must-revalidate');
|
|
7
|
+
if (isJwtExpired || !userId) {
|
|
8
|
+
res.status(401).send(false);
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
res.status(200).send(true);
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=sso-authenticated.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sso-authenticated.js","sourceRoot":"","sources":["../../src/sso/sso-authenticated.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,eAAe,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;IAC7C,MAAM,YAAY,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IAC/E,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,UAAU,EAAE,OAAO,CAAC;IAC9D,uCAAuC;IACvC,GAAG,CAAC,MAAM,CAAC,eAAe,EAAE,2BAA2B,CAAC,CAAC;IAEzD,IAAI,YAAY,IAAI,CAAC,MAAM,EAAE,CAAC;QAC5B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sso-login-callback.d.ts","sourceRoot":"","sources":["../../src/sso/sso-login-callback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;yBAIpC,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,EAAE,YAAY,MAAM;AAAzF,wBAyBE"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Logger } from '@hmcts/nodejs-logging';
|
|
2
|
+
import axios from 'axios';
|
|
3
|
+
export default async (req, res, next, opalApiUrl) => {
|
|
4
|
+
const INTERNAL_USER_CALLBACK = `${opalApiUrl}/internal-user/handle-oauth-code`;
|
|
5
|
+
const logger = Logger.getLogger('login-callback');
|
|
6
|
+
try {
|
|
7
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
8
|
+
const result = await axios.post(INTERNAL_USER_CALLBACK, req.body, {
|
|
9
|
+
headers: { 'content-type': 'application/x-www-form-urlencoded' },
|
|
10
|
+
});
|
|
11
|
+
const securityToken = result.data;
|
|
12
|
+
req.session.securityToken = securityToken;
|
|
13
|
+
req.session.save((err) => {
|
|
14
|
+
if (err) {
|
|
15
|
+
logger.error('Error saving session', err);
|
|
16
|
+
return next(err);
|
|
17
|
+
}
|
|
18
|
+
res.redirect('/');
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
logger.error('Error on login-callback', error);
|
|
23
|
+
return next(error);
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=sso-login-callback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sso-login-callback.js","sourceRoot":"","sources":["../../src/sso/sso-login-callback.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,eAAe,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,UAAkB,EAAE,EAAE;IAC3F,MAAM,sBAAsB,GAAG,GAAG,UAAU,kCAAkC,CAAC;IAC/E,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAElD,IAAI,CAAC;QACH,8DAA8D;QAC9D,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,CAAM,sBAAsB,EAAE,GAAG,CAAC,IAAI,EAAE;YACrE,OAAO,EAAE,EAAE,cAAc,EAAE,mCAAmC,EAAE;SACjE,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC;QAClC,GAAG,CAAC,OAAO,CAAC,aAAa,GAAG,aAAa,CAAC;QAE1C,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;YACvB,IAAI,GAAG,EAAE,CAAC;gBACR,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE,GAAG,CAAC,CAAC;gBAC1C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;YAED,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sso-login.d.ts","sourceRoot":"","sources":["../../src/sso/sso-login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;yBAKxD,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,MAAM,YAAY,EAClB,YAAY,MAAM,EAClB,kBAAkB,MAAM;AAL1B,wBA0BE"}
|
package/sso/sso-login.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Logger } from '@hmcts/nodejs-logging';
|
|
2
|
+
import axios from 'axios';
|
|
3
|
+
export default async (req, res, next, opalApiUrl, frontendHostname) => {
|
|
4
|
+
const INTERNAL_USER_LOGIN = `${opalApiUrl}/internal-user/login-or-refresh`;
|
|
5
|
+
const logger = Logger.getLogger('login');
|
|
6
|
+
const url = `${INTERNAL_USER_LOGIN}?redirect_uri=${frontendHostname}/sso/login-callback`;
|
|
7
|
+
try {
|
|
8
|
+
const response = await axios.get(url);
|
|
9
|
+
const redirectUrl = response.request.res.responseUrl;
|
|
10
|
+
if (redirectUrl) {
|
|
11
|
+
res.redirect(redirectUrl);
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
const error = new Error('Error trying to fetch login page');
|
|
15
|
+
logger.error('Error on login', error);
|
|
16
|
+
return next(error);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
logger.error('Error on login', error);
|
|
21
|
+
return next(error);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=sso-login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sso-login.js","sourceRoot":"","sources":["../../src/sso/sso-login.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,eAAe,KAAK,EAClB,GAAY,EACZ,GAAa,EACb,IAAkB,EAClB,UAAkB,EAClB,gBAAwB,EACxB,EAAE;IACF,MAAM,mBAAmB,GAAG,GAAG,UAAU,iCAAiC,CAAC;IAC3E,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,GAAG,mBAAmB,iBAAiB,gBAAgB,qBAAqB,CAAC;IAEzF,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;QAErD,IAAI,WAAW,EAAE,CAAC;YAChB,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;YAC5D,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;YACtC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sso-logout-callback.d.ts","sourceRoot":"","sources":["../../src/sso/sso-logout-callback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;yBAK1C,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,EAAE,QAAQ,MAAM;AAA/E,wBAWE"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Logger } from '@hmcts/nodejs-logging';
|
|
2
|
+
const logger = Logger.getLogger('logout');
|
|
3
|
+
export default (req, res, next, prefix) => {
|
|
4
|
+
req.session.destroy((err) => {
|
|
5
|
+
if (err) {
|
|
6
|
+
logger.error('Error destroying session', err);
|
|
7
|
+
return next(err);
|
|
8
|
+
}
|
|
9
|
+
res.clearCookie(prefix);
|
|
10
|
+
res.redirect('/');
|
|
11
|
+
});
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=sso-logout-callback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sso-logout-callback.js","sourceRoot":"","sources":["../../src/sso/sso-logout-callback.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE1C,eAAe,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,MAAc,EAAE,EAAE;IACjF,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QAC1B,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC;YAC9C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;QAED,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAExB,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sso-logout.d.ts","sourceRoot":"","sources":["../../src/sso/sso-logout.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;yBAIxD,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,MAAM,YAAY,EAClB,YAAY,MAAM,EAClB,kBAAkB,MAAM;AAL1B,wBAoCE"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import axios from 'axios';
|
|
2
|
+
import { Logger } from '@hmcts/nodejs-logging';
|
|
3
|
+
export default async (req, res, next, opalApiUrl, frontendHostname) => {
|
|
4
|
+
const INTERNAL_USER_LOGOUT = `${opalApiUrl}/internal-user/logout`;
|
|
5
|
+
const logger = Logger.getLogger('login');
|
|
6
|
+
const url = `${INTERNAL_USER_LOGOUT}?redirect_uri=${frontendHostname}/sso/logout-callback`;
|
|
7
|
+
try {
|
|
8
|
+
let accessToken;
|
|
9
|
+
if (req.session.securityToken) {
|
|
10
|
+
accessToken = req.session.securityToken.access_token;
|
|
11
|
+
}
|
|
12
|
+
if (!accessToken) {
|
|
13
|
+
return next(new Error('No access token found in session'));
|
|
14
|
+
}
|
|
15
|
+
const response = await axios.get(url, {
|
|
16
|
+
headers: { Authorization: `Bearer ${accessToken}` },
|
|
17
|
+
});
|
|
18
|
+
const logoutRedirect = response.request.res.responseUrl;
|
|
19
|
+
if (logoutRedirect) {
|
|
20
|
+
res.redirect(logoutRedirect);
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
next(new Error('Error trying to fetch logout page'));
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
logger.error('Error logging out', error);
|
|
28
|
+
return next(error);
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=sso-logout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sso-logout.js","sourceRoot":"","sources":["../../src/sso/sso-logout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,eAAe,KAAK,EAClB,GAAY,EACZ,GAAa,EACb,IAAkB,EAClB,UAAkB,EAClB,gBAAwB,EACxB,EAAE;IACF,MAAM,oBAAoB,GAAG,GAAG,UAAU,uBAAuB,CAAC;IAClE,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,GAAG,oBAAoB,iBAAiB,gBAAgB,sBAAsB,CAAC;IAE3F,IAAI,CAAC;QACH,IAAI,WAAW,CAAC;QAEhB,IAAI,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YAC9B,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC;QACvD,CAAC;QAED,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;YACpC,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,WAAW,EAAE,EAAE;SACpD,CAAC,CAAC;QAEH,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;QACxD,IAAI,cAAc,EAAE,CAAC;YACnB,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import ssoLoginStub from './sso-login.stub';
|
|
2
|
+
import ssoLoginCallbackStub from './sso-login-callback.stub';
|
|
3
|
+
import ssoAuthenticatedStub from './sso-authenticated.stub';
|
|
4
|
+
import ssoLogoutStub from './sso-logout.stub';
|
|
5
|
+
import ssoLogoutCallbackStub from './sso-logout-callback.stub';
|
|
6
|
+
export { ssoLoginStub, ssoLoginCallbackStub, ssoAuthenticatedStub, ssoLogoutStub, ssoLogoutCallbackStub };
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/stubs/sso/index.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,kBAAkB,CAAC;AAC5C,OAAO,oBAAoB,MAAM,2BAA2B,CAAC;AAC7D,OAAO,oBAAoB,MAAM,0BAA0B,CAAC;AAC5D,OAAO,aAAa,MAAM,mBAAmB,CAAC;AAC9C,OAAO,qBAAqB,MAAM,4BAA4B,CAAC;AAE/D,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,aAAa,EAAE,qBAAqB,EAAE,CAAC"}
|
|
@@ -3,5 +3,5 @@ import ssoLoginCallbackStub from './sso-login-callback.stub';
|
|
|
3
3
|
import ssoAuthenticatedStub from './sso-authenticated.stub';
|
|
4
4
|
import ssoLogoutStub from './sso-logout.stub';
|
|
5
5
|
import ssoLogoutCallbackStub from './sso-logout-callback.stub';
|
|
6
|
-
|
|
7
6
|
export { ssoLoginStub, ssoLoginCallbackStub, ssoAuthenticatedStub, ssoLogoutStub, ssoLogoutCallbackStub };
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/stubs/sso/index.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,kBAAkB,CAAC;AAC5C,OAAO,oBAAoB,MAAM,2BAA2B,CAAC;AAC7D,OAAO,oBAAoB,MAAM,0BAA0B,CAAC;AAC5D,OAAO,aAAa,MAAM,mBAAmB,CAAC;AAC9C,OAAO,qBAAqB,MAAM,4BAA4B,CAAC;AAE/D,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,aAAa,EAAE,qBAAqB,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sso-authenticated.stub.d.ts","sourceRoot":"","sources":["../../../src/stubs/sso/sso-authenticated.stub.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;yBAG5B,KAAK,OAAO,EAAE,KAAK,QAAQ;AAA3C,wBAYE"}
|