@cheqd/studio 3.8.1 → 3.9.0-develop.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/middleware/auth/user-info-fetcher/base.d.ts +1 -0
- package/dist/middleware/auth/user-info-fetcher/base.d.ts.map +1 -1
- package/dist/middleware/auth/user-info-fetcher/base.js +4 -0
- package/dist/middleware/auth/user-info-fetcher/base.js.map +1 -1
- package/dist/middleware/auth/user-info-fetcher/portal-token.d.ts.map +1 -1
- package/dist/middleware/auth/user-info-fetcher/portal-token.js +10 -1
- package/dist/middleware/auth/user-info-fetcher/portal-token.js.map +1 -1
- package/package.json +1 -1
|
@@ -8,6 +8,7 @@ export interface IUserInfoFetcher {
|
|
|
8
8
|
}
|
|
9
9
|
export declare class UserInfoHelper {
|
|
10
10
|
setScopes(scopes: string[], response: Response): void;
|
|
11
|
+
appendScopes(scopes: string[], response: Response): void;
|
|
11
12
|
setCustomerEntity(customerId: string, response: Response): Promise<Response | undefined>;
|
|
12
13
|
setUserEntity(logToId: string, response: Response): Promise<Response | undefined>;
|
|
13
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../src/middleware/auth/user-info-fetcher/base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAK3D,MAAM,WAAW,gBAAgB;IAChC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAChC,KAAK,CACJ,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,cAAc,EAC7B,OAAO,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC;CACjC;AAED,qBAAa,cAAc;IAC1B,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ;
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../src/middleware/auth/user-info-fetcher/base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAK3D,MAAM,WAAW,gBAAgB;IAChC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAChC,KAAK,CACJ,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,cAAc,EAC7B,OAAO,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC;CACjC;AAED,qBAAa,cAAc;IAC1B,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ;IAK9C,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ;IAK3C,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;IAkBxF,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;CAWvF"}
|
|
@@ -6,6 +6,10 @@ export class UserInfoHelper {
|
|
|
6
6
|
response.locals.scopes = scopes;
|
|
7
7
|
return;
|
|
8
8
|
}
|
|
9
|
+
appendScopes(scopes, response) {
|
|
10
|
+
response.locals.scopes = Array.from(new Set([...response.locals.scopes, ...scopes]));
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
9
13
|
async setCustomerEntity(customerId, response) {
|
|
10
14
|
const customerEntity = await CustomerService.instance.get(customerId);
|
|
11
15
|
if (!customerEntity) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../src/middleware/auth/user-info-fetcher/base.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAe5D,MAAM,OAAO,cAAc;IAC1B,SAAS,CAAC,MAAgB,EAAE,QAAkB;QAC7C,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;QAChC,OAAO;IACR,CAAC;
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../src/middleware/auth/user-info-fetcher/base.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAe5D,MAAM,OAAO,cAAc;IAC1B,SAAS,CAAC,MAAgB,EAAE,QAAkB;QAC7C,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;QAChC,OAAO;IACR,CAAC;IAED,YAAY,CAAC,MAAgB,EAAE,QAAkB;QAChD,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACrF,OAAO;IACR,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,UAAkB,EAAE,QAAkB;QAC7D,MAAM,cAAc,GAAG,MAAM,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACtE,IAAI,CAAC,cAAc,EAAE,CAAC;YACrB,OAAO,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC;gBAC9D,KAAK,EAAE,6GAA6G,UAAU,EAAE;aAChI,CAAC,CAAC;QACJ,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAC;QACpF,IAAI,CAAC,UAAU,EAAE,CAAC;YACjB,OAAO,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC;gBAC9D,KAAK,EAAE,yGAAyG,UAAU,EAAE;aAC5H,CAAC,CAAC;QACJ,CAAC;QACD,QAAQ,CAAC,MAAM,CAAC,QAAQ,GAAG,cAAc,CAAC;QAC1C,QAAQ,CAAC,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC;QAClC,OAAO;IACR,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAe,EAAE,QAAkB;QACtD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3E,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACjC,OAAO,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC;gBAC9D,KAAK,EAAE,0FAA0F;aACjG,CAAC,CAAC;QACJ,CAAC;QACD,QAAQ,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC;QAC9B,QAAQ,CAAC,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC3C,OAAO;IACR,CAAC;CACD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"portal-token.d.ts","sourceRoot":"","sources":["../../../../src/middleware/auth/user-info-fetcher/portal-token.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEjD,OAAO,EAAE,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAO3D,qBAAa,qBAAsB,SAAQ,cAAe,YAAW,gBAAgB;IACpF,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAC;IAChB,OAAO,CAAC,aAAa,CAAiB;gBAE1B,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,cAAc;IAOtE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ;IAUhD;;;;;;OAMG;IACU,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ;
|
|
1
|
+
{"version":3,"file":"portal-token.d.ts","sourceRoot":"","sources":["../../../../src/middleware/auth/user-info-fetcher/portal-token.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEjD,OAAO,EAAE,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAO3D,qBAAa,qBAAsB,SAAQ,cAAe,YAAW,gBAAgB;IACpF,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAC;IAChB,OAAO,CAAC,aAAa,CAAiB;gBAE1B,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,cAAc;IAOtE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ;IAUhD;;;;;;OAMG;IACU,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ;IAkClD,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ;CAyBhE"}
|
|
@@ -42,6 +42,15 @@ export class PortalUserInfoFetcher extends UserInfoHelper {
|
|
|
42
42
|
error: `Unauthorized error: No sub found in the token. Cannot set customerId.`,
|
|
43
43
|
});
|
|
44
44
|
}
|
|
45
|
+
// add user scopes
|
|
46
|
+
const _resp = await this.oauthProvider.getUserScopes(payload.sub);
|
|
47
|
+
if (_resp.status !== 200) {
|
|
48
|
+
return response.status(StatusCodes.UNAUTHORIZED).json({
|
|
49
|
+
error: `Unauthorized error: No scopes found for the user: ${payload.sub}`,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
// Set global context
|
|
53
|
+
this.setScopes(_resp.data, response);
|
|
45
54
|
return await this.setUserEntity(payload.sub, response);
|
|
46
55
|
}
|
|
47
56
|
catch (error) {
|
|
@@ -66,7 +75,7 @@ export class PortalUserInfoFetcher extends UserInfoHelper {
|
|
|
66
75
|
});
|
|
67
76
|
}
|
|
68
77
|
const scopes = payload.scope ? payload.scope.split(' ') : [];
|
|
69
|
-
this.
|
|
78
|
+
this.appendScopes(scopes, response);
|
|
70
79
|
return;
|
|
71
80
|
}
|
|
72
81
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"portal-token.js","sourceRoot":"","sources":["../../../../src/middleware/auth/user-info-fetcher/portal-token.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"portal-token.js","sourceRoot":"","sources":["../../../../src/middleware/auth/user-info-fetcher/portal-token.ts"],"names":[],"mappings":"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"}
|