Skip to content

Commit

Permalink
Continue developing activity logs backend
Browse files Browse the repository at this point in the history
  • Loading branch information
dangtony98 committed Dec 21, 2022
1 parent 6e50adb commit 009f9c6
Show file tree
Hide file tree
Showing 6 changed files with 132 additions and 10 deletions.
27 changes: 25 additions & 2 deletions backend/src/events/secret.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
import { EVENT_PUSH_SECRETS } from '../variables';
import {
EVENT_PUSH_SECRETS,
EVENT_PULL_SECRETS
} from '../variables';

interface PushSecret {
ciphertextKey: string;
Expand All @@ -19,7 +22,7 @@ interface PushSecret {
* @returns
*/
const eventPushSecrets = ({
workspaceId,
workspaceId
}: {
workspaceId: string;
}) => {
Expand All @@ -32,6 +35,26 @@ const eventPushSecrets = ({
});
}

/**
* Return event for pulling secrets
* @param {Object} obj
* @param {String} obj.workspaceId - id of workspace to pull secrets from
* @returns
*/
const eventPullSecrets = ({
workspaceId,
}: {
workspaceId: string;
}) => {
return ({
name: EVENT_PULL_SECRETS,
workspaceId,
payload: {

}
});
}

export {
eventPushSecrets
}
25 changes: 25 additions & 0 deletions backend/src/helpers/log.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { Log, ILog } from '../models';
import * as Sentry from '@sentry/node';
import {
EVENT_PUSH_SECRETS,
EVENT_PULL_SECRETS
} from '../variables';


const handleLogHelper = async ({
log
}: {
log: ILog
}) => {
try {
switch (log.event) {
case EVENT_PULL_SECRETS:
// TODO
break;
}

} catch (err){
Sentry.setUser(null);
Sentry.captureException(err);
}
}
Empty file added backend/src/logs/index.ts
Empty file.
Empty file added backend/src/logs/secret.ts
Empty file.
65 changes: 57 additions & 8 deletions backend/src/models/log.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ export interface ILog {
user?: Types.ObjectId;
workspace: Types.ObjectId;
event: string;
groupId: string;
payload: {
numberofSecrets?: number;
environment?: string;
Expand All @@ -13,6 +14,52 @@ export interface ILog {
ipAddress?: string;
}

// log group consists of logs (each log is associated with 1 event)
// scenario:

// do we in the future record old and new values for secrets? (when you log update secret,
// do you want to know what the old secret value was changed to?)

// Option 1:

// action 1: pushed secrets (top-level event)
// - log 1 (groupId: ABC): modified 10 secrets (sub-level event)
// ---- array of secret ids that were modified
// - log 2 (groupId: ABC): deleted 5 secrets
// ---- array of secret ids that were deleted
// - log 3 (groupId: ABC): created 10 secrets
// ---- array of secret ids that were created

// action 2: pull secrets
// - log 4 (groupId: DEF): read 20 secrets
// ---- array of secret ids that were read

// Option 2 (many logs):

// action 1: pushed secrets (top-level event)
// - log 1 (groupId: ABC): modified secret abc
// - log 2 (groupId: ABC): modified secret def
// - log 3 (groupId: ABC): modified secret ghi
// - log 4 (groupId: ABC): created secret jkl
// - log 5 (groupId: ABC): created secret mno
// - log 6 (groupId: ABC): deleted secret pqr

// action 2: pull secrets (pulling 100 secrets = 100 logs; 10 times per day, 5 people => 5000 logs)
// - log 7 (groupId: DEF): read secret abc
// - log 8 (groupId: DEF): read secret def
// - log 9 (groupId: DEF): read secret ghi
// - log 10 (groupId: DEF): read secret jkl
// - log 11 (groupId: DEF): read secret mno

// logGroup
// ---- log (query for log groups by person and by secret etc.)

/**
* Action: save secrets
* -
*
*/

const logSchema = new Schema<ILog>(
{
user: {
Expand All @@ -23,17 +70,19 @@ const logSchema = new Schema<ILog>(
type: Schema.Types.ObjectId,
ref: 'Workspace'
},
event: { // push, pull
event: { // CRUD secrets
type: String,
required: true
},
payload: {
numberOfSecrets: {
type: Number
},
environment: {
type: String
}
groupId: {
type: String,
required: true,
},
payload: {
secrets: [{
type: Schema.Types.ObjectId,
ref: 'Secret'
}]
},
channel: {
type: String,
Expand Down
25 changes: 25 additions & 0 deletions backend/src/models/logGroup.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { Schema, model, Types } from 'mongoose';

export interface ILogGroup {
workspace: Types.ObjectId,
logs: [Types.ObjectId]
}

const logGroupSchema = new Schema<ILogGroup>(
{
workspace: {
type: Schema.Types.ObjectId,
ref: 'Workspace'
},
logs: [{
type: Schema.Types.ObjectId,
ref: 'Log'
}]
}, {
timestamps: true
}
);

const LogGroup = model<ILogGroup>('LogGroup', logGroupSchema);

export default LogGroup;

0 comments on commit 009f9c6

Please sign in to comment.