@things-factory/oauth2-client 9.0.0-beta.76 → 9.0.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-client/pages/oauth2-client/oauth2-client-importer.js +16 -17
- package/dist-client/pages/oauth2-client/oauth2-client-importer.js.map +1 -1
- package/dist-client/pages/oauth2-client/oauth2-client-list-page.js +34 -26
- package/dist-client/pages/oauth2-client/oauth2-client-list-page.js.map +1 -1
- package/dist-client/pages/oauth2-client-register.js +88 -88
- package/dist-client/pages/oauth2-client-register.js.map +1 -1
- package/dist-client/pages/oauth2-client.js +189 -193
- package/dist-client/pages/oauth2-client.js.map +1 -1
- package/dist-client/pages/oauth2-clients.js +78 -79
- package/dist-client/pages/oauth2-clients.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-server/routes.js +21 -9
- package/dist-server/routes.js.map +1 -1
- package/dist-server/service/oauth2-client/oauth2-client-mutation.js +27 -8
- package/dist-server/service/oauth2-client/oauth2-client-mutation.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +9 -9
package/dist-server/routes.js
CHANGED
|
@@ -16,14 +16,17 @@ process.on('bootstrap-module-domain-private-route', (app, domainPrivateRouter) =
|
|
|
16
16
|
throw new Error(`unsupported grant type: ${grantType}`);
|
|
17
17
|
}
|
|
18
18
|
const state = crypto_1.default.randomBytes(16).toString('hex');
|
|
19
|
-
await repository.save(
|
|
19
|
+
await repository.save({
|
|
20
|
+
...oauth2Client,
|
|
21
|
+
state
|
|
22
|
+
});
|
|
20
23
|
var auth = new client_oauth2_1.default({
|
|
21
24
|
clientId,
|
|
22
25
|
clientSecret,
|
|
23
26
|
accessTokenUri,
|
|
24
27
|
authorizationUri,
|
|
25
28
|
redirectUri: `${origin}/oauth2-client/callback`,
|
|
26
|
-
scopes:
|
|
29
|
+
scopes: scopes?.split(' ') || [],
|
|
27
30
|
state
|
|
28
31
|
});
|
|
29
32
|
context.status = 200;
|
|
@@ -45,18 +48,22 @@ process.on('bootstrap-module-domain-private-route', (app, domainPrivateRouter) =
|
|
|
45
48
|
clientSecret,
|
|
46
49
|
accessTokenUri,
|
|
47
50
|
authorizationUri,
|
|
48
|
-
scopes:
|
|
51
|
+
scopes: scopes?.split(' ') || []
|
|
49
52
|
});
|
|
50
53
|
const { accessToken: newAccessToken, refreshToken: newRefreshToken } = await auth
|
|
51
54
|
.createToken(accessToken, refreshToken, tokenType, {})
|
|
52
55
|
.refresh();
|
|
53
56
|
context.status = 200;
|
|
54
|
-
context.body = await repository.save(
|
|
57
|
+
context.body = await repository.save({
|
|
58
|
+
...oauth2Client,
|
|
59
|
+
accessToken: newAccessToken,
|
|
60
|
+
refreshToken: newRefreshToken,
|
|
61
|
+
state: ''
|
|
62
|
+
});
|
|
55
63
|
});
|
|
56
64
|
});
|
|
57
65
|
process.on('bootstrap-module-domain-public-route', (app, domainPublicRouter) => {
|
|
58
66
|
domainPublicRouter.get('/oauth2-client/callback', async (context, next) => {
|
|
59
|
-
var _a;
|
|
60
67
|
const { state } = context.query;
|
|
61
68
|
const { originalUrl } = context;
|
|
62
69
|
const repository = (0, shell_1.getRepository)(oauth2_client_1.Oauth2Client);
|
|
@@ -70,7 +77,7 @@ process.on('bootstrap-module-domain-public-route', (app, domainPublicRouter) =>
|
|
|
70
77
|
clientSecret,
|
|
71
78
|
accessTokenUri,
|
|
72
79
|
authorizationUri,
|
|
73
|
-
scopes:
|
|
80
|
+
scopes: scopes?.split(' ') || []
|
|
74
81
|
});
|
|
75
82
|
var url = originalUrl;
|
|
76
83
|
switch (grantType) {
|
|
@@ -86,11 +93,16 @@ process.on('bootstrap-module-domain-public-route', (app, domainPublicRouter) =>
|
|
|
86
93
|
}
|
|
87
94
|
const token = await auth.code.getToken(originalUrl);
|
|
88
95
|
const { tokenType, accessToken, refreshToken, data } = token;
|
|
89
|
-
const expires =
|
|
90
|
-
await repository.save(
|
|
96
|
+
const expires = data?.expires_in ? token.expiresIn(data?.expires_in) : null;
|
|
97
|
+
await repository.save({
|
|
98
|
+
...oauth2Client,
|
|
99
|
+
tokenType,
|
|
91
100
|
accessToken,
|
|
92
101
|
refreshToken,
|
|
93
|
-
expires,
|
|
102
|
+
expires,
|
|
103
|
+
scopes: data?.scope?.replace(',', ' '),
|
|
104
|
+
state: ''
|
|
105
|
+
});
|
|
94
106
|
context.redirect((0, shell_1.getRedirectSubdomainPath)(context, domain, `/oauth2-client/${id}`));
|
|
95
107
|
});
|
|
96
108
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../server/routes.ts"],"names":[],"mappings":";;;AAAA,0EAAwC;AACxC,4DAA2B;AAE3B,iDAA+E;AAE/E,yEAAoE;AAEpE,OAAO,CAAC,EAAE,CAAC,uCAA8C,EAAE,CAAC,GAAG,EAAE,mBAAmB,EAAE,EAAE;IACtF,mBAAmB,CAAC,GAAG,CAAC,6BAA6B,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC7E,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;QAClC,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,CAAA;QAErB,MAAM,UAAU,GAAG,IAAA,qBAAa,EAAC,4BAAY,CAAC,CAAA;QAC9C,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;QAEvD,MAAM,EACJ,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,gBAAgB,EACzB,MAAM,EACP,GAAG,YAAY,CAAA;QAEhB,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,2BAA2B,SAAS,EAAE,CAAC,CAAA;QACzD,CAAC;QAED,MAAM,KAAK,GAAG,gBAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QACpD,MAAM,UAAU,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../server/routes.ts"],"names":[],"mappings":";;;AAAA,0EAAwC;AACxC,4DAA2B;AAE3B,iDAA+E;AAE/E,yEAAoE;AAEpE,OAAO,CAAC,EAAE,CAAC,uCAA8C,EAAE,CAAC,GAAG,EAAE,mBAAmB,EAAE,EAAE;IACtF,mBAAmB,CAAC,GAAG,CAAC,6BAA6B,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC7E,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;QAClC,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,CAAA;QAErB,MAAM,UAAU,GAAG,IAAA,qBAAa,EAAC,4BAAY,CAAC,CAAA;QAC9C,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;QAEvD,MAAM,EACJ,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,gBAAgB,EACzB,MAAM,EACP,GAAG,YAAY,CAAA;QAEhB,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,2BAA2B,SAAS,EAAE,CAAC,CAAA;QACzD,CAAC;QAED,MAAM,KAAK,GAAG,gBAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QACpD,MAAM,UAAU,CAAC,IAAI,CAAC;YACpB,GAAG,YAAY;YACf,KAAK;SACN,CAAC,CAAA;QAEF,IAAI,IAAI,GAAG,IAAI,uBAAY,CAAC;YAC1B,QAAQ;YACR,YAAY;YACZ,cAAc;YACd,gBAAgB;YAChB,WAAW,EAAE,GAAG,MAAM,yBAAyB;YAC/C,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE;YAChC,KAAK;SACN,CAAC,CAAA;QAEF,OAAO,CAAC,MAAM,GAAG,GAAG,CAAA;QACpB,OAAO,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAA;IACzC,CAAC,CAAC,CAAA;IAEF,mBAAmB,CAAC,GAAG,CAAC,4BAA4B,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC5E,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;QAC1B,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,CAAA;QAErB,MAAM,UAAU,GAAG,IAAA,qBAAa,EAAC,4BAAY,CAAC,CAAA;QAC9C,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;QAEvD,MAAM,EACJ,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,gBAAgB,EACzB,MAAM,EACN,SAAS,EACT,WAAW,EACX,YAAY,EACb,GAAG,YAAY,CAAA;QAEhB,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,CAAC,MAAM,GAAG,GAAG,CAAA;YACpB,OAAO,CAAC,IAAI,GAAG,wBAAwB,CAAA;YAEvC,OAAM;QACR,CAAC;QAED,IAAI,IAAI,GAAG,IAAI,uBAAY,CAAC;YAC1B,QAAQ;YACR,YAAY;YACZ,cAAc;YACd,gBAAgB;YAChB,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE;SACjC,CAAC,CAAA;QAEF,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,MAAM,IAAI;aAC9E,WAAW,CAAC,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,CAAC;aACrD,OAAO,EAAE,CAAA;QAEZ,OAAO,CAAC,MAAM,GAAG,GAAG,CAAA;QACpB,OAAO,CAAC,IAAI,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC;YACnC,GAAG,YAAY;YACf,WAAW,EAAE,cAAc;YAC3B,YAAY,EAAE,eAAe;YAC7B,KAAK,EAAE,EAAE;SACV,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,OAAO,CAAC,EAAE,CAAC,sCAA6C,EAAE,CAAC,GAAG,EAAE,kBAAkB,EAAE,EAAE;IACpF,kBAAkB,CAAC,GAAG,CAAC,yBAAyB,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACxE,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAC/B,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAA;QAE/B,MAAM,UAAU,GAAG,IAAA,qBAAa,EAAC,4BAAY,CAAC,CAAA;QAC9C,MAAM,YAAY,GAAiB,MAAM,UAAU,CAAC,OAAO,CAAC;YAC1D,KAAK,EAAE,EAAE,KAAK,EAAE;YAChB,SAAS,EAAE,CAAC,QAAQ,CAAC;SACtB,CAAC,CAAA;QAEF,MAAM,EACJ,MAAM,EACN,EAAE,EACF,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,gBAAgB,EACzB,MAAM,EACP,GAAG,YAAY,CAAA;QAEhB,IAAI,IAAI,GAAG,IAAI,uBAAY,CAAC;YAC1B,QAAQ;YACR,YAAY;YACZ,cAAc;YACd,gBAAgB;YAChB,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE;SACjC,CAAC,CAAA;QAEF,IAAI,GAAG,GAAG,WAAW,CAAA;QACrB,QAAQ,SAAS,EAAE,CAAC;YAClB,KAAK,aAAa;gBAChB,MAAK;YACP,KAAK,KAAK;gBACR,MAAK;YACP,KAAK,MAAM;gBACT,MAAK;YACP,KAAK,OAAO,CAAC;YACb;gBACE,MAAM,IAAI,KAAK,CAAC,2BAA2B,SAAS,EAAE,CAAC,CAAA;QAC3D,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;QACnD,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,KAAK,CAAA;QAC5D,MAAM,OAAO,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,UAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAElF,MAAM,UAAU,CAAC,IAAI,CAAC;YACpB,GAAG,YAAY;YACf,SAAS;YACT,WAAW;YACX,YAAY;YACZ,OAAO;YACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;YACtC,KAAK,EAAE,EAAE;SACV,CAAC,CAAA;QAEF,OAAO,CAAC,QAAQ,CAAC,IAAA,gCAAwB,EAAC,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC,CAAA;IACrF,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA","sourcesContent":["import ClientOAuth2 from 'client-oauth2'\nimport crypto from 'crypto'\n\nimport { getRedirectSubdomainPath, getRepository } from '@things-factory/shell'\n\nimport { Oauth2Client } from './service/oauth2-client/oauth2-client'\n\nprocess.on('bootstrap-module-domain-private-route' as any, (app, domainPrivateRouter) => {\n domainPrivateRouter.get('/oauth2-client/:id/auth-uri', async (context, next) => {\n const { params, origin } = context\n const { id } = params\n\n const repository = getRepository(Oauth2Client)\n const oauth2Client = await repository.findOneBy({ id })\n\n const {\n grantType,\n clientId,\n clientSecret,\n accessTokenUrl: accessTokenUri,\n authUrl: authorizationUri,\n scopes\n } = oauth2Client\n\n if (grantType !== 'code') {\n throw new Error(`unsupported grant type: ${grantType}`)\n }\n\n const state = crypto.randomBytes(16).toString('hex')\n await repository.save({\n ...oauth2Client,\n state\n })\n\n var auth = new ClientOAuth2({\n clientId,\n clientSecret,\n accessTokenUri,\n authorizationUri,\n redirectUri: `${origin}/oauth2-client/callback`,\n scopes: scopes?.split(' ') || [],\n state\n })\n\n context.status = 200\n context.body = await auth.code.getUri()\n })\n\n domainPrivateRouter.get('/oauth2-client/:id/refresh', async (context, next) => {\n const { params } = context\n const { id } = params\n\n const repository = getRepository(Oauth2Client)\n const oauth2Client = await repository.findOneBy({ id })\n\n const {\n grantType,\n clientId,\n clientSecret,\n accessTokenUrl: accessTokenUri,\n authUrl: authorizationUri,\n scopes,\n tokenType,\n accessToken,\n refreshToken\n } = oauth2Client\n\n if (!refreshToken) {\n context.status = 404\n context.body = 'refreshToken not found'\n\n return\n }\n\n var auth = new ClientOAuth2({\n clientId,\n clientSecret,\n accessTokenUri,\n authorizationUri,\n scopes: scopes?.split(' ') || []\n })\n\n const { accessToken: newAccessToken, refreshToken: newRefreshToken } = await auth\n .createToken(accessToken, refreshToken, tokenType, {})\n .refresh()\n\n context.status = 200\n context.body = await repository.save({\n ...oauth2Client,\n accessToken: newAccessToken,\n refreshToken: newRefreshToken,\n state: ''\n })\n })\n})\n\nprocess.on('bootstrap-module-domain-public-route' as any, (app, domainPublicRouter) => {\n domainPublicRouter.get('/oauth2-client/callback', async (context, next) => {\n const { state } = context.query\n const { originalUrl } = context\n\n const repository = getRepository(Oauth2Client)\n const oauth2Client: Oauth2Client = await repository.findOne({\n where: { state },\n relations: ['domain']\n })\n\n const {\n domain,\n id,\n grantType,\n clientId,\n clientSecret,\n accessTokenUrl: accessTokenUri,\n authUrl: authorizationUri,\n scopes\n } = oauth2Client\n\n var auth = new ClientOAuth2({\n clientId,\n clientSecret,\n accessTokenUri,\n authorizationUri,\n scopes: scopes?.split(' ') || []\n })\n\n var url = originalUrl\n switch (grantType) {\n case 'credentials':\n break\n case 'jwt':\n break\n case 'code':\n break\n case 'owner':\n default:\n throw new Error(`unsupported grant type: ${grantType}`)\n }\n\n const token = await auth.code.getToken(originalUrl)\n const { tokenType, accessToken, refreshToken, data } = token\n const expires = data?.expires_in ? token.expiresIn(data?.expires_in as any) : null\n\n await repository.save({\n ...oauth2Client,\n tokenType,\n accessToken,\n refreshToken,\n expires,\n scopes: data?.scope?.replace(',', ' '),\n state: ''\n })\n\n context.redirect(getRedirectSubdomainPath(context, domain, `/oauth2-client/${id}`))\n })\n})\n"]}
|
|
@@ -29,7 +29,13 @@ let Oauth2ClientMutation = class Oauth2ClientMutation {
|
|
|
29
29
|
url.protocol = protocol;
|
|
30
30
|
}
|
|
31
31
|
url.pathname = '/oauth2-client/callback';
|
|
32
|
-
return await tx.getRepository(oauth2_client_1.Oauth2Client).save(
|
|
32
|
+
return await tx.getRepository(oauth2_client_1.Oauth2Client).save({
|
|
33
|
+
...oauth2Client,
|
|
34
|
+
callbackUrl: oauth2Client.callbackUrl || url.href,
|
|
35
|
+
domain,
|
|
36
|
+
creator: user,
|
|
37
|
+
updater: user
|
|
38
|
+
});
|
|
33
39
|
}
|
|
34
40
|
async updateOauth2Client(id, patch, context) {
|
|
35
41
|
const { domain, user, tx } = context.state;
|
|
@@ -37,7 +43,11 @@ let Oauth2ClientMutation = class Oauth2ClientMutation {
|
|
|
37
43
|
const oauth2Client = await repository.findOne({
|
|
38
44
|
where: { domain: { id: domain.id }, id }
|
|
39
45
|
});
|
|
40
|
-
return await repository.save(
|
|
46
|
+
return await repository.save({
|
|
47
|
+
...oauth2Client,
|
|
48
|
+
...patch,
|
|
49
|
+
updater: user
|
|
50
|
+
});
|
|
41
51
|
}
|
|
42
52
|
async deleteOauth2Client(id, context) {
|
|
43
53
|
const { domain, tx } = context.state;
|
|
@@ -55,7 +65,7 @@ let Oauth2ClientMutation = class Oauth2ClientMutation {
|
|
|
55
65
|
async importOauth2Clients(oauth2Clients, context) {
|
|
56
66
|
const { domain, tx } = context.state;
|
|
57
67
|
await Promise.all(oauth2Clients.map(async (oauth2Client) => {
|
|
58
|
-
const createdOauth2Client = await tx.getRepository(oauth2_client_1.Oauth2Client).save(
|
|
68
|
+
const createdOauth2Client = await tx.getRepository(oauth2_client_1.Oauth2Client).save({ domain, ...oauth2Client });
|
|
59
69
|
}));
|
|
60
70
|
return true;
|
|
61
71
|
}
|
|
@@ -68,14 +78,17 @@ let Oauth2ClientMutation = class Oauth2ClientMutation {
|
|
|
68
78
|
throw new Error(`unsupported grant type: ${grantType}`);
|
|
69
79
|
}
|
|
70
80
|
const state = crypto_1.default.randomBytes(16).toString('hex');
|
|
71
|
-
await repository.save(
|
|
81
|
+
await repository.save({
|
|
82
|
+
...oauth2Client,
|
|
83
|
+
state
|
|
84
|
+
});
|
|
72
85
|
var auth = new client_oauth2_1.default({
|
|
73
86
|
clientId,
|
|
74
87
|
clientSecret,
|
|
75
88
|
accessTokenUri,
|
|
76
89
|
authorizationUri,
|
|
77
90
|
redirectUri: callbackUrl || `${context.origin}/oauth2-client/callback`,
|
|
78
|
-
scopes:
|
|
91
|
+
scopes: scopes?.split(' ') || [],
|
|
79
92
|
state
|
|
80
93
|
});
|
|
81
94
|
return await auth[grantType].getUri();
|
|
@@ -93,7 +106,7 @@ let Oauth2ClientMutation = class Oauth2ClientMutation {
|
|
|
93
106
|
clientSecret,
|
|
94
107
|
accessTokenUri,
|
|
95
108
|
authorizationUri,
|
|
96
|
-
scopes: scopes
|
|
109
|
+
scopes: scopes?.split(' ')
|
|
97
110
|
});
|
|
98
111
|
try {
|
|
99
112
|
var token = await auth.createToken(accessToken, refreshToken, tokenType, {}).refresh();
|
|
@@ -102,8 +115,14 @@ let Oauth2ClientMutation = class Oauth2ClientMutation {
|
|
|
102
115
|
throw err;
|
|
103
116
|
}
|
|
104
117
|
const { accessToken: newAccessToken, refreshToken: newRefreshToken, tokenType: newTokenType, data } = token;
|
|
105
|
-
const expires =
|
|
106
|
-
return await repository.save(
|
|
118
|
+
const expires = data?.expires_in ? token.expiresIn(data?.expires_in) : null;
|
|
119
|
+
return await repository.save({
|
|
120
|
+
...oauth2Client,
|
|
121
|
+
accessToken: newAccessToken,
|
|
122
|
+
refreshToken: newRefreshToken,
|
|
123
|
+
tokenType: newTokenType,
|
|
124
|
+
expires
|
|
125
|
+
});
|
|
107
126
|
}
|
|
108
127
|
};
|
|
109
128
|
exports.Oauth2ClientMutation = Oauth2ClientMutation;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth2-client-mutation.js","sourceRoot":"","sources":["../../../server/service/oauth2-client/oauth2-client-mutation.ts"],"names":[],"mappings":";;;;AAAA,0EAAwC;AACxC,4DAA2B;AAC3B,+CAAsE;AACtE,qCAA4B;AAE5B,6CAA4C;AAE5C,mDAA8C;AAC9C,6DAAyE;AAEzE,MAAM,QAAQ,GAAW,YAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;AAGxC,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAGzB,AAAN,KAAK,CAAC,kBAAkB,CACD,YAA6B,EAC3C,OAAwB;QAE/B,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAE1C,MAAM,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAA;QAC7D,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAA;QACxD,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAA;QAExD,IAAI,gBAAgB,IAAI,YAAY,EAAE,CAAC;YACrC,IAAI,GAAG,GAAQ,IAAI,GAAG,CAAC,GAAG,gBAAgB,MAAM,YAAY,EAAE,CAAC,CAAA;YAC/D,IAAI,YAAY,EAAE,CAAC;gBACjB,GAAG,CAAC,IAAI,GAAG,YAAY,CAAA;YACzB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,GAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAChD,CAAC;QAED,IAAI,QAAQ,EAAE,CAAC;YACb,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACzB,CAAC;QAED,GAAG,CAAC,QAAQ,GAAG,yBAAyB,CAAA;QAExC,OAAO,MAAM,EAAE,CAAC,aAAa,CAAC,4BAAY,CAAC,CAAC,IAAI,iCAC3C,YAAY,KACf,WAAW,EAAE,YAAY,CAAC,WAAW,IAAI,GAAG,CAAC,IAAI,EACjD,MAAM,EACN,OAAO,EAAE,IAAI,EACb,OAAO,EAAE,IAAI,IACb,CAAA;IACJ,CAAC;IAIK,AAAN,KAAK,CAAC,kBAAkB,CACX,EAAU,EACP,KAAwB,EAC/B,OAAwB;QAE/B,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAE1C,MAAM,UAAU,GAAG,EAAE,CAAC,aAAa,CAAC,4BAAY,CAAC,CAAA;QACjD,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC;YAC5C,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;SACzC,CAAC,CAAA;QAEF,OAAO,MAAM,UAAU,CAAC,IAAI,+CACvB,YAAY,GACZ,KAAK,KACR,OAAO,EAAE,IAAI,IACb,CAAA;IACJ,CAAC;IAIK,AAAN,KAAK,CAAC,kBAAkB,CAAY,EAAU,EAAS,OAAwB;QAC7E,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAEpC,MAAM,EAAE,CAAC,aAAa,CAAC,4BAAY,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;QAE9E,OAAO,IAAI,CAAA;IACb,CAAC;IAIK,AAAN,KAAK,CAAC,mBAAmB,CACO,GAAa,EACpC,OAAwB;QAE/B,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAEpC,MAAM,EAAE,CAAC,aAAa,CAAC,4BAAY,CAAC,CAAC,MAAM,CAAC;YAC1C,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE;YACzB,EAAE,EAAE,IAAA,YAAE,EAAC,GAAG,CAAC;SACZ,CAAC,CAAA;QAEF,OAAO,IAAI,CAAA;IACb,CAAC;IAIK,AAAN,KAAK,CAAC,mBAAmB,CAC4B,aAAkC,EAC9E,OAAwB;QAE/B,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAEpC,MAAM,OAAO,CAAC,GAAG,CACf,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,YAA+B,EAAE,EAAE;YAC1D,MAAM,mBAAmB,GAAiB,MAAM,EAAE,CAAC,aAAa,CAAC,4BAAY,CAAC,CAAC,IAAI,iBAAG,MAAM,IAAK,YAAY,EAAG,CAAA;QAClH,CAAC,CAAC,CACH,CAAA;QAED,OAAO,IAAI,CAAA;IACb,CAAC;IAIK,AAAN,KAAK,CAAC,gBAAgB,CAAY,EAAU,EAAS,OAAwB;QAC3E,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAC5B,MAAM,UAAU,GAAG,EAAE,CAAC,aAAa,CAAC,4BAAY,CAAC,CAAA;QACjD,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;QAEvD,MAAM,EACJ,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,gBAAgB,EACzB,MAAM,EACP,GAAG,YAAY,CAAA;QAEhB,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,2BAA2B,SAAS,EAAE,CAAC,CAAA;QACzD,CAAC;QAED,MAAM,KAAK,GAAG,gBAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QACpD,MAAM,UAAU,CAAC,IAAI,iCAChB,YAAY,KACf,KAAK,IACL,CAAA;QAEF,IAAI,IAAI,GAAG,IAAI,uBAAY,CAAC;YAC1B,QAAQ;YACR,YAAY;YACZ,cAAc;YACd,gBAAgB;YAChB,WAAW,EAAE,WAAW,IAAI,GAAG,OAAO,CAAC,MAAM,yBAAyB;YACtE,MAAM,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,CAAC,GAAG,CAAC,KAAI,EAAE;YAChC,KAAK;SACN,CAAC,CAAA;QAEF,OAAO,MAAO,IAAI,CAAC,SAAS,CAAS,CAAC,MAAM,EAAE,CAAA;IAChD,CAAC;IAIK,AAAN,KAAK,CAAC,wBAAwB,CAAY,EAAU,EAAS,OAAwB;QACnF,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAC5B,MAAM,UAAU,GAAG,EAAE,CAAC,aAAa,CAAC,4BAAY,CAAC,CAAA;QACjD,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;QAEvD,MAAM,EACJ,QAAQ,EACR,YAAY,EACZ,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,gBAAgB,EACzB,MAAM,EACN,SAAS,EACT,WAAW,EACX,YAAY,EACb,GAAG,YAAY,CAAA;QAEhB,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;QAC3C,CAAC;QAED,IAAI,IAAI,GAAG,IAAI,uBAAY,CAAC;YAC1B,QAAQ;YACR,YAAY;YACZ,cAAc;YACd,gBAAgB;YAChB,MAAM,EAAE,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,CAAC,GAAG,CAAC;SAC3B,CAAC,CAAA;QAEF,IAAI,CAAC;YACH,IAAI,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAA;QACxF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,CAAA;QACX,CAAC;QAED,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,KAAK,CAAA;QAC3G,MAAM,OAAO,GAAG,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU,EAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAElF,OAAO,MAAM,UAAU,CAAC,IAAI,iCACvB,YAAY,KACf,WAAW,EAAE,cAAc,EAC3B,YAAY,EAAE,eAAe,EAC7B,SAAS,EAAE,YAAY,EACvB,OAAO,IACP,CAAA;IACJ,CAAC;CACF,CAAA;AA5LY,oDAAoB;AAGzB;IAFL,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,4BAAY,EAAE,EAAE,WAAW,EAAE,4BAA4B,EAAE,CAAC;IAE9E,mBAAA,IAAA,kBAAG,EAAC,cAAc,CAAC,CAAA;IACnB,mBAAA,IAAA,kBAAG,GAAE,CAAA;;6CAD6B,oCAAe;;8DA+BnD;AAIK;IAFL,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,4BAAY,EAAE,EAAE,WAAW,EAAE,oCAAoC,EAAE,CAAC;IAEtF,mBAAA,IAAA,kBAAG,EAAC,IAAI,CAAC,CAAA;IACT,mBAAA,IAAA,kBAAG,EAAC,OAAO,CAAC,CAAA;IACZ,mBAAA,IAAA,kBAAG,GAAE,CAAA;;qDADe,sCAAiB;;8DAevC;AAIK;IAFL,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,wBAAwB,EAAE,CAAC;IAC9C,mBAAA,IAAA,kBAAG,EAAC,IAAI,CAAC,CAAA;IAAc,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;8DAMrD;AAIK;IAFL,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,kCAAkC,EAAE,CAAC;IAE/E,mBAAA,IAAA,kBAAG,EAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;IAC5B,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;+DAUP;AAIK;IAFL,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,kCAAkC,EAAE,CAAC;IAE/E,mBAAA,IAAA,kBAAG,EAAC,eAAe,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,sCAAiB,CAAC,CAAC,CAAA;IACjD,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;+DAWP;AAIK;IAFL,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,wBAAwB,EAAE,CAAC;IAC/C,mBAAA,IAAA,kBAAG,EAAC,IAAI,CAAC,CAAA;IAAc,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;4DAoCnD;AAIK;IAFL,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,4BAAY,EAAE,EAAE,WAAW,EAAE,gCAAgC,EAAE,CAAC;IACrD,mBAAA,IAAA,kBAAG,EAAC,IAAI,CAAC,CAAA;IAAc,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;oEA4C3D;+BA3LU,oBAAoB;IADhC,IAAA,uBAAQ,EAAC,4BAAY,CAAC;GACV,oBAAoB,CA4LhC","sourcesContent":["import ClientOAuth2 from 'client-oauth2'\nimport crypto from 'crypto'\nimport { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'\nimport { In } from 'typeorm'\n\nimport { config } from '@things-factory/env'\n\nimport { Oauth2Client } from './oauth2-client'\nimport { NewOauth2Client, Oauth2ClientPatch } from './oauth2-client-type'\n\nconst protocol: string = config.get('protocol')\n\n@Resolver(Oauth2Client)\nexport class Oauth2ClientMutation {\n @Directive('@transaction')\n @Mutation(returns => Oauth2Client, { description: 'To create new Oauth2Client' })\n async createOauth2Client(\n @Arg('oauth2Client') oauth2Client: NewOauth2Client,\n @Ctx() context: ResolverContext\n ): Promise<Oauth2Client> {\n const { domain, user, tx } = context.state\n\n const originalProtocol = context.headers['x-forwarded-proto']\n const originalHost = context.headers['x-forwarded-host']\n const originalPort = context.headers['x-forwarded-port']\n\n if (originalProtocol && originalHost) {\n var url: URL = new URL(`${originalProtocol}://${originalHost}`)\n if (originalPort) {\n url.port = originalPort\n }\n } else {\n var url: URL = new URL(context.request.origin)\n }\n\n if (protocol) {\n url.protocol = protocol\n }\n\n url.pathname = '/oauth2-client/callback'\n\n return await tx.getRepository(Oauth2Client).save({\n ...oauth2Client,\n callbackUrl: oauth2Client.callbackUrl || url.href,\n domain,\n creator: user,\n updater: user\n })\n }\n\n @Directive('@transaction')\n @Mutation(returns => Oauth2Client, { description: 'To modify Oauth2Client information' })\n async updateOauth2Client(\n @Arg('id') id: string,\n @Arg('patch') patch: Oauth2ClientPatch,\n @Ctx() context: ResolverContext\n ): Promise<Oauth2Client> {\n const { domain, user, tx } = context.state\n\n const repository = tx.getRepository(Oauth2Client)\n const oauth2Client = await repository.findOne({\n where: { domain: { id: domain.id }, id }\n })\n\n return await repository.save({\n ...oauth2Client,\n ...patch,\n updater: user\n })\n }\n\n @Directive('@transaction')\n @Mutation(returns => Boolean, { description: 'To delete Oauth2Client' })\n async deleteOauth2Client(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<boolean> {\n const { domain, tx } = context.state\n\n await tx.getRepository(Oauth2Client).delete({ domain: { id: domain.id }, id })\n\n return true\n }\n\n @Directive('@transaction')\n @Mutation(returns => Boolean, { description: 'To delete multiple Oauth2Clients' })\n async deleteOauth2Clients(\n @Arg('ids', type => [String]) ids: string[],\n @Ctx() context: ResolverContext\n ): Promise<boolean> {\n const { domain, tx } = context.state\n\n await tx.getRepository(Oauth2Client).delete({\n domain: { id: domain.id },\n id: In(ids)\n })\n\n return true\n }\n\n @Directive('@transaction')\n @Mutation(returns => Boolean, { description: 'To import multiple Oauth2Clients' })\n async importOauth2Clients(\n @Arg('oauth2Clients', type => [Oauth2ClientPatch]) oauth2Clients: Oauth2ClientPatch[],\n @Ctx() context: ResolverContext\n ): Promise<boolean> {\n const { domain, tx } = context.state\n\n await Promise.all(\n oauth2Clients.map(async (oauth2Client: Oauth2ClientPatch) => {\n const createdOauth2Client: Oauth2Client = await tx.getRepository(Oauth2Client).save({ domain, ...oauth2Client })\n })\n )\n\n return true\n }\n\n @Directive('@transaction')\n @Mutation(returns => String, { description: 'To get oauth2 auth URL' })\n async getOauth2AuthUrl(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<string> {\n const { tx } = context.state\n const repository = tx.getRepository(Oauth2Client)\n const oauth2Client = await repository.findOneBy({ id })\n\n const {\n grantType,\n clientId,\n clientSecret,\n callbackUrl,\n accessTokenUrl: accessTokenUri,\n authUrl: authorizationUri,\n scopes\n } = oauth2Client\n\n if (grantType !== 'code') {\n throw new Error(`unsupported grant type: ${grantType}`)\n }\n\n const state = crypto.randomBytes(16).toString('hex')\n await repository.save({\n ...oauth2Client,\n state\n })\n\n var auth = new ClientOAuth2({\n clientId,\n clientSecret,\n accessTokenUri,\n authorizationUri,\n redirectUri: callbackUrl || `${context.origin}/oauth2-client/callback`,\n scopes: scopes?.split(' ') || [],\n state\n })\n\n return await (auth[grantType] as any).getUri()\n }\n\n @Directive('@transaction')\n @Mutation(returns => Oauth2Client, { description: 'To refresh oauth2 access token' })\n async refreshOauth2AccessToken(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<Oauth2Client> {\n const { tx } = context.state\n const repository = tx.getRepository(Oauth2Client)\n const oauth2Client = await repository.findOneBy({ id })\n\n const {\n clientId,\n clientSecret,\n accessTokenUrl: accessTokenUri,\n authUrl: authorizationUri,\n scopes,\n tokenType,\n accessToken,\n refreshToken\n } = oauth2Client\n\n if (!refreshToken) {\n throw new Error('refreshToken not found')\n }\n\n var auth = new ClientOAuth2({\n clientId,\n clientSecret,\n accessTokenUri,\n authorizationUri,\n scopes: scopes?.split(' ')\n })\n\n try {\n var token = await auth.createToken(accessToken, refreshToken, tokenType, {}).refresh()\n } catch (err) {\n throw err\n }\n\n const { accessToken: newAccessToken, refreshToken: newRefreshToken, tokenType: newTokenType, data } = token\n const expires = data?.expires_in ? token.expiresIn(data?.expires_in as any) : null\n\n return await repository.save({\n ...oauth2Client,\n accessToken: newAccessToken,\n refreshToken: newRefreshToken,\n tokenType: newTokenType,\n expires\n })\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"oauth2-client-mutation.js","sourceRoot":"","sources":["../../../server/service/oauth2-client/oauth2-client-mutation.ts"],"names":[],"mappings":";;;;AAAA,0EAAwC;AACxC,4DAA2B;AAC3B,+CAAsE;AACtE,qCAA4B;AAE5B,6CAA4C;AAE5C,mDAA8C;AAC9C,6DAAyE;AAEzE,MAAM,QAAQ,GAAW,YAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;AAGxC,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAGzB,AAAN,KAAK,CAAC,kBAAkB,CACD,YAA6B,EAC3C,OAAwB;QAE/B,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAE1C,MAAM,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAA;QAC7D,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAA;QACxD,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAA;QAExD,IAAI,gBAAgB,IAAI,YAAY,EAAE,CAAC;YACrC,IAAI,GAAG,GAAQ,IAAI,GAAG,CAAC,GAAG,gBAAgB,MAAM,YAAY,EAAE,CAAC,CAAA;YAC/D,IAAI,YAAY,EAAE,CAAC;gBACjB,GAAG,CAAC,IAAI,GAAG,YAAY,CAAA;YACzB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,GAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAChD,CAAC;QAED,IAAI,QAAQ,EAAE,CAAC;YACb,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACzB,CAAC;QAED,GAAG,CAAC,QAAQ,GAAG,yBAAyB,CAAA;QAExC,OAAO,MAAM,EAAE,CAAC,aAAa,CAAC,4BAAY,CAAC,CAAC,IAAI,CAAC;YAC/C,GAAG,YAAY;YACf,WAAW,EAAE,YAAY,CAAC,WAAW,IAAI,GAAG,CAAC,IAAI;YACjD,MAAM;YACN,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,IAAI;SACd,CAAC,CAAA;IACJ,CAAC;IAIK,AAAN,KAAK,CAAC,kBAAkB,CACX,EAAU,EACP,KAAwB,EAC/B,OAAwB;QAE/B,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAE1C,MAAM,UAAU,GAAG,EAAE,CAAC,aAAa,CAAC,4BAAY,CAAC,CAAA;QACjD,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC;YAC5C,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;SACzC,CAAC,CAAA;QAEF,OAAO,MAAM,UAAU,CAAC,IAAI,CAAC;YAC3B,GAAG,YAAY;YACf,GAAG,KAAK;YACR,OAAO,EAAE,IAAI;SACd,CAAC,CAAA;IACJ,CAAC;IAIK,AAAN,KAAK,CAAC,kBAAkB,CAAY,EAAU,EAAS,OAAwB;QAC7E,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAEpC,MAAM,EAAE,CAAC,aAAa,CAAC,4BAAY,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;QAE9E,OAAO,IAAI,CAAA;IACb,CAAC;IAIK,AAAN,KAAK,CAAC,mBAAmB,CACO,GAAa,EACpC,OAAwB;QAE/B,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAEpC,MAAM,EAAE,CAAC,aAAa,CAAC,4BAAY,CAAC,CAAC,MAAM,CAAC;YAC1C,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE;YACzB,EAAE,EAAE,IAAA,YAAE,EAAC,GAAG,CAAC;SACZ,CAAC,CAAA;QAEF,OAAO,IAAI,CAAA;IACb,CAAC;IAIK,AAAN,KAAK,CAAC,mBAAmB,CAC4B,aAAkC,EAC9E,OAAwB;QAE/B,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAEpC,MAAM,OAAO,CAAC,GAAG,CACf,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,YAA+B,EAAE,EAAE;YAC1D,MAAM,mBAAmB,GAAiB,MAAM,EAAE,CAAC,aAAa,CAAC,4BAAY,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,CAAC,CAAA;QAClH,CAAC,CAAC,CACH,CAAA;QAED,OAAO,IAAI,CAAA;IACb,CAAC;IAIK,AAAN,KAAK,CAAC,gBAAgB,CAAY,EAAU,EAAS,OAAwB;QAC3E,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAC5B,MAAM,UAAU,GAAG,EAAE,CAAC,aAAa,CAAC,4BAAY,CAAC,CAAA;QACjD,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;QAEvD,MAAM,EACJ,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,gBAAgB,EACzB,MAAM,EACP,GAAG,YAAY,CAAA;QAEhB,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,2BAA2B,SAAS,EAAE,CAAC,CAAA;QACzD,CAAC;QAED,MAAM,KAAK,GAAG,gBAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QACpD,MAAM,UAAU,CAAC,IAAI,CAAC;YACpB,GAAG,YAAY;YACf,KAAK;SACN,CAAC,CAAA;QAEF,IAAI,IAAI,GAAG,IAAI,uBAAY,CAAC;YAC1B,QAAQ;YACR,YAAY;YACZ,cAAc;YACd,gBAAgB;YAChB,WAAW,EAAE,WAAW,IAAI,GAAG,OAAO,CAAC,MAAM,yBAAyB;YACtE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE;YAChC,KAAK;SACN,CAAC,CAAA;QAEF,OAAO,MAAO,IAAI,CAAC,SAAS,CAAS,CAAC,MAAM,EAAE,CAAA;IAChD,CAAC;IAIK,AAAN,KAAK,CAAC,wBAAwB,CAAY,EAAU,EAAS,OAAwB;QACnF,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAC5B,MAAM,UAAU,GAAG,EAAE,CAAC,aAAa,CAAC,4BAAY,CAAC,CAAA;QACjD,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;QAEvD,MAAM,EACJ,QAAQ,EACR,YAAY,EACZ,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,gBAAgB,EACzB,MAAM,EACN,SAAS,EACT,WAAW,EACX,YAAY,EACb,GAAG,YAAY,CAAA;QAEhB,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;QAC3C,CAAC;QAED,IAAI,IAAI,GAAG,IAAI,uBAAY,CAAC;YAC1B,QAAQ;YACR,YAAY;YACZ,cAAc;YACd,gBAAgB;YAChB,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC;SAC3B,CAAC,CAAA;QAEF,IAAI,CAAC;YACH,IAAI,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAA;QACxF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,CAAA;QACX,CAAC;QAED,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,KAAK,CAAA;QAC3G,MAAM,OAAO,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,UAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAElF,OAAO,MAAM,UAAU,CAAC,IAAI,CAAC;YAC3B,GAAG,YAAY;YACf,WAAW,EAAE,cAAc;YAC3B,YAAY,EAAE,eAAe;YAC7B,SAAS,EAAE,YAAY;YACvB,OAAO;SACR,CAAC,CAAA;IACJ,CAAC;CACF,CAAA;AA5LY,oDAAoB;AAGzB;IAFL,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,4BAAY,EAAE,EAAE,WAAW,EAAE,4BAA4B,EAAE,CAAC;IAE9E,mBAAA,IAAA,kBAAG,EAAC,cAAc,CAAC,CAAA;IACnB,mBAAA,IAAA,kBAAG,GAAE,CAAA;;6CAD6B,oCAAe;;8DA+BnD;AAIK;IAFL,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,4BAAY,EAAE,EAAE,WAAW,EAAE,oCAAoC,EAAE,CAAC;IAEtF,mBAAA,IAAA,kBAAG,EAAC,IAAI,CAAC,CAAA;IACT,mBAAA,IAAA,kBAAG,EAAC,OAAO,CAAC,CAAA;IACZ,mBAAA,IAAA,kBAAG,GAAE,CAAA;;qDADe,sCAAiB;;8DAevC;AAIK;IAFL,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,wBAAwB,EAAE,CAAC;IAC9C,mBAAA,IAAA,kBAAG,EAAC,IAAI,CAAC,CAAA;IAAc,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;8DAMrD;AAIK;IAFL,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,kCAAkC,EAAE,CAAC;IAE/E,mBAAA,IAAA,kBAAG,EAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;IAC5B,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;+DAUP;AAIK;IAFL,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,kCAAkC,EAAE,CAAC;IAE/E,mBAAA,IAAA,kBAAG,EAAC,eAAe,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,sCAAiB,CAAC,CAAC,CAAA;IACjD,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;+DAWP;AAIK;IAFL,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,wBAAwB,EAAE,CAAC;IAC/C,mBAAA,IAAA,kBAAG,EAAC,IAAI,CAAC,CAAA;IAAc,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;4DAoCnD;AAIK;IAFL,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,4BAAY,EAAE,EAAE,WAAW,EAAE,gCAAgC,EAAE,CAAC;IACrD,mBAAA,IAAA,kBAAG,EAAC,IAAI,CAAC,CAAA;IAAc,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;oEA4C3D;+BA3LU,oBAAoB;IADhC,IAAA,uBAAQ,EAAC,4BAAY,CAAC;GACV,oBAAoB,CA4LhC","sourcesContent":["import ClientOAuth2 from 'client-oauth2'\nimport crypto from 'crypto'\nimport { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'\nimport { In } from 'typeorm'\n\nimport { config } from '@things-factory/env'\n\nimport { Oauth2Client } from './oauth2-client'\nimport { NewOauth2Client, Oauth2ClientPatch } from './oauth2-client-type'\n\nconst protocol: string = config.get('protocol')\n\n@Resolver(Oauth2Client)\nexport class Oauth2ClientMutation {\n @Directive('@transaction')\n @Mutation(returns => Oauth2Client, { description: 'To create new Oauth2Client' })\n async createOauth2Client(\n @Arg('oauth2Client') oauth2Client: NewOauth2Client,\n @Ctx() context: ResolverContext\n ): Promise<Oauth2Client> {\n const { domain, user, tx } = context.state\n\n const originalProtocol = context.headers['x-forwarded-proto']\n const originalHost = context.headers['x-forwarded-host']\n const originalPort = context.headers['x-forwarded-port']\n\n if (originalProtocol && originalHost) {\n var url: URL = new URL(`${originalProtocol}://${originalHost}`)\n if (originalPort) {\n url.port = originalPort\n }\n } else {\n var url: URL = new URL(context.request.origin)\n }\n\n if (protocol) {\n url.protocol = protocol\n }\n\n url.pathname = '/oauth2-client/callback'\n\n return await tx.getRepository(Oauth2Client).save({\n ...oauth2Client,\n callbackUrl: oauth2Client.callbackUrl || url.href,\n domain,\n creator: user,\n updater: user\n })\n }\n\n @Directive('@transaction')\n @Mutation(returns => Oauth2Client, { description: 'To modify Oauth2Client information' })\n async updateOauth2Client(\n @Arg('id') id: string,\n @Arg('patch') patch: Oauth2ClientPatch,\n @Ctx() context: ResolverContext\n ): Promise<Oauth2Client> {\n const { domain, user, tx } = context.state\n\n const repository = tx.getRepository(Oauth2Client)\n const oauth2Client = await repository.findOne({\n where: { domain: { id: domain.id }, id }\n })\n\n return await repository.save({\n ...oauth2Client,\n ...patch,\n updater: user\n })\n }\n\n @Directive('@transaction')\n @Mutation(returns => Boolean, { description: 'To delete Oauth2Client' })\n async deleteOauth2Client(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<boolean> {\n const { domain, tx } = context.state\n\n await tx.getRepository(Oauth2Client).delete({ domain: { id: domain.id }, id })\n\n return true\n }\n\n @Directive('@transaction')\n @Mutation(returns => Boolean, { description: 'To delete multiple Oauth2Clients' })\n async deleteOauth2Clients(\n @Arg('ids', type => [String]) ids: string[],\n @Ctx() context: ResolverContext\n ): Promise<boolean> {\n const { domain, tx } = context.state\n\n await tx.getRepository(Oauth2Client).delete({\n domain: { id: domain.id },\n id: In(ids)\n })\n\n return true\n }\n\n @Directive('@transaction')\n @Mutation(returns => Boolean, { description: 'To import multiple Oauth2Clients' })\n async importOauth2Clients(\n @Arg('oauth2Clients', type => [Oauth2ClientPatch]) oauth2Clients: Oauth2ClientPatch[],\n @Ctx() context: ResolverContext\n ): Promise<boolean> {\n const { domain, tx } = context.state\n\n await Promise.all(\n oauth2Clients.map(async (oauth2Client: Oauth2ClientPatch) => {\n const createdOauth2Client: Oauth2Client = await tx.getRepository(Oauth2Client).save({ domain, ...oauth2Client })\n })\n )\n\n return true\n }\n\n @Directive('@transaction')\n @Mutation(returns => String, { description: 'To get oauth2 auth URL' })\n async getOauth2AuthUrl(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<string> {\n const { tx } = context.state\n const repository = tx.getRepository(Oauth2Client)\n const oauth2Client = await repository.findOneBy({ id })\n\n const {\n grantType,\n clientId,\n clientSecret,\n callbackUrl,\n accessTokenUrl: accessTokenUri,\n authUrl: authorizationUri,\n scopes\n } = oauth2Client\n\n if (grantType !== 'code') {\n throw new Error(`unsupported grant type: ${grantType}`)\n }\n\n const state = crypto.randomBytes(16).toString('hex')\n await repository.save({\n ...oauth2Client,\n state\n })\n\n var auth = new ClientOAuth2({\n clientId,\n clientSecret,\n accessTokenUri,\n authorizationUri,\n redirectUri: callbackUrl || `${context.origin}/oauth2-client/callback`,\n scopes: scopes?.split(' ') || [],\n state\n })\n\n return await (auth[grantType] as any).getUri()\n }\n\n @Directive('@transaction')\n @Mutation(returns => Oauth2Client, { description: 'To refresh oauth2 access token' })\n async refreshOauth2AccessToken(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<Oauth2Client> {\n const { tx } = context.state\n const repository = tx.getRepository(Oauth2Client)\n const oauth2Client = await repository.findOneBy({ id })\n\n const {\n clientId,\n clientSecret,\n accessTokenUrl: accessTokenUri,\n authUrl: authorizationUri,\n scopes,\n tokenType,\n accessToken,\n refreshToken\n } = oauth2Client\n\n if (!refreshToken) {\n throw new Error('refreshToken not found')\n }\n\n var auth = new ClientOAuth2({\n clientId,\n clientSecret,\n accessTokenUri,\n authorizationUri,\n scopes: scopes?.split(' ')\n })\n\n try {\n var token = await auth.createToken(accessToken, refreshToken, tokenType, {}).refresh()\n } catch (err) {\n throw err\n }\n\n const { accessToken: newAccessToken, refreshToken: newRefreshToken, tokenType: newTokenType, data } = token\n const expires = data?.expires_in ? token.expiresIn(data?.expires_in as any) : null\n\n return await repository.save({\n ...oauth2Client,\n accessToken: newAccessToken,\n refreshToken: newRefreshToken,\n tokenType: newTokenType,\n expires\n })\n }\n}\n"]}
|