@hed-hog/core 0.0.373 → 0.0.375
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/README.md +954 -873
- package/dist/integration-profile/integration-profile.secrets.d.ts.map +1 -1
- package/dist/integration-profile/integration-profile.secrets.js +4 -0
- package/dist/integration-profile/integration-profile.secrets.js.map +1 -1
- package/dist/integration-profile/integration-profile.utils.d.ts +6 -0
- package/dist/integration-profile/integration-profile.utils.d.ts.map +1 -1
- package/dist/integration-profile/integration-profile.utils.js +1 -1
- package/dist/integration-profile/integration-profile.utils.js.map +1 -1
- package/dist/oauth/oauth.controller.d.ts +11 -3
- package/dist/oauth/oauth.controller.d.ts.map +1 -1
- package/dist/oauth/oauth.controller.js +52 -14
- package/dist/oauth/oauth.controller.js.map +1 -1
- package/dist/oauth/oauth.module.d.ts.map +1 -1
- package/dist/oauth/oauth.module.js +4 -0
- package/dist/oauth/oauth.module.js.map +1 -1
- package/dist/oauth/oauth.service.d.ts +38 -2
- package/dist/oauth/oauth.service.d.ts.map +1 -1
- package/dist/oauth/oauth.service.js +122 -5
- package/dist/oauth/oauth.service.js.map +1 -1
- package/dist/oauth/providers/apple.provider.d.ts +34 -0
- package/dist/oauth/providers/apple.provider.d.ts.map +1 -0
- package/dist/oauth/providers/apple.provider.js +197 -0
- package/dist/oauth/providers/apple.provider.js.map +1 -0
- package/dist/oauth/providers/facebook.provider.d.ts +1 -1
- package/dist/oauth/providers/facebook.provider.d.ts.map +1 -1
- package/dist/oauth/providers/facebook.provider.js +3 -2
- package/dist/oauth/providers/facebook.provider.js.map +1 -1
- package/dist/oauth/providers/google.provider.d.ts +1 -1
- package/dist/oauth/providers/google.provider.d.ts.map +1 -1
- package/dist/oauth/providers/google.provider.js +3 -2
- package/dist/oauth/providers/google.provider.js.map +1 -1
- package/dist/oauth/providers/linkedin.provider.d.ts +25 -0
- package/dist/oauth/providers/linkedin.provider.d.ts.map +1 -0
- package/dist/oauth/providers/linkedin.provider.js +99 -0
- package/dist/oauth/providers/linkedin.provider.js.map +1 -0
- package/dist/oauth/providers/microsoft-entra-id.provider.js +1 -1
- package/dist/oauth/providers/microsoft-entra-id.provider.js.map +1 -1
- package/dist/oauth/providers/microsoft.provider.d.ts +1 -1
- package/dist/oauth/providers/microsoft.provider.d.ts.map +1 -1
- package/dist/oauth/providers/microsoft.provider.js +3 -2
- package/dist/oauth/providers/microsoft.provider.js.map +1 -1
- package/dist/pdf/pdf.service.d.ts.map +1 -1
- package/dist/pdf/pdf.service.js +19 -2
- package/dist/pdf/pdf.service.js.map +1 -1
- package/dist/setting/setting.service.d.ts.map +1 -1
- package/dist/setting/setting.service.js +4 -1
- package/dist/setting/setting.service.js.map +1 -1
- package/hedhog/data/integration_provider.yaml +16 -0
- package/hedhog/data/setting_group.yaml +98 -0
- package/hedhog/data/setting_subgroup.yaml +16 -0
- package/hedhog/frontend/app/configurations/[slug]/components/setting-field.tsx.ejs +2 -0
- package/hedhog/frontend/app/dashboard/dashboard.css.ejs +11 -11
- package/hedhog/frontend/app/integration/profiles/page.tsx.ejs +42 -0
- package/hedhog/frontend/app/menu/page.tsx.ejs +1 -1
- package/hedhog/frontend/app/users/user-sheet.tsx.ejs +8 -0
- package/hedhog/frontend/e2e/core.spec.ts.ejs +28 -0
- package/hedhog/frontend/messages/en.json +35 -0
- package/hedhog/frontend/messages/pt.json +35 -0
- package/hedhog/table/user_account.yaml +1 -0
- package/package.json +3 -3
- package/src/access-log/access-log.service.spec.ts +235 -0
- package/src/ai-instruction/ai-prompt-builder.service.spec.ts +250 -0
- package/src/auth/auth.service.spec.ts +891 -0
- package/src/auth/guards/auth.guard.spec.ts +177 -0
- package/src/challenge/challenge.service.spec.ts +334 -0
- package/src/dashboard/dashboard-core/dashboard-core.service.spec.ts +193 -0
- package/src/file/image-optimization.service.spec.ts +283 -0
- package/src/file/provider/provider.factory.spec.ts +111 -0
- package/src/install/install.service.spec.ts +139 -0
- package/src/integration/README.md +2 -0
- package/src/integration/services/event-subscriber.registry.spec.ts +143 -0
- package/src/integration/services/inbox.service.spec.ts +183 -0
- package/src/integration/services/integration-link.service.spec.ts +217 -0
- package/src/integration/services/outbox.service.spec.ts +290 -0
- package/src/integration-profile/integration-credential-crypto.service.spec.ts +289 -0
- package/src/integration-profile/integration-profile.secrets.ts +4 -0
- package/src/integration-profile/integration-profile.utils.spec.ts +332 -0
- package/src/integration-profile/integration-profile.utils.ts +14 -1
- package/src/locale/locale.service.spec.ts +78 -0
- package/src/mail/mail.service.spec.ts +257 -0
- package/src/mcp/guards/mcp-auth.guard.spec.ts +87 -0
- package/src/mcp/guards/mcp-permission.guard.spec.ts +64 -0
- package/src/mcp/mcp-api-key.service.spec.ts +125 -0
- package/src/mcp/mcp-registry.service.spec.ts +96 -0
- package/src/mcp/mcp-server.service.spec.ts +187 -0
- package/src/menu/menu.service.spec.ts +76 -0
- package/src/notification/notification.service.spec.ts +297 -0
- package/src/oauth/oauth.controller.ts +53 -10
- package/src/oauth/oauth.module.ts +4 -0
- package/src/oauth/oauth.service.spec.ts +332 -0
- package/src/oauth/oauth.service.ts +156 -1
- package/src/oauth/providers/apple.provider.ts +175 -0
- package/src/oauth/providers/facebook.provider.ts +3 -2
- package/src/oauth/providers/google.provider.ts +3 -2
- package/src/oauth/providers/linkedin.provider.ts +96 -0
- package/src/oauth/providers/microsoft-entra-id.provider.ts +1 -1
- package/src/oauth/providers/microsoft.provider.ts +3 -2
- package/src/pdf/pdf.service.ts +20 -2
- package/src/role/guards/role.guard.spec.ts +157 -0
- package/src/role/role.service.spec.ts +179 -0
- package/src/session/session.service.spec.ts +376 -0
- package/src/setting/setting.service.spec.ts +316 -0
- package/src/setting/setting.service.ts +4 -1
- package/src/task/task.service.spec.ts +47 -0
- package/src/token/token.service.spec.ts +351 -0
- package/src/user/user.service.spec.ts +256 -0
- package/src/utils/locale-context.spec.ts +22 -0
- package/src/utils/webauthn-origin.spec.ts +73 -0
- package/src/webhook-integration/integration-event-catalog.service.spec.ts +149 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integration-profile.secrets.d.ts","sourceRoot":"","sources":["../../src/integration-profile/integration-profile.secrets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"integration-profile.secrets.d.ts","sourceRoot":"","sources":["../../src/integration-profile/integration-profile.secrets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAqC5D,CAAC;AAEF,+DAA+D;AAC/D,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,CAErE"}
|
|
@@ -37,6 +37,10 @@ exports.INTEGRATION_SECRET_KEYS = {
|
|
|
37
37
|
'microsoft-oauth': ['client_secret'],
|
|
38
38
|
'facebook-oauth': ['client_secret'],
|
|
39
39
|
'microsoft-entra-id-oauth': ['client_secret'],
|
|
40
|
+
// Apple has no static client_secret — the private_key signs a short-lived JWT
|
|
41
|
+
// client_secret at request time (see AppleProvider), so private_key is the secret.
|
|
42
|
+
'apple-oauth': ['private_key'],
|
|
43
|
+
'linkedin-oauth': ['client_secret'],
|
|
40
44
|
// Pagamento
|
|
41
45
|
stripe: ['secret_key', 'webhook_secret'],
|
|
42
46
|
mercado_pago: ['access_token', 'webhook_secret'],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integration-profile.secrets.js","sourceRoot":"","sources":["../../src/integration-profile/integration-profile.secrets.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"integration-profile.secrets.js","sourceRoot":"","sources":["../../src/integration-profile/integration-profile.secrets.ts"],"names":[],"mappings":";;;AAoDA,wDAEC;AAtDD;;;;;;;;;;;GAWG;AACU,QAAA,uBAAuB,GAA6B;IAC/D,QAAQ;IACR,IAAI,EAAE,CAAC,UAAU,CAAC;IAClB,KAAK,EAAE,CAAC,eAAe,EAAE,eAAe,CAAC;IACzC,GAAG,EAAE,CAAC,mBAAmB,CAAC;IAC1B,aAAa;IACb,eAAe,EAAE,CAAC,OAAO,CAAC;IAC1B,mBAAmB,EAAE,CAAC,cAAc,CAAC;IACrC,UAAU;IACV,EAAE,EAAE,CAAC,mBAAmB,CAAC;IACzB,GAAG,EAAE,CAAC,eAAe,CAAC;IACtB,YAAY,EAAE,CAAC,KAAK,CAAC;IACrB,eAAe,EAAE,CAAC,mBAAmB,CAAC;IACtC,KAAK;IACL,MAAM,EAAE,CAAC,SAAS,CAAC;IACnB,MAAM,EAAE,CAAC,SAAS,CAAC;IACnB,MAAM,EAAE,CAAC,SAAS,CAAC;IACnB,QAAQ;IACR,cAAc,EAAE,CAAC,eAAe,CAAC;IACjC,cAAc,EAAE,CAAC,eAAe,CAAC;IACjC,iBAAiB,EAAE,CAAC,eAAe,CAAC;IACpC,gBAAgB,EAAE,CAAC,eAAe,CAAC;IACnC,0BAA0B,EAAE,CAAC,eAAe,CAAC;IAC7C,8EAA8E;IAC9E,mFAAmF;IACnF,aAAa,EAAE,CAAC,aAAa,CAAC;IAC9B,gBAAgB,EAAE,CAAC,eAAe,CAAC;IACnC,YAAY;IACZ,MAAM,EAAE,CAAC,YAAY,EAAE,gBAAgB,CAAC;IACxC,YAAY,EAAE,CAAC,cAAc,EAAE,gBAAgB,CAAC;IAChD,UAAU;IACV,SAAS,EAAE,CAAC,YAAY,CAAC;IACzB,sBAAsB,EAAE,CAAC,YAAY,CAAC;IACtC,MAAM,EAAE,CAAC,UAAU,CAAC;IACpB,+BAA+B;IAC/B,YAAY,EAAE,CAAC,WAAW,CAAC;IAC3B,UAAU,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC;CACjC,CAAC;AAEF,+DAA+D;AAC/D,SAAgB,sBAAsB,CAAC,YAAoB;;IACzD,OAAO,MAAA,+BAAuB,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,mCAAI,EAAE,CAAC;AACnE,CAAC"}
|
|
@@ -21,6 +21,12 @@ export declare function buildOAuthConfigFromIntegration(_providerSlug: string, c
|
|
|
21
21
|
clientId: string;
|
|
22
22
|
clientSecret: string;
|
|
23
23
|
tenantId?: string;
|
|
24
|
+
/** Apple Developer Team ID (Sign in with Apple). */
|
|
25
|
+
teamId?: string;
|
|
26
|
+
/** Key ID of the .p8 private key registered for Sign in with Apple. */
|
|
27
|
+
keyId?: string;
|
|
28
|
+
/** EC private key (PEM, .p8 contents) used to sign Apple's client_secret JWT. */
|
|
29
|
+
privateKey?: string;
|
|
24
30
|
};
|
|
25
31
|
export type DigitalOceanConfig = {
|
|
26
32
|
apiToken: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integration-profile.utils.d.ts","sourceRoot":"","sources":["../../src/integration-profile/integration-profile.utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAI9D,wBAAgB,8BAA8B,CAC5C,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,OAAO,GACd,GAAG,CAmCL;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAKtD;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAMrE;AAID;;;;;;;;GAQG;AACH,wBAAgB,iCAAiC,CAC/C,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,OAAO,GACd,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAqCxB;AAED,sDAAsD;AACtD,wBAAgB,0BAA0B,CAAC,YAAY,EAAE,MAAM,GAAG,YAAY,CAU7E;AAED,kFAAkF;AAClF,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAMpE;AAMD,2EAA2E;AAC3E,wBAAgB,+BAA+B,CAC7C,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,OAAO,GACd;
|
|
1
|
+
{"version":3,"file":"integration-profile.utils.d.ts","sourceRoot":"","sources":["../../src/integration-profile/integration-profile.utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAI9D,wBAAgB,8BAA8B,CAC5C,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,OAAO,GACd,GAAG,CAmCL;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAKtD;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAMrE;AAID;;;;;;;;GAQG;AACH,wBAAgB,iCAAiC,CAC/C,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,OAAO,GACd,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAqCxB;AAED,sDAAsD;AACtD,wBAAgB,0BAA0B,CAAC,YAAY,EAAE,MAAM,GAAG,YAAY,CAU7E;AAED,kFAAkF;AAClF,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAMpE;AAMD,2EAA2E;AAC3E,wBAAgB,+BAA+B,CAC7C,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,OAAO,GACd;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAUA;AAID,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,2FAA2F;AAC3F,wBAAgB,sCAAsC,CACpD,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,OAAO,GACd,kBAAkB,CAcpB;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,6FAA6F;AAC7F,wBAAgB,oCAAoC,CAClD,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,OAAO,GACd,gBAAgB,CAalB;AAID,sGAAsG;AACtG,wBAAgB,4BAA4B,CAC1C,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,OAAO,GACd;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,CAc3C"}
|
|
@@ -138,7 +138,7 @@ function resolveFileProviderSlug(providerSlug) {
|
|
|
138
138
|
function buildOAuthConfigFromIntegration(_providerSlug, config) {
|
|
139
139
|
var _a, _b, _c;
|
|
140
140
|
const cfg = (_a = config) !== null && _a !== void 0 ? _a : {};
|
|
141
|
-
return Object.assign({ clientId: String((_b = cfg.client_id) !== null && _b !== void 0 ? _b : ''), clientSecret: String((_c = cfg.client_secret) !== null && _c !== void 0 ? _c : '') }, (cfg.tenant_id ? { tenantId: String(cfg.tenant_id) } : {}));
|
|
141
|
+
return Object.assign(Object.assign(Object.assign(Object.assign({ clientId: String((_b = cfg.client_id) !== null && _b !== void 0 ? _b : ''), clientSecret: String((_c = cfg.client_secret) !== null && _c !== void 0 ? _c : '') }, (cfg.tenant_id ? { tenantId: String(cfg.tenant_id) } : {})), (cfg.team_id ? { teamId: String(cfg.team_id) } : {})), (cfg.key_id ? { keyId: String(cfg.key_id) } : {})), (cfg.private_key ? { privateKey: String(cfg.private_key) } : {}));
|
|
142
142
|
}
|
|
143
143
|
/** Maps an integration_profile config JSON to the DigitalOcean API credentials/targets. */
|
|
144
144
|
function buildDigitalOceanConfigFromIntegration(providerSlug, config) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integration-profile.utils.js","sourceRoot":"","sources":["../../src/integration-profile/integration-profile.utils.ts"],"names":[],"mappings":";;AAKA,wEAsCC;AAED,wCAKC;AAED,8CAMC;AAaD,8EAwCC;AAGD,gEAUC;AAGD,0DAMC;AAOD,
|
|
1
|
+
{"version":3,"file":"integration-profile.utils.js","sourceRoot":"","sources":["../../src/integration-profile/integration-profile.utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,12 +7,20 @@ export declare class OAuthController {
|
|
|
7
7
|
constructor(service: OAuthService, settingService: SettingService);
|
|
8
8
|
private logOAuthRequest;
|
|
9
9
|
githubCallback(code: string, state: string, res: any): Promise<any>;
|
|
10
|
-
|
|
10
|
+
/**
|
|
11
|
+
* Apple mandates `response_mode=form_post` whenever `scope` is requested, so it
|
|
12
|
+
* POSTs `code`/`state` to the single registered "Return URL" instead of a GET
|
|
13
|
+
* redirect. This bounces it back to a GET, mirroring the GitHub callback above,
|
|
14
|
+
* so the rest of the pipeline (hub forwarding, code exchange) stays identical
|
|
15
|
+
* across every provider.
|
|
16
|
+
*/
|
|
17
|
+
appleCallback(code: string, state: string, res: any): Promise<any>;
|
|
18
|
+
login(origin: string, referer: string, host: string, provider: string, redirectApp: string, res: any): Promise<any>;
|
|
11
19
|
mobileAuthUrl(provider: string, redirectUri: string): Promise<{
|
|
12
20
|
authUrl: string;
|
|
13
21
|
}>;
|
|
14
|
-
register(provider: string, res: any): Promise<any>;
|
|
15
|
-
connect(provider: string, res: any): Promise<any>;
|
|
22
|
+
register(provider: string, redirectApp: string, res: any): Promise<any>;
|
|
23
|
+
connect(provider: string, redirectApp: string, res: any): Promise<any>;
|
|
16
24
|
callbackLogin(locale: string, ipAddress: string, userAgent: string, origin: string, referer: string, host: string, forwardedHost: string, provider: string, code: string, state: string, redirectUri: string, res: any): Promise<{
|
|
17
25
|
accessToken: string;
|
|
18
26
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth.controller.d.ts","sourceRoot":"","sources":["../../src/oauth/oauth.controller.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"oauth.controller.d.ts","sourceRoot":"","sources":["../../src/oauth/oauth.controller.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,qBACa,eAAe;IAGd,OAAO,CAAC,QAAQ,CAAC,OAAO;IAAgB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAFnF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoC;gBAE9B,OAAO,EAAE,YAAY,EAAmB,cAAc,EAAE,cAAc;IAEnG,OAAO,CAAC,eAAe;IAkCjB,cAAc,CACH,IAAI,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACtB,GAAG,KAAA;IAaZ;;;;;;OAMG;IAGG,aAAa,CACH,IAAI,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACrB,GAAG,KAAA;IAaN,KAAK,CACU,MAAM,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACV,QAAQ,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EAClC,GAAG,KAAA;IAeN,aAAa,CACE,QAAQ,EAAE,MAAM,EACb,WAAW,EAAE,MAAM;;;IAarC,QAAQ,CACO,QAAQ,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EAClC,GAAG,KAAA;IAaN,OAAO,CACQ,QAAQ,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EAClC,GAAG,KAAA;IAaN,aAAa,CACP,MAAM,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACA,SAAS,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACA,aAAa,EAAE,MAAM,EAC/B,QAAQ,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACP,WAAW,EAAE,MAAM,EACb,GAAG,KAAA;;;IA+B3B,gBAAgB,CACV,MAAM,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACA,SAAS,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,EACC,GAAG,KAAA;;;IAO3B,eAAe,CACT,MAAM,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACA,SAAS,EAAE,MAAM,EAChC,EAAE,EAAE,EAAE;;KAAA,EACK,QAAQ,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,EACC,GAAG,KAAA;;;IAO3B,UAAU,CACJ,MAAM,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACA,SAAS,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACA,GAAG,KAAA;;;CAIlC"}
|
|
@@ -35,26 +35,49 @@ let OAuthController = OAuthController_1 = class OAuthController {
|
|
|
35
35
|
this.logger.log(`OAuth ${action}: provider=${provider} locale=${locale !== null && locale !== void 0 ? locale : 'n/a'} origin=${origin !== null && origin !== void 0 ? origin : 'n/a'} referer=${referer !== null && referer !== void 0 ? referer : 'n/a'} host=${host !== null && host !== void 0 ? host : 'n/a'} ip=${ipAddress !== null && ipAddress !== void 0 ? ipAddress : 'n/a'} hasCode=${code ? 'yes' : 'no'} codeLength=${(_a = code === null || code === void 0 ? void 0 : code.length) !== null && _a !== void 0 ? _a : 0} userAgent="${summarizedUserAgent}"`);
|
|
36
36
|
}
|
|
37
37
|
async githubCallback(code, state, res) {
|
|
38
|
-
|
|
38
|
+
var _a;
|
|
39
|
+
const forward = await this.service.resolveWebForward(state);
|
|
40
|
+
const type = (_a = forward === null || forward === void 0 ? void 0 : forward.flow) !== null && _a !== void 0 ? _a : (state || 'login');
|
|
41
|
+
const { url: frontendURL = '' } = await this.settingService.getSettingValues(['url']);
|
|
42
|
+
const base = (forward === null || forward === void 0 ? void 0 : forward.origin) || frontendURL;
|
|
43
|
+
// Preserve the signed state on web-hub flows so the initiating app's callback
|
|
44
|
+
// can pass it back for origin binding at the code exchange.
|
|
45
|
+
const stateParam = forward ? `&state=${encodeURIComponent(state)}` : '';
|
|
46
|
+
const redirectURL = `${base}/callback/github/${type}?code=${encodeURIComponent(code)}${stateParam}`;
|
|
47
|
+
return res.redirect(redirectURL);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Apple mandates `response_mode=form_post` whenever `scope` is requested, so it
|
|
51
|
+
* POSTs `code`/`state` to the single registered "Return URL" instead of a GET
|
|
52
|
+
* redirect. This bounces it back to a GET, mirroring the GitHub callback above,
|
|
53
|
+
* so the rest of the pipeline (hub forwarding, code exchange) stays identical
|
|
54
|
+
* across every provider.
|
|
55
|
+
*/
|
|
56
|
+
async appleCallback(code, state, res) {
|
|
57
|
+
var _a;
|
|
58
|
+
const forward = await this.service.resolveWebForward(state);
|
|
59
|
+
const type = (_a = forward === null || forward === void 0 ? void 0 : forward.flow) !== null && _a !== void 0 ? _a : (state || 'login');
|
|
39
60
|
const { url: frontendURL = '' } = await this.settingService.getSettingValues(['url']);
|
|
40
|
-
const
|
|
61
|
+
const base = (forward === null || forward === void 0 ? void 0 : forward.origin) || frontendURL;
|
|
62
|
+
const stateParam = forward ? `&state=${encodeURIComponent(state)}` : '';
|
|
63
|
+
const redirectURL = `${base}/callback/apple/${type}?code=${encodeURIComponent(code)}${stateParam}`;
|
|
41
64
|
return res.redirect(redirectURL);
|
|
42
65
|
}
|
|
43
|
-
async login(origin, referer, host, provider, res) {
|
|
66
|
+
async login(origin, referer, host, provider, redirectApp, res) {
|
|
44
67
|
this.logOAuthRequest('login-init', provider, { origin, referer, host });
|
|
45
|
-
const url = await this.service.
|
|
68
|
+
const url = await this.service.getWebAuthUrl(provider, 'login', redirectApp);
|
|
46
69
|
return res.redirect(url);
|
|
47
70
|
}
|
|
48
71
|
async mobileAuthUrl(provider, redirectUri) {
|
|
49
72
|
const authUrl = await this.service.getMobileAuthUrl(provider, redirectUri);
|
|
50
73
|
return { authUrl };
|
|
51
74
|
}
|
|
52
|
-
async register(provider, res) {
|
|
53
|
-
const url = await this.service.
|
|
75
|
+
async register(provider, redirectApp, res) {
|
|
76
|
+
const url = await this.service.getWebAuthUrl(provider, 'register', redirectApp);
|
|
54
77
|
return res.redirect(url);
|
|
55
78
|
}
|
|
56
|
-
async connect(provider, res) {
|
|
57
|
-
const url = await this.service.
|
|
79
|
+
async connect(provider, redirectApp, res) {
|
|
80
|
+
const url = await this.service.getWebAuthUrl(provider, 'connect', redirectApp);
|
|
58
81
|
return res.redirect(url);
|
|
59
82
|
}
|
|
60
83
|
async callbackLogin(locale, ipAddress, userAgent, origin, referer, host, forwardedHost, provider, code, state, redirectUri, res) {
|
|
@@ -78,6 +101,8 @@ let OAuthController = OAuthController_1 = class OAuthController {
|
|
|
78
101
|
type: 'login',
|
|
79
102
|
redirectUri,
|
|
80
103
|
includeRefreshTokenInBody: Boolean(redirectUri),
|
|
104
|
+
requestOrigin: origin,
|
|
105
|
+
requestReferer: referer,
|
|
81
106
|
});
|
|
82
107
|
}
|
|
83
108
|
async callbackRegister(locale, ipAddress, userAgent, provider, code, res) {
|
|
@@ -101,6 +126,16 @@ __decorate([
|
|
|
101
126
|
__metadata("design:paramtypes", [String, String, Object]),
|
|
102
127
|
__metadata("design:returntype", Promise)
|
|
103
128
|
], OAuthController.prototype, "githubCallback", null);
|
|
129
|
+
__decorate([
|
|
130
|
+
(0, api_1.Public)(),
|
|
131
|
+
(0, common_1.Post)('apple/callback'),
|
|
132
|
+
__param(0, (0, common_1.Body)('code')),
|
|
133
|
+
__param(1, (0, common_1.Body)('state')),
|
|
134
|
+
__param(2, (0, common_1.Res)()),
|
|
135
|
+
__metadata("design:type", Function),
|
|
136
|
+
__metadata("design:paramtypes", [String, String, Object]),
|
|
137
|
+
__metadata("design:returntype", Promise)
|
|
138
|
+
], OAuthController.prototype, "appleCallback", null);
|
|
104
139
|
__decorate([
|
|
105
140
|
(0, api_1.Public)(),
|
|
106
141
|
(0, common_1.Get)(':provider/login'),
|
|
@@ -108,9 +143,10 @@ __decorate([
|
|
|
108
143
|
__param(1, (0, common_1.Headers)('referer')),
|
|
109
144
|
__param(2, (0, common_1.Headers)('host')),
|
|
110
145
|
__param(3, (0, common_1.Param)('provider')),
|
|
111
|
-
__param(4, (0, common_1.
|
|
146
|
+
__param(4, (0, common_1.Query)('redirectApp')),
|
|
147
|
+
__param(5, (0, common_1.Res)()),
|
|
112
148
|
__metadata("design:type", Function),
|
|
113
|
-
__metadata("design:paramtypes", [String, String, String, String, Object]),
|
|
149
|
+
__metadata("design:paramtypes", [String, String, String, String, String, Object]),
|
|
114
150
|
__metadata("design:returntype", Promise)
|
|
115
151
|
], OAuthController.prototype, "login", null);
|
|
116
152
|
__decorate([
|
|
@@ -126,18 +162,20 @@ __decorate([
|
|
|
126
162
|
(0, api_1.Public)(),
|
|
127
163
|
(0, common_1.Get)(':provider/register'),
|
|
128
164
|
__param(0, (0, common_1.Param)('provider')),
|
|
129
|
-
__param(1, (0, common_1.
|
|
165
|
+
__param(1, (0, common_1.Query)('redirectApp')),
|
|
166
|
+
__param(2, (0, common_1.Res)()),
|
|
130
167
|
__metadata("design:type", Function),
|
|
131
|
-
__metadata("design:paramtypes", [String, Object]),
|
|
168
|
+
__metadata("design:paramtypes", [String, String, Object]),
|
|
132
169
|
__metadata("design:returntype", Promise)
|
|
133
170
|
], OAuthController.prototype, "register", null);
|
|
134
171
|
__decorate([
|
|
135
172
|
(0, api_1.Public)(),
|
|
136
173
|
(0, common_1.Get)(':provider/connect'),
|
|
137
174
|
__param(0, (0, common_1.Param)('provider')),
|
|
138
|
-
__param(1, (0, common_1.
|
|
175
|
+
__param(1, (0, common_1.Query)('redirectApp')),
|
|
176
|
+
__param(2, (0, common_1.Res)()),
|
|
139
177
|
__metadata("design:type", Function),
|
|
140
|
-
__metadata("design:paramtypes", [String, Object]),
|
|
178
|
+
__metadata("design:paramtypes", [String, String, Object]),
|
|
141
179
|
__metadata("design:returntype", Promise)
|
|
142
180
|
], OAuthController.prototype, "connect", null);
|
|
143
181
|
__decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth.controller.js","sourceRoot":"","sources":["../../src/oauth/oauth.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AACA,sCAA4C;AAC5C,oDAA6C;AAE7C,
|
|
1
|
+
{"version":3,"file":"oauth.controller.js","sourceRoot":"","sources":["../../src/oauth/oauth.controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth.module.d.ts","sourceRoot":"","sources":["../../src/oauth/oauth.module.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"oauth.module.d.ts","sourceRoot":"","sources":["../../src/oauth/oauth.module.ts"],"names":[],"mappings":"AAsBA,qBA2Ba,WAAW;CAAG"}
|
|
@@ -21,9 +21,11 @@ const user_module_1 = require("../user/user.module");
|
|
|
21
21
|
const oauth_callback_coordinator_service_1 = require("./oauth-callback-coordinator.service");
|
|
22
22
|
const oauth_controller_1 = require("./oauth.controller");
|
|
23
23
|
const oauth_service_1 = require("./oauth.service");
|
|
24
|
+
const apple_provider_1 = require("./providers/apple.provider");
|
|
24
25
|
const facebook_provider_1 = require("./providers/facebook.provider");
|
|
25
26
|
const github_provider_1 = require("./providers/github.provider");
|
|
26
27
|
const google_provider_1 = require("./providers/google.provider");
|
|
28
|
+
const linkedin_provider_1 = require("./providers/linkedin.provider");
|
|
27
29
|
const microsoft_entra_id_provider_1 = require("./providers/microsoft-entra-id.provider");
|
|
28
30
|
const microsoft_provider_1 = require("./providers/microsoft.provider");
|
|
29
31
|
let OAuthModule = class OAuthModule {
|
|
@@ -52,6 +54,8 @@ exports.OAuthModule = OAuthModule = __decorate([
|
|
|
52
54
|
github_provider_1.GithubProvider,
|
|
53
55
|
microsoft_provider_1.MicrosoftProvider,
|
|
54
56
|
microsoft_entra_id_provider_1.MicrosoftEntraIdProvider,
|
|
57
|
+
apple_provider_1.AppleProvider,
|
|
58
|
+
linkedin_provider_1.LinkedinProvider,
|
|
55
59
|
],
|
|
56
60
|
exports: [oauth_service_1.OAuthService],
|
|
57
61
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth.module.js","sourceRoot":"","sources":["../../src/oauth/oauth.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,gDAAiE;AACjE,oDAAmD;AACnD,yCAA2C;AAC3C,2CAAoD;AACpD,2CAA8C;AAC9C,qDAAiD;AACjD,qDAAiD;AACjD,qDAAiD;AACjD,iEAA6D;AAC7D,wDAAoD;AACpD,qDAAiD;AACjD,6FAAuF;AACvF,yDAAqD;AACrD,mDAA+C;AAC/C,qEAAiE;AACjE,iEAA6D;AAC7D,iEAA6D;AAC7D,yFAAmF;AACnF,uEAAmE;
|
|
1
|
+
{"version":3,"file":"oauth.module.js","sourceRoot":"","sources":["../../src/oauth/oauth.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,gDAAiE;AACjE,oDAAmD;AACnD,yCAA2C;AAC3C,2CAAoD;AACpD,2CAA8C;AAC9C,qDAAiD;AACjD,qDAAiD;AACjD,qDAAiD;AACjD,iEAA6D;AAC7D,wDAAoD;AACpD,qDAAiD;AACjD,6FAAuF;AACvF,yDAAqD;AACrD,mDAA+C;AAC/C,+DAA2D;AAC3D,qEAAiE;AACjE,iEAA6D;AAC7D,iEAA6D;AAC7D,qEAAiE;AACjE,yFAAmF;AACnF,uEAAmE;AA6B5D,IAAM,WAAW,GAAjB,MAAM,WAAW;CAAG,CAAA;AAAd,kCAAW;sBAAX,WAAW;IA3BvB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,kBAAU,CAAC;YAC5B,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,yBAAY,CAAC;YAC9B,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,qBAAc,CAAC;YAChC,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,qBAAY,CAAC;YAC9B,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,wBAAU,CAAC;YAC5B,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,wBAAU,CAAC;YAC5B,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,gCAAc,CAAC;YAChC,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,0BAAW,CAAC;YAC7B,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,wBAAU,CAAC;YAC5B,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,wBAAU,CAAC;SAC7B;QACD,WAAW,EAAE,CAAC,kCAAe,CAAC;QAC9B,SAAS,EAAE;YACT,oEAA+B;YAC/B,4BAAY;YACZ,gCAAc;YACd,oCAAgB;YAChB,gCAAc;YACd,sCAAiB;YACjB,sDAAwB;YACxB,8BAAa;YACb,oCAAgB;SACjB;QACD,OAAO,EAAE,CAAC,4BAAY,CAAC;KACxB,CAAC;GACW,WAAW,CAAG"}
|
|
@@ -7,9 +7,11 @@ import { SettingService } from '../setting/setting.service';
|
|
|
7
7
|
import { TokenService } from '../token/token.service';
|
|
8
8
|
import { UserService } from '../user/user.service';
|
|
9
9
|
import { OAuthCallbackCoordinatorService } from './oauth-callback-coordinator.service';
|
|
10
|
+
import { AppleProvider } from './providers/apple.provider';
|
|
10
11
|
import { FacebookProvider } from './providers/facebook.provider';
|
|
11
12
|
import { GithubProvider } from './providers/github.provider';
|
|
12
13
|
import { GoogleProvider } from './providers/google.provider';
|
|
14
|
+
import { LinkedinProvider } from './providers/linkedin.provider';
|
|
13
15
|
import { MicrosoftEntraIdProvider } from './providers/microsoft-entra-id.provider';
|
|
14
16
|
import { MicrosoftProvider } from './providers/microsoft.provider';
|
|
15
17
|
type HandleCallbackProps = {
|
|
@@ -25,6 +27,10 @@ type HandleCallbackProps = {
|
|
|
25
27
|
redirectUri?: string;
|
|
26
28
|
state?: string;
|
|
27
29
|
includeRefreshTokenInBody?: boolean;
|
|
30
|
+
/** Origin header of the request that hit the callback (used to bind web hub flows). */
|
|
31
|
+
requestOrigin?: string;
|
|
32
|
+
/** Referer header, used as a fallback when the Origin header is absent. */
|
|
33
|
+
requestReferer?: string;
|
|
28
34
|
};
|
|
29
35
|
export declare class OAuthService {
|
|
30
36
|
private readonly callbackCoordinator;
|
|
@@ -39,10 +45,40 @@ export declare class OAuthService {
|
|
|
39
45
|
private readonly logger;
|
|
40
46
|
private providers;
|
|
41
47
|
private readonly mobileOAuthStateTtlMs;
|
|
42
|
-
|
|
48
|
+
/** Sentinel app in the web state meaning "the OAuth hub handles this locally". */
|
|
49
|
+
private static readonly WEB_STATE_SELF_APP;
|
|
50
|
+
constructor(google: GoogleProvider, facebook: FacebookProvider, microsoft: MicrosoftProvider, github: GithubProvider, microsoftEntraId: MicrosoftEntraIdProvider, apple: AppleProvider, linkedin: LinkedinProvider, callbackCoordinator: OAuthCallbackCoordinatorService, auth: AuthService, file: FileService, mail: MailService, security: SecurityService, prisma: PrismaService, token: TokenService, setting: SettingService, user: UserService);
|
|
43
51
|
getAuthUrl(provider: user_account_provider_52222e2ecb_enum, callbackPath: string): Promise<string>;
|
|
44
52
|
getMobileAuthUrl(provider: user_account_provider_52222e2ecb_enum, redirectUri: string): Promise<string>;
|
|
45
|
-
|
|
53
|
+
/**
|
|
54
|
+
* Builds a provider auth URL for a browser (web) flow that may be initiated by an
|
|
55
|
+
* app other than the OAuth hub (the app configured in the `url` setting).
|
|
56
|
+
*
|
|
57
|
+
* When `redirectApp` resolves to a known origin (via the `app-urls` setting), a
|
|
58
|
+
* signed `state` (`hhweb.<app>.<flow>.<sig>`) is attached so the hub can forward
|
|
59
|
+
* the callback back to the initiating app and the backend can bind the code
|
|
60
|
+
* exchange to that origin. Without a resolvable `redirectApp`, the URL is returned
|
|
61
|
+
* unchanged — identical to the legacy hub-only behavior.
|
|
62
|
+
*/
|
|
63
|
+
getWebAuthUrl(provider: user_account_provider_52222e2ecb_enum, flow: 'login' | 'register' | 'connect', redirectApp?: string): Promise<string>;
|
|
64
|
+
/**
|
|
65
|
+
* Resolves how the GitHub backend bounce should forward the browser. GitHub only
|
|
66
|
+
* supports a single registered callback URL (the API), so the provider always
|
|
67
|
+
* lands on the backend; this maps the signed web state to the initiating app's
|
|
68
|
+
* origin. Returns null for legacy hub-only flows (state carries just the flow).
|
|
69
|
+
*/
|
|
70
|
+
resolveWebForward(state?: string): Promise<{
|
|
71
|
+
origin: string | null;
|
|
72
|
+
flow: 'login' | 'register' | 'connect';
|
|
73
|
+
} | null>;
|
|
74
|
+
private sanitizeAppKey;
|
|
75
|
+
private buildWebState;
|
|
76
|
+
/** Parses and verifies a signed web-hub state. Returns null when invalid. */
|
|
77
|
+
private parseWebState;
|
|
78
|
+
/** Resolves an app key to its configured base origin via the `app-urls` setting. */
|
|
79
|
+
private resolveAppOrigin;
|
|
80
|
+
private normalizeOrigin;
|
|
81
|
+
handleCallback({ res, locale, ipAddress, userAgent, provider, code, type, userId, email, redirectUri, state, includeRefreshTokenInBody, requestOrigin, requestReferer, }: HandleCallbackProps): Promise<{
|
|
46
82
|
accessToken: string;
|
|
47
83
|
}>;
|
|
48
84
|
private getProvider;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth.service.d.ts","sourceRoot":"","sources":["../../src/oauth/oauth.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,aAAa,EAAE,qCAAqC,EAAE,MAAM,qBAAqB,CAAC;AAWnG,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,EAAE,+BAA+B,EAAE,MAAM,sCAAsC,CAAC;AAMvF,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,yCAAyC,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,KAAK,mBAAmB,GAAG;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,QAAQ,CAAC;IACd,QAAQ,EAAE,qCAAqC,CAAC;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,YAAY,CAAC;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yBAAyB,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"oauth.service.d.ts","sourceRoot":"","sources":["../../src/oauth/oauth.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,13 +27,15 @@ const user_constants_1 = require("../user/constants/user.constants");
|
|
|
27
27
|
const user_service_1 = require("../user/user.service");
|
|
28
28
|
const oauth_callback_coordinator_service_1 = require("./oauth-callback-coordinator.service");
|
|
29
29
|
const oauth_errors_1 = require("./oauth.errors");
|
|
30
|
+
const apple_provider_1 = require("./providers/apple.provider");
|
|
30
31
|
const facebook_provider_1 = require("./providers/facebook.provider");
|
|
31
32
|
const github_provider_1 = require("./providers/github.provider");
|
|
32
33
|
const google_provider_1 = require("./providers/google.provider");
|
|
34
|
+
const linkedin_provider_1 = require("./providers/linkedin.provider");
|
|
33
35
|
const microsoft_entra_id_provider_1 = require("./providers/microsoft-entra-id.provider");
|
|
34
36
|
const microsoft_provider_1 = require("./providers/microsoft.provider");
|
|
35
37
|
let OAuthService = OAuthService_1 = class OAuthService {
|
|
36
|
-
constructor(google, facebook, microsoft, github, microsoftEntraId, callbackCoordinator, auth, file, mail, security, prisma, token, setting, user) {
|
|
38
|
+
constructor(google, facebook, microsoft, github, microsoftEntraId, apple, linkedin, callbackCoordinator, auth, file, mail, security, prisma, token, setting, user) {
|
|
37
39
|
this.callbackCoordinator = callbackCoordinator;
|
|
38
40
|
this.auth = auth;
|
|
39
41
|
this.file = file;
|
|
@@ -51,6 +53,8 @@ let OAuthService = OAuthService_1 = class OAuthService {
|
|
|
51
53
|
this.providers.set(microsoft.getProviderType(), microsoft);
|
|
52
54
|
this.providers.set(github.getProviderType(), github);
|
|
53
55
|
this.providers.set(microsoftEntraId.getProviderType(), microsoftEntraId);
|
|
56
|
+
this.providers.set(apple.getProviderType(), apple);
|
|
57
|
+
this.providers.set(linkedin.getProviderType(), linkedin);
|
|
54
58
|
}
|
|
55
59
|
async getAuthUrl(provider, callbackPath) {
|
|
56
60
|
const enabled = await this.isProviderEnabled(provider);
|
|
@@ -64,7 +68,9 @@ let OAuthService = OAuthService_1 = class OAuthService {
|
|
|
64
68
|
if (!/^[a-z][a-z\d+.-]*:/i.test(sanitizedRedirectUri)) {
|
|
65
69
|
throw new common_1.BadRequestException('Invalid mobile redirect URI.');
|
|
66
70
|
}
|
|
67
|
-
|
|
71
|
+
// Flow-less callback to match the single registered redirect URI and the
|
|
72
|
+
// flow-less token exchange in each provider's getProfile.
|
|
73
|
+
const callbackPath = `/callback/${String(provider)}`;
|
|
68
74
|
const authUrl = await this.getAuthUrl(provider, callbackPath);
|
|
69
75
|
const flow = 'login';
|
|
70
76
|
const { token, signature } = await this.issueMobileState(provider, sanitizedRedirectUri, flow);
|
|
@@ -72,8 +78,96 @@ let OAuthService = OAuthService_1 = class OAuthService {
|
|
|
72
78
|
url.searchParams.set('state', `hhmob.${token}.${signature}.${flow}`);
|
|
73
79
|
return url.toString();
|
|
74
80
|
}
|
|
75
|
-
|
|
81
|
+
/**
|
|
82
|
+
* Builds a provider auth URL for a browser (web) flow that may be initiated by an
|
|
83
|
+
* app other than the OAuth hub (the app configured in the `url` setting).
|
|
84
|
+
*
|
|
85
|
+
* When `redirectApp` resolves to a known origin (via the `app-urls` setting), a
|
|
86
|
+
* signed `state` (`hhweb.<app>.<flow>.<sig>`) is attached so the hub can forward
|
|
87
|
+
* the callback back to the initiating app and the backend can bind the code
|
|
88
|
+
* exchange to that origin. Without a resolvable `redirectApp`, the URL is returned
|
|
89
|
+
* unchanged — identical to the legacy hub-only behavior.
|
|
90
|
+
*/
|
|
91
|
+
async getWebAuthUrl(provider, flow, redirectApp) {
|
|
76
92
|
var _a;
|
|
93
|
+
// Single, flow-less callback per provider: the flow (and the initiating app)
|
|
94
|
+
// travel in the signed state, so only ONE redirect URI needs to be registered
|
|
95
|
+
// per provider in its OAuth console.
|
|
96
|
+
const callbackPath = `/callback/${String(provider)}`;
|
|
97
|
+
const authUrl = await this.getAuthUrl(provider, callbackPath);
|
|
98
|
+
// Always carry the flow. `self` means "the hub handles it locally"; a resolvable
|
|
99
|
+
// app key means the hub forwards the callback back to that app (origin-bound).
|
|
100
|
+
const app = (_a = this.sanitizeAppKey(redirectApp)) !== null && _a !== void 0 ? _a : OAuthService_1.WEB_STATE_SELF_APP;
|
|
101
|
+
const url = new URL(authUrl);
|
|
102
|
+
url.searchParams.set('state', this.buildWebState(app, flow));
|
|
103
|
+
return url.toString();
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Resolves how the GitHub backend bounce should forward the browser. GitHub only
|
|
107
|
+
* supports a single registered callback URL (the API), so the provider always
|
|
108
|
+
* lands on the backend; this maps the signed web state to the initiating app's
|
|
109
|
+
* origin. Returns null for legacy hub-only flows (state carries just the flow).
|
|
110
|
+
*/
|
|
111
|
+
async resolveWebForward(state) {
|
|
112
|
+
const web = this.parseWebState(state);
|
|
113
|
+
if (!web) {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
return { origin: await this.resolveAppOrigin(web.app), flow: web.flow };
|
|
117
|
+
}
|
|
118
|
+
sanitizeAppKey(app) {
|
|
119
|
+
const value = String(app !== null && app !== void 0 ? app : '').trim().toLowerCase();
|
|
120
|
+
return /^[a-z0-9][a-z0-9_-]{0,63}$/.test(value) ? value : null;
|
|
121
|
+
}
|
|
122
|
+
buildWebState(app, flow) {
|
|
123
|
+
const signature = this.security.signHmacSha256(`oauth-web-state:${app}:${flow}`);
|
|
124
|
+
return `hhweb.${app}.${flow}.${signature}`;
|
|
125
|
+
}
|
|
126
|
+
/** Parses and verifies a signed web-hub state. Returns null when invalid. */
|
|
127
|
+
parseWebState(state) {
|
|
128
|
+
if (!state || !state.startsWith('hhweb.')) {
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
const parts = state.split('.');
|
|
132
|
+
if (parts.length !== 4) {
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
const [, app, flow, signature] = parts;
|
|
136
|
+
if (!app || !flow || !signature) {
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
if (flow !== 'login' && flow !== 'register' && flow !== 'connect') {
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
142
|
+
if (!this.security.verifyHmacSha256(`oauth-web-state:${app}:${flow}`, signature)) {
|
|
143
|
+
return null;
|
|
144
|
+
}
|
|
145
|
+
return { app, flow };
|
|
146
|
+
}
|
|
147
|
+
/** Resolves an app key to its configured base origin via the `app-urls` setting. */
|
|
148
|
+
async resolveAppOrigin(app) {
|
|
149
|
+
const settings = await this.setting.getSettingValues(['app-urls']);
|
|
150
|
+
const appUrls = Array.isArray(settings['app-urls']) ? settings['app-urls'] : [];
|
|
151
|
+
const entry = appUrls.find((item) => { var _a; return ((_a = item.split('=')[0]) === null || _a === void 0 ? void 0 : _a.trim()) === app; });
|
|
152
|
+
if (!entry) {
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
const value = entry.slice(entry.indexOf('=') + 1).trim();
|
|
156
|
+
return value || null;
|
|
157
|
+
}
|
|
158
|
+
normalizeOrigin(value) {
|
|
159
|
+
if (!value) {
|
|
160
|
+
return null;
|
|
161
|
+
}
|
|
162
|
+
try {
|
|
163
|
+
return new URL(value).origin.toLowerCase();
|
|
164
|
+
}
|
|
165
|
+
catch (_a) {
|
|
166
|
+
return null;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
async handleCallback({ res, locale, ipAddress, userAgent, provider, code, type, userId, email, redirectUri, state, includeRefreshTokenInBody, requestOrigin, requestReferer, }) {
|
|
170
|
+
var _a, _b;
|
|
77
171
|
try {
|
|
78
172
|
this.logger.log(`OAuth callback received: provider=${provider} type=${type} locale=${locale} ip=${ipAddress || 'n/a'} hasCode=${code ? 'yes' : 'no'} codeLength=${(_a = code === null || code === void 0 ? void 0 : code.length) !== null && _a !== void 0 ? _a : 0} userAgent="${this.summarizeUserAgent(userAgent)}"`);
|
|
79
173
|
if (type === 'disconnect') {
|
|
@@ -82,6 +176,21 @@ let OAuthService = OAuthService_1 = class OAuthService {
|
|
|
82
176
|
if (!code) {
|
|
83
177
|
throw new common_1.BadRequestException((0, api_locale_1.getLocaleText)('oauth.callback.codeRequired', locale, 'Authorization code is required to complete OAuth authentication.'));
|
|
84
178
|
}
|
|
179
|
+
// Web hub flow: an app other than the OAuth hub started the flow and the hub
|
|
180
|
+
// forwarded the code here. Bind the code exchange to the initiating app's
|
|
181
|
+
// origin so a leaked/forwarded code cannot be redeemed from another origin.
|
|
182
|
+
const webState = this.parseWebState(state);
|
|
183
|
+
if (webState && (type === 'login' || type === 'register')) {
|
|
184
|
+
const expectedOrigin = this.normalizeOrigin(await this.resolveAppOrigin(webState.app));
|
|
185
|
+
// Only bind cross-app forwards (the app resolves to a configured origin).
|
|
186
|
+
// The hub's own flow (app "self") resolves to nothing and runs locally.
|
|
187
|
+
if (expectedOrigin) {
|
|
188
|
+
const boundOrigin = (_b = this.normalizeOrigin(requestOrigin)) !== null && _b !== void 0 ? _b : this.normalizeOrigin(requestReferer);
|
|
189
|
+
if (!boundOrigin || expectedOrigin !== boundOrigin) {
|
|
190
|
+
throw new common_1.BadRequestException((0, api_locale_1.getLocaleText)('oauth.callback.invalidState', locale, 'OAuth callback origin is invalid. Start the sign-in flow again.'));
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
85
194
|
if (redirectUri &&
|
|
86
195
|
!(await this.consumeMobileState(state, provider, redirectUri))) {
|
|
87
196
|
throw new common_1.BadRequestException((0, api_locale_1.getLocaleText)('oauth.callback.invalidState', locale, 'OAuth callback state is invalid or expired. Start the sign-in flow again.'));
|
|
@@ -505,6 +614,8 @@ let OAuthService = OAuthService_1 = class OAuthService {
|
|
|
505
614
|
}
|
|
506
615
|
};
|
|
507
616
|
exports.OAuthService = OAuthService;
|
|
617
|
+
/** Sentinel app in the web state meaning "the OAuth hub handles this locally". */
|
|
618
|
+
OAuthService.WEB_STATE_SELF_APP = 'self';
|
|
508
619
|
OAuthService.PROVIDER_SCOPE_SLUGS = {
|
|
509
620
|
google: 'oauth-google-scopes',
|
|
510
621
|
facebook: 'oauth-facebook-scopes',
|
|
@@ -512,6 +623,8 @@ OAuthService.PROVIDER_SCOPE_SLUGS = {
|
|
|
512
623
|
microsoft: 'oauth-microsoft-scopes',
|
|
513
624
|
'microsoft-entra-id': 'oauth-microsoft-entra-id-scopes',
|
|
514
625
|
microsoft_entra_id: 'oauth-microsoft-entra-id-scopes',
|
|
626
|
+
apple: 'oauth-apple-scopes',
|
|
627
|
+
linkedin: 'oauth-linkedin-scopes',
|
|
515
628
|
};
|
|
516
629
|
OAuthService.PROVIDER_ENABLED_SLUGS = {
|
|
517
630
|
google: 'oauth-google-enabled',
|
|
@@ -520,16 +633,20 @@ OAuthService.PROVIDER_ENABLED_SLUGS = {
|
|
|
520
633
|
microsoft: 'oauth-microsoft-enabled',
|
|
521
634
|
'microsoft-entra-id': 'oauth-microsoft-entra-id-enabled',
|
|
522
635
|
microsoft_entra_id: 'oauth-microsoft-entra-id-enabled',
|
|
636
|
+
apple: 'oauth-apple-enabled',
|
|
637
|
+
linkedin: 'oauth-linkedin-enabled',
|
|
523
638
|
};
|
|
524
639
|
exports.OAuthService = OAuthService = OAuthService_1 = __decorate([
|
|
525
640
|
(0, common_1.Injectable)(),
|
|
526
|
-
__param(
|
|
527
|
-
__param(
|
|
641
|
+
__param(8, (0, common_1.Inject)((0, common_1.forwardRef)(() => auth_service_1.AuthService))),
|
|
642
|
+
__param(15, (0, common_1.Inject)((0, common_1.forwardRef)(() => user_service_1.UserService))),
|
|
528
643
|
__metadata("design:paramtypes", [google_provider_1.GoogleProvider,
|
|
529
644
|
facebook_provider_1.FacebookProvider,
|
|
530
645
|
microsoft_provider_1.MicrosoftProvider,
|
|
531
646
|
github_provider_1.GithubProvider,
|
|
532
647
|
microsoft_entra_id_provider_1.MicrosoftEntraIdProvider,
|
|
648
|
+
apple_provider_1.AppleProvider,
|
|
649
|
+
linkedin_provider_1.LinkedinProvider,
|
|
533
650
|
oauth_callback_coordinator_service_1.OAuthCallbackCoordinatorService,
|
|
534
651
|
auth_service_1.AuthService,
|
|
535
652
|
file_service_1.FileService,
|