mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-06 12:27:31 +00:00
Convert TS to JS
This commit is contained in:
@@ -0,0 +1,18 @@
|
|||||||
|
/* eslint-disable @typescript-eslint/ban-ts-comment */
|
||||||
|
/* eslint-disable no-undef */
|
||||||
|
import posthog from 'posthog-js';
|
||||||
|
|
||||||
|
import { ENV, POSTHOG_API_KEY, POSTHOG_HOST } from '../utilities/config';
|
||||||
|
|
||||||
|
export const initPostHog = () => {
|
||||||
|
if (typeof window !== 'undefined') {
|
||||||
|
// @ts-ignore
|
||||||
|
if (ENV == 'production' && TELEMETRY_CAPTURING_ENABLED) {
|
||||||
|
posthog.init(POSTHOG_API_KEY, {
|
||||||
|
api_host: POSTHOG_HOST
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return posthog;
|
||||||
|
};
|
||||||
@@ -1,14 +1,27 @@
|
|||||||
import React from "react";
|
import React from 'react';
|
||||||
|
|
||||||
import StripeRedirect from "~/pages/api/organization/StripeRedirect";
|
import StripeRedirect from '~/pages/api/organization/StripeRedirect';
|
||||||
|
|
||||||
export default function Plan({ plan }) {
|
interface Props {
|
||||||
|
plan: {
|
||||||
|
name: string;
|
||||||
|
price: string;
|
||||||
|
priceExplanation: string;
|
||||||
|
text: string;
|
||||||
|
subtext: string;
|
||||||
|
buttonTextMain: string;
|
||||||
|
buttonTextSecondary: string;
|
||||||
|
current: boolean;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function Plan({ plan }: Props) {
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
className={`relative flex flex-col justify-between border border-2 min-w-fit w-96 rounded-lg h-68 mr-4 bg-mineshaft-800 ${
|
className={`relative flex flex-col justify-between border-2 min-w-fit w-96 rounded-lg h-68 mr-4 bg-mineshaft-800 ${
|
||||||
(plan.name != "Starter") & (plan.current == true)
|
plan.name != 'Starter' && plan.current == true
|
||||||
? "border-primary"
|
? 'border-primary'
|
||||||
: "border-chicago-700"
|
: 'border-chicago-700'
|
||||||
}
|
}
|
||||||
`}
|
`}
|
||||||
>
|
>
|
||||||
@@ -36,7 +49,7 @@ export default function Plan({ plan }) {
|
|||||||
<div className="flex flex-row items-center">
|
<div className="flex flex-row items-center">
|
||||||
{plan.current == false ? (
|
{plan.current == false ? (
|
||||||
<>
|
<>
|
||||||
{plan.buttonTextMain == "Schedule a Demo" ? (
|
{plan.buttonTextMain == 'Schedule a Demo' ? (
|
||||||
<a href="/scheduledemo" target='_blank rel="noopener"'>
|
<a href="/scheduledemo" target='_blank rel="noopener"'>
|
||||||
<div className="relative z-10 mx-5 mt-3 mb-4 py-2 px-4 border border-1 border-gray-600 hover:text-black hover:border-primary text-gray-400 font-semibold hover:bg-primary bg-bunker duration-200 cursor-pointer rounded-md flex w-max">
|
<div className="relative z-10 mx-5 mt-3 mb-4 py-2 px-4 border border-1 border-gray-600 hover:text-black hover:border-primary text-gray-400 font-semibold hover:bg-primary bg-bunker duration-200 cursor-pointer rounded-md flex w-max">
|
||||||
{plan.buttonTextMain}
|
{plan.buttonTextMain}
|
||||||
@@ -45,15 +58,15 @@ export default function Plan({ plan }) {
|
|||||||
) : (
|
) : (
|
||||||
<div
|
<div
|
||||||
className={`relative z-10 mx-5 mt-3 mb-4 py-2 px-4 border border-1 border-gray-600 text-gray-400 font-semibold ${
|
className={`relative z-10 mx-5 mt-3 mb-4 py-2 px-4 border border-1 border-gray-600 text-gray-400 font-semibold ${
|
||||||
plan.buttonTextMain == "Downgrade"
|
plan.buttonTextMain == 'Downgrade'
|
||||||
? "hover:bg-red hover:text-white hover:border-red"
|
? 'hover:bg-red hover:text-white hover:border-red'
|
||||||
: "hover:bg-primary hover:text-black hover:border-primary"
|
: 'hover:bg-primary hover:text-black hover:border-primary'
|
||||||
} bg-bunker duration-200 cursor-pointer rounded-md flex w-max`}
|
} bg-bunker duration-200 cursor-pointer rounded-md flex w-max`}
|
||||||
>
|
>
|
||||||
<button
|
<button
|
||||||
onClick={() =>
|
onClick={() =>
|
||||||
StripeRedirect({
|
StripeRedirect({
|
||||||
orgId: localStorage.getItem("orgData.id"),
|
orgId: localStorage.getItem('orgData.id')
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
@@ -61,7 +74,10 @@ export default function Plan({ plan }) {
|
|||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
<a href="https://infisical.com/pricing" target='_blank rel="noopener"'>
|
<a
|
||||||
|
href="https://infisical.com/pricing"
|
||||||
|
target='_blank rel="noopener"'
|
||||||
|
>
|
||||||
<div className="relative z-10 text-gray-400 font-semibold hover:text-primary duration-200 cursor-pointer mb-0.5">
|
<div className="relative z-10 text-gray-400 font-semibold hover:text-primary duration-200 cursor-pointer mb-0.5">
|
||||||
{plan.buttonTextSecondary}
|
{plan.buttonTextSecondary}
|
||||||
</div>
|
</div>
|
||||||
@@ -70,9 +86,9 @@ export default function Plan({ plan }) {
|
|||||||
) : (
|
) : (
|
||||||
<div
|
<div
|
||||||
className={`h-8 w-full rounded-b-md flex justify-center items-center z-10 ${
|
className={`h-8 w-full rounded-b-md flex justify-center items-center z-10 ${
|
||||||
(plan.name != "Starter") & (plan.current == true)
|
plan.name != 'Starter' && plan.current == true
|
||||||
? "bg-primary"
|
? 'bg-primary'
|
||||||
: "bg-chicago-700"
|
: 'bg-chicago-700'
|
||||||
}`}
|
}`}
|
||||||
>
|
>
|
||||||
<p className="text-xs text-black font-semibold">CURRENT PLAN</p>
|
<p className="text-xs text-black font-semibold">CURRENT PLAN</p>
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
import token from "~/pages/api/auth/Token";
|
|
||||||
|
|
||||||
export default class SecurityClient {
|
|
||||||
static #token = "";
|
|
||||||
|
|
||||||
constructor() {}
|
|
||||||
|
|
||||||
static setToken(token) {
|
|
||||||
this.#token = token;
|
|
||||||
}
|
|
||||||
|
|
||||||
static async fetchCall(resource, options) {
|
|
||||||
let req = new Request(resource, options);
|
|
||||||
|
|
||||||
if (this.#token == "") {
|
|
||||||
this.setToken(await token());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.#token) {
|
|
||||||
req.headers.set("Authorization", "Bearer " + this.#token);
|
|
||||||
return fetch(req);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
import token from '~/pages/api/auth/Token';
|
||||||
|
|
||||||
|
export default class SecurityClient {
|
||||||
|
static #token = '';
|
||||||
|
|
||||||
|
constructor() {}
|
||||||
|
|
||||||
|
static setToken(token: string) {
|
||||||
|
this.#token = token;
|
||||||
|
}
|
||||||
|
|
||||||
|
static async fetchCall(
|
||||||
|
resource: RequestInfo,
|
||||||
|
options?: RequestInit | undefined
|
||||||
|
) {
|
||||||
|
const req = new Request(resource, options);
|
||||||
|
|
||||||
|
if (this.#token == '') {
|
||||||
|
this.setToken(await token());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.#token) {
|
||||||
|
req.headers.set('Authorization', 'Bearer ' + this.#token);
|
||||||
|
return fetch(req);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,98 +0,0 @@
|
|||||||
import issueBackupPrivateKey from "~/pages/api/auth/IssueBackupPrivateKey";
|
|
||||||
import SRP1 from "~/pages/api/auth/SRP1";
|
|
||||||
|
|
||||||
import generateBackupPDF from "../generateBackupPDF";
|
|
||||||
import Aes256Gcm from "./aes-256-gcm";
|
|
||||||
|
|
||||||
const nacl = require("tweetnacl");
|
|
||||||
nacl.util = require("tweetnacl-util");
|
|
||||||
const jsrp = require("jsrp");
|
|
||||||
const clientPassword = new jsrp.client();
|
|
||||||
const clientKey = new jsrp.client();
|
|
||||||
const crypto = require("crypto");
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This function loggs in the user (whether it's right after signup, or a normal login)
|
|
||||||
* @param {*} email
|
|
||||||
* @param {*} password
|
|
||||||
* @param {*} setErrorLogin
|
|
||||||
* @param {*} router
|
|
||||||
* @param {*} isSignUp
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
const issueBackupKey = async ({
|
|
||||||
email,
|
|
||||||
password,
|
|
||||||
personalName,
|
|
||||||
setBackupKeyError,
|
|
||||||
setBackupKeyIssued,
|
|
||||||
}) => {
|
|
||||||
try {
|
|
||||||
setBackupKeyError(false);
|
|
||||||
setBackupKeyIssued(false);
|
|
||||||
clientPassword.init(
|
|
||||||
{
|
|
||||||
username: email,
|
|
||||||
password: password,
|
|
||||||
},
|
|
||||||
async () => {
|
|
||||||
const clientPublicKey = clientPassword.getPublicKey();
|
|
||||||
|
|
||||||
let serverPublicKey, salt;
|
|
||||||
try {
|
|
||||||
const res = await SRP1({
|
|
||||||
clientPublicKey: clientPublicKey,
|
|
||||||
});
|
|
||||||
serverPublicKey = res.serverPublicKey;
|
|
||||||
salt = res.salt;
|
|
||||||
} catch (err) {
|
|
||||||
setBackupKeyError(true);
|
|
||||||
console.log("Wrong current password", err, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
clientPassword.setSalt(salt);
|
|
||||||
clientPassword.setServerPublicKey(serverPublicKey);
|
|
||||||
const clientProof = clientPassword.getProof(); // called M1
|
|
||||||
|
|
||||||
const generatedKey = crypto.randomBytes(16).toString("hex");
|
|
||||||
|
|
||||||
clientKey.init(
|
|
||||||
{
|
|
||||||
username: email,
|
|
||||||
password: generatedKey,
|
|
||||||
},
|
|
||||||
async () => {
|
|
||||||
clientKey.createVerifier(async (err, result) => {
|
|
||||||
let { ciphertext, iv, tag } = Aes256Gcm.encrypt(
|
|
||||||
localStorage.getItem("PRIVATE_KEY"),
|
|
||||||
generatedKey
|
|
||||||
);
|
|
||||||
|
|
||||||
const res = await issueBackupPrivateKey({
|
|
||||||
encryptedPrivateKey: ciphertext,
|
|
||||||
iv,
|
|
||||||
tag,
|
|
||||||
salt: result.salt,
|
|
||||||
verifier: result.verifier,
|
|
||||||
clientProof,
|
|
||||||
});
|
|
||||||
|
|
||||||
if (res.status == 400) {
|
|
||||||
setBackupKeyError(true);
|
|
||||||
} else if (res.status == 200) {
|
|
||||||
generateBackupPDF(personalName, email, generatedKey);
|
|
||||||
setBackupKeyIssued(true);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
} catch (error) {
|
|
||||||
setBackupKeyError(true);
|
|
||||||
console.log("Failed to issue a backup key");
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
|
|
||||||
export default issueBackupKey;
|
|
||||||
@@ -0,0 +1,112 @@
|
|||||||
|
import issueBackupPrivateKey from '~/pages/api/auth/IssueBackupPrivateKey';
|
||||||
|
import SRP1 from '~/pages/api/auth/SRP1';
|
||||||
|
|
||||||
|
import { tempLocalStorage } from '../checks/tempLocalStorage';
|
||||||
|
import generateBackupPDF from '../generateBackupPDF';
|
||||||
|
import Aes256Gcm from './aes-256-gcm';
|
||||||
|
|
||||||
|
const nacl = require('tweetnacl');
|
||||||
|
nacl.util = require('tweetnacl-util');
|
||||||
|
const jsrp = require('jsrp');
|
||||||
|
const clientPassword = new jsrp.client();
|
||||||
|
const clientKey = new jsrp.client();
|
||||||
|
const crypto = require('crypto');
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
email: string;
|
||||||
|
password: string;
|
||||||
|
personalName: string;
|
||||||
|
setBackupKeyError: any;
|
||||||
|
setBackupKeyIssued: any;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function loggs in the user (whether it's right after signup, or a normal login)
|
||||||
|
* @param {*} email
|
||||||
|
* @param {*} password
|
||||||
|
* @param {*} setErrorLogin
|
||||||
|
* @param {*} router
|
||||||
|
* @param {*} isSignUp
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
const issueBackupKey = async ({
|
||||||
|
email,
|
||||||
|
password,
|
||||||
|
personalName,
|
||||||
|
setBackupKeyError,
|
||||||
|
setBackupKeyIssued
|
||||||
|
}: Props) => {
|
||||||
|
try {
|
||||||
|
setBackupKeyError(false);
|
||||||
|
setBackupKeyIssued(false);
|
||||||
|
clientPassword.init(
|
||||||
|
{
|
||||||
|
username: email,
|
||||||
|
password: password
|
||||||
|
},
|
||||||
|
async () => {
|
||||||
|
const clientPublicKey = clientPassword.getPublicKey();
|
||||||
|
|
||||||
|
let serverPublicKey, salt;
|
||||||
|
try {
|
||||||
|
const res = await SRP1({
|
||||||
|
clientPublicKey: clientPublicKey
|
||||||
|
});
|
||||||
|
serverPublicKey = res.serverPublicKey;
|
||||||
|
salt = res.salt;
|
||||||
|
} catch (err) {
|
||||||
|
setBackupKeyError(true);
|
||||||
|
console.log('Wrong current password', err, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
clientPassword.setSalt(salt);
|
||||||
|
clientPassword.setServerPublicKey(serverPublicKey);
|
||||||
|
const clientProof = clientPassword.getProof(); // called M1
|
||||||
|
|
||||||
|
const generatedKey = crypto.randomBytes(16).toString('hex');
|
||||||
|
|
||||||
|
clientKey.init(
|
||||||
|
{
|
||||||
|
username: email,
|
||||||
|
password: generatedKey
|
||||||
|
},
|
||||||
|
async () => {
|
||||||
|
clientKey.createVerifier(
|
||||||
|
async (_: any, result: { salt: string; verifier: string }) => {
|
||||||
|
// TODO: Fix this
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||||
|
// @ts-ignore
|
||||||
|
const { ciphertext, iv, tag } = Aes256Gcm.encrypt(
|
||||||
|
tempLocalStorage('PRIVATE_KEY'),
|
||||||
|
generatedKey
|
||||||
|
);
|
||||||
|
|
||||||
|
const res = await issueBackupPrivateKey({
|
||||||
|
encryptedPrivateKey: ciphertext,
|
||||||
|
iv,
|
||||||
|
tag,
|
||||||
|
salt: result.salt,
|
||||||
|
verifier: result.verifier,
|
||||||
|
clientProof
|
||||||
|
});
|
||||||
|
|
||||||
|
if (res && res.status == 400) {
|
||||||
|
setBackupKeyError(true);
|
||||||
|
} else if (res && res.status == 200) {
|
||||||
|
generateBackupPDF(personalName, email, generatedKey);
|
||||||
|
setBackupKeyIssued(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
} catch (error) {
|
||||||
|
setBackupKeyError(true);
|
||||||
|
console.log('Failed to issue a backup key');
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default issueBackupKey;
|
||||||
@@ -6,21 +6,21 @@ const LINE =
|
|||||||
* @param {Buffer} src - source buffer
|
* @param {Buffer} src - source buffer
|
||||||
* @returns {String} text - text of buffer
|
* @returns {String} text - text of buffer
|
||||||
*/
|
*/
|
||||||
function parse(src) {
|
function parse(src: Buffer) {
|
||||||
const obj = {};
|
const obj: Record<string, string> = {};
|
||||||
|
|
||||||
// Convert buffer to string
|
// Convert buffer to string
|
||||||
let lines = src.toString();
|
let lines = src.toString();
|
||||||
|
|
||||||
// Convert line breaks to same format
|
// Convert line breaks to same format
|
||||||
lines = lines.replace(/\r\n?/gm, "\n");
|
lines = lines.replace(/\r\n?/gm, '\n');
|
||||||
|
|
||||||
let match;
|
let match;
|
||||||
while ((match = LINE.exec(lines)) != null) {
|
while ((match = LINE.exec(lines)) != null) {
|
||||||
const key = match[1];
|
const key = match[1];
|
||||||
|
|
||||||
// Default undefined or null to empty string
|
// Default undefined or null to empty string
|
||||||
let value = match[2] || "";
|
let value = match[2] || '';
|
||||||
|
|
||||||
// Remove whitespace
|
// Remove whitespace
|
||||||
value = value.trim();
|
value = value.trim();
|
||||||
@@ -29,12 +29,12 @@ function parse(src) {
|
|||||||
const maybeQuote = value[0];
|
const maybeQuote = value[0];
|
||||||
|
|
||||||
// Remove surrounding quotes
|
// Remove surrounding quotes
|
||||||
value = value.replace(/^(['"`])([\s\S]*)\1$/gm, "$2");
|
value = value.replace(/^(['"`])([\s\S]*)\1$/gm, '$2');
|
||||||
|
|
||||||
// Expand newlines if double quoted
|
// Expand newlines if double quoted
|
||||||
if (maybeQuote === '"') {
|
if (maybeQuote === '"') {
|
||||||
value = value.replace(/\\n/g, "\n");
|
value = value.replace(/\\n/g, '\n');
|
||||||
value = value.replace(/\\r/g, "\r");
|
value = value.replace(/\\r/g, '\r');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add to object
|
// Add to object
|
||||||
+5
-5
@@ -3,19 +3,19 @@
|
|||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
const guidGenerator = () => {
|
const guidGenerator = () => {
|
||||||
var S4 = function () {
|
const S4 = function () {
|
||||||
return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
|
return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
|
||||||
};
|
};
|
||||||
return (
|
return (
|
||||||
S4() +
|
S4() +
|
||||||
S4() +
|
S4() +
|
||||||
"-" +
|
'-' +
|
||||||
S4() +
|
S4() +
|
||||||
"-" +
|
'-' +
|
||||||
S4() +
|
S4() +
|
||||||
"-" +
|
'-' +
|
||||||
S4() +
|
S4() +
|
||||||
"-" +
|
'-' +
|
||||||
S4() +
|
S4() +
|
||||||
S4() +
|
S4() +
|
||||||
S4()
|
S4()
|
||||||
+33
-27
@@ -1,22 +1,30 @@
|
|||||||
import getSecrets from "~/pages/api/files/GetSecrets";
|
import getSecrets from '~/pages/api/files/GetSecrets';
|
||||||
|
|
||||||
import { envMapping } from "../../../public/data/frequentConstants";
|
import { envMapping } from '../../../public/data/frequentConstants';
|
||||||
import guidGenerator from "../randomId";
|
import guidGenerator from '../randomId';
|
||||||
|
|
||||||
const {
|
const {
|
||||||
decryptAssymmetric,
|
decryptAssymmetric,
|
||||||
decryptSymmetric,
|
decryptSymmetric
|
||||||
} = require("../cryptography/crypto");
|
} = require('../cryptography/crypto');
|
||||||
const nacl = require("tweetnacl");
|
const nacl = require('tweetnacl');
|
||||||
nacl.util = require("tweetnacl-util");
|
nacl.util = require('tweetnacl-util');
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
env: keyof typeof envMapping;
|
||||||
|
setFileState: any;
|
||||||
|
setIsKeyAvailable: any;
|
||||||
|
setData: any;
|
||||||
|
workspaceId: string;
|
||||||
|
}
|
||||||
|
|
||||||
const getSecretsForProject = async ({
|
const getSecretsForProject = async ({
|
||||||
env,
|
env,
|
||||||
setFileState,
|
setFileState,
|
||||||
setIsKeyAvailable,
|
setIsKeyAvailable,
|
||||||
setData,
|
setData,
|
||||||
workspaceId,
|
workspaceId
|
||||||
}) => {
|
}: Props) => {
|
||||||
try {
|
try {
|
||||||
let file;
|
let file;
|
||||||
try {
|
try {
|
||||||
@@ -24,44 +32,42 @@ const getSecretsForProject = async ({
|
|||||||
|
|
||||||
setFileState(file);
|
setFileState(file);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log("ERROR: Not able to access the latest file");
|
console.log('ERROR: Not able to access the latest file');
|
||||||
}
|
}
|
||||||
// This is called isKeyAvilable but what it really means is if a person is able to create new key pairs
|
// This is called isKeyAvilable but what it really means is if a person is able to create new key pairs
|
||||||
setIsKeyAvailable(
|
setIsKeyAvailable(!file.key ? file.secrets.length == 0 : true);
|
||||||
!file.key ? (file.secrets.length == 0 ? true : false) : true
|
|
||||||
);
|
|
||||||
|
|
||||||
const PRIVATE_KEY = localStorage.getItem("PRIVATE_KEY");
|
const PRIVATE_KEY = localStorage.getItem('PRIVATE_KEY');
|
||||||
|
|
||||||
let tempFileState = [];
|
const tempFileState: { key: string; value: string; type: string }[] = [];
|
||||||
if (file.key) {
|
if (file.key) {
|
||||||
// assymmetrically decrypt symmetric key with local private key
|
// assymmetrically decrypt symmetric key with local private key
|
||||||
const key = decryptAssymmetric({
|
const key = decryptAssymmetric({
|
||||||
ciphertext: file.key.encryptedKey,
|
ciphertext: file.key.encryptedKey,
|
||||||
nonce: file.key.nonce,
|
nonce: file.key.nonce,
|
||||||
publicKey: file.key.sender.publicKey,
|
publicKey: file.key.sender.publicKey,
|
||||||
privateKey: PRIVATE_KEY,
|
privateKey: PRIVATE_KEY
|
||||||
});
|
});
|
||||||
|
|
||||||
file.secrets.map((secretPair) => {
|
file.secrets.map((secretPair: any) => {
|
||||||
// decrypt .env file with symmetric key
|
// decrypt .env file with symmetric key
|
||||||
const plainTextKey = decryptSymmetric({
|
const plainTextKey = decryptSymmetric({
|
||||||
ciphertext: secretPair.secretKey.ciphertext,
|
ciphertext: secretPair.secretKey.ciphertext,
|
||||||
iv: secretPair.secretKey.iv,
|
iv: secretPair.secretKey.iv,
|
||||||
tag: secretPair.secretKey.tag,
|
tag: secretPair.secretKey.tag,
|
||||||
key,
|
key
|
||||||
});
|
});
|
||||||
|
|
||||||
const plainTextValue = decryptSymmetric({
|
const plainTextValue = decryptSymmetric({
|
||||||
ciphertext: secretPair.secretValue.ciphertext,
|
ciphertext: secretPair.secretValue.ciphertext,
|
||||||
iv: secretPair.secretValue.iv,
|
iv: secretPair.secretValue.iv,
|
||||||
tag: secretPair.secretValue.tag,
|
tag: secretPair.secretValue.tag,
|
||||||
key,
|
key
|
||||||
});
|
});
|
||||||
tempFileState.push({
|
tempFileState.push({
|
||||||
key: plainTextKey,
|
key: plainTextKey,
|
||||||
value: plainTextValue,
|
value: plainTextValue,
|
||||||
type: secretPair.type,
|
type: secretPair.type
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -71,9 +77,9 @@ const getSecretsForProject = async ({
|
|||||||
tempFileState.map((line, index) => [
|
tempFileState.map((line, index) => [
|
||||||
guidGenerator(),
|
guidGenerator(),
|
||||||
index,
|
index,
|
||||||
line["key"],
|
line['key'],
|
||||||
line["value"],
|
line['value'],
|
||||||
line["type"],
|
line['type']
|
||||||
])
|
])
|
||||||
// .sort((a, b) =>
|
// .sort((a, b) =>
|
||||||
// sortMethod == "alphabetical"
|
// sortMethod == "alphabetical"
|
||||||
@@ -84,12 +90,12 @@ const getSecretsForProject = async ({
|
|||||||
return tempFileState.map((line, index) => [
|
return tempFileState.map((line, index) => [
|
||||||
guidGenerator(),
|
guidGenerator(),
|
||||||
index,
|
index,
|
||||||
line["key"],
|
line['key'],
|
||||||
line["value"],
|
line['value'],
|
||||||
line["type"],
|
line['type']
|
||||||
]);
|
]);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log("Something went wrong during accessing or decripting secrets.");
|
console.log('Something went wrong during accessing or decripting secrets.');
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
@@ -1,74 +0,0 @@
|
|||||||
import publicKeyInfical from "~/pages/api/auth/publicKeyInfisical";
|
|
||||||
import changeHerokuConfigVars from "~/pages/api/integrations/ChangeHerokuConfigVars";
|
|
||||||
|
|
||||||
const crypto = require("crypto");
|
|
||||||
const {
|
|
||||||
encryptSymmetric,
|
|
||||||
encryptAssymmetric,
|
|
||||||
} = require("../cryptography/crypto");
|
|
||||||
const nacl = require("tweetnacl");
|
|
||||||
nacl.util = require("tweetnacl-util");
|
|
||||||
|
|
||||||
const pushKeysIntegration = async ({ obj, integrationId }) => {
|
|
||||||
const PRIVATE_KEY = localStorage.getItem("PRIVATE_KEY");
|
|
||||||
|
|
||||||
let randomBytes = crypto.randomBytes(16).toString("hex");
|
|
||||||
|
|
||||||
const secrets = Object.keys(obj).map((key) => {
|
|
||||||
// encrypt key
|
|
||||||
const {
|
|
||||||
ciphertext: ciphertextKey,
|
|
||||||
iv: ivKey,
|
|
||||||
tag: tagKey,
|
|
||||||
} = encryptSymmetric({
|
|
||||||
plaintext: key,
|
|
||||||
key: randomBytes,
|
|
||||||
});
|
|
||||||
|
|
||||||
// encrypt value
|
|
||||||
const {
|
|
||||||
ciphertext: ciphertextValue,
|
|
||||||
iv: ivValue,
|
|
||||||
tag: tagValue,
|
|
||||||
} = encryptSymmetric({
|
|
||||||
plaintext: obj[key],
|
|
||||||
key: randomBytes,
|
|
||||||
});
|
|
||||||
|
|
||||||
const visibility = "shared";
|
|
||||||
|
|
||||||
return {
|
|
||||||
ciphertextKey,
|
|
||||||
ivKey,
|
|
||||||
tagKey,
|
|
||||||
hashKey: crypto.createHash("sha256").update(key).digest("hex"),
|
|
||||||
ciphertextValue,
|
|
||||||
ivValue,
|
|
||||||
tagValue,
|
|
||||||
hashValue: crypto.createHash("sha256").update(obj[key]).digest("hex"),
|
|
||||||
type: visibility,
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
// obtain public keys of all receivers (i.e. members in workspace)
|
|
||||||
let publicKeyInfisical = await publicKeyInfical();
|
|
||||||
|
|
||||||
publicKeyInfisical = (await publicKeyInfisical.json()).publicKey;
|
|
||||||
|
|
||||||
// assymmetrically encrypt key with each receiver public keys
|
|
||||||
|
|
||||||
const { ciphertext, nonce } = encryptAssymmetric({
|
|
||||||
plaintext: randomBytes,
|
|
||||||
publicKey: publicKeyInfisical,
|
|
||||||
privateKey: PRIVATE_KEY,
|
|
||||||
});
|
|
||||||
|
|
||||||
const key = {
|
|
||||||
encryptedKey: ciphertext,
|
|
||||||
nonce,
|
|
||||||
};
|
|
||||||
|
|
||||||
changeHerokuConfigVars({ integrationId, key, secrets });
|
|
||||||
};
|
|
||||||
|
|
||||||
export default pushKeysIntegration;
|
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
import publicKeyInfical from '~/pages/api/auth/publicKeyInfisical';
|
||||||
|
import changeHerokuConfigVars from '~/pages/api/integrations/ChangeHerokuConfigVars';
|
||||||
|
|
||||||
|
const crypto = require('crypto');
|
||||||
|
const {
|
||||||
|
encryptSymmetric,
|
||||||
|
encryptAssymmetric
|
||||||
|
} = require('../cryptography/crypto');
|
||||||
|
const nacl = require('tweetnacl');
|
||||||
|
nacl.util = require('tweetnacl-util');
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
obj: Record<string, string>;
|
||||||
|
integrationId: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
const pushKeysIntegration = async ({ obj, integrationId }: Props) => {
|
||||||
|
const PRIVATE_KEY = localStorage.getItem('PRIVATE_KEY');
|
||||||
|
|
||||||
|
const randomBytes = crypto.randomBytes(16).toString('hex');
|
||||||
|
|
||||||
|
const secrets = Object.keys(obj).map((key) => {
|
||||||
|
// encrypt key
|
||||||
|
const {
|
||||||
|
ciphertext: ciphertextKey,
|
||||||
|
iv: ivKey,
|
||||||
|
tag: tagKey
|
||||||
|
} = encryptSymmetric({
|
||||||
|
plaintext: key,
|
||||||
|
key: randomBytes
|
||||||
|
});
|
||||||
|
|
||||||
|
// encrypt value
|
||||||
|
const {
|
||||||
|
ciphertext: ciphertextValue,
|
||||||
|
iv: ivValue,
|
||||||
|
tag: tagValue
|
||||||
|
} = encryptSymmetric({
|
||||||
|
plaintext: obj[key],
|
||||||
|
key: randomBytes
|
||||||
|
});
|
||||||
|
|
||||||
|
const visibility = 'shared';
|
||||||
|
|
||||||
|
return {
|
||||||
|
ciphertextKey,
|
||||||
|
ivKey,
|
||||||
|
tagKey,
|
||||||
|
hashKey: crypto.createHash('sha256').update(key).digest('hex'),
|
||||||
|
ciphertextValue,
|
||||||
|
ivValue,
|
||||||
|
tagValue,
|
||||||
|
hashValue: crypto.createHash('sha256').update(obj[key]).digest('hex'),
|
||||||
|
type: visibility
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
// obtain public keys of all receivers (i.e. members in workspace)
|
||||||
|
const publicKeyInfisical = await publicKeyInfical();
|
||||||
|
|
||||||
|
const publicKey = (await publicKeyInfisical.json()).publicKey;
|
||||||
|
|
||||||
|
// assymmetrically encrypt key with each receiver public keys
|
||||||
|
|
||||||
|
const { ciphertext, nonce } = encryptAssymmetric({
|
||||||
|
plaintext: randomBytes,
|
||||||
|
publicKey,
|
||||||
|
privateKey: PRIVATE_KEY
|
||||||
|
});
|
||||||
|
|
||||||
|
const key = {
|
||||||
|
encryptedKey: ciphertext,
|
||||||
|
nonce
|
||||||
|
};
|
||||||
|
|
||||||
|
changeHerokuConfigVars({ integrationId, key, secrets });
|
||||||
|
};
|
||||||
|
|
||||||
|
export default pushKeysIntegration;
|
||||||
+19
-10
@@ -1,4 +1,13 @@
|
|||||||
import SecurityClient from "~/utilities/SecurityClient";
|
import SecurityClient from '~/utilities/SecurityClient';
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
encryptedPrivateKey: string;
|
||||||
|
iv: string;
|
||||||
|
tag: string;
|
||||||
|
salt: string;
|
||||||
|
verifier: string;
|
||||||
|
clientProof: string;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is the second step of the change password process (pake)
|
* This is the second step of the change password process (pake)
|
||||||
@@ -11,12 +20,12 @@ const changePassword2 = ({
|
|||||||
tag,
|
tag,
|
||||||
salt,
|
salt,
|
||||||
verifier,
|
verifier,
|
||||||
clientProof,
|
clientProof
|
||||||
}) => {
|
}: Props) => {
|
||||||
return SecurityClient.fetchCall("/api/v1/password/change-password", {
|
return SecurityClient.fetchCall('/api/v1/password/change-password', {
|
||||||
method: "POST",
|
method: 'POST',
|
||||||
headers: {
|
headers: {
|
||||||
"Content-Type": "application/json",
|
'Content-Type': 'application/json'
|
||||||
},
|
},
|
||||||
body: JSON.stringify({
|
body: JSON.stringify({
|
||||||
clientProof: clientProof,
|
clientProof: clientProof,
|
||||||
@@ -24,13 +33,13 @@ const changePassword2 = ({
|
|||||||
iv: iv,
|
iv: iv,
|
||||||
tag: tag,
|
tag: tag,
|
||||||
salt: salt,
|
salt: salt,
|
||||||
verifier: verifier,
|
verifier: verifier
|
||||||
}),
|
})
|
||||||
}).then(async (res) => {
|
}).then(async (res) => {
|
||||||
if (res.status == 200) {
|
if (res && res.status == 200) {
|
||||||
return res;
|
return res;
|
||||||
} else {
|
} else {
|
||||||
console.log("Failed to change the password");
|
console.log('Failed to change the password');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
import SecurityClient from "~/utilities/SecurityClient.js";
|
import SecurityClient from '~/utilities/SecurityClient.js';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This function is used to check if the user is authenticated.
|
* This function is used to check if the user is authenticated.
|
||||||
@@ -7,17 +7,17 @@ import SecurityClient from "~/utilities/SecurityClient.js";
|
|||||||
* @param {*} res
|
* @param {*} res
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
const checkAuth = async (req, res) => {
|
const checkAuth = async () => {
|
||||||
return SecurityClient.fetchCall("/api/v1/auth/checkAuth", {
|
return SecurityClient.fetchCall('/api/v1/auth/checkAuth', {
|
||||||
method: "POST",
|
method: 'POST',
|
||||||
headers: {
|
headers: {
|
||||||
"Content-Type": "application/json",
|
'Content-Type': 'application/json'
|
||||||
},
|
}
|
||||||
}).then((res) => {
|
}).then((res) => {
|
||||||
if (res.status == 200) {
|
if (res && res.status == 200) {
|
||||||
return res;
|
return res;
|
||||||
} else {
|
} else {
|
||||||
console.log("Not authorized");
|
console.log('Not authorized');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
+11
-6
@@ -1,19 +1,24 @@
|
|||||||
|
interface Props {
|
||||||
|
email: string;
|
||||||
|
code: string;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This route check the verification code from the email that user just recieved
|
* This route check the verification code from the email that user just recieved
|
||||||
* @param {*} email
|
* @param {*} email
|
||||||
* @param {*} code
|
* @param {*} code
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
const checkEmailVerificationCode = (email, code) => {
|
const checkEmailVerificationCode = ({ email, code }: Props) => {
|
||||||
return fetch("/api/v1/signup/email/verify", {
|
return fetch('/api/v1/signup/email/verify', {
|
||||||
method: "POST",
|
method: 'POST',
|
||||||
headers: {
|
headers: {
|
||||||
"Content-Type": "application/json",
|
'Content-Type': 'application/json'
|
||||||
},
|
},
|
||||||
body: JSON.stringify({
|
body: JSON.stringify({
|
||||||
email: email,
|
email: email,
|
||||||
code: code,
|
code: code
|
||||||
}),
|
})
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
+22
-8
@@ -1,3 +1,17 @@
|
|||||||
|
interface Props {
|
||||||
|
email: string;
|
||||||
|
firstName: string;
|
||||||
|
lastName: string;
|
||||||
|
publicKey: string;
|
||||||
|
ciphertext: string;
|
||||||
|
organizationName: string;
|
||||||
|
iv: string;
|
||||||
|
tag: string;
|
||||||
|
salt: string;
|
||||||
|
verifier: string;
|
||||||
|
token: string;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This function is called in the end of the signup process.
|
* This function is called in the end of the signup process.
|
||||||
* It sends all the necessary nformation to the server.
|
* It sends all the necessary nformation to the server.
|
||||||
@@ -24,13 +38,13 @@ const completeAccountInformationSignup = ({
|
|||||||
tag,
|
tag,
|
||||||
salt,
|
salt,
|
||||||
verifier,
|
verifier,
|
||||||
token,
|
token
|
||||||
}) => {
|
}: Props) => {
|
||||||
return fetch("/api/v1/signup/complete-account/signup", {
|
return fetch('/api/v1/signup/complete-account/signup', {
|
||||||
method: "POST",
|
method: 'POST',
|
||||||
headers: {
|
headers: {
|
||||||
"Content-Type": "application/json",
|
'Content-Type': 'application/json',
|
||||||
Authorization: "Bearer " + token,
|
Authorization: 'Bearer ' + token
|
||||||
},
|
},
|
||||||
body: JSON.stringify({
|
body: JSON.stringify({
|
||||||
email,
|
email,
|
||||||
@@ -42,8 +56,8 @@ const completeAccountInformationSignup = ({
|
|||||||
iv,
|
iv,
|
||||||
tag,
|
tag,
|
||||||
salt,
|
salt,
|
||||||
verifier,
|
verifier
|
||||||
}),
|
})
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
+21
-8
@@ -1,3 +1,16 @@
|
|||||||
|
interface Props {
|
||||||
|
email: string;
|
||||||
|
firstName: string;
|
||||||
|
lastName: string;
|
||||||
|
publicKey: string;
|
||||||
|
ciphertext: string;
|
||||||
|
iv: string;
|
||||||
|
tag: string;
|
||||||
|
salt: string;
|
||||||
|
verifier: string;
|
||||||
|
token: string;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This function is called in the end of the signup process.
|
* This function is called in the end of the signup process.
|
||||||
* It sends all the necessary nformation to the server.
|
* It sends all the necessary nformation to the server.
|
||||||
@@ -22,13 +35,13 @@ const completeAccountInformationSignupInvite = ({
|
|||||||
tag,
|
tag,
|
||||||
salt,
|
salt,
|
||||||
verifier,
|
verifier,
|
||||||
token,
|
token
|
||||||
}) => {
|
}: Props) => {
|
||||||
return fetch("/api/v1/signup/complete-account/invite", {
|
return fetch('/api/v1/signup/complete-account/invite', {
|
||||||
method: "POST",
|
method: 'POST',
|
||||||
headers: {
|
headers: {
|
||||||
"Content-Type": "application/json",
|
'Content-Type': 'application/json',
|
||||||
Authorization: "Bearer " + token,
|
Authorization: 'Bearer ' + token
|
||||||
},
|
},
|
||||||
body: JSON.stringify({
|
body: JSON.stringify({
|
||||||
email: email,
|
email: email,
|
||||||
@@ -39,8 +52,8 @@ const completeAccountInformationSignupInvite = ({
|
|||||||
iv: iv,
|
iv: iv,
|
||||||
tag: tag,
|
tag: tag,
|
||||||
salt: salt,
|
salt: salt,
|
||||||
verifier: verifier,
|
verifier: verifier
|
||||||
}),
|
})
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
import SecurityClient from "~/utilities/SecurityClient";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This is the route that issues a backup private key that will afterwards be added into a pdf
|
|
||||||
*/
|
|
||||||
const issueBackupPrivateKey = ({
|
|
||||||
encryptedPrivateKey,
|
|
||||||
iv,
|
|
||||||
tag,
|
|
||||||
salt,
|
|
||||||
verifier,
|
|
||||||
clientProof,
|
|
||||||
}) => {
|
|
||||||
return SecurityClient.fetchCall(
|
|
||||||
"/api/v1/password/backup-private-key",
|
|
||||||
{
|
|
||||||
method: "POST",
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
},
|
|
||||||
body: JSON.stringify({
|
|
||||||
clientProof: clientProof,
|
|
||||||
encryptedPrivateKey: encryptedPrivateKey,
|
|
||||||
iv: iv,
|
|
||||||
tag: tag,
|
|
||||||
salt: salt,
|
|
||||||
verifier: verifier,
|
|
||||||
}),
|
|
||||||
}
|
|
||||||
).then((res) => {
|
|
||||||
if (res.status == 200) {
|
|
||||||
return res;
|
|
||||||
} else {
|
|
||||||
console.log("Failed to issue the backup key");
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export default issueBackupPrivateKey;
|
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
import SecurityClient from '~/utilities/SecurityClient';
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
encryptedPrivateKey: string;
|
||||||
|
iv: string;
|
||||||
|
tag: string;
|
||||||
|
salt: string;
|
||||||
|
verifier: string;
|
||||||
|
clientProof: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is the route that issues a backup private key that will afterwards be added into a pdf
|
||||||
|
*/
|
||||||
|
const issueBackupPrivateKey = ({
|
||||||
|
encryptedPrivateKey,
|
||||||
|
iv,
|
||||||
|
tag,
|
||||||
|
salt,
|
||||||
|
verifier,
|
||||||
|
clientProof
|
||||||
|
}: Props) => {
|
||||||
|
return SecurityClient.fetchCall('/api/v1/password/backup-private-key', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
clientProof: clientProof,
|
||||||
|
encryptedPrivateKey: encryptedPrivateKey,
|
||||||
|
iv: iv,
|
||||||
|
tag: tag,
|
||||||
|
salt: salt,
|
||||||
|
verifier: verifier
|
||||||
|
})
|
||||||
|
}).then((res) => {
|
||||||
|
if (res?.status !== 200) {
|
||||||
|
console.log('Failed to issue the backup key');
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export default issueBackupPrivateKey;
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
import SecurityClient from "~/utilities/SecurityClient";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This is the first step of the change password process (pake)
|
|
||||||
* @param {*} clientPublicKey
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
const SRP1 = ({ clientPublicKey }) => {
|
|
||||||
return SecurityClient.fetchCall("/api/v1/password/srp1", {
|
|
||||||
method: "POST",
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
},
|
|
||||||
body: JSON.stringify({
|
|
||||||
clientPublicKey,
|
|
||||||
}),
|
|
||||||
}).then(async (res) => {
|
|
||||||
if (res.status == 200) {
|
|
||||||
return await res.json();
|
|
||||||
} else {
|
|
||||||
console.log("Failed to do the first step of SRP");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export default SRP1;
|
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
import SecurityClient from '~/utilities/SecurityClient';
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
clientPublicKey: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is the first step of the change password process (pake)
|
||||||
|
* @param {*} clientPublicKey
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
const SRP1 = ({ clientPublicKey }: Props) => {
|
||||||
|
return SecurityClient.fetchCall('/api/v1/password/srp1', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
clientPublicKey
|
||||||
|
})
|
||||||
|
}).then(async (res) => {
|
||||||
|
if (res && res.status == 200) {
|
||||||
|
return await res.json();
|
||||||
|
} else {
|
||||||
|
console.log('Failed to do the first step of SRP');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export default SRP1;
|
||||||
+6
-6
@@ -2,15 +2,15 @@
|
|||||||
* This route send the verification email to the user's email (contains a 6-digit verification code)
|
* This route send the verification email to the user's email (contains a 6-digit verification code)
|
||||||
* @param {*} email
|
* @param {*} email
|
||||||
*/
|
*/
|
||||||
const sendVerificationEmail = (email) => {
|
const sendVerificationEmail = (email: string) => {
|
||||||
fetch("/api/v1/signup/email/signup", {
|
fetch('/api/v1/signup/email/signup', {
|
||||||
method: "POST",
|
method: 'POST',
|
||||||
headers: {
|
headers: {
|
||||||
"Content-Type": "application/json",
|
'Content-Type': 'application/json'
|
||||||
},
|
},
|
||||||
body: JSON.stringify({
|
body: JSON.stringify({
|
||||||
email: email,
|
email: email
|
||||||
}),
|
})
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
const token = async (req, res) => {
|
|
||||||
return fetch("/api/v1/auth/token", {
|
|
||||||
method: "POST",
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
},
|
|
||||||
credentials: "include",
|
|
||||||
}).then(async (res) => {
|
|
||||||
if (res.status == 200) {
|
|
||||||
return (await res.json()).token;
|
|
||||||
} else {
|
|
||||||
console.log("Getting a new token failed");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export default token;
|
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
const token = async () => {
|
||||||
|
return fetch('/api/v1/auth/token', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
credentials: 'include'
|
||||||
|
}).then(async (res) => {
|
||||||
|
if (res.status == 200) {
|
||||||
|
return (await res.json()).token;
|
||||||
|
} else {
|
||||||
|
console.log('Getting a new token failed');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export default token;
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
/**
|
|
||||||
* This route verifies the signup invite link
|
|
||||||
* @param {*} email
|
|
||||||
* @param {*} code
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
const verifySignupInvite = ({ email, code }) => {
|
|
||||||
return fetch("/api/v1/invite-org/verify", {
|
|
||||||
method: "POST",
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
},
|
|
||||||
body: JSON.stringify({
|
|
||||||
email,
|
|
||||||
code,
|
|
||||||
}),
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export default verifySignupInvite;
|
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
interface Props {
|
||||||
|
email: string;
|
||||||
|
code: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This route verifies the signup invite link
|
||||||
|
* @param {*} email
|
||||||
|
* @param {*} code
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
const verifySignupInvite = ({ email, code }: Props) => {
|
||||||
|
return fetch('/api/v1/invite-org/verify', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
email,
|
||||||
|
code
|
||||||
|
})
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export default verifySignupInvite;
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
/**
|
|
||||||
* This route lets us get the public key of infisical. Th euser doesn't have to be authenticated since this is just the public key.
|
|
||||||
* @param {*} req
|
|
||||||
* @param {*} res
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
const publicKeyInfisical = (req, res) => {
|
|
||||||
return fetch("/api/v1/key/publicKey/infisical", {
|
|
||||||
method: "GET",
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
},
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export default publicKeyInfisical;
|
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
const publicKeyInfisical = () => {
|
||||||
|
return fetch('/api/v1/key/publicKey/infisical', {
|
||||||
|
method: 'GET',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export default publicKeyInfisical;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
import SecurityClient from "~/utilities/SecurityClient.js";
|
import SecurityClient from '~/utilities/SecurityClient.js';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This function fetches the encrypted secrets from the .env file
|
* This function fetches the encrypted secrets from the .env file
|
||||||
@@ -6,26 +6,26 @@ import SecurityClient from "~/utilities/SecurityClient.js";
|
|||||||
* @param {*} env
|
* @param {*} env
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
const getSecrets = async (workspaceId, env) => {
|
const getSecrets = async (workspaceId: string, env: string) => {
|
||||||
return SecurityClient.fetchCall(
|
return SecurityClient.fetchCall(
|
||||||
"/api/v1/secret/" +
|
'/api/v1/secret/' +
|
||||||
workspaceId +
|
workspaceId +
|
||||||
"?" +
|
'?' +
|
||||||
new URLSearchParams({
|
new URLSearchParams({
|
||||||
environment: env,
|
environment: env,
|
||||||
channel: "web",
|
channel: 'web'
|
||||||
}),
|
}),
|
||||||
{
|
{
|
||||||
method: "GET",
|
method: 'GET',
|
||||||
headers: {
|
headers: {
|
||||||
"Content-Type": "application/json",
|
'Content-Type': 'application/json'
|
||||||
},
|
}
|
||||||
}
|
}
|
||||||
).then(async (res) => {
|
).then(async (res) => {
|
||||||
if (res.status == 200) {
|
if (res && res.status == 200) {
|
||||||
return await res.json();
|
return await res.json();
|
||||||
} else {
|
} else {
|
||||||
console.log("Failed to get project secrets");
|
console.log('Failed to get project secrets');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
import SecurityClient from "~/utilities/SecurityClient";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This function uploads the encrypted .env file
|
|
||||||
* @param {*} req
|
|
||||||
* @param {*} res
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
const uploadSecrets = async ({ workspaceId, secrets, keys, environment }) => {
|
|
||||||
return SecurityClient.fetchCall("/api/v1/secret/" + workspaceId, {
|
|
||||||
method: "POST",
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
},
|
|
||||||
body: JSON.stringify({
|
|
||||||
secrets,
|
|
||||||
keys,
|
|
||||||
environment,
|
|
||||||
channel: "web",
|
|
||||||
}),
|
|
||||||
}).then(async (res) => {
|
|
||||||
if (res.status == 200) {
|
|
||||||
return res;
|
|
||||||
} else {
|
|
||||||
console.log("Failed to push secrets");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export default uploadSecrets;
|
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
import SecurityClient from '~/utilities/SecurityClient';
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
workspaceId: string;
|
||||||
|
secrets: string;
|
||||||
|
keys: string;
|
||||||
|
environment: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function uploads the encrypted .env file
|
||||||
|
* @param {*} req
|
||||||
|
* @param {*} res
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
const uploadSecrets = async ({
|
||||||
|
workspaceId,
|
||||||
|
secrets,
|
||||||
|
keys,
|
||||||
|
environment
|
||||||
|
}: Props) => {
|
||||||
|
return SecurityClient.fetchCall('/api/v1/secret/' + workspaceId, {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
secrets,
|
||||||
|
keys,
|
||||||
|
environment,
|
||||||
|
channel: 'web'
|
||||||
|
})
|
||||||
|
}).then(async (res) => {
|
||||||
|
if (res && res.status == 200) {
|
||||||
|
return res;
|
||||||
|
} else {
|
||||||
|
console.log('Failed to push secrets');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export default uploadSecrets;
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
import SecurityClient from "~/utilities/SecurityClient";
|
|
||||||
|
|
||||||
const changeHerokuConfigVars = ({ integrationId, key, secrets }) => {
|
|
||||||
return SecurityClient.fetchCall(
|
|
||||||
"/api/v1/integration/" + integrationId + "/sync",
|
|
||||||
{
|
|
||||||
method: "POST",
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
},
|
|
||||||
body: JSON.stringify({
|
|
||||||
key,
|
|
||||||
secrets,
|
|
||||||
}),
|
|
||||||
}
|
|
||||||
).then(async (res) => {
|
|
||||||
if (res.status == 200) {
|
|
||||||
return res;
|
|
||||||
} else {
|
|
||||||
console.log("Failed to sync secrets to Heroku");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export default changeHerokuConfigVars;
|
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
import SecurityClient from '~/utilities/SecurityClient';
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
integrationId: string;
|
||||||
|
key: string;
|
||||||
|
secrets: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
const changeHerokuConfigVars = ({ integrationId, key, secrets }: Props) => {
|
||||||
|
return SecurityClient.fetchCall(
|
||||||
|
'/api/v1/integration/' + integrationId + '/sync',
|
||||||
|
{
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
key,
|
||||||
|
secrets
|
||||||
|
})
|
||||||
|
}
|
||||||
|
).then(async (res) => {
|
||||||
|
if (res && res.status == 200) {
|
||||||
|
return res;
|
||||||
|
} else {
|
||||||
|
console.log('Failed to sync secrets to Heroku');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export default changeHerokuConfigVars;
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
import SecurityClient from "~/utilities/SecurityClient";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This route deletes an integration from a certain project
|
|
||||||
* @param {*} integrationId
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
const deleteIntegration = ({ integrationId }) => {
|
|
||||||
return SecurityClient.fetchCall(
|
|
||||||
"/api/v1/integration/" + integrationId,
|
|
||||||
{
|
|
||||||
method: "DELETE",
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
).then(async (res) => {
|
|
||||||
if (res.status == 200) {
|
|
||||||
return (await res.json()).workspace;
|
|
||||||
} else {
|
|
||||||
console.log("Failed to delete an integration");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export default deleteIntegration;
|
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
import SecurityClient from '~/utilities/SecurityClient';
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
integrationId: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This route deletes an integration from a certain project
|
||||||
|
* @param {*} integrationId
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
const deleteIntegration = ({ integrationId }: Props) => {
|
||||||
|
return SecurityClient.fetchCall('/api/v1/integration/' + integrationId, {
|
||||||
|
method: 'DELETE',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
}
|
||||||
|
}).then(async (res) => {
|
||||||
|
if (res && res.status == 200) {
|
||||||
|
return (await res.json()).workspace;
|
||||||
|
} else {
|
||||||
|
console.log('Failed to delete an integration');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export default deleteIntegration;
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
import SecurityClient from "~/utilities/SecurityClient";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This route deletes an integration authorization from a certain project
|
|
||||||
* @param {*} integrationAuthId
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
const deleteIntegrationAuth = ({ integrationAuthId }) => {
|
|
||||||
return SecurityClient.fetchCall(
|
|
||||||
"/api/v1/integration-auth/" + integrationAuthId,
|
|
||||||
{
|
|
||||||
method: "DELETE",
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
).then(async (res) => {
|
|
||||||
if (res.status == 200) {
|
|
||||||
return res;
|
|
||||||
} else {
|
|
||||||
console.log("Failed to delete an integration authorization");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export default deleteIntegrationAuth;
|
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
import SecurityClient from '~/utilities/SecurityClient';
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
integrationAuthId: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This route deletes an integration authorization from a certain project
|
||||||
|
* @param {*} integrationAuthId
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
const deleteIntegrationAuth = ({ integrationAuthId }: Props) => {
|
||||||
|
return SecurityClient.fetchCall(
|
||||||
|
'/api/v1/integration-auth/' + integrationAuthId,
|
||||||
|
{
|
||||||
|
method: 'DELETE',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
).then(async (res) => {
|
||||||
|
if (res && res.status == 200) {
|
||||||
|
return res;
|
||||||
|
} else {
|
||||||
|
console.log('Failed to delete an integration authorization');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export default deleteIntegrationAuth;
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
import SecurityClient from "~/utilities/SecurityClient";
|
|
||||||
|
|
||||||
const getIntegrationApps = ({ integrationAuthId }) => {
|
|
||||||
return SecurityClient.fetchCall(
|
|
||||||
"/api/v1/integration-auth/" + integrationAuthId + "/apps",
|
|
||||||
{
|
|
||||||
method: "GET",
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
).then(async (res) => {
|
|
||||||
if (res.status == 200) {
|
|
||||||
return (await res.json()).apps;
|
|
||||||
} else {
|
|
||||||
console.log("Failed to get available apps for an integration");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export default getIntegrationApps;
|
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
import SecurityClient from '~/utilities/SecurityClient';
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
integrationAuthId: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
const getIntegrationApps = ({ integrationAuthId }: Props) => {
|
||||||
|
return SecurityClient.fetchCall(
|
||||||
|
'/api/v1/integration-auth/' + integrationAuthId + '/apps',
|
||||||
|
{
|
||||||
|
method: 'GET',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
).then(async (res) => {
|
||||||
|
if (res && res.status == 200) {
|
||||||
|
return (await res.json()).apps;
|
||||||
|
} else {
|
||||||
|
console.log('Failed to get available apps for an integration');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export default getIntegrationApps;
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
import SecurityClient from "~/utilities/SecurityClient";
|
|
||||||
|
|
||||||
const getIntegrations = () => {
|
|
||||||
return SecurityClient.fetchCall("/api/v1/integration/integrations", {
|
|
||||||
method: "GET",
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
},
|
|
||||||
}).then(async (res) => {
|
|
||||||
if (res.status == 200) {
|
|
||||||
return (await res.json()).integrations;
|
|
||||||
} else {
|
|
||||||
console.log("Failed to get project integrations");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export default getIntegrations;
|
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
import SecurityClient from '~/utilities/SecurityClient';
|
||||||
|
|
||||||
|
const getIntegrations = () => {
|
||||||
|
return SecurityClient.fetchCall('/api/v1/integration/integrations', {
|
||||||
|
method: 'GET',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
}
|
||||||
|
}).then(async (res) => {
|
||||||
|
if (res && res.status == 200) {
|
||||||
|
return (await res.json()).integrations;
|
||||||
|
} else {
|
||||||
|
console.log('Failed to get project integrations');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export default getIntegrations;
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
import SecurityClient from "~/utilities/SecurityClient";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This route starts the integration after teh default one if gonna set up.
|
|
||||||
* @param {*} integrationId
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
const startIntegration = ({ integrationId, appName, environment }) => {
|
|
||||||
return SecurityClient.fetchCall(
|
|
||||||
"/api/v1/integration/" + integrationId,
|
|
||||||
{
|
|
||||||
method: "PATCH",
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
},
|
|
||||||
body: JSON.stringify({
|
|
||||||
update: {
|
|
||||||
app: appName,
|
|
||||||
environment,
|
|
||||||
isActive: true,
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
}
|
|
||||||
).then(async (res) => {
|
|
||||||
if (res.status == 200) {
|
|
||||||
return res;
|
|
||||||
} else {
|
|
||||||
console.log("Failed to start an integration");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export default startIntegration;
|
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
import SecurityClient from '~/utilities/SecurityClient';
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
integrationId: string;
|
||||||
|
appName: string;
|
||||||
|
environment: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This route starts the integration after teh default one if gonna set up.
|
||||||
|
* @param {*} integrationId
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
const startIntegration = ({ integrationId, appName, environment }: Props) => {
|
||||||
|
return SecurityClient.fetchCall('/api/v1/integration/' + integrationId, {
|
||||||
|
method: 'PATCH',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
update: {
|
||||||
|
app: appName,
|
||||||
|
environment,
|
||||||
|
isActive: true
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}).then(async (res) => {
|
||||||
|
if (res && res.status == 200) {
|
||||||
|
return res;
|
||||||
|
} else {
|
||||||
|
console.log('Failed to start an integration');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export default startIntegration;
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
import SecurityClient from "~/utilities/SecurityClient";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This is the first step of the change password process (pake)
|
|
||||||
* @param {*} clientPublicKey
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
const AuthorizeIntegration = ({ workspaceId, code, integration }) => {
|
|
||||||
return SecurityClient.fetchCall(
|
|
||||||
"/api/v1/integration-auth/oauth-token",
|
|
||||||
{
|
|
||||||
method: "POST",
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
},
|
|
||||||
body: JSON.stringify({
|
|
||||||
workspaceId,
|
|
||||||
code,
|
|
||||||
integration,
|
|
||||||
}),
|
|
||||||
}
|
|
||||||
).then(async (res) => {
|
|
||||||
if (res.status == 200) {
|
|
||||||
return res;
|
|
||||||
} else {
|
|
||||||
console.log("Failed to authorize the integration");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export default AuthorizeIntegration;
|
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
import SecurityClient from '~/utilities/SecurityClient';
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
workspaceId: string;
|
||||||
|
code: string;
|
||||||
|
integration: string;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* This is the first step of the change password process (pake)
|
||||||
|
* @param {*} clientPublicKey
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
const AuthorizeIntegration = ({ workspaceId, code, integration }: Props) => {
|
||||||
|
return SecurityClient.fetchCall('/api/v1/integration-auth/oauth-token', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
workspaceId,
|
||||||
|
code,
|
||||||
|
integration
|
||||||
|
})
|
||||||
|
}).then(async (res) => {
|
||||||
|
if (res && res.status == 200) {
|
||||||
|
return res;
|
||||||
|
} else {
|
||||||
|
console.log('Failed to authorize the integration');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export default AuthorizeIntegration;
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
import SecurityClient from "~/utilities/SecurityClient";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This route gets authorizations of a certain project (Heroku, etc.)
|
|
||||||
* @param {*} workspaceId
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
const getWorkspaceAuthorizations = ({ workspaceId }) => {
|
|
||||||
return SecurityClient.fetchCall(
|
|
||||||
"/api/v1/workspace/" + workspaceId + "/authorizations",
|
|
||||||
{
|
|
||||||
method: "GET",
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
).then(async (res) => {
|
|
||||||
if (res.status == 200) {
|
|
||||||
return (await res.json()).authorizations;
|
|
||||||
} else {
|
|
||||||
console.log("Failed to get project authorizations");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export default getWorkspaceAuthorizations;
|
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
import SecurityClient from '~/utilities/SecurityClient';
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
workspaceId: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This route gets authorizations of a certain project (Heroku, etc.)
|
||||||
|
* @param {*} workspaceId
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
const getWorkspaceAuthorizations = ({ workspaceId }: Props) => {
|
||||||
|
return SecurityClient.fetchCall(
|
||||||
|
'/api/v1/workspace/' + workspaceId + '/authorizations',
|
||||||
|
{
|
||||||
|
method: 'GET',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
).then(async (res) => {
|
||||||
|
if (res && res.status == 200) {
|
||||||
|
return (await res.json()).authorizations;
|
||||||
|
} else {
|
||||||
|
console.log('Failed to get project authorizations');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export default getWorkspaceAuthorizations;
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
import SecurityClient from "~/utilities/SecurityClient";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This route gets integrations of a certain project (Heroku, etc.)
|
|
||||||
* @param {*} workspaceId
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
const getWorkspaceIntegrations = ({ workspaceId }) => {
|
|
||||||
return SecurityClient.fetchCall(
|
|
||||||
"/api/v1/workspace/" + workspaceId + "/integrations",
|
|
||||||
{
|
|
||||||
method: "GET",
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
).then(async (res) => {
|
|
||||||
if (res.status == 200) {
|
|
||||||
return (await res.json()).integrations;
|
|
||||||
} else {
|
|
||||||
console.log("Failed to get the project integrations");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export default getWorkspaceIntegrations;
|
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
import SecurityClient from '~/utilities/SecurityClient';
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
workspaceId: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This route gets integrations of a certain project (Heroku, etc.)
|
||||||
|
* @param {*} workspaceId
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
const getWorkspaceIntegrations = ({ workspaceId }: Props) => {
|
||||||
|
return SecurityClient.fetchCall(
|
||||||
|
'/api/v1/workspace/' + workspaceId + '/integrations',
|
||||||
|
{
|
||||||
|
method: 'GET',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
).then(async (res) => {
|
||||||
|
if (res && res.status == 200) {
|
||||||
|
return (await res.json()).integrations;
|
||||||
|
} else {
|
||||||
|
console.log('Failed to get the project integrations');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export default getWorkspaceIntegrations;
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
import SecurityClient from "~/utilities/SecurityClient";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This route lets us get all the users in an org.
|
|
||||||
* @param {*} req
|
|
||||||
* @param {*} res
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
const getOrganizationProjects = (req, res) => {
|
|
||||||
return SecurityClient.fetchCall(
|
|
||||||
"/api/organization/" + req.orgId + "/workspaces",
|
|
||||||
{
|
|
||||||
method: "GET",
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
).then(async (res) => {
|
|
||||||
if (res.status == 200) {
|
|
||||||
return (await res.json()).workspaces;
|
|
||||||
} else {
|
|
||||||
console.log("Failed to get projects for an org");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export default getOrganizationProjects;
|
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
import SecurityClient from '~/utilities/SecurityClient';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This route lets us get all the users in an org.
|
||||||
|
* @param {*} req
|
||||||
|
* @param {*} res
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
|
||||||
|
// TODO: this file is not used anywhere
|
||||||
|
const getOrganizationProjects = (req: { orgId: string }) => {
|
||||||
|
return SecurityClient.fetchCall(
|
||||||
|
'/api/organization/' + req.orgId + '/workspaces',
|
||||||
|
{
|
||||||
|
method: 'GET',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
).then(async (res) => {
|
||||||
|
if (res && res.status == 200) {
|
||||||
|
return (await res.json()).workspaces;
|
||||||
|
} else {
|
||||||
|
console.log('Failed to get projects for an org');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export default getOrganizationProjects;
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
import SecurityClient from "~/utilities/SecurityClient";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This route lets us get the current subscription of an org.
|
|
||||||
* @param {*} req
|
|
||||||
* @param {*} res
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
const getOrganizationSubscriptions = (req, res) => {
|
|
||||||
return SecurityClient.fetchCall(
|
|
||||||
"/api/v1/organization/" + req.orgId + "/subscriptions",
|
|
||||||
{
|
|
||||||
method: "GET",
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
).then(async (res) => {
|
|
||||||
if (res.status == 200) {
|
|
||||||
return (await res.json()).subscriptions;
|
|
||||||
} else {
|
|
||||||
console.log("Failed to get org subscriptions");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export default getOrganizationSubscriptions;
|
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
import SecurityClient from '~/utilities/SecurityClient';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This route lets us get the current subscription of an org.
|
||||||
|
* @param {*} req
|
||||||
|
* @param {*} res
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
const getOrganizationSubscriptions = (req: { orgId: string }) => {
|
||||||
|
return SecurityClient.fetchCall(
|
||||||
|
'/api/v1/organization/' + req.orgId + '/subscriptions',
|
||||||
|
{
|
||||||
|
method: 'GET',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
).then(async (res) => {
|
||||||
|
if (res && res.status == 200) {
|
||||||
|
return (await res.json()).subscriptions;
|
||||||
|
} else {
|
||||||
|
console.log('Failed to get org subscriptions');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export default getOrganizationSubscriptions;
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
import SecurityClient from "~/utilities/SecurityClient";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This route lets us get all the projects of a certain user in an org.
|
|
||||||
* @param {*} req
|
|
||||||
* @param {*} res
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
const getOrganizationUserProjects = (req) => {
|
|
||||||
return SecurityClient.fetchCall(
|
|
||||||
"/api/v1/organization/" + req.orgId + "/my-workspaces",
|
|
||||||
{
|
|
||||||
method: "GET",
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
).then(async (res) => {
|
|
||||||
if (res.status == 200) {
|
|
||||||
return (await res.json()).workspaces;
|
|
||||||
} else {
|
|
||||||
console.log("Failed to get projects of a user in an org");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export default getOrganizationUserProjects;
|
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
import SecurityClient from '~/utilities/SecurityClient';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This route lets us get all the projects of a certain user in an org.
|
||||||
|
* @param {*} req
|
||||||
|
* @param {*} res
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
const getOrganizationUserProjects = (req: { orgId: string }) => {
|
||||||
|
return SecurityClient.fetchCall(
|
||||||
|
'/api/v1/organization/' + req.orgId + '/my-workspaces',
|
||||||
|
{
|
||||||
|
method: 'GET',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
).then(async (res) => {
|
||||||
|
if (res && res.status == 200) {
|
||||||
|
return (await res.json()).workspaces;
|
||||||
|
} else {
|
||||||
|
console.log('Failed to get projects of a user in an org');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export default getOrganizationUserProjects;
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
import SecurityClient from "~/utilities/SecurityClient";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This route redirects the user to the right stripe billing page.
|
|
||||||
* @param {*} req
|
|
||||||
* @param {*} res
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
const StripeRedirect = ({ orgId }) => {
|
|
||||||
return SecurityClient.fetchCall(
|
|
||||||
"/api/v1/organization/" + orgId + "/customer-portal-session",
|
|
||||||
{
|
|
||||||
method: "POST",
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
).then(async (res) => {
|
|
||||||
if (res.status == 200) {
|
|
||||||
return (window.location.href = (await res.json()).url);
|
|
||||||
} else {
|
|
||||||
console.log("Failed to redirect to Stripe");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export default StripeRedirect;
|
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
import SecurityClient from '~/utilities/SecurityClient';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This route redirects the user to the right stripe billing page.
|
||||||
|
* @param {*} req
|
||||||
|
* @param {*} res
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
const StripeRedirect = ({ orgId }: { orgId: string }) => {
|
||||||
|
return SecurityClient.fetchCall(
|
||||||
|
'/api/v1/organization/' + orgId + '/customer-portal-session',
|
||||||
|
{
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
).then(async (res) => {
|
||||||
|
if (res && res.status == 200) {
|
||||||
|
return (window.location.href = (await res.json()).url);
|
||||||
|
} else {
|
||||||
|
console.log('Failed to redirect to Stripe');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export default StripeRedirect;
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
import SecurityClient from "~/utilities/SecurityClient";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This route add an incident contact email to a certain organization
|
|
||||||
* @param {*} param0
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
const addIncidentContact = (organizationId, email) => {
|
|
||||||
return SecurityClient.fetchCall(
|
|
||||||
"/api/v1/organization/" + organizationId + "/incidentContactOrg",
|
|
||||||
{
|
|
||||||
method: "POST",
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
},
|
|
||||||
body: JSON.stringify({
|
|
||||||
email: email,
|
|
||||||
}),
|
|
||||||
}
|
|
||||||
).then(async (res) => {
|
|
||||||
if (res.status == 200) {
|
|
||||||
return res;
|
|
||||||
} else {
|
|
||||||
console.log("Failed to add an incident contact");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export default addIncidentContact;
|
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
import SecurityClient from '~/utilities/SecurityClient';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This route add an incident contact email to a certain organization
|
||||||
|
* @param {*} param0
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
const addIncidentContact = (organizationId: string, email: string) => {
|
||||||
|
return SecurityClient.fetchCall(
|
||||||
|
'/api/v1/organization/' + organizationId + '/incidentContactOrg',
|
||||||
|
{
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
email: email
|
||||||
|
})
|
||||||
|
}
|
||||||
|
).then(async (res) => {
|
||||||
|
if (res && res.status == 200) {
|
||||||
|
return res;
|
||||||
|
} else {
|
||||||
|
console.log('Failed to add an incident contact');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export default addIncidentContact;
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
import SecurityClient from "~/utilities/SecurityClient";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This function sends an email invite to a user to join an org
|
|
||||||
* @param {*} email
|
|
||||||
* @param {*} orgId
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
const addUserToOrg = (email, orgId) => {
|
|
||||||
return SecurityClient.fetchCall("/api/v1/invite-org/signup", {
|
|
||||||
method: "POST",
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
},
|
|
||||||
body: JSON.stringify({
|
|
||||||
inviteeEmail: email,
|
|
||||||
organizationId: orgId,
|
|
||||||
}),
|
|
||||||
}).then(async (res) => {
|
|
||||||
if (res.status == 200) {
|
|
||||||
return res;
|
|
||||||
} else {
|
|
||||||
console.log("Failed to add a user to an org");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export default addUserToOrg;
|
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
import SecurityClient from '~/utilities/SecurityClient';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function sends an email invite to a user to join an org
|
||||||
|
* @param {*} email
|
||||||
|
* @param {*} orgId
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
const addUserToOrg = (email: string, orgId: string) => {
|
||||||
|
return SecurityClient.fetchCall('/api/v1/invite-org/signup', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
inviteeEmail: email,
|
||||||
|
organizationId: orgId
|
||||||
|
})
|
||||||
|
}).then(async (res) => {
|
||||||
|
if (res && res.status == 200) {
|
||||||
|
return res;
|
||||||
|
} else {
|
||||||
|
console.log('Failed to add a user to an org');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export default addUserToOrg;
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
import SecurityClient from "~/utilities/SecurityClient";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This route deletes an incident Contact from a certain organization
|
|
||||||
* @param {*} param0
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
const deleteIncidentContact = (organizaionId, email) => {
|
|
||||||
return SecurityClient.fetchCall(
|
|
||||||
"/api/v1/organization/" + organizaionId + "/incidentContactOrg",
|
|
||||||
{
|
|
||||||
method: "DELETE",
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
},
|
|
||||||
body: JSON.stringify({
|
|
||||||
email: email,
|
|
||||||
}),
|
|
||||||
}
|
|
||||||
).then(async (res) => {
|
|
||||||
if (res.status == 200) {
|
|
||||||
return res;
|
|
||||||
} else {
|
|
||||||
console.log("Failed to delete an incident contact");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export default deleteIncidentContact;
|
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
import SecurityClient from '~/utilities/SecurityClient';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This route deletes an incident Contact from a certain organization
|
||||||
|
* @param {*} param0
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
const deleteIncidentContact = (organizationId: string, email: string) => {
|
||||||
|
return SecurityClient.fetchCall(
|
||||||
|
'/api/v1/organization/' + organizationId + '/incidentContactOrg',
|
||||||
|
{
|
||||||
|
method: 'DELETE',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
email: email
|
||||||
|
})
|
||||||
|
}
|
||||||
|
).then(async (res) => {
|
||||||
|
if (res && res.status == 200) {
|
||||||
|
return res;
|
||||||
|
} else {
|
||||||
|
console.log('Failed to delete an incident contact');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export default deleteIncidentContact;
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
import SecurityClient from "~/utilities/SecurityClient";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This function removes a certain member from a certain organization
|
|
||||||
* @param {*} membershipId
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
const deleteUserFromOrganization = (membershipId) => {
|
|
||||||
return SecurityClient.fetchCall(
|
|
||||||
"/api/v1/membership-org/" + membershipId,
|
|
||||||
{
|
|
||||||
method: "DELETE",
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
).then(async (res) => {
|
|
||||||
if (res.status == 200) {
|
|
||||||
return res;
|
|
||||||
} else {
|
|
||||||
console.log("Failed to delete a user from an org");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export default deleteUserFromOrganization;
|
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
import SecurityClient from '~/utilities/SecurityClient';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function removes a certain member from a certain organization
|
||||||
|
* @param {*} membershipId
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
const deleteUserFromOrganization = (membershipId: string) => {
|
||||||
|
return SecurityClient.fetchCall('/api/v1/membership-org/' + membershipId, {
|
||||||
|
method: 'DELETE',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
}
|
||||||
|
}).then(async (res) => {
|
||||||
|
if (res && res.status == 200) {
|
||||||
|
return res;
|
||||||
|
} else {
|
||||||
|
console.log('Failed to delete a user from an org');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export default deleteUserFromOrganization;
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
import SecurityClient from "~/utilities/SecurityClient";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This routes gets all the incident contacts of a certain organization
|
|
||||||
* @param {*} workspaceId
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
const getIncidentContacts = (organizationId) => {
|
|
||||||
return SecurityClient.fetchCall(
|
|
||||||
"/api/v1/organization/" + organizationId + "/incidentContactOrg",
|
|
||||||
{
|
|
||||||
method: "GET",
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
).then(async (res) => {
|
|
||||||
if (res.status == 200) {
|
|
||||||
return (await res.json()).incidentContactsOrg;
|
|
||||||
} else {
|
|
||||||
console.log("Failed to get incident contacts");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export default getIncidentContacts;
|
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
import SecurityClient from '~/utilities/SecurityClient';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This routes gets all the incident contacts of a certain organization
|
||||||
|
* @param {*} workspaceId
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
const getIncidentContacts = (organizationId: string) => {
|
||||||
|
return SecurityClient.fetchCall(
|
||||||
|
'/api/v1/organization/' + organizationId + '/incidentContactOrg',
|
||||||
|
{
|
||||||
|
method: 'GET',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
).then(async (res) => {
|
||||||
|
if (res && res.status == 200) {
|
||||||
|
return (await res.json()).incidentContactsOrg;
|
||||||
|
} else {
|
||||||
|
console.log('Failed to get incident contacts');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export default getIncidentContacts;
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
import SecurityClient from "~/utilities/SecurityClient";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This route lets us rename a certain org.
|
|
||||||
* @param {*} req
|
|
||||||
* @param {*} res
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
const renameOrg = (orgId, newOrgName) => {
|
|
||||||
return SecurityClient.fetchCall(
|
|
||||||
"/api/v1/organization/" + orgId + "/name",
|
|
||||||
{
|
|
||||||
method: "PATCH",
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
},
|
|
||||||
body: JSON.stringify({
|
|
||||||
name: newOrgName,
|
|
||||||
}),
|
|
||||||
}
|
|
||||||
).then(async (res) => {
|
|
||||||
if (res.status == 200) {
|
|
||||||
return res;
|
|
||||||
} else {
|
|
||||||
console.log("Failed to rename an organization");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export default renameOrg;
|
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
import SecurityClient from '~/utilities/SecurityClient';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This route lets us rename a certain org.
|
||||||
|
* @param {*} req
|
||||||
|
* @param {*} res
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
const renameOrg = (orgId: string, newOrgName: string) => {
|
||||||
|
return SecurityClient.fetchCall('/api/v1/organization/' + orgId + '/name', {
|
||||||
|
method: 'PATCH',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
name: newOrgName
|
||||||
|
})
|
||||||
|
}).then(async (res) => {
|
||||||
|
if (res && res.status == 200) {
|
||||||
|
return res;
|
||||||
|
} else {
|
||||||
|
console.log('Failed to rename an organization');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export default renameOrg;
|
||||||
+20
-10
@@ -1,4 +1,14 @@
|
|||||||
import SecurityClient from "~/utilities/SecurityClient";
|
import SecurityClient from '~/utilities/SecurityClient';
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
name: string;
|
||||||
|
workspaceId: string;
|
||||||
|
environment: string;
|
||||||
|
expiresIn: number;
|
||||||
|
publicKey: string;
|
||||||
|
encryptedKey: string;
|
||||||
|
nonce: string;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This route gets service tokens for a specific user in a project
|
* This route gets service tokens for a specific user in a project
|
||||||
@@ -12,12 +22,12 @@ const addServiceToken = ({
|
|||||||
expiresIn,
|
expiresIn,
|
||||||
publicKey,
|
publicKey,
|
||||||
encryptedKey,
|
encryptedKey,
|
||||||
nonce,
|
nonce
|
||||||
}) => {
|
}: Props) => {
|
||||||
return SecurityClient.fetchCall("/api/v1/service-token/", {
|
return SecurityClient.fetchCall('/api/v1/service-token/', {
|
||||||
method: "POST",
|
method: 'POST',
|
||||||
headers: {
|
headers: {
|
||||||
"Content-Type": "application/json",
|
'Content-Type': 'application/json'
|
||||||
},
|
},
|
||||||
body: JSON.stringify({
|
body: JSON.stringify({
|
||||||
name,
|
name,
|
||||||
@@ -26,13 +36,13 @@ const addServiceToken = ({
|
|||||||
expiresIn,
|
expiresIn,
|
||||||
publicKey,
|
publicKey,
|
||||||
encryptedKey,
|
encryptedKey,
|
||||||
nonce,
|
nonce
|
||||||
}),
|
})
|
||||||
}).then(async (res) => {
|
}).then(async (res) => {
|
||||||
if (res.status == 200) {
|
if (res && res.status == 200) {
|
||||||
return (await res.json()).token;
|
return (await res.json()).token;
|
||||||
} else {
|
} else {
|
||||||
console.log("Failed to add service tokens");
|
console.log('Failed to add service tokens');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
import SecurityClient from "~/utilities/SecurityClient";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This route gets service tokens for a specific user in a project
|
|
||||||
* @param {*} param0
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
const getServiceTokens = ({ workspaceId }) => {
|
|
||||||
return SecurityClient.fetchCall(
|
|
||||||
"/api/v1/workspace/" + workspaceId + "/service-tokens",
|
|
||||||
{
|
|
||||||
method: "GET",
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
).then(async (res) => {
|
|
||||||
if (res.status == 200) {
|
|
||||||
return (await res.json()).serviceTokens;
|
|
||||||
} else {
|
|
||||||
console.log("Failed to get service tokens");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export default getServiceTokens;
|
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
import SecurityClient from '~/utilities/SecurityClient';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This route gets service tokens for a specific user in a project
|
||||||
|
* @param {*} param0
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
const getServiceTokens = ({ workspaceId }: { workspaceId: string }) => {
|
||||||
|
return SecurityClient.fetchCall(
|
||||||
|
'/api/v1/workspace/' + workspaceId + '/service-tokens',
|
||||||
|
{
|
||||||
|
method: 'GET',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
).then(async (res) => {
|
||||||
|
if (res && res.status == 200) {
|
||||||
|
return (await res.json()).serviceTokens;
|
||||||
|
} else {
|
||||||
|
console.log('Failed to get service tokens');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export default getServiceTokens;
|
||||||
+10
-10
@@ -1,4 +1,4 @@
|
|||||||
import SecurityClient from "~/utilities/SecurityClient";
|
import SecurityClient from '~/utilities/SecurityClient';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This route registers a certain action for a user
|
* This route registers a certain action for a user
|
||||||
@@ -6,24 +6,24 @@ import SecurityClient from "~/utilities/SecurityClient";
|
|||||||
* @param {*} workspaceId
|
* @param {*} workspaceId
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
const checkUserAction = ({ action }) => {
|
const checkUserAction = ({ action }: { action: string }) => {
|
||||||
return SecurityClient.fetchCall(
|
return SecurityClient.fetchCall(
|
||||||
"/api/v1/user-action" +
|
'/api/v1/user-action' +
|
||||||
"?" +
|
'?' +
|
||||||
new URLSearchParams({
|
new URLSearchParams({
|
||||||
action,
|
action
|
||||||
}),
|
}),
|
||||||
{
|
{
|
||||||
method: "GET",
|
method: 'GET',
|
||||||
headers: {
|
headers: {
|
||||||
"Content-Type": "application/json",
|
'Content-Type': 'application/json'
|
||||||
},
|
}
|
||||||
}
|
}
|
||||||
).then(async (res) => {
|
).then(async (res) => {
|
||||||
if (res.status == 200) {
|
if (res && res.status == 200) {
|
||||||
return (await res.json()).userAction;
|
return (await res.json()).userAction;
|
||||||
} else {
|
} else {
|
||||||
console.log("Failed to check a user action");
|
console.log('Failed to check a user action');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
import SecurityClient from "~/utilities/SecurityClient";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This route registers a certain action for a user
|
|
||||||
* @param {*} action
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
const registerUserAction = ({ action }) => {
|
|
||||||
return SecurityClient.fetchCall("/api/v1/user-action", {
|
|
||||||
method: "POST",
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
},
|
|
||||||
body: JSON.stringify({
|
|
||||||
action,
|
|
||||||
}),
|
|
||||||
}).then(async (res) => {
|
|
||||||
if (res.status == 200) {
|
|
||||||
return res;
|
|
||||||
} else {
|
|
||||||
console.log("Failed to register a user action");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export default registerUserAction;
|
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
import SecurityClient from '~/utilities/SecurityClient';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This route registers a certain action for a user
|
||||||
|
* @param {*} action
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
const registerUserAction = ({ action }: { action: string }) => {
|
||||||
|
return SecurityClient.fetchCall('/api/v1/user-action', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
action
|
||||||
|
})
|
||||||
|
}).then(async (res) => {
|
||||||
|
if (res && res.status == 200) {
|
||||||
|
return res;
|
||||||
|
} else {
|
||||||
|
console.log('Failed to register a user action');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export default registerUserAction;
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
import SecurityClient from "~/utilities/SecurityClient";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This function adds a user to a project
|
|
||||||
* @param {*} email
|
|
||||||
* @param {*} workspaceId
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
const addUserToWorkspace = (email, workspaceId) => {
|
|
||||||
return SecurityClient.fetchCall(
|
|
||||||
"/api/v1/workspace/" + workspaceId + "/invite-signup",
|
|
||||||
{
|
|
||||||
method: "POST",
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
},
|
|
||||||
body: JSON.stringify({
|
|
||||||
email: email,
|
|
||||||
}),
|
|
||||||
}
|
|
||||||
).then(async (res) => {
|
|
||||||
if (res.status == 200) {
|
|
||||||
return await res.json();
|
|
||||||
} else {
|
|
||||||
console.log("Failed to add a user to project");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export default addUserToWorkspace;
|
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
import SecurityClient from '~/utilities/SecurityClient';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function adds a user to a project
|
||||||
|
* @param {*} email
|
||||||
|
* @param {*} workspaceId
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
const addUserToWorkspace = (email: string, workspaceId: string) => {
|
||||||
|
return SecurityClient.fetchCall(
|
||||||
|
'/api/v1/workspace/' + workspaceId + '/invite-signup',
|
||||||
|
{
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
email: email
|
||||||
|
})
|
||||||
|
}
|
||||||
|
).then(async (res) => {
|
||||||
|
if (res && res.status == 200) {
|
||||||
|
return await res.json();
|
||||||
|
} else {
|
||||||
|
console.log('Failed to add a user to project');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export default addUserToWorkspace;
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
import SecurityClient from "~/utilities/SecurityClient";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This function change the access of a user in a certain workspace
|
|
||||||
* @param {*} membershipId
|
|
||||||
* @param {*} role
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
const changeUserRoleInWorkspace = (membershipId, role) => {
|
|
||||||
return SecurityClient.fetchCall(
|
|
||||||
"/api/v1/membership/" + membershipId + "/change-role",
|
|
||||||
{
|
|
||||||
method: "POST",
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
},
|
|
||||||
body: JSON.stringify({
|
|
||||||
role: role,
|
|
||||||
}),
|
|
||||||
}
|
|
||||||
).then(async (res) => {
|
|
||||||
if (res.status == 200) {
|
|
||||||
return res;
|
|
||||||
} else {
|
|
||||||
console.log("Failed to change the user role in a project");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export default changeUserRoleInWorkspace;
|
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
import SecurityClient from '~/utilities/SecurityClient';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function change the access of a user in a certain workspace
|
||||||
|
* @param {*} membershipId
|
||||||
|
* @param {*} role
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
const changeUserRoleInWorkspace = (membershipId: string, role: string) => {
|
||||||
|
return SecurityClient.fetchCall(
|
||||||
|
'/api/v1/membership/' + membershipId + '/change-role',
|
||||||
|
{
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
role: role
|
||||||
|
})
|
||||||
|
}
|
||||||
|
).then(async (res) => {
|
||||||
|
if (res && res.status == 200) {
|
||||||
|
return res;
|
||||||
|
} else {
|
||||||
|
console.log('Failed to change the user role in a project');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export default changeUserRoleInWorkspace;
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
import SecurityClient from "~/utilities/SecurityClient";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This function removes a certain member from a certain workspace
|
|
||||||
* @param {*} membershipId
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
const deleteUserFromWorkspace = (membershipId) => {
|
|
||||||
return SecurityClient.fetchCall("/api/v1/membership/" + membershipId, {
|
|
||||||
method: "DELETE",
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
},
|
|
||||||
}).then(async (res) => {
|
|
||||||
if (res.status == 200) {
|
|
||||||
return res;
|
|
||||||
} else {
|
|
||||||
console.log("Failed to delete a user from a project");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export default deleteUserFromWorkspace;
|
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
import SecurityClient from '~/utilities/SecurityClient';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function removes a certain member from a certain workspace
|
||||||
|
* @param {*} membershipId
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
const deleteUserFromWorkspace = (membershipId: string) => {
|
||||||
|
return SecurityClient.fetchCall('/api/v1/membership/' + membershipId, {
|
||||||
|
method: 'DELETE',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
}
|
||||||
|
}).then(async (res) => {
|
||||||
|
if (res && res.status == 200) {
|
||||||
|
return res;
|
||||||
|
} else {
|
||||||
|
console.log('Failed to delete a user from a project');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export default deleteUserFromWorkspace;
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
import SecurityClient from "~/utilities/SecurityClient";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This route deletes a specified workspace.
|
|
||||||
* @param {*} workspaceId
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
const deleteWorkspace = (workspaceId) => {
|
|
||||||
return SecurityClient.fetchCall("/api/v1/workspace/" + workspaceId, {
|
|
||||||
method: "DELETE",
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
},
|
|
||||||
}).then(async (res) => {
|
|
||||||
if (res.status == 200) {
|
|
||||||
return res;
|
|
||||||
} else {
|
|
||||||
console.log("Failed to delete a project");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export default deleteWorkspace;
|
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
import SecurityClient from '~/utilities/SecurityClient';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This route deletes a specified workspace.
|
||||||
|
* @param {*} workspaceId
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
const deleteWorkspace = (workspaceId: string) => {
|
||||||
|
return SecurityClient.fetchCall('/api/v1/workspace/' + workspaceId, {
|
||||||
|
method: 'DELETE',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
}
|
||||||
|
}).then(async (res) => {
|
||||||
|
if (res && res.status == 200) {
|
||||||
|
return res;
|
||||||
|
} else {
|
||||||
|
console.log('Failed to delete a project');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export default deleteWorkspace;
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
import SecurityClient from "~/utilities/SecurityClient";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This route lets us rename a certain workspace.
|
|
||||||
* @param {*} req
|
|
||||||
* @param {*} res
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
const renameWorkspace = (workspaceId, newWorkspaceName) => {
|
|
||||||
return SecurityClient.fetchCall(
|
|
||||||
"/api/v1/workspace/" + workspaceId + "/name",
|
|
||||||
{
|
|
||||||
method: "POST",
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
},
|
|
||||||
body: JSON.stringify({
|
|
||||||
name: newWorkspaceName,
|
|
||||||
}),
|
|
||||||
}
|
|
||||||
).then(async (res) => {
|
|
||||||
if (res.status == 200) {
|
|
||||||
return res;
|
|
||||||
} else {
|
|
||||||
console.log("Failed to rename a project");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export default renameWorkspace;
|
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
import SecurityClient from '~/utilities/SecurityClient';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This route lets us rename a certain workspace.
|
||||||
|
* @param {*} req
|
||||||
|
* @param {*} res
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
const renameWorkspace = (workspaceId: string, newWorkspaceName: string) => {
|
||||||
|
return SecurityClient.fetchCall(
|
||||||
|
'/api/v1/workspace/' + workspaceId + '/name',
|
||||||
|
{
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
name: newWorkspaceName
|
||||||
|
})
|
||||||
|
}
|
||||||
|
).then(async (res) => {
|
||||||
|
if (res && res.status == 200) {
|
||||||
|
return res;
|
||||||
|
} else {
|
||||||
|
console.log('Failed to rename a project');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export default renameWorkspace;
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
import SecurityClient from "~/utilities/SecurityClient";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This route uplods the keys in an encrypted format.
|
|
||||||
* @param {*} workspaceId
|
|
||||||
* @param {*} userId
|
|
||||||
* @param {*} encryptedKey
|
|
||||||
* @param {*} nonce
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
const uploadKeys = (workspaceId, userId, encryptedKey, nonce) => {
|
|
||||||
return SecurityClient.fetchCall("/api/v1/key/" + workspaceId, {
|
|
||||||
method: "POST",
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
},
|
|
||||||
body: JSON.stringify({
|
|
||||||
key: {
|
|
||||||
userId: userId,
|
|
||||||
encryptedKey: encryptedKey,
|
|
||||||
nonce: nonce,
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
}).then(async (res) => {
|
|
||||||
if (res.status == 200) {
|
|
||||||
return res;
|
|
||||||
} else {
|
|
||||||
console.log("Failed to upload keys for a new user");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export default uploadKeys;
|
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
import SecurityClient from '~/utilities/SecurityClient';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This route uplods the keys in an encrypted format.
|
||||||
|
* @param {*} workspaceId
|
||||||
|
* @param {*} userId
|
||||||
|
* @param {*} encryptedKey
|
||||||
|
* @param {*} nonce
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
const uploadKeys = (
|
||||||
|
workspaceId: string,
|
||||||
|
userId: string,
|
||||||
|
encryptedKey: string,
|
||||||
|
nonce: string
|
||||||
|
) => {
|
||||||
|
return SecurityClient.fetchCall('/api/v1/key/' + workspaceId, {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
key: {
|
||||||
|
userId: userId,
|
||||||
|
encryptedKey: encryptedKey,
|
||||||
|
nonce: nonce
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}).then(async (res) => {
|
||||||
|
if (res && res.status == 200) {
|
||||||
|
return res;
|
||||||
|
} else {
|
||||||
|
console.log('Failed to upload keys for a new user');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export default uploadKeys;
|
||||||
Reference in New Issue
Block a user