mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-16 15:31:19 +00:00
Complete v1 loop for bot-based integrations
This commit is contained in:
@@ -18,7 +18,7 @@ interface BotKey {
|
||||
export const getBotByWorkspaceId = async (req: Request, res: Response) => {
|
||||
let bot;
|
||||
try {
|
||||
const { workspaceId } = req.body;
|
||||
const { workspaceId } = req.params;
|
||||
|
||||
bot = await Bot.findOne({
|
||||
workspace: workspaceId
|
||||
@@ -58,13 +58,24 @@ export const setBotActiveState = async (req: Request, res: Response) => {
|
||||
|
||||
if (isActive) {
|
||||
// bot state set to active -> share workspace key with bot
|
||||
await new BotKey({
|
||||
if (!botKey?.encryptedKey || !botKey?.nonce) {
|
||||
return res.status(400).send({
|
||||
message: 'Failed to set bot state to active - missing bot key'
|
||||
});
|
||||
}
|
||||
|
||||
await BotKey.findOneAndUpdate({
|
||||
workspace: req.bot.workspace
|
||||
}, {
|
||||
encryptedKey: botKey.encryptedKey,
|
||||
nonce: botKey.nonce,
|
||||
sender: req.user._id,
|
||||
receiver: req.bot._id,
|
||||
bot: req.bot._id,
|
||||
workspace: req.bot.workspace
|
||||
}).save();
|
||||
}, {
|
||||
upsert: true,
|
||||
new: true
|
||||
});
|
||||
} else {
|
||||
// case: bot state set to inactive -> delete bot's workspace key
|
||||
await BotKey.deleteOne({
|
||||
|
||||
@@ -3,15 +3,13 @@ import * as Sentry from '@sentry/node';
|
||||
import axios from 'axios';
|
||||
import { readFileSync } from 'fs';
|
||||
import { IntegrationAuth, Integration } from '../models';
|
||||
import { processOAuthTokenRes } from '../helpers/integrationAuth';
|
||||
import { INTEGRATION_SET, ENV_DEV } from '../variables';
|
||||
import { OAUTH_CLIENT_SECRET_HEROKU, OAUTH_TOKEN_URL_HEROKU } from '../config';
|
||||
|
||||
import { IntegrationService } from '../services';
|
||||
import { getApps } from '../integrations';
|
||||
|
||||
/**
|
||||
* Perform OAuth2 code-token exchange as part of integration [integration] for workspace with id [workspaceId]
|
||||
* Note: integration [integration] must be set up compatible/designed for OAuth2
|
||||
* @param req
|
||||
* @param res
|
||||
* @returns
|
||||
@@ -21,8 +19,6 @@ export const oAuthExchange = async (
|
||||
res: Response
|
||||
) => {
|
||||
try {
|
||||
// let clientSecret;
|
||||
|
||||
const { workspaceId, code, integration } = req.body;
|
||||
|
||||
if (!INTEGRATION_SET.has(integration))
|
||||
@@ -33,42 +29,6 @@ export const oAuthExchange = async (
|
||||
integration,
|
||||
code
|
||||
});
|
||||
|
||||
// // use correct client secret
|
||||
// switch (integration) {
|
||||
// case 'heroku':
|
||||
// clientSecret = OAUTH_CLIENT_SECRET_HEROKU;
|
||||
// }
|
||||
|
||||
// // TODO: unfinished - make compatible with other integration types
|
||||
// const res = await axios.post( // this response may be different for each integration
|
||||
// OAUTH_TOKEN_URL_HEROKU!,
|
||||
// new URLSearchParams({
|
||||
// grant_type: 'authorization_code',
|
||||
// code: code,
|
||||
// client_secret: clientSecret
|
||||
// } as any)
|
||||
// );
|
||||
|
||||
// const integrationAuth = await processOAuthTokenRes({
|
||||
// workspaceId,
|
||||
// integration,
|
||||
// res
|
||||
// });
|
||||
|
||||
// // create or replace integration
|
||||
// const integrationObj = await Integration.findOneAndUpdate(
|
||||
// { workspace: workspaceId, integration },
|
||||
// {
|
||||
// workspace: workspaceId,
|
||||
// environment: ENV_DEV,
|
||||
// isActive: false,
|
||||
// app: null,
|
||||
// integration,
|
||||
// integrationAuth: integrationAuth._id
|
||||
// },
|
||||
// { upsert: true, new: true }
|
||||
// );
|
||||
} catch (err) {
|
||||
Sentry.setUser(null);
|
||||
Sentry.captureException(err);
|
||||
@@ -83,26 +43,25 @@ export const oAuthExchange = async (
|
||||
};
|
||||
|
||||
/**
|
||||
* Return list of applications allowed for integration with id [integrationAuthId]
|
||||
* Return list of applications allowed for integration with integration authorization id [integrationAuthId]
|
||||
* @param req
|
||||
* @param res
|
||||
* @returns
|
||||
*/
|
||||
export const getIntegrationAuthApps = async (req: Request, res: Response) => {
|
||||
// TODO: unfinished - make compatible with other integration types
|
||||
let apps;
|
||||
try {
|
||||
const res = await axios.get('https://api.heroku.com/apps', {
|
||||
headers: {
|
||||
Accept: 'application/vnd.heroku+json; version=3',
|
||||
Authorization: 'Bearer ' + req.accessToken
|
||||
}
|
||||
apps = await getApps({
|
||||
integration: req.integrationAuth.integration,
|
||||
accessToken: req.accessToken
|
||||
});
|
||||
|
||||
apps = res.data.map((a: any) => ({
|
||||
name: a.name
|
||||
}));
|
||||
} catch (err) {}
|
||||
} catch (err) {
|
||||
Sentry.setUser(null);
|
||||
Sentry.captureException(err);
|
||||
return res.status(400).send({
|
||||
message: 'Failed to get integration authorization applications'
|
||||
});
|
||||
}
|
||||
|
||||
return res.status(200).send({
|
||||
apps
|
||||
|
||||
@@ -49,7 +49,6 @@ export const getIntegrations = async (req: Request, res: Response) => {
|
||||
});
|
||||
};
|
||||
|
||||
// TODO: deprecate
|
||||
/**
|
||||
* Sync secrets [secrets] to integration with id [integrationId]
|
||||
* @param req
|
||||
@@ -57,7 +56,10 @@ export const getIntegrations = async (req: Request, res: Response) => {
|
||||
* @returns
|
||||
*/
|
||||
export const syncIntegration = async (req: Request, res: Response) => {
|
||||
// TODO: unfinished - make more versatile to accomodate for other integrations
|
||||
// NOTE TO ALL DEVS: THIS FUNCTION IS BEING DEPRECATED. IGNORE IT BUT KEEP IT FOR NOW.
|
||||
|
||||
return;
|
||||
|
||||
try {
|
||||
const { key, secrets }: { key: Key; secrets: PushSecret[] } = req.body;
|
||||
const symmetricKey = decryptAsymmetric({
|
||||
@@ -106,6 +108,7 @@ export const syncIntegration = async (req: Request, res: Response) => {
|
||||
*/
|
||||
export const modifyIntegration = async (req: Request, res: Response) => {
|
||||
let integration;
|
||||
|
||||
try {
|
||||
const { update } = req.body;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user