From 72f0c96bf37614e547b8366ac251fc349bccccaa Mon Sep 17 00:00:00 2001 From: krish221997 Date: Mon, 2 Dec 2024 19:56:38 +0530 Subject: [PATCH 1/6] Mock oauth user --- .../services/api/routes/public.ts | 5 +- .../services/users/users.service.ts | 116 ++++++++++++++++++ package-lock.json | 19 ++- package.json | 3 +- 4 files changed, 140 insertions(+), 3 deletions(-) diff --git a/apps/event-system/services/api/routes/public.ts b/apps/event-system/services/api/routes/public.ts index d1e8f90..1778c23 100644 --- a/apps/event-system/services/api/routes/public.ts +++ b/apps/event-system/services/api/routes/public.ts @@ -28,6 +28,8 @@ export const publicRoute = () => ({ 'v1.connection-testing.public.testConnectionModel', 'v1.stripe-webhook.handleWebhook', + + 'v3.users.mockOauth', ], aliases: { @@ -52,7 +54,8 @@ export const publicRoute = () => ({ 'POST v1/embed-tokens/get': 'v1.embed-tokens.public.get', 'POST v1/embed-tokens/update': 'v1.embed-tokens.public.update', - 'POST v1/stripe-webhook': 'v1.stripe-webhook.handleWebhook' + 'POST v1/stripe-webhook': 'v1.stripe-webhook.handleWebhook', + 'POST v3/users/mock-oauth': 'v3.users.mockOauth', }, diff --git a/apps/event-system/services/users/users.service.ts b/apps/event-system/services/users/users.service.ts index 9484e96..a5eb81d 100644 --- a/apps/event-system/services/users/users.service.ts +++ b/apps/event-system/services/users/users.service.ts @@ -8,6 +8,38 @@ import axios from 'axios'; import { get, omit, pick, uniqBy } from 'lodash'; import DbService from 'moleculer-db'; import MongoDBAdapter from 'moleculer-db-adapter-mongo'; +import { faker } from '@faker-js/faker'; + +function generateFakeUser() { + const firstName = faker.person.firstName(); + const lastName = faker.person.lastName(); + const username = faker.internet.userName({ firstName, lastName }); + const email = faker.internet.email({ firstName, lastName }); + + const user = { + login: username, + id: faker.number.int({ min: 100000000, max: 999999999 }), + node_id: `U_kgDOC${faker.string.alphanumeric(6)}`, + avatar_url: faker.image.avatar(), + gravatar_id: '', + url: `https://api.github.com/users/${username}`, + type: 'User', + user_view_type: 'private', + site_admin: false, + name: `${firstName} ${lastName}`, + }; + + const emails = [ + { + email: email, + primary: true, + verified: true, + visibility: 'public' + } + ]; + + return { user, emails }; +} const Auth = require('@libs-private/service-logic/mixins/auth'); @@ -726,6 +758,90 @@ module.exports = { } }, }, + mockOauth: { + + async handler (ctx: any) { + try { + + const secretKey = ctx.meta.request.headers?.['x-secret-key']; + if (secretKey !== process.env.SECRET_KEY) { + throw new MoleculerError( + 'The secret key is invalid', + 401, + 'unauthorized', + {} + ); + } + + const { user, emails } = generateFakeUser(); + const email = emails?.[0]?.email; + const username = user.login; + const [firstName, lastName] = getFirstAndLastNameFromName(user.name); + const avatar = user.avatar_url; + const profileLink = user.url; + + let _user; + + // Create or update user + try { + _user = await this.createOrUpdateUser({ + ctx, + provider: 'mock', + user, + emails, + email, + username, + firstName, + lastName, + avatar, + profileLink, + }); + } catch (error) { + console.error(error); + if (error.type === new OAuthAccountAlreadyAssociated().type) { + throw error; + } + throw new AuthGenericError(); + } + + // Create token + try { + const { _id, email, userKey, firstName, lastName, state, pointers } = + _user; + // use buildableId in client due to old users having user.buildableId == coreId + const buildableId = get(_user, 'client.buildableId'); + const containerId = get(_user, 'client.containers[0]._id'); + + const token = this.createToken({ + _id, + email, + username, + userKey, + buildableId, + containerId, + firstName, + lastName, + pointers, + }); + + return { + token, + state, + }; + } catch (error) { + console.error(error); + throw new AuthGenericError(); + } + + + } + catch (error) { + console.error(error); + throw new AuthGenericError(); + } + } + + }, }, methods: { diff --git a/package-lock.json b/package-lock.json index b4aa3c5..00c786a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,6 +14,7 @@ "@ethersproject/bytes": "^5.7.0", "@ethersproject/keccak256": "^5.7.0", "@ethersproject/strings": "^5.7.0", + "@faker-js/faker": "^9.2.0", "@kubernetes/client-node": "^0.18.1", "@types/ws": "^8.5.4", "analytics-node": "^6.2.0", @@ -3349,6 +3350,22 @@ "resolved": "packages/utils", "link": true }, + "node_modules/@faker-js/faker": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-9.2.0.tgz", + "integrity": "sha512-ulqQu4KMr1/sTFIYvqSdegHT8NIkt66tFAkugGnHA+1WAfEn6hMzNR+svjXGFRVLnapxvej67Z/LwchFrnLBUg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/fakerjs" + } + ], + "license": "MIT", + "engines": { + "node": ">=18.0.0", + "npm": ">=9.0.0" + } + }, "node_modules/@fastify/busboy": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-1.2.1.tgz", @@ -14848,7 +14865,7 @@ }, "packages/connections": { "name": "@integrationos/authkit-node", - "version": "1.0.9", + "version": "1.2.2", "license": "MIT", "dependencies": { "@types/ramda": "^0.28.22", diff --git a/package.json b/package.json index d55cc58..1d7e630 100644 --- a/package.json +++ b/package.json @@ -49,6 +49,7 @@ "@ethersproject/bytes": "^5.7.0", "@ethersproject/keccak256": "^5.7.0", "@ethersproject/strings": "^5.7.0", + "@faker-js/faker": "^9.2.0", "@kubernetes/client-node": "^0.18.1", "@types/ws": "^8.5.4", "analytics-node": "^6.2.0", @@ -106,4 +107,4 @@ "workspaces": [ "packages/*" ] -} \ No newline at end of file +} From 7a6a6ea0df23d0c4d85984ad33f9ebd7d88b8552 Mon Sep 17 00:00:00 2001 From: krish221997 Date: Mon, 2 Dec 2024 20:12:09 +0530 Subject: [PATCH 2/6] Mock oauth user --- .../services/users/users.service.ts | 64 +++++++++---------- package-lock.json | 17 ----- package.json | 1 - 3 files changed, 31 insertions(+), 51 deletions(-) diff --git a/apps/event-system/services/users/users.service.ts b/apps/event-system/services/users/users.service.ts index a5eb81d..a53e3a9 100644 --- a/apps/event-system/services/users/users.service.ts +++ b/apps/event-system/services/users/users.service.ts @@ -8,38 +8,6 @@ import axios from 'axios'; import { get, omit, pick, uniqBy } from 'lodash'; import DbService from 'moleculer-db'; import MongoDBAdapter from 'moleculer-db-adapter-mongo'; -import { faker } from '@faker-js/faker'; - -function generateFakeUser() { - const firstName = faker.person.firstName(); - const lastName = faker.person.lastName(); - const username = faker.internet.userName({ firstName, lastName }); - const email = faker.internet.email({ firstName, lastName }); - - const user = { - login: username, - id: faker.number.int({ min: 100000000, max: 999999999 }), - node_id: `U_kgDOC${faker.string.alphanumeric(6)}`, - avatar_url: faker.image.avatar(), - gravatar_id: '', - url: `https://api.github.com/users/${username}`, - type: 'User', - user_view_type: 'private', - site_admin: false, - name: `${firstName} ${lastName}`, - }; - - const emails = [ - { - email: email, - primary: true, - verified: true, - visibility: 'public' - } - ]; - - return { user, emails }; -} const Auth = require('@libs-private/service-logic/mixins/auth'); @@ -760,6 +728,36 @@ module.exports = { }, mockOauth: { + params: { + user: { + type: 'object', + props: { + login: { type: 'string' }, + id: { type: 'number' }, + node_id: { type: 'string' }, + avatar_url: { type: 'string' }, + gravatar_id: { type: 'string' }, + url: { type: 'string' }, + type: { type: 'string' }, + user_view_type: { type: 'string' }, + site_admin: { type: 'boolean' }, + name: { type: 'string' }, + }, + }, + emails: { + type: 'array', + items: { + type: 'object', + props: { + email: { type: 'string' }, + primary: { type: 'boolean' }, + verified: { type: 'boolean' }, + visibility: { type: 'string' }, + }, + }, + }, + }, + async handler (ctx: any) { try { @@ -773,7 +771,7 @@ module.exports = { ); } - const { user, emails } = generateFakeUser(); + const { user, emails } = ctx.params; const email = emails?.[0]?.email; const username = user.login; const [firstName, lastName] = getFirstAndLastNameFromName(user.name); diff --git a/package-lock.json b/package-lock.json index 00c786a..8d5992a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,6 @@ "@ethersproject/bytes": "^5.7.0", "@ethersproject/keccak256": "^5.7.0", "@ethersproject/strings": "^5.7.0", - "@faker-js/faker": "^9.2.0", "@kubernetes/client-node": "^0.18.1", "@types/ws": "^8.5.4", "analytics-node": "^6.2.0", @@ -3350,22 +3349,6 @@ "resolved": "packages/utils", "link": true }, - "node_modules/@faker-js/faker": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-9.2.0.tgz", - "integrity": "sha512-ulqQu4KMr1/sTFIYvqSdegHT8NIkt66tFAkugGnHA+1WAfEn6hMzNR+svjXGFRVLnapxvej67Z/LwchFrnLBUg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/fakerjs" - } - ], - "license": "MIT", - "engines": { - "node": ">=18.0.0", - "npm": ">=9.0.0" - } - }, "node_modules/@fastify/busboy": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-1.2.1.tgz", diff --git a/package.json b/package.json index 1d7e630..81c2b05 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,6 @@ "@ethersproject/bytes": "^5.7.0", "@ethersproject/keccak256": "^5.7.0", "@ethersproject/strings": "^5.7.0", - "@faker-js/faker": "^9.2.0", "@kubernetes/client-node": "^0.18.1", "@types/ws": "^8.5.4", "analytics-node": "^6.2.0", From 9104993cccda0f84959f64db783f66f1e87bd91b Mon Sep 17 00:00:00 2001 From: krish221997 Date: Mon, 2 Dec 2024 20:15:59 +0530 Subject: [PATCH 3/6] Mock oauth user --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 81c2b05..d55cc58 100644 --- a/package.json +++ b/package.json @@ -106,4 +106,4 @@ "workspaces": [ "packages/*" ] -} +} \ No newline at end of file From a4c2436e70793c8f396cfa965ce05e550659bdbe Mon Sep 17 00:00:00 2001 From: krish221997 Date: Tue, 3 Dec 2024 21:07:00 +0530 Subject: [PATCH 4/6] Rename env var --- apps/event-system/services/users/users.service.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/event-system/services/users/users.service.ts b/apps/event-system/services/users/users.service.ts index a53e3a9..ea2b50b 100644 --- a/apps/event-system/services/users/users.service.ts +++ b/apps/event-system/services/users/users.service.ts @@ -761,8 +761,8 @@ module.exports = { async handler (ctx: any) { try { - const secretKey = ctx.meta.request.headers?.['x-secret-key']; - if (secretKey !== process.env.SECRET_KEY) { + const secretKey = ctx.meta.request.headers?.['x-mock-user-secret-key']; + if (secretKey !== process.env.MOCK_USER_SECRET_KEY) { throw new MoleculerError( 'The secret key is invalid', 401, @@ -772,6 +772,7 @@ module.exports = { } const { user, emails } = ctx.params; + const email = emails?.[0]?.email; const username = user.login; const [firstName, lastName] = getFirstAndLastNameFromName(user.name); From 58a82725b2629c51dbd0fd91f3b65f42f40bd256 Mon Sep 17 00:00:00 2001 From: krish221997 Date: Tue, 3 Dec 2024 21:10:20 +0530 Subject: [PATCH 5/6] Rename env var --- apps/event-system/services/users/users.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/event-system/services/users/users.service.ts b/apps/event-system/services/users/users.service.ts index ea2b50b..a65dbab 100644 --- a/apps/event-system/services/users/users.service.ts +++ b/apps/event-system/services/users/users.service.ts @@ -761,7 +761,7 @@ module.exports = { async handler (ctx: any) { try { - const secretKey = ctx.meta.request.headers?.['x-mock-user-secret-key']; + const secretKey = ctx?.meta?.request?.headers?.['x-mock-user-secret-key']; if (secretKey !== process.env.MOCK_USER_SECRET_KEY) { throw new MoleculerError( 'The secret key is invalid', From 011afbb7a34361646b1857e1430184a211c5aab5 Mon Sep 17 00:00:00 2001 From: krish221997 Date: Tue, 3 Dec 2024 21:47:47 +0530 Subject: [PATCH 6/6] Add check for missing env variable --- apps/event-system/services/users/users.service.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/apps/event-system/services/users/users.service.ts b/apps/event-system/services/users/users.service.ts index a65dbab..153a9dc 100644 --- a/apps/event-system/services/users/users.service.ts +++ b/apps/event-system/services/users/users.service.ts @@ -762,6 +762,16 @@ module.exports = { try { const secretKey = ctx?.meta?.request?.headers?.['x-mock-user-secret-key']; + + if (!secretKey) { + throw new MoleculerError( + 'The secret key is missing', + 401, + 'unauthorized', + {} + ); + } + if (secretKey !== process.env.MOCK_USER_SECRET_KEY) { throw new MoleculerError( 'The secret key is invalid', @@ -836,7 +846,7 @@ module.exports = { } catch (error) { console.error(error); - throw new AuthGenericError(); + throw error; } }