You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
158 lines
3.6 KiB
158 lines
3.6 KiB
import { Document, Schema, Types, model } from "mongoose";
|
|
import {
|
|
ALGORITHM_AES_256_GCM,
|
|
ENCODING_SCHEME_BASE64,
|
|
ENCODING_SCHEME_UTF8,
|
|
INTEGRATION_AWS_PARAMETER_STORE,
|
|
INTEGRATION_AWS_SECRET_MANAGER,
|
|
INTEGRATION_AZURE_KEY_VAULT,
|
|
INTEGRATION_CIRCLECI,
|
|
INTEGRATION_CLOUDFLARE_PAGES,
|
|
INTEGRATION_FLYIO,
|
|
INTEGRATION_GITHUB,
|
|
INTEGRATION_GITLAB,
|
|
INTEGRATION_HASHICORP_VAULT,
|
|
INTEGRATION_HEROKU,
|
|
INTEGRATION_NETLIFY,
|
|
INTEGRATION_NORTHFLANK,
|
|
INTEGRATION_RAILWAY,
|
|
INTEGRATION_RENDER,
|
|
INTEGRATION_SUPABASE,
|
|
INTEGRATION_TRAVISCI,
|
|
INTEGRATION_VERCEL
|
|
} from "../variables";
|
|
|
|
export interface IIntegrationAuth extends Document {
|
|
_id: Types.ObjectId;
|
|
workspace: Types.ObjectId;
|
|
integration: "heroku" | "vercel" | "netlify" | "github" | "gitlab" | "render" | "railway" | "flyio" | "azure-key-vault" | "circleci" | "travisci" | "supabase" | "aws-parameter-store" | "aws-secret-manager" | "checkly" | "cloudflare-pages" | "northflank";
|
|
teamId: string;
|
|
accountId: string;
|
|
url: string;
|
|
namespace: string;
|
|
refreshCiphertext?: string;
|
|
refreshIV?: string;
|
|
refreshTag?: string;
|
|
accessIdCiphertext?: string;
|
|
accessIdIV?: string;
|
|
accessIdTag?: string;
|
|
accessCiphertext?: string;
|
|
accessIV?: string;
|
|
accessTag?: string;
|
|
algorithm?: "aes-256-gcm";
|
|
keyEncoding?: "utf8" | "base64";
|
|
accessExpiresAt?: Date;
|
|
}
|
|
|
|
const integrationAuthSchema = new Schema<IIntegrationAuth>(
|
|
{
|
|
workspace: {
|
|
type: Schema.Types.ObjectId,
|
|
ref: "Workspace",
|
|
required: true,
|
|
},
|
|
integration: {
|
|
type: String,
|
|
enum: [
|
|
INTEGRATION_AZURE_KEY_VAULT,
|
|
INTEGRATION_AWS_PARAMETER_STORE,
|
|
INTEGRATION_AWS_SECRET_MANAGER,
|
|
INTEGRATION_HEROKU,
|
|
INTEGRATION_VERCEL,
|
|
INTEGRATION_NETLIFY,
|
|
INTEGRATION_GITHUB,
|
|
INTEGRATION_GITLAB,
|
|
INTEGRATION_RENDER,
|
|
INTEGRATION_RAILWAY,
|
|
INTEGRATION_FLYIO,
|
|
INTEGRATION_CIRCLECI,
|
|
INTEGRATION_TRAVISCI,
|
|
INTEGRATION_SUPABASE,
|
|
INTEGRATION_HASHICORP_VAULT,
|
|
INTEGRATION_CLOUDFLARE_PAGES,
|
|
INTEGRATION_NORTHFLANK
|
|
],
|
|
required: true,
|
|
},
|
|
teamId: {
|
|
// vercel-specific integration param
|
|
type: String,
|
|
},
|
|
url: {
|
|
// for any self-hosted integrations (e.g. self-hosted hashicorp-vault)
|
|
type: String,
|
|
},
|
|
namespace: {
|
|
// hashicorp-vault-specific integration param
|
|
type: String,
|
|
},
|
|
accountId: {
|
|
// netlify-specific integration param
|
|
type: String,
|
|
},
|
|
refreshCiphertext: {
|
|
type: String,
|
|
select: false,
|
|
},
|
|
refreshIV: {
|
|
type: String,
|
|
select: false,
|
|
},
|
|
refreshTag: {
|
|
type: String,
|
|
select: false,
|
|
},
|
|
accessIdCiphertext: {
|
|
type: String,
|
|
select: false,
|
|
},
|
|
accessIdIV: {
|
|
type: String,
|
|
select: false,
|
|
},
|
|
accessIdTag: {
|
|
type: String,
|
|
select: false,
|
|
},
|
|
accessCiphertext: {
|
|
type: String,
|
|
select: false,
|
|
},
|
|
accessIV: {
|
|
type: String,
|
|
select: false,
|
|
},
|
|
accessTag: {
|
|
type: String,
|
|
select: false,
|
|
},
|
|
accessExpiresAt: {
|
|
type: Date,
|
|
select: false,
|
|
},
|
|
algorithm: { // the encryption algorithm used
|
|
type: String,
|
|
enum: [ALGORITHM_AES_256_GCM],
|
|
required: true,
|
|
},
|
|
keyEncoding: {
|
|
type: String,
|
|
enum: [
|
|
ENCODING_SCHEME_UTF8,
|
|
ENCODING_SCHEME_BASE64,
|
|
],
|
|
required: true,
|
|
},
|
|
},
|
|
{
|
|
timestamps: true,
|
|
}
|
|
);
|
|
|
|
const IntegrationAuth = model<IIntegrationAuth>(
|
|
"IntegrationAuth",
|
|
integrationAuthSchema
|
|
);
|
|
|
|
export default IntegrationAuth;
|