nodecommons-esm-security 2.0.0 → 2.1.1
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/dist/services/commons-session.service.d.mts +2 -1
- package/dist/services/commons-session.service.mjs +19 -10
- package/dist/services/commons-session.service.mjs.map +1 -1
- package/dist/services/commons-simple-single-pw-session.service.d.mts +2 -1
- package/dist/services/commons-simple-single-pw-session.service.mjs +2 -2
- package/dist/services/commons-simple-single-pw-session.service.mjs.map +1 -1
- package/dist/services/commons-user-pw-hash-session.service.d.mts +2 -1
- package/dist/services/commons-user-pw-hash-session.service.mjs +2 -2
- package/dist/services/commons-user-pw-hash-session.service.mjs.map +1 -1
- package/dist/services/commons-user-session.service.d.mts +2 -1
- package/dist/services/commons-user-session.service.mjs +2 -2
- package/dist/services/commons-user-session.service.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -8,9 +8,10 @@ export declare abstract class CommonsSessionService<T> {
|
|
|
8
8
|
get activeSessions(): number;
|
|
9
9
|
protected abstract isEqual(a: T, b: T): boolean;
|
|
10
10
|
protected abstract isStillValid(data: T): Promise<boolean>;
|
|
11
|
-
private cleanup;
|
|
12
11
|
create(data: T): ICommonsSession<T>;
|
|
13
12
|
destroy(session: ICommonsSession<T>): boolean;
|
|
14
13
|
abort(data: T): boolean;
|
|
14
|
+
private cleanup;
|
|
15
|
+
touch(sid: string): boolean;
|
|
15
16
|
validate(sid: string): Promise<ICommonsSession<T> | undefined>;
|
|
16
17
|
}
|
|
@@ -12,16 +12,6 @@ export class CommonsSessionService {
|
|
|
12
12
|
this.cleanup();
|
|
13
13
|
return this.sessions.length;
|
|
14
14
|
}
|
|
15
|
-
cleanup() {
|
|
16
|
-
if (!this.maximumLast)
|
|
17
|
-
return;
|
|
18
|
-
const expirationThreshold = new CommonsFixedDate();
|
|
19
|
-
expirationThreshold.subtract(this.maximumLast);
|
|
20
|
-
for (const session of [...this.sessions]) {
|
|
21
|
-
if (session.last.isLessThan(expirationThreshold))
|
|
22
|
-
this.destroy(session);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
15
|
create(data) {
|
|
26
16
|
if (!this.allowMultipleSessionsForSameUser)
|
|
27
17
|
this.abort(data); // clear out any existing sessions for the same user
|
|
@@ -53,6 +43,24 @@ export class CommonsSessionService {
|
|
|
53
43
|
this.destroy(existing);
|
|
54
44
|
return true;
|
|
55
45
|
}
|
|
46
|
+
cleanup() {
|
|
47
|
+
if (!this.maximumLast)
|
|
48
|
+
return;
|
|
49
|
+
const expirationThreshold = new CommonsFixedDate();
|
|
50
|
+
expirationThreshold.subtract(this.maximumLast);
|
|
51
|
+
for (const session of [...this.sessions]) {
|
|
52
|
+
if (session.last.isLessThan(expirationThreshold))
|
|
53
|
+
this.destroy(session);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
touch(sid) {
|
|
57
|
+
const session = this.sessions
|
|
58
|
+
.find((s) => s.sid === sid);
|
|
59
|
+
if (!session)
|
|
60
|
+
return false;
|
|
61
|
+
session.last = new CommonsFixedDate();
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
56
64
|
async validate(sid) {
|
|
57
65
|
this.cleanup();
|
|
58
66
|
const session = this.sessions
|
|
@@ -63,6 +71,7 @@ export class CommonsSessionService {
|
|
|
63
71
|
this.destroy(session);
|
|
64
72
|
return undefined;
|
|
65
73
|
}
|
|
74
|
+
session.last = new CommonsFixedDate();
|
|
66
75
|
return session;
|
|
67
76
|
}
|
|
68
77
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commons-session.service.mjs","sourceRoot":"","sources":["../../src/services/commons-session.service.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAwB,MAAM,oBAAoB,CAAC;AAG5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAEtE,MAAM,OAAgB,qBAAqB;IAIhC;IACA;IAJF,QAAQ,GAAyB,EAAE,CAAC;IAE5C,YACU,mCAA4C,KAAK,EACjD,WAAkC;QADlC,qCAAgC,GAAhC,gCAAgC,CAAiB;QACjD,gBAAW,GAAX,WAAW,CAAuB;IACzC,CAAC;IAEJ,IAAW,cAAc;QACxB,IAAI,CAAC,OAAO,EAAE,CAAC;QAEf,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC7B,CAAC;
|
|
1
|
+
{"version":3,"file":"commons-session.service.mjs","sourceRoot":"","sources":["../../src/services/commons-session.service.mts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { CommonsFixedDuration } from 'tscommons-esm-core';
|
|
1
2
|
import { ICommonsSession } from 'tscommons-esm-session';
|
|
2
3
|
import { CommonsSessionService } from './commons-session.service.mjs';
|
|
3
4
|
type TEmptyObject = {
|
|
@@ -5,7 +6,7 @@ type TEmptyObject = {
|
|
|
5
6
|
};
|
|
6
7
|
export declare class CommonsSimpleSinglePwSessionService extends CommonsSessionService<TEmptyObject> {
|
|
7
8
|
private password;
|
|
8
|
-
constructor(password: string);
|
|
9
|
+
constructor(password: string, maximumLast?: CommonsFixedDuration);
|
|
9
10
|
protected isEqual(_a: TEmptyObject, _b: TEmptyObject): boolean;
|
|
10
11
|
protected isStillValid(_user: TEmptyObject): Promise<boolean>;
|
|
11
12
|
authenticate(password: string): ICommonsSession<TEmptyObject> | undefined;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { CommonsSessionService } from './commons-session.service.mjs';
|
|
2
2
|
export class CommonsSimpleSinglePwSessionService extends CommonsSessionService {
|
|
3
3
|
password;
|
|
4
|
-
constructor(password) {
|
|
5
|
-
super(true);
|
|
4
|
+
constructor(password, maximumLast) {
|
|
5
|
+
super(true, maximumLast);
|
|
6
6
|
this.password = password;
|
|
7
7
|
}
|
|
8
8
|
isEqual(_a, _b) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commons-simple-single-pw-session.service.mjs","sourceRoot":"","sources":["../../src/services/commons-simple-single-pw-session.service.mts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"commons-simple-single-pw-session.service.mjs","sourceRoot":"","sources":["../../src/services/commons-simple-single-pw-session.service.mts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAItE,MAAM,OAAO,mCAAoC,SAAQ,qBAAmC;IAEjF;IADV,YACU,QAAgB,EACxB,WAAkC;QAEnC,KAAK,CACH,IAAI,EACJ,WAAW,CACZ,CAAC;QANO,aAAQ,GAAR,QAAQ,CAAQ;IAO1B,CAAC;IAES,OAAO,CAAC,EAAgB,EAAE,EAAgB;QACnD,OAAO,IAAI,CAAC;IACb,CAAC;IAES,KAAK,CAAC,YAAY,CAAC,KAAmB;QAC/C,OAAO,IAAI,CAAC;IACb,CAAC;IAEM,YAAY,CAAC,QAAgB;QACnC,IAAI,QAAQ,KAAK,IAAI,CAAC,QAAQ;YAAE,OAAO,SAAS,CAAC;QAEjD,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC;CACD"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
import { CommonsFixedDuration } from 'tscommons-esm-core';
|
|
1
2
|
import { ICommonsSession } from 'tscommons-esm-session';
|
|
2
3
|
import { ICommonsUserPwHash } from '../interfaces/icommons-user-pw-hash.mjs';
|
|
3
4
|
import { CommonsUserSessionService } from './commons-user-session.service.mjs';
|
|
4
5
|
export declare class CommonsUserPwHashSessionService<T extends ICommonsUserPwHash> extends CommonsUserSessionService<T> {
|
|
5
6
|
private pepper?;
|
|
6
7
|
static generateSaltAndPepperPwHash(pw: string, salt: string, pepper?: string): string;
|
|
7
|
-
constructor(pepper?: string | undefined, allowMultipleSessionsForSameUser?: boolean);
|
|
8
|
+
constructor(pepper?: string | undefined, allowMultipleSessionsForSameUser?: boolean, maximumLast?: CommonsFixedDuration);
|
|
8
9
|
generatePwHash(pw: string, salt: string): string;
|
|
9
10
|
authenticateWithPwHash(user: T, pw: string): ICommonsSession<T> | undefined;
|
|
10
11
|
}
|
|
@@ -10,8 +10,8 @@ export class CommonsUserPwHashSessionService extends CommonsUserSessionService {
|
|
|
10
10
|
];
|
|
11
11
|
return commonsHashSha256(components.join(''));
|
|
12
12
|
}
|
|
13
|
-
constructor(pepper, allowMultipleSessionsForSameUser = false) {
|
|
14
|
-
super(allowMultipleSessionsForSameUser);
|
|
13
|
+
constructor(pepper, allowMultipleSessionsForSameUser = false, maximumLast) {
|
|
14
|
+
super(allowMultipleSessionsForSameUser, maximumLast);
|
|
15
15
|
this.pepper = pepper;
|
|
16
16
|
}
|
|
17
17
|
generatePwHash(pw, salt) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commons-user-pw-hash-session.service.mjs","sourceRoot":"","sources":["../../src/services/commons-user-pw-hash-session.service.mts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"commons-user-pw-hash-session.service.mjs","sourceRoot":"","sources":["../../src/services/commons-user-pw-hash-session.service.mts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAIhE,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAE/E,MAAM,OAAO,+BAA8D,SAAQ,yBAA4B;IAgBpG;IAfH,MAAM,CAAC,2BAA2B,CACvC,EAAU,EACV,IAAY,EACZ,MAAe;QAEhB,MAAM,UAAU,GAAa;YAC3B,IAAI;YACJ,MAAM,IAAI,EAAE;YACZ,EAAE;SACH,CAAC;QAEF,OAAO,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,YACU,MAAe,EACvB,mCAA4C,KAAK,EACjD,WAAkC;QAEnC,KAAK,CACH,gCAAgC,EAChC,WAAW,CACZ,CAAC;QAPO,WAAM,GAAN,MAAM,CAAS;IAQzB,CAAC;IAEM,cAAc,CAAC,EAAU,EAAE,IAAY;QAC7C,OAAO,+BAA+B,CAAC,2BAA2B,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3F,CAAC;IAEM,sBAAsB,CAAC,IAAO,EAAE,EAAU;QAChD,MAAM,OAAO,GAAW,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAE3D,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YAC7B,6DAA6D;YAC7D,OAAO,SAAS,CAAC;QAClB,CAAC;QAED,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;CACD"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import { CommonsFixedDuration } from 'tscommons-esm-core';
|
|
1
2
|
import { ICommonsSession } from 'tscommons-esm-session';
|
|
2
3
|
import { ICommonsUser } from 'tscommons-esm-session';
|
|
3
4
|
import { CommonsSessionService } from './commons-session.service.mjs';
|
|
4
5
|
export declare abstract class CommonsUserSessionService<T extends ICommonsUser> extends CommonsSessionService<T> {
|
|
5
|
-
constructor(allowMultipleSessionsForSameUser?: boolean);
|
|
6
|
+
constructor(allowMultipleSessionsForSameUser?: boolean, maximumLast?: CommonsFixedDuration);
|
|
6
7
|
protected isEqual(a: T, b: T): boolean;
|
|
7
8
|
protected isStillValid(user: T): Promise<boolean>;
|
|
8
9
|
authenticate(user: T): ICommonsSession<T> | undefined;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { CommonsSessionService } from './commons-session.service.mjs';
|
|
2
2
|
export class CommonsUserSessionService extends CommonsSessionService {
|
|
3
|
-
constructor(allowMultipleSessionsForSameUser = false) {
|
|
4
|
-
super(allowMultipleSessionsForSameUser);
|
|
3
|
+
constructor(allowMultipleSessionsForSameUser = false, maximumLast) {
|
|
4
|
+
super(allowMultipleSessionsForSameUser, maximumLast);
|
|
5
5
|
}
|
|
6
6
|
isEqual(a, b) {
|
|
7
7
|
if (a.username !== b.username)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commons-user-session.service.mjs","sourceRoot":"","sources":["../../src/services/commons-user-session.service.mts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"commons-user-session.service.mjs","sourceRoot":"","sources":["../../src/services/commons-user-session.service.mts"],"names":[],"mappings":"AAIA,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAEtE,MAAM,OAAgB,yBAAkD,SAAQ,qBAAwB;IACvG,YACE,mCAA4C,KAAK,EACjD,WAAkC;QAEnC,KAAK,CACH,gCAAgC,EAChC,WAAW,CACZ,CAAC;IACH,CAAC;IAES,OAAO,CAAC,CAAI,EAAE,CAAI;QAC3B,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QAE5C,OAAO,IAAI,CAAC;IACb,CAAC;IAES,KAAK,CAAC,YAAY,CAAC,IAAO;QACnC,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAEhC,OAAO,IAAI,CAAC;IACb,CAAC;IAEM,YAAY,CAAC,IAAO;QAC1B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACnB,yDAAyD;YAEzD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjB,OAAO,SAAS,CAAC;QAClB,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;CACD"}
|