@spinajs/rbac-http 2.0.485 → 2.0.487
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/lib/cjs/decorators.d.ts +6 -0
- package/lib/cjs/decorators.d.ts.map +1 -1
- package/lib/cjs/decorators.js +9 -0
- package/lib/cjs/decorators.js.map +1 -1
- package/lib/cjs/middlewares.d.ts +4 -2
- package/lib/cjs/middlewares.d.ts.map +1 -1
- package/lib/cjs/middlewares.js +44 -5
- package/lib/cjs/middlewares.js.map +1 -1
- package/lib/cjs/route-args.d.ts +19 -0
- package/lib/cjs/route-args.d.ts.map +1 -1
- package/lib/cjs/route-args.js +75 -1
- package/lib/cjs/route-args.js.map +1 -1
- package/lib/mjs/decorators.d.ts +6 -0
- package/lib/mjs/decorators.d.ts.map +1 -1
- package/lib/mjs/decorators.js +8 -0
- package/lib/mjs/decorators.js.map +1 -1
- package/lib/mjs/middlewares.d.ts +4 -2
- package/lib/mjs/middlewares.d.ts.map +1 -1
- package/lib/mjs/middlewares.js +45 -6
- package/lib/mjs/middlewares.js.map +1 -1
- package/lib/mjs/route-args.d.ts +19 -0
- package/lib/mjs/route-args.d.ts.map +1 -1
- package/lib/mjs/route-args.js +41 -0
- package/lib/mjs/route-args.js.map +1 -1
- package/lib/tsconfig.cjs.tsbuildinfo +1 -1
- package/lib/tsconfig.mjs.tsbuildinfo +1 -1
- package/package.json +10 -10
package/lib/cjs/decorators.d.ts
CHANGED
|
@@ -41,4 +41,10 @@ export declare function User(): (target: any, propertyKey?: string | symbol, ind
|
|
|
41
41
|
*/
|
|
42
42
|
export declare function FromSession(): (target: any, propertyKey?: string | symbol, indexOrDescriptor?: number | PropertyDescriptor) => void;
|
|
43
43
|
export declare function Session(): (target: any, propertyKey?: string | symbol, indexOrDescriptor?: number | PropertyDescriptor) => void;
|
|
44
|
+
/**
|
|
45
|
+
* Verified session id from the session cookie, resolved under whatever name the
|
|
46
|
+
* cookie is configured with. Prefer this over `@Cookie(true) ssid`, which ties
|
|
47
|
+
* the read to the parameter name.
|
|
48
|
+
*/
|
|
49
|
+
export declare function SessionId(): (target: any, propertyKey?: string | symbol, indexOrDescriptor?: number | PropertyDescriptor) => void;
|
|
44
50
|
//# sourceMappingURL=decorators.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAkC,MAAM,iBAAiB,CAAC;AAGlF,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAI/C;;;GAGG;AACH,eAAO,MAAM,yBAAyB,eAAiD,CAAC;AAuFxF,wBAAgB,eAAe,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,QAMrF;AAYD;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,cAAc,EAAE,OAevE;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,UAAU,GAAE,cAAc,EAAgB,OAgBpE;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,0GAalC;AAED;;GAEG;AACH,wBAAgB,IAAI,0GAEnB;AAED;;GAEG;AACH,wBAAgB,WAAW,0GAE1B;AAED,wBAAgB,OAAO,0GAEtB"}
|
|
1
|
+
{"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAkC,MAAM,iBAAiB,CAAC;AAGlF,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAI/C;;;GAGG;AACH,eAAO,MAAM,yBAAyB,eAAiD,CAAC;AAuFxF,wBAAgB,eAAe,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,QAMrF;AAYD;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,cAAc,EAAE,OAevE;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,UAAU,GAAE,cAAc,EAAgB,OAgBpE;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,0GAalC;AAED;;GAEG;AACH,wBAAgB,IAAI,0GAEnB;AAED;;GAEG;AACH,wBAAgB,WAAW,0GAE1B;AAED,wBAAgB,OAAO,0GAEtB;AAED;;;;GAIG;AACH,wBAAgB,SAAS,0GAExB"}
|
package/lib/cjs/decorators.js
CHANGED
|
@@ -8,6 +8,7 @@ exports.SkipModelPermission = SkipModelPermission;
|
|
|
8
8
|
exports.User = User;
|
|
9
9
|
exports.FromSession = FromSession;
|
|
10
10
|
exports.Session = Session;
|
|
11
|
+
exports.SessionId = SessionId;
|
|
11
12
|
const http_1 = require("@spinajs/http");
|
|
12
13
|
const RbacPolicy_js_1 = require("./policies/RbacPolicy.js");
|
|
13
14
|
const di_1 = require("@spinajs/di");
|
|
@@ -184,4 +185,12 @@ function FromSession() {
|
|
|
184
185
|
function Session() {
|
|
185
186
|
return (0, http_1.Route)((0, http_1.Parameter)("CurrentSessionArg"));
|
|
186
187
|
}
|
|
188
|
+
/**
|
|
189
|
+
* Verified session id from the session cookie, resolved under whatever name the
|
|
190
|
+
* cookie is configured with. Prefer this over `@Cookie(true) ssid`, which ties
|
|
191
|
+
* the read to the parameter name.
|
|
192
|
+
*/
|
|
193
|
+
function SessionId() {
|
|
194
|
+
return (0, http_1.Route)((0, http_1.Parameter)('SessionIdArg'));
|
|
195
|
+
}
|
|
187
196
|
//# sourceMappingURL=decorators.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/decorators.ts"],"names":[],"mappings":";;;AAkGA,0CAMC;AAqBD,4BAeC;AAQD,gCAgBC;AAUD,kDAaC;AAKD,oBAEC;AAKD,kCAEC;AAED,0BAEC;
|
|
1
|
+
{"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/decorators.ts"],"names":[],"mappings":"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"}
|
package/lib/cjs/middlewares.d.ts
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import { SessionProvider } from '@spinajs/rbac';
|
|
1
|
+
import { SessionProvider, ISessionCookieConfig } from '@spinajs/rbac';
|
|
2
2
|
import 'reflect-metadata';
|
|
3
3
|
import * as express from 'express';
|
|
4
|
+
import { Log } from '@spinajs/log';
|
|
4
5
|
import { Request as sRequest, ServerMiddleware } from '@spinajs/http';
|
|
5
6
|
export declare class RbacMiddleware extends ServerMiddleware {
|
|
7
|
+
protected Log: Log;
|
|
6
8
|
protected CoockieSecret: string;
|
|
7
|
-
protected SessionCookieConfig:
|
|
9
|
+
protected SessionCookieConfig: ISessionCookieConfig;
|
|
8
10
|
protected SessionProvider: SessionProvider;
|
|
9
11
|
resolve(): Promise<void>;
|
|
10
12
|
before(): (req: sRequest, res: express.Response, next: express.NextFunction) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middlewares.d.ts","sourceRoot":"","sources":["../../src/middlewares.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,eAAe,
|
|
1
|
+
{"version":3,"file":"middlewares.d.ts","sourceRoot":"","sources":["../../src/middlewares.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,eAAe,EAAyD,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAEvI,OAAO,kBAAkB,CAAC;AAC1B,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAEnC,OAAO,EAAE,GAAG,EAAU,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAStE,qBACa,cAAe,SAAQ,gBAAgB;IAElD,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC;IAGnB,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;IAGhC,SAAS,CAAC,mBAAmB,EAAE,oBAAoB,CAAC;IAGpD,SAAS,CAAC,eAAe,EAAE,eAAe,CAAC;IAE9B,OAAO;IAmBb,MAAM,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,YAAY,KAAK,IAAI;IA4FpF,KAAK,IAAI,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,YAAY,KAAK,IAAI,CAAC,GAAG,IAAI;CAGpG"}
|
package/lib/cjs/middlewares.js
CHANGED
|
@@ -47,29 +47,65 @@ const rbac_1 = require("@spinajs/rbac");
|
|
|
47
47
|
const di_1 = require("@spinajs/di");
|
|
48
48
|
require("reflect-metadata");
|
|
49
49
|
const configuration_1 = require("@spinajs/configuration");
|
|
50
|
+
const log_1 = require("@spinajs/log");
|
|
50
51
|
const cs = __importStar(require("cookie-signature"));
|
|
51
52
|
const http_1 = require("@spinajs/http");
|
|
53
|
+
/**
|
|
54
|
+
* The secret shipped in `@spinajs/http`'s own default config. Anybody can read
|
|
55
|
+
* it from the package, so a deployment still using it has session cookies that
|
|
56
|
+
* anyone can forge a signature for.
|
|
57
|
+
*/
|
|
58
|
+
const PUBLIC_DEFAULT_COOKIE_SECRET = '1234adreewD';
|
|
52
59
|
let RbacMiddleware = class RbacMiddleware extends http_1.ServerMiddleware {
|
|
53
60
|
async resolve() {
|
|
54
61
|
if (!this.CoockieSecret) {
|
|
55
62
|
throw new Error('http.cookie.secrets is not set, cannot start UserFromSessionMiddleware. Set this value in configuration file !');
|
|
56
63
|
}
|
|
64
|
+
if (this.CoockieSecret === PUBLIC_DEFAULT_COOKIE_SECRET) {
|
|
65
|
+
const message = 'http.cookie.secret is still the public default shipped with @spinajs/http. Session cookie signatures are forgeable by anyone. Set your own secret in the application configuration.';
|
|
66
|
+
// Fatal in production, loud everywhere else: tests and local development
|
|
67
|
+
// legitimately run on the packaged default, and refusing to boot there
|
|
68
|
+
// would only teach people to delete the check.
|
|
69
|
+
if (process.env.NODE_ENV === 'production') {
|
|
70
|
+
throw new Error(message);
|
|
71
|
+
}
|
|
72
|
+
this.Log.warn(message);
|
|
73
|
+
}
|
|
57
74
|
}
|
|
58
75
|
before() {
|
|
59
76
|
return async (req, res, next) => {
|
|
60
77
|
try {
|
|
61
78
|
let session = null;
|
|
79
|
+
const cookieName = (0, rbac_1.sessionCookieName)(this.SessionCookieConfig);
|
|
62
80
|
// `ssid` is signed BY HAND ( see http `_setCoockies` ), so it reaches us
|
|
63
81
|
// unsigned-looking and stays in `req.cookies`. A cookie that was issued
|
|
64
82
|
// through express's own `signed: true` goes out `s:`-prefixed instead,
|
|
65
83
|
// and cookie-parser then hands it over in `req.signedCookies` ALREADY
|
|
66
84
|
// unsigned while deleting it from `req.cookies`. Accept that shape too,
|
|
67
85
|
// so sessions issued by that path are restored rather than dropped.
|
|
68
|
-
const
|
|
86
|
+
const raw = req.cookies?.[cookieName];
|
|
87
|
+
const ssid = raw ? cs.unsign(raw, this.CoockieSecret) : req.signedCookies?.[cookieName] ?? false;
|
|
88
|
+
if (raw && ssid === false) {
|
|
89
|
+
// A present-but-unverifiable cookie is either a mangled client or
|
|
90
|
+
// somebody probing session ids. Hashed, never the raw value.
|
|
91
|
+
this.Log.warn(`Rejected session cookie with an invalid signature`, {
|
|
92
|
+
Session: (0, rbac_1.hashSessionId)(raw),
|
|
93
|
+
Ip: req.ip,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
69
96
|
if (ssid) {
|
|
70
97
|
session = await this.SessionProvider.restore(ssid);
|
|
98
|
+
if (!session) {
|
|
99
|
+
this.Log.warn(`Session id presented but not found in the store ( expired or unknown )`, {
|
|
100
|
+
Session: (0, rbac_1.hashSessionId)(ssid),
|
|
101
|
+
Ip: req.ip,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
71
104
|
}
|
|
72
105
|
if (session) {
|
|
106
|
+
// Anything rendered for an identified user must not be written to a
|
|
107
|
+
// shared cache, and the session id itself must never sit in one.
|
|
108
|
+
res.setHeader('Cache-Control', 'no-store');
|
|
73
109
|
/**
|
|
74
110
|
* If we have session, try to restore user with data from session
|
|
75
111
|
* otherwise try to create guest
|
|
@@ -100,10 +136,9 @@ let RbacMiddleware = class RbacMiddleware extends http_1.ServerMiddleware {
|
|
|
100
136
|
// moves it to `req.signedCookies` and deletes it from `req.cookies`
|
|
101
137
|
// - so every request after the first renewal arrived session-less
|
|
102
138
|
// and failed with `user not authorized or session expired`.
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
...this.SessionCookieConfig,
|
|
139
|
+
const cookie = (0, rbac_1.sessionCookie)(session, this.SessionCookieConfig);
|
|
140
|
+
res.cookie(cookie.Name, cs.sign(session.SessionId, this.CoockieSecret), {
|
|
141
|
+
...cookie.Options,
|
|
107
142
|
signed: false,
|
|
108
143
|
});
|
|
109
144
|
}
|
|
@@ -124,6 +159,10 @@ let RbacMiddleware = class RbacMiddleware extends http_1.ServerMiddleware {
|
|
|
124
159
|
}
|
|
125
160
|
};
|
|
126
161
|
exports.RbacMiddleware = RbacMiddleware;
|
|
162
|
+
__decorate([
|
|
163
|
+
(0, log_1.Logger)('rbac-session'),
|
|
164
|
+
__metadata("design:type", log_1.Log)
|
|
165
|
+
], RbacMiddleware.prototype, "Log", void 0);
|
|
127
166
|
__decorate([
|
|
128
167
|
(0, configuration_1.Config)('http.cookie.secret'),
|
|
129
168
|
__metadata("design:type", String)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middlewares.js","sourceRoot":"","sources":["../../src/middlewares.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"middlewares.js","sourceRoot":"","sources":["../../src/middlewares.ts"],"names":[],"mappings":"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"}
|
package/lib/cjs/route-args.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { RouteArgs, IRouteParameter, ParameterType, IRouteCall } from '@spinajs/http';
|
|
2
|
+
import { ISessionCookieConfig } from '@spinajs/rbac';
|
|
2
3
|
import { Request } from '@spinajs/http';
|
|
3
4
|
export declare class UserArg extends RouteArgs {
|
|
4
5
|
get SupportedType(): ParameterType;
|
|
@@ -14,6 +15,24 @@ export declare class SessionArg extends RouteArgs {
|
|
|
14
15
|
Args: unknown;
|
|
15
16
|
}>;
|
|
16
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* Verified session id from the session cookie, or `null`.
|
|
20
|
+
*
|
|
21
|
+
* `@Cookie(true) ssid` hardcodes the cookie NAME to the parameter name, so a
|
|
22
|
+
* deployment that renames the cookie — or turns on the `__Host-` prefix, which
|
|
23
|
+
* changes the name by definition — silently stopped every controller that read
|
|
24
|
+
* the id that way. This resolves the configured name at request time and
|
|
25
|
+
* verifies the signature exactly as the session middleware does.
|
|
26
|
+
*/
|
|
27
|
+
export declare class SessionIdArg extends RouteArgs {
|
|
28
|
+
protected SessionCookieConfig: ISessionCookieConfig;
|
|
29
|
+
protected CookieSecret: string;
|
|
30
|
+
get SupportedType(): string;
|
|
31
|
+
extract(callData: IRouteCall, _args: unknown[], _param: IRouteParameter, req: Request): Promise<{
|
|
32
|
+
CallData: IRouteCall;
|
|
33
|
+
Args: string | null;
|
|
34
|
+
}>;
|
|
35
|
+
}
|
|
17
36
|
export declare class CurrentSessionArg extends RouteArgs {
|
|
18
37
|
get SupportedType(): string;
|
|
19
38
|
extract(callData: IRouteCall, _args: unknown[], _param: IRouteParameter, req: Request): Promise<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-args.d.ts","sourceRoot":"","sources":["../../src/route-args.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"route-args.d.ts","sourceRoot":"","sources":["../../src/route-args.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAGtF,OAAO,EAAE,oBAAoB,EAAqB,MAAM,eAAe,CAAC;AAExE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,qBACa,OAAQ,SAAQ,SAAS;IACpC,IAAW,aAAa,IAAI,aAAa,CAExC;IAEY,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,OAAO;;;;CAGnG;AAED,qBACa,UAAW,SAAQ,SAAS;IACvC,IAAI,aAAa,IAAI,MAAM,CAE1B;IACY,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAG,KAAK,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,OAAO;;;;CAGnG;AAED;;;;;;;;GAQG;AACH,qBACa,YAAa,SAAQ,SAAS;IAEzC,SAAS,CAAC,mBAAmB,EAAE,oBAAoB,CAAC;IAGpD,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC;IAE/B,IAAI,aAAa,IAAI,MAAM,CAE1B;IAEY,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,OAAO;;;;CAWnG;AAED,qBACa,iBAAkB,SAAQ,SAAS;IAC9C,IAAI,aAAa,IAAI,MAAM,CAE1B;IACY,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,OAAO;;;;CAGnG"}
|
package/lib/cjs/route-args.js
CHANGED
|
@@ -1,14 +1,53 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
2
18
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
19
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
20
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
21
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
22
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
23
|
};
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
42
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
43
|
+
};
|
|
8
44
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.CurrentSessionArg = exports.SessionArg = exports.UserArg = void 0;
|
|
45
|
+
exports.CurrentSessionArg = exports.SessionIdArg = exports.SessionArg = exports.UserArg = void 0;
|
|
10
46
|
const http_1 = require("@spinajs/http");
|
|
11
47
|
const di_1 = require("@spinajs/di");
|
|
48
|
+
const configuration_1 = require("@spinajs/configuration");
|
|
49
|
+
const rbac_1 = require("@spinajs/rbac");
|
|
50
|
+
const cs = __importStar(require("cookie-signature"));
|
|
12
51
|
let UserArg = class UserArg extends http_1.RouteArgs {
|
|
13
52
|
get SupportedType() {
|
|
14
53
|
return http_1.ParameterType.Other;
|
|
@@ -33,6 +72,41 @@ exports.SessionArg = SessionArg;
|
|
|
33
72
|
exports.SessionArg = SessionArg = __decorate([
|
|
34
73
|
(0, di_1.Injectable)()
|
|
35
74
|
], SessionArg);
|
|
75
|
+
/**
|
|
76
|
+
* Verified session id from the session cookie, or `null`.
|
|
77
|
+
*
|
|
78
|
+
* `@Cookie(true) ssid` hardcodes the cookie NAME to the parameter name, so a
|
|
79
|
+
* deployment that renames the cookie — or turns on the `__Host-` prefix, which
|
|
80
|
+
* changes the name by definition — silently stopped every controller that read
|
|
81
|
+
* the id that way. This resolves the configured name at request time and
|
|
82
|
+
* verifies the signature exactly as the session middleware does.
|
|
83
|
+
*/
|
|
84
|
+
let SessionIdArg = class SessionIdArg extends http_1.RouteArgs {
|
|
85
|
+
get SupportedType() {
|
|
86
|
+
return http_1.ParameterType.Other;
|
|
87
|
+
}
|
|
88
|
+
async extract(callData, _args, _param, req) {
|
|
89
|
+
const name = (0, rbac_1.sessionCookieName)(this.SessionCookieConfig);
|
|
90
|
+
const raw = req.cookies?.[name];
|
|
91
|
+
// Same two shapes the middleware accepts: signed by hand ( stays in
|
|
92
|
+
// `cookies` ) or signed by express ( moved to `signedCookies`, already
|
|
93
|
+
// unsigned by cookie-parser ).
|
|
94
|
+
const unsigned = raw ? cs.unsign(raw, this.CookieSecret) : req.signedCookies?.[name] ?? false;
|
|
95
|
+
return { CallData: callData, Args: unsigned === false ? null : unsigned };
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
exports.SessionIdArg = SessionIdArg;
|
|
99
|
+
__decorate([
|
|
100
|
+
(0, configuration_1.Config)('rbac.session.cookie', {}),
|
|
101
|
+
__metadata("design:type", Object)
|
|
102
|
+
], SessionIdArg.prototype, "SessionCookieConfig", void 0);
|
|
103
|
+
__decorate([
|
|
104
|
+
(0, configuration_1.Config)('http.cookie.secret'),
|
|
105
|
+
__metadata("design:type", String)
|
|
106
|
+
], SessionIdArg.prototype, "CookieSecret", void 0);
|
|
107
|
+
exports.SessionIdArg = SessionIdArg = __decorate([
|
|
108
|
+
(0, di_1.Injectable)()
|
|
109
|
+
], SessionIdArg);
|
|
36
110
|
let CurrentSessionArg = class CurrentSessionArg extends http_1.RouteArgs {
|
|
37
111
|
get SupportedType() {
|
|
38
112
|
return http_1.ParameterType.Other;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-args.js","sourceRoot":"","sources":["../../src/route-args.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"route-args.js","sourceRoot":"","sources":["../../src/route-args.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wCAAsF;AACtF,oCAAyC;AACzC,0DAAgD;AAChD,wCAAwE;AACxE,qDAAuC;AAIhC,IAAM,OAAO,GAAb,MAAM,OAAQ,SAAQ,gBAAS;IACpC,IAAW,aAAa;QACtB,OAAO,oBAAa,CAAC,KAAK,CAAC;IAC7B,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,QAAoB,EAAE,KAAgB,EAAE,MAAuB,EAAE,GAAY;QAChG,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IACxD,CAAC;CACF,CAAA;AARY,0BAAO;kBAAP,OAAO;IADnB,IAAA,eAAU,GAAE;GACA,OAAO,CAQnB;AAGM,IAAM,UAAU,GAAhB,MAAM,UAAW,SAAQ,gBAAS;IACvC,IAAI,aAAa;QACf,OAAO,oBAAa,CAAC,WAAW,CAAC;IACnC,CAAC;IACM,KAAK,CAAC,OAAO,CAAC,QAAoB,EAAG,KAAgB,EAAE,KAAsB,EAAE,GAAY;QAChG,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IAClH,CAAC;CACF,CAAA;AAPY,gCAAU;qBAAV,UAAU;IADtB,IAAA,eAAU,GAAE;GACA,UAAU,CAOtB;AAED;;;;;;;;GAQG;AAEI,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,gBAAS;IAOzC,IAAI,aAAa;QACf,OAAO,oBAAa,CAAC,KAAK,CAAC;IAC7B,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,QAAoB,EAAE,KAAgB,EAAE,MAAuB,EAAE,GAAY;QAChG,MAAM,IAAI,GAAG,IAAA,wBAAiB,EAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACzD,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,IAAI,CAAuB,CAAC;QAEtD,oEAAoE;QACpE,uEAAuE;QACvE,+BAA+B;QAC/B,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAG,GAAW,CAAC,aAAa,EAAE,CAAC,IAAI,CAAgC,IAAI,KAAK,CAAC;QAEvI,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC5E,CAAC;CACF,CAAA;AAtBY,oCAAY;AAEb;IADT,IAAA,sBAAM,EAAC,qBAAqB,EAAE,EAAE,CAAC;;yDACkB;AAG1C;IADT,IAAA,sBAAM,EAAC,oBAAoB,CAAC;;kDACE;uBALpB,YAAY;IADxB,IAAA,eAAU,GAAE;GACA,YAAY,CAsBxB;AAGM,IAAM,iBAAiB,GAAvB,MAAM,iBAAkB,SAAQ,gBAAS;IAC9C,IAAI,aAAa;QACf,OAAO,oBAAa,CAAC,KAAK,CAAC;IAC7B,CAAC;IACM,KAAK,CAAC,OAAO,CAAC,QAAoB,EAAE,KAAgB,EAAE,MAAuB,EAAE,GAAY;QAChG,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3D,CAAC;CACF,CAAA;AAPY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,eAAU,GAAE;GACA,iBAAiB,CAO7B"}
|
package/lib/mjs/decorators.d.ts
CHANGED
|
@@ -41,4 +41,10 @@ export declare function User(): (target: any, propertyKey?: string | symbol, ind
|
|
|
41
41
|
*/
|
|
42
42
|
export declare function FromSession(): (target: any, propertyKey?: string | symbol, indexOrDescriptor?: number | PropertyDescriptor) => void;
|
|
43
43
|
export declare function Session(): (target: any, propertyKey?: string | symbol, indexOrDescriptor?: number | PropertyDescriptor) => void;
|
|
44
|
+
/**
|
|
45
|
+
* Verified session id from the session cookie, resolved under whatever name the
|
|
46
|
+
* cookie is configured with. Prefer this over `@Cookie(true) ssid`, which ties
|
|
47
|
+
* the read to the parameter name.
|
|
48
|
+
*/
|
|
49
|
+
export declare function SessionId(): (target: any, propertyKey?: string | symbol, indexOrDescriptor?: number | PropertyDescriptor) => void;
|
|
44
50
|
//# sourceMappingURL=decorators.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAkC,MAAM,iBAAiB,CAAC;AAGlF,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAI/C;;;GAGG;AACH,eAAO,MAAM,yBAAyB,eAAiD,CAAC;AAuFxF,wBAAgB,eAAe,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,QAMrF;AAYD;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,cAAc,EAAE,OAevE;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,UAAU,GAAE,cAAc,EAAgB,OAgBpE;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,0GAalC;AAED;;GAEG;AACH,wBAAgB,IAAI,0GAEnB;AAED;;GAEG;AACH,wBAAgB,WAAW,0GAE1B;AAED,wBAAgB,OAAO,0GAEtB"}
|
|
1
|
+
{"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAkC,MAAM,iBAAiB,CAAC;AAGlF,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAI/C;;;GAGG;AACH,eAAO,MAAM,yBAAyB,eAAiD,CAAC;AAuFxF,wBAAgB,eAAe,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,QAMrF;AAYD;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,cAAc,EAAE,OAevE;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,UAAU,GAAE,cAAc,EAAgB,OAgBpE;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,0GAalC;AAED;;GAEG;AACH,wBAAgB,IAAI,0GAEnB;AAED;;GAEG;AACH,wBAAgB,WAAW,0GAE1B;AAED,wBAAgB,OAAO,0GAEtB;AAED;;;;GAIG;AACH,wBAAgB,SAAS,0GAExB"}
|
package/lib/mjs/decorators.js
CHANGED
|
@@ -174,4 +174,12 @@ export function FromSession() {
|
|
|
174
174
|
export function Session() {
|
|
175
175
|
return Route(Parameter("CurrentSessionArg"));
|
|
176
176
|
}
|
|
177
|
+
/**
|
|
178
|
+
* Verified session id from the session cookie, resolved under whatever name the
|
|
179
|
+
* cookie is configured with. Prefer this over `@Cookie(true) ssid`, which ties
|
|
180
|
+
* the read to the parameter name.
|
|
181
|
+
*/
|
|
182
|
+
export function SessionId() {
|
|
183
|
+
return Route(Parameter('SessionIdArg'));
|
|
184
|
+
}
|
|
177
185
|
//# sourceMappingURL=decorators.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/decorators.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/decorators.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAiC,MAAM,eAAe,CAAC;AAC1I,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAGrD;;;GAGG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;AAExF;;;GAGG;AACH,MAAM,6BAA6B,GAAqB,CAAC,SAAS,CAAC,CAAC;AAEpE;;;;;;;GAOG;AACH,SAAS,2BAA2B;IAClC,OAAO;QACL,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,IAAI,GAAG,EAA0C;QACzD,UAAU,EAAE,EAAE;KACf,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAS,cAAc,CAAC,MAAW;IACjC,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC;IAE9C,wEAAwE;IACxE,sEAAsE;IACtE,MAAM,gBAAgB,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,yBAAyB,EAAE,UAAU,CAAC,CAAC;IAExF,8EAA8E;IAC9E,oEAAoE;IACpE,8EAA8E;IAC9E,4EAA4E;IAC5E,0EAA0E;IAC1E,MAAM,QAAQ,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAEpD,MAAM,QAAQ,GAAG,sBAAsB,CAAkB,UAAU,EAAE,yBAAyB,EAAE,2BAA2B,CAAC,CAAC;IAE7H,2EAA2E;IAC3E,uEAAuE;IACvE,kEAAkE;IAClE,IAAI,gBAAgB,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClC,QAAQ,CAAC,UAAU,GAAG,CAAC,GAAG,6BAA6B,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,sBAAsB,CAAC,UAAkB;IAChD,IAAI,OAAO,GAAkB,MAAM,CAAC,cAAc,CAAC,UAAU,CAAkB,CAAC;IAEhF,OAAO,OAAO,IAAI,OAAO,KAAK,MAAM,CAAC,SAAS,IAAI,OAAO,KAAK,QAAQ,CAAC,SAAS,EAAE,CAAC;QACjF,IAAI,OAAO,CAAC,cAAc,CAAC,yBAAyB,EAAE,OAAO,CAAC,EAAE,CAAC;YAC/D,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,GAAG,MAAM,CAAC,cAAc,CAAC,OAAO,CAAkB,CAAC;IAC5D,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAW,EAAE,QAAyC;IACpF,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAExC,IAAI,QAAQ,EAAE,CAAC;QACb,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACrB,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,QAA0I;IAC5J,OAAO,CAAC,MAAW,EAAE,WAA4B,EAAE,iBAA8C,EAAE,EAAE;QACnG,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QAExC,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,QAAQ,CAAC,QAAgB,EAAE,UAA6B;IACtE,OAAO,UAAU,CAAC,CAAC,QAAyB,EAAE,EAAE;QAC9C,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAE7B,0EAA0E;QAC1E,sEAAsE;QACtE,kEAAkE;QAClE,wEAAwE;QACxE,0EAA0E;QAC1E,2EAA2E;QAC3E,eAAe;QACf,IAAI,UAAU,EAAE,CAAC;YACf,QAAQ,CAAC,UAAU,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;QACxC,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,aAA+B,CAAC,SAAS,CAAC;IACnE,OAAO,UAAU,CAAC,CAAC,QAAyB,EAAE,MAAW,EAAE,WAAmB,EAAE,EAAE;QAChF,IAAI,WAAW,EAAE,CAAC;YAChB,wEAAwE;YACxE,2EAA2E;YAC3E,0EAA0E;YAC1E,2EAA2E;YAC3E,wEAAwE;YACxE,kBAAkB;YAClB,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE;gBAC/B,UAAU,EAAE,UAAU;aACvB,CAAC,CAAC;QACL,CAAC;QAED,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,UAAU,CACf,KAAM,SAAQ,eAAe;QACpB,SAAS,CAAC,MAAc,EAAE,WAAwB;YACvD,OAAO,IAAI,CAAC;QACd,CAAC;QACM,KAAK,CAAC,QAAQ,CAAC,GAAoB,EAAE,IAAsB,EAAE,MAAc,EAAE,WAAwB;YACzG,GAAgB,CAAC,OAAO,CAAC,wBAAwB,GAAG,IAAI,CAAC;QAC5D,CAAC;QACM,KAAK,CAAC,UAAU,CAAC,SAAmB,EAAE,MAAc,EAAE,WAAwB,IAAkB,CAAC;QACjG,KAAK,CAAC,OAAO,CAAC,IAAqB,EAAE,IAAsB,EAAE,MAAc,EAAE,WAAwB,IAAkB,CAAC;KAChI,CACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,IAAI;IAClB,OAAO,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW;IACzB,OAAO,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,OAAO;IACrB,OAAO,KAAK,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS;IACvB,OAAO,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC;AAC1C,CAAC"}
|
package/lib/mjs/middlewares.d.ts
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import { SessionProvider } from '@spinajs/rbac';
|
|
1
|
+
import { SessionProvider, ISessionCookieConfig } from '@spinajs/rbac';
|
|
2
2
|
import 'reflect-metadata';
|
|
3
3
|
import * as express from 'express';
|
|
4
|
+
import { Log } from '@spinajs/log';
|
|
4
5
|
import { Request as sRequest, ServerMiddleware } from '@spinajs/http';
|
|
5
6
|
export declare class RbacMiddleware extends ServerMiddleware {
|
|
7
|
+
protected Log: Log;
|
|
6
8
|
protected CoockieSecret: string;
|
|
7
|
-
protected SessionCookieConfig:
|
|
9
|
+
protected SessionCookieConfig: ISessionCookieConfig;
|
|
8
10
|
protected SessionProvider: SessionProvider;
|
|
9
11
|
resolve(): Promise<void>;
|
|
10
12
|
before(): (req: sRequest, res: express.Response, next: express.NextFunction) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middlewares.d.ts","sourceRoot":"","sources":["../../src/middlewares.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,eAAe,
|
|
1
|
+
{"version":3,"file":"middlewares.d.ts","sourceRoot":"","sources":["../../src/middlewares.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,eAAe,EAAyD,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAEvI,OAAO,kBAAkB,CAAC;AAC1B,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAEnC,OAAO,EAAE,GAAG,EAAU,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAStE,qBACa,cAAe,SAAQ,gBAAgB;IAElD,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC;IAGnB,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;IAGhC,SAAS,CAAC,mBAAmB,EAAE,oBAAoB,CAAC;IAGpD,SAAS,CAAC,eAAe,EAAE,eAAe,CAAC;IAE9B,OAAO;IAmBb,MAAM,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,YAAY,KAAK,IAAI;IA4FpF,KAAK,IAAI,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,YAAY,KAAK,IAAI,CAAC,GAAG,IAAI;CAGpG"}
|
package/lib/mjs/middlewares.js
CHANGED
|
@@ -7,33 +7,69 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
8
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
9
|
};
|
|
10
|
-
import { SessionProvider,
|
|
10
|
+
import { SessionProvider, hashSessionId, sessionCookie, sessionCookieName } from '@spinajs/rbac';
|
|
11
11
|
import { Autoinject, DI, Injectable } from '@spinajs/di';
|
|
12
12
|
import 'reflect-metadata';
|
|
13
13
|
import { Config } from '@spinajs/configuration';
|
|
14
|
+
import { Log, Logger } from '@spinajs/log';
|
|
14
15
|
import * as cs from 'cookie-signature';
|
|
15
16
|
import { ServerMiddleware } from '@spinajs/http';
|
|
17
|
+
/**
|
|
18
|
+
* The secret shipped in `@spinajs/http`'s own default config. Anybody can read
|
|
19
|
+
* it from the package, so a deployment still using it has session cookies that
|
|
20
|
+
* anyone can forge a signature for.
|
|
21
|
+
*/
|
|
22
|
+
const PUBLIC_DEFAULT_COOKIE_SECRET = '1234adreewD';
|
|
16
23
|
let RbacMiddleware = class RbacMiddleware extends ServerMiddleware {
|
|
17
24
|
async resolve() {
|
|
18
25
|
if (!this.CoockieSecret) {
|
|
19
26
|
throw new Error('http.cookie.secrets is not set, cannot start UserFromSessionMiddleware. Set this value in configuration file !');
|
|
20
27
|
}
|
|
28
|
+
if (this.CoockieSecret === PUBLIC_DEFAULT_COOKIE_SECRET) {
|
|
29
|
+
const message = 'http.cookie.secret is still the public default shipped with @spinajs/http. Session cookie signatures are forgeable by anyone. Set your own secret in the application configuration.';
|
|
30
|
+
// Fatal in production, loud everywhere else: tests and local development
|
|
31
|
+
// legitimately run on the packaged default, and refusing to boot there
|
|
32
|
+
// would only teach people to delete the check.
|
|
33
|
+
if (process.env.NODE_ENV === 'production') {
|
|
34
|
+
throw new Error(message);
|
|
35
|
+
}
|
|
36
|
+
this.Log.warn(message);
|
|
37
|
+
}
|
|
21
38
|
}
|
|
22
39
|
before() {
|
|
23
40
|
return async (req, res, next) => {
|
|
24
41
|
try {
|
|
25
42
|
let session = null;
|
|
43
|
+
const cookieName = sessionCookieName(this.SessionCookieConfig);
|
|
26
44
|
// `ssid` is signed BY HAND ( see http `_setCoockies` ), so it reaches us
|
|
27
45
|
// unsigned-looking and stays in `req.cookies`. A cookie that was issued
|
|
28
46
|
// through express's own `signed: true` goes out `s:`-prefixed instead,
|
|
29
47
|
// and cookie-parser then hands it over in `req.signedCookies` ALREADY
|
|
30
48
|
// unsigned while deleting it from `req.cookies`. Accept that shape too,
|
|
31
49
|
// so sessions issued by that path are restored rather than dropped.
|
|
32
|
-
const
|
|
50
|
+
const raw = req.cookies?.[cookieName];
|
|
51
|
+
const ssid = raw ? cs.unsign(raw, this.CoockieSecret) : req.signedCookies?.[cookieName] ?? false;
|
|
52
|
+
if (raw && ssid === false) {
|
|
53
|
+
// A present-but-unverifiable cookie is either a mangled client or
|
|
54
|
+
// somebody probing session ids. Hashed, never the raw value.
|
|
55
|
+
this.Log.warn(`Rejected session cookie with an invalid signature`, {
|
|
56
|
+
Session: hashSessionId(raw),
|
|
57
|
+
Ip: req.ip,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
33
60
|
if (ssid) {
|
|
34
61
|
session = await this.SessionProvider.restore(ssid);
|
|
62
|
+
if (!session) {
|
|
63
|
+
this.Log.warn(`Session id presented but not found in the store ( expired or unknown )`, {
|
|
64
|
+
Session: hashSessionId(ssid),
|
|
65
|
+
Ip: req.ip,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
35
68
|
}
|
|
36
69
|
if (session) {
|
|
70
|
+
// Anything rendered for an identified user must not be written to a
|
|
71
|
+
// shared cache, and the session id itself must never sit in one.
|
|
72
|
+
res.setHeader('Cache-Control', 'no-store');
|
|
37
73
|
/**
|
|
38
74
|
* If we have session, try to restore user with data from session
|
|
39
75
|
* otherwise try to create guest
|
|
@@ -64,10 +100,9 @@ let RbacMiddleware = class RbacMiddleware extends ServerMiddleware {
|
|
|
64
100
|
// moves it to `req.signedCookies` and deletes it from `req.cookies`
|
|
65
101
|
// - so every request after the first renewal arrived session-less
|
|
66
102
|
// and failed with `user not authorized or session expired`.
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
...this.SessionCookieConfig,
|
|
103
|
+
const cookie = sessionCookie(session, this.SessionCookieConfig);
|
|
104
|
+
res.cookie(cookie.Name, cs.sign(session.SessionId, this.CoockieSecret), {
|
|
105
|
+
...cookie.Options,
|
|
71
106
|
signed: false,
|
|
72
107
|
});
|
|
73
108
|
}
|
|
@@ -87,6 +122,10 @@ let RbacMiddleware = class RbacMiddleware extends ServerMiddleware {
|
|
|
87
122
|
return null;
|
|
88
123
|
}
|
|
89
124
|
};
|
|
125
|
+
__decorate([
|
|
126
|
+
Logger('rbac-session'),
|
|
127
|
+
__metadata("design:type", Log)
|
|
128
|
+
], RbacMiddleware.prototype, "Log", void 0);
|
|
90
129
|
__decorate([
|
|
91
130
|
Config('http.cookie.secret'),
|
|
92
131
|
__metadata("design:type", String)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middlewares.js","sourceRoot":"","sources":["../../src/middlewares.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAY,eAAe,EAAQ,
|
|
1
|
+
{"version":3,"file":"middlewares.js","sourceRoot":"","sources":["../../src/middlewares.ts"],"names":[],"mappings":"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"}
|
package/lib/mjs/route-args.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { RouteArgs, IRouteParameter, ParameterType, IRouteCall } from '@spinajs/http';
|
|
2
|
+
import { ISessionCookieConfig } from '@spinajs/rbac';
|
|
2
3
|
import { Request } from '@spinajs/http';
|
|
3
4
|
export declare class UserArg extends RouteArgs {
|
|
4
5
|
get SupportedType(): ParameterType;
|
|
@@ -14,6 +15,24 @@ export declare class SessionArg extends RouteArgs {
|
|
|
14
15
|
Args: unknown;
|
|
15
16
|
}>;
|
|
16
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* Verified session id from the session cookie, or `null`.
|
|
20
|
+
*
|
|
21
|
+
* `@Cookie(true) ssid` hardcodes the cookie NAME to the parameter name, so a
|
|
22
|
+
* deployment that renames the cookie — or turns on the `__Host-` prefix, which
|
|
23
|
+
* changes the name by definition — silently stopped every controller that read
|
|
24
|
+
* the id that way. This resolves the configured name at request time and
|
|
25
|
+
* verifies the signature exactly as the session middleware does.
|
|
26
|
+
*/
|
|
27
|
+
export declare class SessionIdArg extends RouteArgs {
|
|
28
|
+
protected SessionCookieConfig: ISessionCookieConfig;
|
|
29
|
+
protected CookieSecret: string;
|
|
30
|
+
get SupportedType(): string;
|
|
31
|
+
extract(callData: IRouteCall, _args: unknown[], _param: IRouteParameter, req: Request): Promise<{
|
|
32
|
+
CallData: IRouteCall;
|
|
33
|
+
Args: string | null;
|
|
34
|
+
}>;
|
|
35
|
+
}
|
|
17
36
|
export declare class CurrentSessionArg extends RouteArgs {
|
|
18
37
|
get SupportedType(): string;
|
|
19
38
|
extract(callData: IRouteCall, _args: unknown[], _param: IRouteParameter, req: Request): Promise<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-args.d.ts","sourceRoot":"","sources":["../../src/route-args.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"route-args.d.ts","sourceRoot":"","sources":["../../src/route-args.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAGtF,OAAO,EAAE,oBAAoB,EAAqB,MAAM,eAAe,CAAC;AAExE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,qBACa,OAAQ,SAAQ,SAAS;IACpC,IAAW,aAAa,IAAI,aAAa,CAExC;IAEY,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,OAAO;;;;CAGnG;AAED,qBACa,UAAW,SAAQ,SAAS;IACvC,IAAI,aAAa,IAAI,MAAM,CAE1B;IACY,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAG,KAAK,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,OAAO;;;;CAGnG;AAED;;;;;;;;GAQG;AACH,qBACa,YAAa,SAAQ,SAAS;IAEzC,SAAS,CAAC,mBAAmB,EAAE,oBAAoB,CAAC;IAGpD,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC;IAE/B,IAAI,aAAa,IAAI,MAAM,CAE1B;IAEY,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,OAAO;;;;CAWnG;AAED,qBACa,iBAAkB,SAAQ,SAAS;IAC9C,IAAI,aAAa,IAAI,MAAM,CAE1B;IACY,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,OAAO;;;;CAGnG"}
|