nodecommons-esm-security 2.1.0 → 2.2.0
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 +1 -0
- package/dist/services/commons-session.service.mjs +10 -0
- 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
|
@@ -74,5 +74,15 @@ export class CommonsSessionService {
|
|
|
74
74
|
session.last = new CommonsFixedDate();
|
|
75
75
|
return session;
|
|
76
76
|
}
|
|
77
|
+
// useful for things like user account changes
|
|
78
|
+
updateData(sid, data) {
|
|
79
|
+
this.cleanup();
|
|
80
|
+
const session = this.sessions
|
|
81
|
+
.find((s) => s.sid === sid);
|
|
82
|
+
if (!session)
|
|
83
|
+
return false;
|
|
84
|
+
session.data = { ...data };
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
77
87
|
}
|
|
78
88
|
//# sourceMappingURL=commons-session.service.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commons-session.service.mjs","sourceRoot":"","sources":["../../src/services/commons-session.service.mts"],"names":[],"mappings":"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"}
|
|
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"}
|