@spinajs/rbac 1.2.211 → 2.0.19
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/auth.js +1 -6
- package/lib/auth.js.map +1 -1
- package/lib/interfaces.d.ts +11 -20
- package/lib/interfaces.js.map +1 -1
- package/lib/migrations/RBACInitial_2022_06_28_01_13_00.js +7 -9
- package/lib/migrations/RBACInitial_2022_06_28_01_13_00.js.map +1 -1
- package/lib/models/User.d.ts +8 -7
- package/lib/models/User.js +9 -0
- package/lib/models/User.js.map +1 -1
- package/lib/models/UserMetadata.d.ts +3 -1
- package/lib/models/UserMetadata.js +5 -1
- package/lib/models/UserMetadata.js.map +1 -1
- package/lib/session.d.ts +15 -14
- package/lib/session.js +18 -30
- package/lib/session.js.map +1 -1
- package/package.json +9 -9
- package/lib/rbac.js +0 -7
package/lib/auth.js
CHANGED
|
@@ -23,12 +23,7 @@ let SimpleDbAuthProvider = class SimpleDbAuthProvider {
|
|
|
23
23
|
}
|
|
24
24
|
async authenticate(email, password) {
|
|
25
25
|
const pwd = this.Container.resolve(interfaces_1.PasswordProvider);
|
|
26
|
-
const result = await User_1.User.where({
|
|
27
|
-
Email: email,
|
|
28
|
-
})
|
|
29
|
-
.andWhere('DeletedAt', null)
|
|
30
|
-
.populate('Metadata')
|
|
31
|
-
.first();
|
|
26
|
+
const result = await User_1.User.where({ Email: email, DeletedAt: null }).first();
|
|
32
27
|
if (!result) {
|
|
33
28
|
return null;
|
|
34
29
|
}
|
package/lib/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8D;AAC9D,wCAAqC;AACrC,oCAA4E;AAG5E,IAAa,oBAAoB,GAAjC,MAAa,oBAAoB;IAIxB,KAAK,CAAC,MAAM,CAAC,IAAmB;QACrC,MAAM,MAAM,GAAG,MAAM,WAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,YAAY,WAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QAC3F,IAAI,MAAM,EAAE;YACV,OAAO,IAAI,CAAC;SACb;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,KAAa,EAAE,QAAgB;QACvD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,6BAAgB,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,MAAM,WAAI,CAAC,KAAK,CAAC
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8D;AAC9D,wCAAqC;AACrC,oCAA4E;AAG5E,IAAa,oBAAoB,GAAjC,MAAa,oBAAoB;IAIxB,KAAK,CAAC,MAAM,CAAC,IAAmB;QACrC,MAAM,MAAM,GAAG,MAAM,WAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,YAAY,WAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QAC3F,IAAI,MAAM,EAAE;YACV,OAAO,IAAI,CAAC;SACb;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,KAAa,EAAE,QAAgB;QACvD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,6BAAgB,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,MAAM,WAAI,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QAE3E,IAAI,CAAC,MAAM,EAAE;YACX,OAAO,IAAI,CAAC;SACb;QAED,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC1D,IAAI,KAAK,EAAE;YACT,OAAO,MAAM,CAAC;SACf;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AA1BC;IADC,IAAA,eAAU,EAAC,cAAS,CAAC;;uDACU;AAFrB,oBAAoB;IADhC,IAAA,eAAU,EAAC,yBAAY,CAAC;GACZ,oBAAoB,CA4BhC;AA5BY,oDAAoB"}
|
package/lib/interfaces.d.ts
CHANGED
|
@@ -1,32 +1,30 @@
|
|
|
1
1
|
import { User } from './models/User';
|
|
2
2
|
import { AsyncModule } from '@spinajs/di';
|
|
3
3
|
import { DateTime } from 'luxon';
|
|
4
|
-
export interface
|
|
4
|
+
export interface ISession {
|
|
5
5
|
/**
|
|
6
6
|
* Session identifier
|
|
7
7
|
*/
|
|
8
|
-
SessionId
|
|
8
|
+
SessionId: string;
|
|
9
9
|
/**
|
|
10
10
|
* Expiration date. After that date session is invalid
|
|
11
11
|
*/
|
|
12
|
-
Expiration
|
|
12
|
+
Expiration?: DateTime;
|
|
13
13
|
/**
|
|
14
14
|
* Session creation date. After that date session is invalid
|
|
15
15
|
*/
|
|
16
|
-
Creation
|
|
16
|
+
Creation: DateTime;
|
|
17
17
|
/**
|
|
18
18
|
* Data holds by session
|
|
19
19
|
*/
|
|
20
|
-
Data:
|
|
21
|
-
}
|
|
22
|
-
export interface UserSession extends UserSessionData {
|
|
20
|
+
Data: Map<string, unknown>;
|
|
23
21
|
/**
|
|
24
22
|
*
|
|
25
23
|
* Extends session lifetime
|
|
26
24
|
*
|
|
27
|
-
* @param minutes - how mutch to extend
|
|
25
|
+
* @param minutes - how mutch to extend, if value not provided, default value from config is used
|
|
28
26
|
*/
|
|
29
|
-
extend(minutes
|
|
27
|
+
extend(minutes?: number): void;
|
|
30
28
|
}
|
|
31
29
|
/**
|
|
32
30
|
* Service used for generating random password & for hash raw string
|
|
@@ -56,33 +54,26 @@ export declare abstract class AuthProvider<U = User> {
|
|
|
56
54
|
abstract exists(user: U): Promise<boolean>;
|
|
57
55
|
abstract authenticate(email: string, password: string): Promise<U>;
|
|
58
56
|
}
|
|
59
|
-
export declare abstract class SessionProvider<T =
|
|
57
|
+
export declare abstract class SessionProvider<T = ISession> extends AsyncModule {
|
|
60
58
|
/**
|
|
61
59
|
*
|
|
62
60
|
* Load session from store. If not exists or expired returns null
|
|
63
61
|
*
|
|
64
62
|
* @param sessionId - session identifier
|
|
65
63
|
*/
|
|
66
|
-
abstract
|
|
64
|
+
abstract restore(sessionId: string): Promise<T>;
|
|
67
65
|
/**
|
|
68
66
|
*
|
|
69
67
|
* Deletes session from store
|
|
70
68
|
*
|
|
71
69
|
* @param sessionId - session to delete
|
|
72
70
|
*/
|
|
73
|
-
abstract
|
|
71
|
+
abstract delete(sessionId: string): Promise<void>;
|
|
74
72
|
/**
|
|
75
73
|
*
|
|
76
74
|
* Adds or updates session in store
|
|
77
75
|
*
|
|
78
76
|
* @param session - session to update / insert
|
|
79
77
|
*/
|
|
80
|
-
abstract
|
|
81
|
-
/**
|
|
82
|
-
*
|
|
83
|
-
* Extends session expiration time. Extension is set in acl.session.expiration (in seconds)
|
|
84
|
-
*
|
|
85
|
-
* @param sessionId - session to refres
|
|
86
|
-
*/
|
|
87
|
-
abstract refreshSession(sessionId: string | UserSession): Promise<void>;
|
|
78
|
+
abstract save(session: ISession): Promise<void>;
|
|
88
79
|
}
|
package/lib/interfaces.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":";;;AACA,oCAA0C;
|
|
1
|
+
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":";;;AACA,oCAA0C;AAiC1C;;GAEG;AACH,MAAsB,gBAAgB;CAsBrC;AAtBD,4CAsBC;AAED,MAAsB,YAAY;CAIjC;AAJD,oCAIC;AAED,MAAsB,eAA8B,SAAQ,gBAAW;CAwBtE;AAxBD,0CAwBC"}
|
|
@@ -12,25 +12,23 @@ const orm_1 = require("@spinajs/orm");
|
|
|
12
12
|
let RBACInitial_2022_06_28_01_13_00 = class RBACInitial_2022_06_28_01_13_00 extends orm_1.OrmMigration {
|
|
13
13
|
async up(connection) {
|
|
14
14
|
await connection.schema().createTable('users', (table) => {
|
|
15
|
-
table.int('Id').
|
|
16
|
-
table.string('Login', 64).unique().notNull();
|
|
15
|
+
table.int('Id').primaryKey().autoIncrement();
|
|
17
16
|
table.string('Email', 64).unique().notNull();
|
|
18
17
|
table.string('Password', 128).notNull();
|
|
19
|
-
table.string('
|
|
20
|
-
table.string('Role',
|
|
18
|
+
table.string('Login', 64).notNull();
|
|
19
|
+
table.string('Role', 256).notNull();
|
|
21
20
|
table.dateTime('RegisteredAt');
|
|
22
|
-
table.dateTime('CreatedAt').notNull();
|
|
21
|
+
table.dateTime('CreatedAt').notNull().default().dateTime();
|
|
23
22
|
table.dateTime('DeletedAt');
|
|
24
23
|
});
|
|
25
|
-
await connection.schema().createTable('
|
|
26
|
-
table.int('Id').autoIncrement().primaryKey();
|
|
24
|
+
await connection.schema().createTable('users_metadata', (table) => {
|
|
27
25
|
table.string('Key', 255).notNull();
|
|
28
26
|
table.text('Value').notNull();
|
|
29
27
|
table.int('user_id').notNull();
|
|
30
28
|
table.foreignKey('user_id').references('users', 'Id').cascade();
|
|
31
29
|
});
|
|
32
|
-
await connection.index().unique().table('
|
|
33
|
-
await connection.index().unique().table('
|
|
30
|
+
await connection.index().unique().table('users_metadata').name('owner_user_meta_key_idx').columns(['user_id', 'Key']);
|
|
31
|
+
await connection.index().unique().table('users').name('user_login_idx').columns(['Login']);
|
|
34
32
|
}
|
|
35
33
|
// tslint:disable-next-line: no-empty
|
|
36
34
|
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RBACInitial_2022_06_28_01_13_00.js","sourceRoot":"","sources":["../../src/migrations/RBACInitial_2022_06_28_01_13_00.ts"],"names":[],"mappings":";;;;;;;;;AAAA,sDAAsD;AACtD,sCAAkE;AAGlE,IAAa,+BAA+B,GAA5C,MAAa,+BAAgC,SAAQ,kBAAY;IACxD,KAAK,CAAC,EAAE,CAAC,UAAqB;QACnC,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACvD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"RBACInitial_2022_06_28_01_13_00.js","sourceRoot":"","sources":["../../src/migrations/RBACInitial_2022_06_28_01_13_00.ts"],"names":[],"mappings":";;;;;;;;;AAAA,sDAAsD;AACtD,sCAAkE;AAGlE,IAAa,+BAA+B,GAA5C,MAAa,+BAAgC,SAAQ,kBAAY;IACxD,KAAK,CAAC,EAAE,CAAC,UAAqB;QACnC,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACvD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC,aAAa,EAAE,CAAC;YAC7C,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC;YAC7C,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;YACxC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;YACpC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;YACpC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;YAC/B,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC;YAC3D,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,gBAAgB,EAAE,CAAC,KAAK,EAAE,EAAE;YAChE,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;YAC9B,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;YAC/B,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;QAClE,CAAC,CAAC,CAAC;QAEH,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;QACtH,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7F,CAAC;IAED,qCAAqC;IACrC,gEAAgE;IACzD,KAAK,CAAC,IAAI,CAAC,WAAsB,IAAkB,CAAC;CAC5D,CAAA;AA3BY,+BAA+B;IAD3C,IAAA,eAAS,EAAC,SAAS,CAAC;GACR,+BAA+B,CA2B3C;AA3BY,0EAA+B"}
|
package/lib/models/User.d.ts
CHANGED
|
@@ -7,29 +7,29 @@ import { UserMetadata } from './UserMetadata';
|
|
|
7
7
|
* To add / extend fields simply extend this model and register as default user model in ACL service
|
|
8
8
|
*/
|
|
9
9
|
export declare class User extends ModelBase {
|
|
10
|
+
protected _hidden: string[];
|
|
10
11
|
Id: number;
|
|
11
12
|
Email: string;
|
|
12
|
-
Login: string;
|
|
13
13
|
/**
|
|
14
14
|
* Hashed password for user
|
|
15
15
|
*/
|
|
16
16
|
Password: string;
|
|
17
|
-
/**
|
|
18
|
-
* Registration date. User is registered when clicked confirmation link sended to provided email.
|
|
19
|
-
*/
|
|
20
|
-
RegisteredAt: DateTime;
|
|
21
17
|
/**
|
|
22
18
|
* Displayed name ( for others to see )
|
|
23
19
|
*/
|
|
24
|
-
|
|
20
|
+
Login: string;
|
|
25
21
|
/**
|
|
26
22
|
* User role
|
|
27
23
|
*/
|
|
28
|
-
Role: string;
|
|
24
|
+
Role: string[];
|
|
29
25
|
/**
|
|
30
26
|
* User creation date
|
|
31
27
|
*/
|
|
32
28
|
CreatedAt: DateTime;
|
|
29
|
+
/**
|
|
30
|
+
* Registration date. User is registered when clicked confirmation link sended to provided email.
|
|
31
|
+
*/
|
|
32
|
+
RegisteredAt: DateTime;
|
|
33
33
|
/**
|
|
34
34
|
* User deletion date
|
|
35
35
|
*/
|
|
@@ -38,4 +38,5 @@ export declare class User extends ModelBase {
|
|
|
38
38
|
* User additional information. Can be anything
|
|
39
39
|
*/
|
|
40
40
|
Metadata: Relation<UserMetadata>;
|
|
41
|
+
can(resource: string, permission: string): any;
|
|
41
42
|
}
|
package/lib/models/User.js
CHANGED
|
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
12
|
exports.User = void 0;
|
|
13
13
|
const luxon_1 = require("luxon");
|
|
14
14
|
const orm_1 = require("@spinajs/orm");
|
|
15
|
+
const di_1 = require("@spinajs/di");
|
|
15
16
|
const UserMetadata_1 = require("./UserMetadata");
|
|
16
17
|
/**
|
|
17
18
|
* Base modele for users used by ACL
|
|
@@ -19,6 +20,14 @@ const UserMetadata_1 = require("./UserMetadata");
|
|
|
19
20
|
* To add / extend fields simply extend this model and register as default user model in ACL service
|
|
20
21
|
*/
|
|
21
22
|
let User = class User extends orm_1.ModelBase {
|
|
23
|
+
constructor() {
|
|
24
|
+
super(...arguments);
|
|
25
|
+
this._hidden = ['Password'];
|
|
26
|
+
}
|
|
27
|
+
can(resource, permission) {
|
|
28
|
+
const ac = di_1.DI.get('AccessControl');
|
|
29
|
+
return ac.can(this.Role)[permission](resource);
|
|
30
|
+
}
|
|
22
31
|
};
|
|
23
32
|
__decorate([
|
|
24
33
|
(0, orm_1.Primary)(),
|
package/lib/models/User.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"User.js","sourceRoot":"","sources":["../../src/models/User.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,iCAAiC;AACjC,sCAA+G;
|
|
1
|
+
{"version":3,"file":"User.js","sourceRoot":"","sources":["../../src/models/User.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,iCAAiC;AACjC,sCAA+G;AAE/G,oCAAiC;AACjC,iDAA8C;AAE9C;;;;GAIG;AAGH,IAAa,IAAI,GAAjB,MAAa,IAAK,SAAQ,eAAS;IAAnC;;QACY,YAAO,GAAa,CAAC,UAAU,CAAC,CAAC;IAiD7C,CAAC;IAJQ,GAAG,CAAC,QAAgB,EAAE,UAAkB;QAC7C,MAAM,EAAE,GAAG,OAAE,CAAC,GAAG,CAAgB,eAAe,CAAC,CAAC;QAClD,OAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAS,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC1D,CAAC;CACF,CAAA;AA9CC;IADC,IAAA,aAAO,GAAE;;gCACQ;AAuBlB;IADC,IAAA,eAAS,GAAE;8BACM,gBAAQ;uCAAC;AAW3B;IADC,IAAA,gBAAU,GAAE;8BACK,gBAAQ;uCAAC;AAM3B;IADC,IAAA,aAAO,EAAC,2BAAY,CAAC;8BACL,cAAQ;sCAAe;AA5C7B,IAAI;IAFhB,IAAA,gBAAU,EAAC,SAAS,CAAC;IACrB,IAAA,WAAK,EAAC,OAAO,CAAC;GACF,IAAI,CAkDhB;AAlDY,oBAAI"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import { ModelBase } from '@spinajs/orm';
|
|
1
|
+
import { ModelBase, SingleRelation } from '@spinajs/orm';
|
|
2
|
+
import type { User } from './User';
|
|
2
3
|
export declare class UserMetadata extends ModelBase {
|
|
3
4
|
Id: number;
|
|
4
5
|
Key: string;
|
|
5
6
|
Value: string;
|
|
7
|
+
User: SingleRelation<User>;
|
|
6
8
|
}
|
|
@@ -17,9 +17,13 @@ __decorate([
|
|
|
17
17
|
(0, orm_1.Primary)(),
|
|
18
18
|
__metadata("design:type", Number)
|
|
19
19
|
], UserMetadata.prototype, "Id", void 0);
|
|
20
|
+
__decorate([
|
|
21
|
+
(0, orm_1.BelongsTo)('User'),
|
|
22
|
+
__metadata("design:type", orm_1.SingleRelation)
|
|
23
|
+
], UserMetadata.prototype, "User", void 0);
|
|
20
24
|
UserMetadata = __decorate([
|
|
21
25
|
(0, orm_1.Connection)('default'),
|
|
22
|
-
(0, orm_1.Model)('
|
|
26
|
+
(0, orm_1.Model)('users_metadata')
|
|
23
27
|
], UserMetadata);
|
|
24
28
|
exports.UserMetadata = UserMetadata;
|
|
25
29
|
//# sourceMappingURL=UserMetadata.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserMetadata.js","sourceRoot":"","sources":["../../src/models/UserMetadata.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"UserMetadata.js","sourceRoot":"","sources":["../../src/models/UserMetadata.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,sCAAgG;AAKhG,IAAa,YAAY,GAAzB,MAAa,YAAa,SAAQ,eAAS;CAU1C,CAAA;AARC;IADC,IAAA,aAAO,GAAE;;wCACQ;AAOlB;IADC,IAAA,eAAS,EAAC,MAAM,CAAC;8BACL,oBAAc;0CAAO;AATvB,YAAY;IAFxB,IAAA,gBAAU,EAAC,SAAS,CAAC;IACrB,IAAA,WAAK,EAAC,gBAAgB,CAAC;GACX,YAAY,CAUxB;AAVY,oCAAY"}
|
package/lib/session.d.ts
CHANGED
|
@@ -1,32 +1,33 @@
|
|
|
1
1
|
import { DateTime } from 'luxon';
|
|
2
|
-
import { SessionProvider,
|
|
2
|
+
import { SessionProvider, ISession } from './interfaces';
|
|
3
3
|
import { Configuration } from '@spinajs/configuration';
|
|
4
4
|
/**
|
|
5
5
|
* Session base class
|
|
6
6
|
*/
|
|
7
|
-
export declare class Session implements
|
|
7
|
+
export declare class Session implements ISession {
|
|
8
8
|
protected SessionExpirationTime: number;
|
|
9
9
|
SessionId: string;
|
|
10
|
+
/**
|
|
11
|
+
* Expiration time for session, if null it does not expire
|
|
12
|
+
*/
|
|
10
13
|
Expiration: DateTime;
|
|
11
|
-
Data:
|
|
14
|
+
Data: Map<string, unknown>;
|
|
12
15
|
Creation: DateTime;
|
|
13
|
-
constructor(
|
|
16
|
+
constructor(session?: Partial<ISession>);
|
|
14
17
|
/**
|
|
15
18
|
* Extends lifetime of session
|
|
16
19
|
*
|
|
17
|
-
* @param
|
|
20
|
+
* @param seconds - hom mutch to extend
|
|
18
21
|
*/
|
|
19
|
-
extend(
|
|
22
|
+
extend(seconds?: number): void;
|
|
20
23
|
}
|
|
21
24
|
/**
|
|
22
|
-
* Simple session storage in memory
|
|
25
|
+
* Simple session storage in memory, for testing or rapid prototyping
|
|
23
26
|
*/
|
|
24
|
-
export declare class MemorySessionStore
|
|
27
|
+
export declare class MemorySessionStore extends SessionProvider<ISession> {
|
|
25
28
|
protected Configuration: Configuration;
|
|
26
|
-
protected Sessions: Map<string,
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
updateSession(session: UserSession): Promise<void>;
|
|
31
|
-
refreshSession(sessionId: string): Promise<void>;
|
|
29
|
+
protected Sessions: Map<string, ISession>;
|
|
30
|
+
restore(sessionId: string): Promise<ISession | null>;
|
|
31
|
+
delete(sessionId: string): Promise<void>;
|
|
32
|
+
save(session: ISession): Promise<void>;
|
|
32
33
|
}
|
package/lib/session.js
CHANGED
|
@@ -19,28 +19,25 @@ const uuid_1 = require("uuid");
|
|
|
19
19
|
* Session base class
|
|
20
20
|
*/
|
|
21
21
|
let Session = class Session {
|
|
22
|
-
constructor(
|
|
23
|
-
|
|
24
|
-
Object.assign(this, data);
|
|
25
|
-
}
|
|
26
|
-
if (!this.SessionId) {
|
|
27
|
-
this.SessionId = (0, uuid_1.v4)();
|
|
28
|
-
}
|
|
22
|
+
constructor(session) {
|
|
23
|
+
this.SessionId = (0, uuid_1.v4)();
|
|
29
24
|
/**
|
|
30
|
-
*
|
|
25
|
+
* Expiration time for session, if null it does not expire
|
|
31
26
|
*/
|
|
32
|
-
this.Expiration =
|
|
33
|
-
|
|
34
|
-
|
|
27
|
+
this.Expiration = null;
|
|
28
|
+
this.Data = new Map();
|
|
29
|
+
this.Creation = luxon_1.DateTime.now();
|
|
30
|
+
if (session) {
|
|
31
|
+
Object.assign(this, session);
|
|
35
32
|
}
|
|
36
33
|
}
|
|
37
34
|
/**
|
|
38
35
|
* Extends lifetime of session
|
|
39
36
|
*
|
|
40
|
-
* @param
|
|
37
|
+
* @param seconds - hom mutch to extend
|
|
41
38
|
*/
|
|
42
|
-
extend(
|
|
43
|
-
this.Expiration.plus({
|
|
39
|
+
extend(seconds) {
|
|
40
|
+
this.Expiration = luxon_1.DateTime.now().plus({ seconds: seconds ? seconds : this.SessionExpirationTime });
|
|
44
41
|
}
|
|
45
42
|
};
|
|
46
43
|
__decorate([
|
|
@@ -53,40 +50,31 @@ Session = __decorate([
|
|
|
53
50
|
], Session);
|
|
54
51
|
exports.Session = Session;
|
|
55
52
|
/**
|
|
56
|
-
* Simple session storage in memory
|
|
53
|
+
* Simple session storage in memory, for testing or rapid prototyping
|
|
57
54
|
*/
|
|
58
55
|
let MemorySessionStore = class MemorySessionStore extends interfaces_1.SessionProvider {
|
|
59
56
|
constructor() {
|
|
60
57
|
super(...arguments);
|
|
61
58
|
this.Sessions = new Map();
|
|
62
59
|
}
|
|
63
|
-
async
|
|
60
|
+
async restore(sessionId) {
|
|
64
61
|
if (this.Sessions.has(sessionId)) {
|
|
65
62
|
const session = this.Sessions.get(sessionId);
|
|
66
|
-
if (session.Expiration
|
|
67
|
-
|
|
68
|
-
return null;
|
|
63
|
+
if (!session.Expiration || session.Expiration > luxon_1.DateTime.now()) {
|
|
64
|
+
return session;
|
|
69
65
|
}
|
|
70
|
-
return
|
|
66
|
+
return null;
|
|
71
67
|
}
|
|
72
68
|
return null;
|
|
73
69
|
}
|
|
74
|
-
|
|
75
|
-
async resolveAsync() { }
|
|
76
|
-
async deleteSession(sessionId) {
|
|
70
|
+
async delete(sessionId) {
|
|
77
71
|
if (this.Sessions.has(sessionId)) {
|
|
78
72
|
this.Sessions.delete(sessionId);
|
|
79
73
|
}
|
|
80
74
|
}
|
|
81
|
-
async
|
|
75
|
+
async save(session) {
|
|
82
76
|
this.Sessions.set(session.SessionId, session);
|
|
83
77
|
}
|
|
84
|
-
async refreshSession(sessionId) {
|
|
85
|
-
if (this.Sessions.has(sessionId)) {
|
|
86
|
-
const session = this.Sessions.get(sessionId);
|
|
87
|
-
session.extend(this.Configuration.get('acl.session.expiration', 10));
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
78
|
};
|
|
91
79
|
__decorate([
|
|
92
80
|
(0, di_1.Autoinject)(),
|
package/lib/session.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,iCAAiC;AACjC,
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,iCAAiC;AACjC,6CAAyD;AACzD,oCAAkE;AAClE,0DAA+D;AAC/D,+BAAoC;AAEpC;;GAEG;AAEH,IAAa,OAAO,GAApB,MAAa,OAAO;IAelB,YAAY,OAA2B;QAXhC,cAAS,GAAW,IAAA,SAAM,GAAE,CAAC;QAEpC;;WAEG;QACI,eAAU,GAAa,IAAI,CAAC;QAE5B,SAAI,GAAyB,IAAI,GAAG,EAAE,CAAC;QAEvC,aAAQ,GAAa,gBAAQ,CAAC,GAAG,EAAE,CAAC;QAGzC,IAAI,OAAO,EAAE;YACX,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;SAC9B;IACH,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,OAAgB;QAC5B,IAAI,CAAC,UAAU,GAAG,gBAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC;IACrG,CAAC;CACF,CAAA;AA3BC;IADC,IAAA,sBAAM,EAAC,yBAAyB,CAAC;;sDACM;AAF7B,OAAO;IADnB,IAAA,gBAAW,GAAE;;GACD,OAAO,CA6BnB;AA7BY,0BAAO;AA+BpB;;GAEG;AAEH,IAAa,kBAAkB,GAA/B,MAAa,kBAAmB,SAAQ,4BAAyB;IAAjE;;QAIY,aAAQ,GAA0B,IAAI,GAAG,EAAoB,CAAC;IAuB1E,CAAC;IArBQ,KAAK,CAAC,OAAO,CAAC,SAAiB;QACpC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;YAChC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC7C,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,GAAG,gBAAQ,CAAC,GAAG,EAAE,EAAE;gBAC9D,OAAO,OAAO,CAAC;aAChB;YACD,OAAO,IAAI,CAAC;SACb;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,SAAiB;QACnC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;YAChC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;SACjC;IACH,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,OAAiB;QACjC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;CACF,CAAA;AAzBC;IADC,IAAA,eAAU,GAAE;8BACY,6BAAa;yDAAC;AAF5B,kBAAkB;IAD9B,IAAA,eAAU,EAAC,4BAAe,CAAC;GACf,kBAAkB,CA2B9B;AA3BY,gDAAkB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@spinajs/rbac",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.19",
|
|
4
4
|
"description": "Role and Attribute based Access Control for SpinaJS framework",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"private": false,
|
|
@@ -38,12 +38,12 @@
|
|
|
38
38
|
},
|
|
39
39
|
"homepage": "https://github.com/spinajs/main#readme",
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@spinajs/configuration": "^
|
|
42
|
-
"@spinajs/di": "^
|
|
43
|
-
"@spinajs/exceptions": "^
|
|
44
|
-
"@spinajs/log": "^
|
|
45
|
-
"@spinajs/orm": "^
|
|
46
|
-
"@spinajs/reflection": "^
|
|
41
|
+
"@spinajs/configuration": "^2.0.19",
|
|
42
|
+
"@spinajs/di": "^2.0.19",
|
|
43
|
+
"@spinajs/exceptions": "^2.0.12",
|
|
44
|
+
"@spinajs/log": "^2.0.19",
|
|
45
|
+
"@spinajs/orm": "^2.0.19",
|
|
46
|
+
"@spinajs/reflection": "^2.0.19",
|
|
47
47
|
"accesscontrol": "^2.2.1",
|
|
48
48
|
"argon2": "^0.28.5",
|
|
49
49
|
"entropy-string": "^4.2.0",
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
"uuid": "^8.1.0"
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {
|
|
55
|
-
"@spinajs/orm-sqlite": "^
|
|
55
|
+
"@spinajs/orm-sqlite": "^2.0.19"
|
|
56
56
|
},
|
|
57
|
-
"gitHead": "
|
|
57
|
+
"gitHead": "51e801176ecec955cbf1eb2d91e9f4740cb2b471"
|
|
58
58
|
}
|