@entity-access/server-pages 1.1.548 → 1.1.552
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/ServerPages.js +3 -3
- package/dist/ServerPages.js.map +1 -1
- package/dist/core/SessionUser.d.ts +2 -3
- package/dist/core/SessionUser.d.ts.map +1 -1
- package/dist/core/SessionUser.js +4 -12
- package/dist/core/SessionUser.js.map +1 -1
- package/dist/services/{AuthenticationService.d.ts → AuthorizationService.d.ts} +9 -3
- package/dist/services/AuthorizationService.d.ts.map +1 -0
- package/dist/services/AuthorizationService.js +65 -0
- package/dist/services/AuthorizationService.js.map +1 -0
- package/dist/services/CookieService.d.ts +1 -8
- package/dist/services/CookieService.d.ts.map +1 -1
- package/dist/services/CookieService.js +82 -154
- package/dist/services/CookieService.js.map +1 -1
- package/dist/services/IAuthKey.d.ts +7 -0
- package/dist/services/IAuthKey.d.ts.map +1 -0
- package/dist/services/IAuthKey.js +2 -0
- package/dist/services/IAuthKey.js.map +1 -0
- package/dist/services/IAuthorizationCookie.d.ts +2 -4
- package/dist/services/IAuthorizationCookie.d.ts.map +1 -1
- package/dist/services/KeyProvider.d.ts +1 -0
- package/dist/services/KeyProvider.d.ts.map +1 -1
- package/dist/services/KeyProvider.js +1 -0
- package/dist/services/KeyProvider.js.map +1 -1
- package/dist/socket/SocketService.d.ts +0 -1
- package/dist/socket/SocketService.d.ts.map +1 -1
- package/dist/socket/SocketService.js +4 -18
- package/dist/socket/SocketService.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/ServerPages.ts +3 -3
- package/src/core/SessionUser.ts +5 -8
- package/src/services/AuthorizationService.ts +73 -0
- package/src/services/CookieService.ts +89 -157
- package/src/services/IAuthKey.ts +7 -0
- package/src/services/IAuthorizationCookie.ts +2 -4
- package/src/services/KeyProvider.ts +2 -0
- package/src/socket/SocketService.ts +4 -12
- package/dist/services/AuthenticationService.d.ts.map +0 -1
- package/dist/services/AuthenticationService.js +0 -40
- package/dist/services/AuthenticationService.js.map +0 -1
- package/dist/services/TokenService.d.ts +0 -31
- package/dist/services/TokenService.d.ts.map +0 -1
- package/dist/services/TokenService.js +0 -60
- package/dist/services/TokenService.js.map +0 -1
- package/dist/services/UserSessionProvider.d.ts +0 -6
- package/dist/services/UserSessionProvider.d.ts.map +0 -1
- package/dist/services/UserSessionProvider.js +0 -10
- package/dist/services/UserSessionProvider.js.map +0 -1
- package/src/services/AuthenticationService.ts +0 -44
- package/src/services/TokenService.ts +0 -81
- package/src/services/UserSessionProvider.ts +0 -16
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
import Inject, { RegisterSingleton, ServiceProvider } from "@entity-access/entity-access/dist/di/di.js";
|
|
2
|
-
import DateTime from "@entity-access/entity-access/dist/types/DateTime.js";
|
|
3
|
-
import { createSign, createVerify, generateKeyPair } from "node:crypto";
|
|
4
|
-
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
5
|
-
import { join } from "node:path";
|
|
6
|
-
import KeyProvider from "./KeyProvider.js";
|
|
7
|
-
|
|
8
|
-
export interface IAuthCookie {
|
|
9
|
-
id: number;
|
|
10
|
-
userID: number;
|
|
11
|
-
expiry: Date;
|
|
12
|
-
sign: string;
|
|
13
|
-
version: string;
|
|
14
|
-
active?: boolean;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export interface IAuthKey {
|
|
18
|
-
publicKey: string,
|
|
19
|
-
privateKey: string,
|
|
20
|
-
expires: DateTime
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export type ISignedContent<T> = T & {
|
|
24
|
-
sign: string;
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
@RegisterSingleton
|
|
28
|
-
export default class TokenService {
|
|
29
|
-
|
|
30
|
-
public authCookieName = "ea-c1";
|
|
31
|
-
|
|
32
|
-
public shareCookieName = "ea-ca1";
|
|
33
|
-
|
|
34
|
-
private keyProvider: KeyProvider;
|
|
35
|
-
|
|
36
|
-
public async getAuthToken(authCookie: Omit<IAuthCookie, "sign">): Promise<{ cookieName: string, cookie: string}> {
|
|
37
|
-
const cookie = await this.signContent(authCookie);
|
|
38
|
-
return { cookieName: this.authCookieName, cookie: JSON.stringify(cookie) };
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
public async signContent<T>(content: T): Promise<ISignedContent<T>> {
|
|
42
|
-
this.keyProvider ??= ServiceProvider.resolve(this, KeyProvider, true) ?? new KeyProvider();
|
|
43
|
-
const [key] = await this.keyProvider.getKeys();
|
|
44
|
-
const sign = this.sign(JSON.stringify(content), key);
|
|
45
|
-
return { ... content, sign};
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
public async verifyContent<T>(content: ISignedContent<T>, fail = true) {
|
|
49
|
-
this.keyProvider ??= ServiceProvider.resolve(this, KeyProvider, true) ?? new KeyProvider();
|
|
50
|
-
const { sign , ... c } = content;
|
|
51
|
-
const keys = await this.keyProvider.getKeys();
|
|
52
|
-
for (const iterator of keys) {
|
|
53
|
-
if(this.verify(JSON.stringify(c), sign, iterator, false)) {
|
|
54
|
-
return true;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
if (fail) {
|
|
58
|
-
throw new Error("Signature verification failed");
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
public verify(content: string | Buffer, signature: string, key: IAuthKey, fail = true) {
|
|
63
|
-
const verify = createVerify("SHA256");
|
|
64
|
-
verify.write(content);
|
|
65
|
-
verify.end();
|
|
66
|
-
if(verify.verify(key.publicKey, signature, "hex")) {
|
|
67
|
-
return true;
|
|
68
|
-
}
|
|
69
|
-
if (fail) {
|
|
70
|
-
throw new Error("Invalid signature");
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
private sign(content: string, key: IAuthKey) {
|
|
75
|
-
const sign = createSign("SHA256");
|
|
76
|
-
sign.write(content);
|
|
77
|
-
sign.end();
|
|
78
|
-
return sign.sign(key.privateKey, "hex");
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { RegisterScoped, RegisterSingleton } from "@entity-access/entity-access/dist/di/di.js";
|
|
2
|
-
import { SessionUser } from "../core/SessionUser.js";
|
|
3
|
-
import DateTime from "@entity-access/entity-access/dist/types/DateTime.js";
|
|
4
|
-
import { IAuthCookie } from "./TokenService.js";
|
|
5
|
-
|
|
6
|
-
export default class UserSessionProvider {
|
|
7
|
-
|
|
8
|
-
async getUserSession({ userID, id: sessionID, expiry}: IAuthCookie): Promise<Partial<SessionUser>> {
|
|
9
|
-
return {
|
|
10
|
-
sessionID,
|
|
11
|
-
userID,
|
|
12
|
-
expiry
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
}
|