Begin refactoring all integrations to separate integration pages by step

This commit is contained in:
Tuan Dang
2023-02-07 11:48:17 +07:00
parent 13838861fb
commit 5ea5887146
13 changed files with 258 additions and 184 deletions
@@ -40,14 +40,16 @@ export const oAuthExchange = async (
throw new Error("Failed to get environments")
}
const integrationDetails = await IntegrationService.handleOAuthExchange({
const integrationAuth = await IntegrationService.handleOAuthExchange({
workspaceId,
integration,
code,
environment: environments[0].slug,
});
return res.status(200).send(integrationDetails);
return res.status(200).send({
integrationAuth
});
} catch (err) {
Sentry.setUser({ email: req.user.email });
Sentry.captureException(err);
@@ -1,4 +1,5 @@
import { Request, Response } from 'express';
import { Types } from 'mongoose';
import * as Sentry from '@sentry/node';
import {
Integration,
@@ -16,20 +17,31 @@ import { eventPushSecrets } from '../../events';
* @returns
*/
export const createIntegration = async (req: Request, res: Response) => {
// TODO: make this more versatile
let integration;
try {
const {
integrationAuthId,
app,
appId,
isActive,
targetEnvironment,
owner
} = req.body;
// initialize new integration after saving integration access token
integration = await new Integration({
workspace: req.integrationAuth.workspace._id,
isActive: false,
app: null,
environment: req.integrationAuth.workspace?.environments[0].slug,
isActive,
app,
appId,
targetEnvironment,
integration: req.integrationAuth.integration,
integrationAuth: req.integrationAuth._id
integrationAuth: new Types.ObjectId(integrationAuthId)
}).save();
// TODO: run sync function
} catch (err) {
Sentry.setUser({ email: req.user.email });
Sentry.captureException(err);
+12 -14
View File
@@ -30,6 +30,7 @@ interface Update {
* @param {String} obj.workspaceId - id of workspace
* @param {String} obj.integration - name of integration
* @param {String} obj.code - code
* @returns {IntegrationAuth} integrationAuth - integration auth after OAuth2 code-token exchange
*/
const handleOAuthExchangeHelper = async ({
workspaceId,
@@ -44,7 +45,7 @@ const handleOAuthExchangeHelper = async ({
}) => {
let action;
let integrationAuth;
let newIntegration;
// let newIntegration;
try {
const bot = await Bot.findOne({
workspace: workspaceId,
@@ -100,25 +101,22 @@ const handleOAuthExchangeHelper = async ({
});
}
// initialize new integration after exchange
newIntegration = await new Integration({
workspace: workspaceId,
isActive: false,
app: null,
environment,
integration,
integrationAuth: integrationAuth._id
}).save();
// // initialize new integration after exchange
// newIntegration = await new Integration({
// workspace: workspaceId,
// isActive: false,
// app: null,
// environment,
// integration,
// integrationAuth: integrationAuth._id
// }).save();
} catch (err) {
Sentry.setUser(null);
Sentry.captureException(err);
throw new Error('Failed to handle OAuth2 code-token exchange')
}
return ({
integrationAuth,
integration: newIntegration
});
return integrationAuth;
}
/**
* Sync/push environment variables in workspace with id [workspaceId] to
+7 -2
View File
@@ -10,7 +10,7 @@ import { ADMIN, MEMBER } from '../../variables';
import { body, param } from 'express-validator';
import { integrationController } from '../../controllers/v1';
router.post( // new: add new integration
router.post( // new: add new integration for integration auth
'/',
requireAuth({
acceptedAuthModes: ['jwt', 'apiKey']
@@ -19,7 +19,12 @@ router.post( // new: add new integration
acceptedRoles: [ADMIN, MEMBER],
location: 'body'
}),
body('integrationAuthId').exists().trim(),
body('integrationAuthId').exists().isString().trim(),
body('app').isString().trim(),
body('isActive').exists().isBoolean(),
body('appId').trim(),
body('targetEnvironment').trim(),
body('owner').trim(),
validateRequest,
integrationController.createIntegration
);
+1 -4
View File
@@ -26,10 +26,7 @@ class IntegrationService {
* @param {String} obj1.environment - workspace environment
* @param {String} obj1.integration - name of integration
* @param {String} obj1.code - code
* @returns {Object} obj2
* @returns {IntegrationAuth} obj2.integrationAuth - integration authorization after OAuth2 code-token exchange
* @returns {Integration} obj2.integration - newly-initialized integration OAuth2 code-token exchange
* @retrun
* @returns {IntegrationAuth} integrationAuth - integration authorization after OAuth2 code-token exchange
*/
static async handleOAuthExchange({
workspaceId,