Checkpoint service account functionality, added UI and general backend structure

This commit is contained in:
Tuan Dang
2023-03-27 22:00:10 +07:00
parent 3a0ce7c084
commit d36d7bfce6
39 changed files with 1710 additions and 356 deletions
+6 -3
View File
@@ -12,7 +12,8 @@ import Secret, { ISecret } from './secret';
import ServiceToken, { IServiceToken } from './serviceToken';
import ServiceAccount, { IServiceAccount } from './serviceAccount'; // new
import ServiceAccountKey, { IServiceAccountKey } from './serviceAccountKey'; // new
import ServiceAccountPermission, { IServiceAccountPermission } from './serviceAccountPermission';
import ServiceAccountOrganizationPermissions, { IServiceAccountOrganizationPermissions } from './serviceAccountOrganizationPermission'; // new
import ServiceAccountWorkspacePermissions, { IServiceAccountWorkspacePermissions } from './serviceAccountWorkspacePermissions'; // new
import TokenData, { ITokenData } from './tokenData';
import User, { IUser } from './user';
import UserAction, { IUserAction } from './userAction';
@@ -50,8 +51,10 @@ export {
IServiceAccount,
ServiceAccountKey,
IServiceAccountKey,
ServiceAccountPermission,
IServiceAccountPermission,
ServiceAccountOrganizationPermissions,
IServiceAccountOrganizationPermissions,
ServiceAccountWorkspacePermissions,
IServiceAccountWorkspacePermissions,
TokenData,
ITokenData,
User,
+6
View File
@@ -7,6 +7,7 @@ export interface IServiceAccount extends Document {
user: Types.ObjectId;
publicKey: string;
expiresAt: Date;
secretHash: string;
}
const serviceAccountSchema = new Schema<IServiceAccount>(
@@ -31,6 +32,11 @@ const serviceAccountSchema = new Schema<IServiceAccount>(
},
expiresAt: {
type: Date
},
secretHash: {
type: String,
required: true,
select: false
}
},
{
@@ -0,0 +1,28 @@
import { Schema, model, Types, Document } from 'mongoose';
export interface IServiceAccountOrganizationPermissions extends Document {
_id: Types.ObjectId;
serviceAccount: Types.ObjectId;
canFoo: boolean;
}
const serviceAccountOrganizationPermissionsSchema = new Schema<IServiceAccountOrganizationPermissions>(
{
serviceAccount: {
type: Schema.Types.ObjectId,
ref: 'ServiceAccount',
required: true
},
canFoo: {
type: Boolean,
default: false
}
},
{
timestamps: true
}
);
const ServiceAccountOrganizationPermissions = model<IServiceAccountOrganizationPermissions>('ServiceAccountOrganizationPermissions', serviceAccountOrganizationPermissionsSchema);
export default ServiceAccountOrganizationPermissions;
@@ -1,39 +0,0 @@
import { Schema, model, Types, Document } from 'mongoose';
export interface IServiceAccountPermission extends Document {
_id: Types.ObjectId;
serviceAccount: Types.ObjectId;
name: string;
workspace?: Types.ObjectId;
environment?: string;
}
const serviceAccountPermissionSchema = new Schema<IServiceAccountPermission>(
{
serviceAccount: {
type: Schema.Types.ObjectId,
ref: 'ServiceAccount',
required: true
},
name: {
type: String,
required: true
},
workspace: {
type: Schema.Types.ObjectId,
ref: 'Workspace',
default: null
},
environment: {
type: 'String',
default: null
}
},
{
timestamps: true
}
);
const ServiceAccountPermission = model<IServiceAccountPermission>('ServiceAccountPermission', serviceAccountPermissionSchema);
export default ServiceAccountPermission;
@@ -0,0 +1,54 @@
import { Schema, model, Types, Document } from 'mongoose';
export interface IServiceAccountWorkspacePermissions extends Document {
_id: Types.ObjectId;
serviceAccount: Types.ObjectId;
workspace: Types.ObjectId;
environment: string;
canRead: boolean;
canWrite: boolean;
canUpdate: boolean;
canDelete: boolean;
}
const serviceAccountWorkspacePermissions = new Schema<IServiceAccountWorkspacePermissions>(
{
serviceAccount: {
type: Schema.Types.ObjectId,
ref: 'ServiceAccount',
required: true
},
workspace:{
type: Schema.Types.ObjectId,
ref: 'Workspace',
required: true
},
environment: {
type: String,
required: true
},
canRead: {
type: Boolean,
default: false
},
canWrite: {
type: Boolean,
default: false
},
canUpdate: {
type: Boolean,
default: false
},
canDelete: {
type: Boolean,
default: false
}
},
{
timestamps: true
}
);
const ServiceAccountWorkspacePermissions = model<IServiceAccountWorkspacePermissions>('ServiceAccountWorkspacePermissions', serviceAccountWorkspacePermissions);
export default ServiceAccountWorkspacePermissions;