mirror of
https://github.com/fosrl/pangolin.git
synced 2026-02-28 15:56:39 +00:00
Add logActionAudit and query endpoint
This commit is contained in:
@@ -230,6 +230,28 @@ export const actionAuditLog = pgTable("actionAuditLog", {
|
|||||||
index("idx_actionAuditLog_org_timestamp").on(table.orgId, table.timestamp)
|
index("idx_actionAuditLog_org_timestamp").on(table.orgId, table.timestamp)
|
||||||
]));
|
]));
|
||||||
|
|
||||||
|
export const identityAuditLog = pgTable("identityAuditLog", {
|
||||||
|
id: serial("id").primaryKey(),
|
||||||
|
timestamp: bigint("timestamp", { mode: "number" }).notNull(), // this is EPOCH time in seconds
|
||||||
|
orgId: varchar("orgId")
|
||||||
|
.notNull()
|
||||||
|
.references(() => orgs.orgId, { onDelete: "cascade" }),
|
||||||
|
actorType: varchar("actorType", { length: 50 }).notNull(),
|
||||||
|
actor: varchar("actor", { length: 255 }).notNull(),
|
||||||
|
actorId: varchar("actorId", { length: 255 }).notNull(),
|
||||||
|
resourceId: integer("resourceId"),
|
||||||
|
ip: varchar("ip", { length: 45 }).notNull(),
|
||||||
|
type: varchar("type", { length: 100 }).notNull(),
|
||||||
|
action: varchar("action", { length: 100 }).notNull(),
|
||||||
|
location: text("location"),
|
||||||
|
path: text("path"),
|
||||||
|
userAgent: text("userAgent"),
|
||||||
|
metadata: text("details")
|
||||||
|
}, (table) => ([
|
||||||
|
index("idx_identityAuditLog_timestamp").on(table.timestamp),
|
||||||
|
index("idx_identityAuditLog_org_timestamp").on(table.orgId, table.timestamp)
|
||||||
|
]));
|
||||||
|
|
||||||
export type Limit = InferSelectModel<typeof limits>;
|
export type Limit = InferSelectModel<typeof limits>;
|
||||||
export type Account = InferSelectModel<typeof account>;
|
export type Account = InferSelectModel<typeof account>;
|
||||||
export type Certificate = InferSelectModel<typeof certificates>;
|
export type Certificate = InferSelectModel<typeof certificates>;
|
||||||
@@ -247,4 +269,5 @@ export type RemoteExitNodeSession = InferSelectModel<
|
|||||||
>;
|
>;
|
||||||
export type ExitNodeOrg = InferSelectModel<typeof exitNodeOrgs>;
|
export type ExitNodeOrg = InferSelectModel<typeof exitNodeOrgs>;
|
||||||
export type LoginPage = InferSelectModel<typeof loginPage>;
|
export type LoginPage = InferSelectModel<typeof loginPage>;
|
||||||
export type ActionAuditLog = InferSelectModel<typeof actionAuditLog>;
|
export type ActionAuditLog = InferSelectModel<typeof actionAuditLog>;
|
||||||
|
export type IdentityAuditLog = InferSelectModel<typeof identityAuditLog>;
|
||||||
@@ -6,7 +6,8 @@ import {
|
|||||||
integer,
|
integer,
|
||||||
bigint,
|
bigint,
|
||||||
real,
|
real,
|
||||||
text
|
text,
|
||||||
|
index
|
||||||
} from "drizzle-orm/pg-core";
|
} from "drizzle-orm/pg-core";
|
||||||
import { InferSelectModel } from "drizzle-orm";
|
import { InferSelectModel } from "drizzle-orm";
|
||||||
import { randomUUID } from "crypto";
|
import { randomUUID } from "crypto";
|
||||||
@@ -671,6 +672,28 @@ export const setupTokens = pgTable("setupTokens", {
|
|||||||
dateUsed: varchar("dateUsed")
|
dateUsed: varchar("dateUsed")
|
||||||
});
|
});
|
||||||
|
|
||||||
|
export const requestAuditLog = pgTable("requestAuditLog", {
|
||||||
|
id: serial("id").primaryKey(),
|
||||||
|
timestamp: integer("timestamp").notNull(), // this is EPOCH time in seconds
|
||||||
|
orgId: varchar("orgId")
|
||||||
|
.notNull()
|
||||||
|
.references(() => orgs.orgId, { onDelete: "cascade" }),
|
||||||
|
actorType: varchar("actorType").notNull(),
|
||||||
|
actor: varchar("actor").notNull(),
|
||||||
|
actorId: varchar("actorId").notNull(),
|
||||||
|
resourceId: integer("resourceId"),
|
||||||
|
ip: varchar("ip").notNull(),
|
||||||
|
type: varchar("type").notNull(),
|
||||||
|
action: varchar("action").notNull(),
|
||||||
|
event: varchar("event").notNull(),
|
||||||
|
location: varchar("location"),
|
||||||
|
userAgent: varchar("userAgent"),
|
||||||
|
metadata: text("details")
|
||||||
|
}, (table) => ([
|
||||||
|
index("idx_actionAuditLog_timestamp").on(table.timestamp),
|
||||||
|
index("idx_actionAuditLog_org_timestamp").on(table.orgId, table.timestamp)
|
||||||
|
]));
|
||||||
|
|
||||||
export type Org = InferSelectModel<typeof orgs>;
|
export type Org = InferSelectModel<typeof orgs>;
|
||||||
export type User = InferSelectModel<typeof users>;
|
export type User = InferSelectModel<typeof users>;
|
||||||
export type Site = InferSelectModel<typeof sites>;
|
export type Site = InferSelectModel<typeof sites>;
|
||||||
@@ -722,3 +745,7 @@ export type SetupToken = InferSelectModel<typeof setupTokens>;
|
|||||||
export type HostMeta = InferSelectModel<typeof hostMeta>;
|
export type HostMeta = InferSelectModel<typeof hostMeta>;
|
||||||
export type TargetHealthCheck = InferSelectModel<typeof targetHealthCheck>;
|
export type TargetHealthCheck = InferSelectModel<typeof targetHealthCheck>;
|
||||||
export type IdpOidcConfig = InferSelectModel<typeof idpOidcConfig>;
|
export type IdpOidcConfig = InferSelectModel<typeof idpOidcConfig>;
|
||||||
|
export type LicenseKey = InferSelectModel<typeof licenseKey>;
|
||||||
|
export type SecurityKey = InferSelectModel<typeof securityKeys>;
|
||||||
|
export type WebauthnChallenge = InferSelectModel<typeof webauthnChallenge>;
|
||||||
|
export type RequestAuditLog = InferSelectModel<typeof requestAuditLog>;
|
||||||
@@ -225,6 +225,28 @@ export const actionAuditLog = sqliteTable("actionAuditLog", {
|
|||||||
index("idx_actionAuditLog_org_timestamp").on(table.orgId, table.timestamp)
|
index("idx_actionAuditLog_org_timestamp").on(table.orgId, table.timestamp)
|
||||||
]));
|
]));
|
||||||
|
|
||||||
|
export const identityAuditLog = sqliteTable("identityAuditLog", {
|
||||||
|
id: integer("id").primaryKey({ autoIncrement: true }),
|
||||||
|
timestamp: integer("timestamp").notNull(), // this is EPOCH time in seconds
|
||||||
|
orgId: text("orgId")
|
||||||
|
.notNull()
|
||||||
|
.references(() => orgs.orgId, { onDelete: "cascade" }),
|
||||||
|
actorType: text("actorType").notNull(),
|
||||||
|
actor: text("actor").notNull(),
|
||||||
|
actorId: text("actorId").notNull(),
|
||||||
|
resourceId: integer("resourceId"),
|
||||||
|
ip: text("ip").notNull(),
|
||||||
|
type: text("type").notNull(),
|
||||||
|
action: text("action").notNull(),
|
||||||
|
location: text("location"),
|
||||||
|
path: text("path"),
|
||||||
|
userAgent: text("userAgent"),
|
||||||
|
metadata: text("details")
|
||||||
|
}, (table) => ([
|
||||||
|
index("idx_actionAuditLog_timestamp").on(table.timestamp),
|
||||||
|
index("idx_actionAuditLog_org_timestamp").on(table.orgId, table.timestamp)
|
||||||
|
]));
|
||||||
|
|
||||||
export type Limit = InferSelectModel<typeof limits>;
|
export type Limit = InferSelectModel<typeof limits>;
|
||||||
export type Account = InferSelectModel<typeof account>;
|
export type Account = InferSelectModel<typeof account>;
|
||||||
export type Certificate = InferSelectModel<typeof certificates>;
|
export type Certificate = InferSelectModel<typeof certificates>;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { randomUUID } from "crypto";
|
import { randomUUID } from "crypto";
|
||||||
import { InferSelectModel } from "drizzle-orm";
|
import { InferSelectModel } from "drizzle-orm";
|
||||||
import { sqliteTable, text, integer } from "drizzle-orm/sqlite-core";
|
import { sqliteTable, text, integer, index } from "drizzle-orm/sqlite-core";
|
||||||
|
|
||||||
export const domains = sqliteTable("domains", {
|
export const domains = sqliteTable("domains", {
|
||||||
domainId: text("domainId").primaryKey(),
|
domainId: text("domainId").primaryKey(),
|
||||||
@@ -710,6 +710,28 @@ export const idpOrg = sqliteTable("idpOrg", {
|
|||||||
orgMapping: text("orgMapping")
|
orgMapping: text("orgMapping")
|
||||||
});
|
});
|
||||||
|
|
||||||
|
export const requestAuditLog = sqliteTable("requestAuditLog", {
|
||||||
|
id: integer("id").primaryKey({ autoIncrement: true }),
|
||||||
|
timestamp: integer("timestamp").notNull(), // this is EPOCH time in seconds
|
||||||
|
orgId: text("orgId")
|
||||||
|
.notNull()
|
||||||
|
.references(() => orgs.orgId, { onDelete: "cascade" }),
|
||||||
|
actorType: text("actorType").notNull(),
|
||||||
|
actor: text("actor").notNull(),
|
||||||
|
actorId: text("actorId").notNull(),
|
||||||
|
resourceId: integer("resourceId"),
|
||||||
|
ip: text("ip").notNull(),
|
||||||
|
type: text("type").notNull(),
|
||||||
|
action: text("action").notNull(),
|
||||||
|
event: text("event").notNull(),
|
||||||
|
location: text("location"),
|
||||||
|
userAgent: text("userAgent"),
|
||||||
|
metadata: text("details")
|
||||||
|
}, (table) => ([
|
||||||
|
index("idx_actionAuditLog_timestamp").on(table.timestamp),
|
||||||
|
index("idx_actionAuditLog_org_timestamp").on(table.orgId, table.timestamp)
|
||||||
|
]));
|
||||||
|
|
||||||
export type Org = InferSelectModel<typeof orgs>;
|
export type Org = InferSelectModel<typeof orgs>;
|
||||||
export type User = InferSelectModel<typeof users>;
|
export type User = InferSelectModel<typeof users>;
|
||||||
export type Site = InferSelectModel<typeof sites>;
|
export type Site = InferSelectModel<typeof sites>;
|
||||||
@@ -761,3 +783,7 @@ export type SetupToken = InferSelectModel<typeof setupTokens>;
|
|||||||
export type HostMeta = InferSelectModel<typeof hostMeta>;
|
export type HostMeta = InferSelectModel<typeof hostMeta>;
|
||||||
export type TargetHealthCheck = InferSelectModel<typeof targetHealthCheck>;
|
export type TargetHealthCheck = InferSelectModel<typeof targetHealthCheck>;
|
||||||
export type IdpOidcConfig = InferSelectModel<typeof idpOidcConfig>;
|
export type IdpOidcConfig = InferSelectModel<typeof idpOidcConfig>;
|
||||||
|
export type LicenseKey = InferSelectModel<typeof licenseKey>;
|
||||||
|
export type SecurityKey = InferSelectModel<typeof securityKeys>;
|
||||||
|
export type WebauthnChallenge = InferSelectModel<typeof webauthnChallenge>;
|
||||||
|
export type RequestAuditLog = InferSelectModel<typeof requestAuditLog>;
|
||||||
12
server/middlewares/logActionAudit.ts
Normal file
12
server/middlewares/logActionAudit.ts
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
import { ActionsEnum } from "@server/auth/actions";
|
||||||
|
import { Request, Response, NextFunction } from "express";
|
||||||
|
|
||||||
|
export function logActionAudit(action: ActionsEnum) {
|
||||||
|
return async function (
|
||||||
|
req: Request,
|
||||||
|
res: Response,
|
||||||
|
next: NextFunction
|
||||||
|
): Promise<any> {
|
||||||
|
next();
|
||||||
|
};
|
||||||
|
}
|
||||||
0
server/private/routers/auditLogs/index.ts
Normal file
0
server/private/routers/auditLogs/index.ts
Normal file
147
server/private/routers/auditLogs/queryActionAuditLog.ts
Normal file
147
server/private/routers/auditLogs/queryActionAuditLog.ts
Normal file
@@ -0,0 +1,147 @@
|
|||||||
|
import { actionAuditLog, db } from "@server/db";
|
||||||
|
import { registry } from "@server/openApi";
|
||||||
|
import { NextFunction } from "express";
|
||||||
|
import { Request, Response } from "express";
|
||||||
|
import { eq, gt, lt, and, count } from "drizzle-orm";
|
||||||
|
import { OpenAPITags } from "@server/openApi";
|
||||||
|
import { z } from "zod";
|
||||||
|
import createHttpError from "http-errors";
|
||||||
|
import HttpCode from "@server/types/HttpCode";
|
||||||
|
import { fromError } from "zod-validation-error";
|
||||||
|
import { QueryActionAuditLogResponse } from "@server/routers/auditLogs/types";
|
||||||
|
import response from "@server/lib/response";
|
||||||
|
import logger from "@server/logger";
|
||||||
|
|
||||||
|
export const queryAccessAuditLogsQuery = z.object({
|
||||||
|
// iso string just validate its a parseable date
|
||||||
|
timeStart: z
|
||||||
|
.string()
|
||||||
|
.refine((val) => !isNaN(Date.parse(val)), {
|
||||||
|
message: "timeStart must be a valid ISO date string"
|
||||||
|
})
|
||||||
|
.transform((val) => Math.floor(new Date(val).getTime() / 1000)),
|
||||||
|
timeEnd: z
|
||||||
|
.string()
|
||||||
|
.refine((val) => !isNaN(Date.parse(val)), {
|
||||||
|
message: "timeEnd must be a valid ISO date string"
|
||||||
|
})
|
||||||
|
.transform((val) => Math.floor(new Date(val).getTime() / 1000))
|
||||||
|
.optional()
|
||||||
|
.default(new Date().toISOString()),
|
||||||
|
limit: z
|
||||||
|
.string()
|
||||||
|
.optional()
|
||||||
|
.default("1000")
|
||||||
|
.transform(Number)
|
||||||
|
.pipe(z.number().int().positive()),
|
||||||
|
offset: z
|
||||||
|
.string()
|
||||||
|
.optional()
|
||||||
|
.default("0")
|
||||||
|
.transform(Number)
|
||||||
|
.pipe(z.number().int().nonnegative())
|
||||||
|
});
|
||||||
|
|
||||||
|
export const queryAccessAuditLogsParams = z.object({
|
||||||
|
orgId: z.string()
|
||||||
|
});
|
||||||
|
|
||||||
|
function querySites(timeStart: number, timeEnd: number, orgId: string) {
|
||||||
|
return db
|
||||||
|
.select({
|
||||||
|
orgId: actionAuditLog.orgId,
|
||||||
|
action: actionAuditLog.action,
|
||||||
|
actorType: actionAuditLog.actorType,
|
||||||
|
timestamp: actionAuditLog.timestamp,
|
||||||
|
actor: actionAuditLog.actor
|
||||||
|
})
|
||||||
|
.from(actionAuditLog)
|
||||||
|
.where(
|
||||||
|
and(
|
||||||
|
gt(actionAuditLog.timestamp, timeStart),
|
||||||
|
lt(actionAuditLog.timestamp, timeEnd),
|
||||||
|
eq(actionAuditLog.orgId, orgId)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
.orderBy(actionAuditLog.timestamp);
|
||||||
|
}
|
||||||
|
|
||||||
|
registry.registerPath({
|
||||||
|
method: "get",
|
||||||
|
path: "/org/{orgId}/logs/action",
|
||||||
|
description: "Query the action audit log for an organization",
|
||||||
|
tags: [OpenAPITags.Org],
|
||||||
|
request: {
|
||||||
|
query: queryAccessAuditLogsQuery,
|
||||||
|
params: queryAccessAuditLogsParams
|
||||||
|
},
|
||||||
|
responses: {}
|
||||||
|
});
|
||||||
|
|
||||||
|
export async function queryAccessAuditLogs(
|
||||||
|
req: Request,
|
||||||
|
res: Response,
|
||||||
|
next: NextFunction
|
||||||
|
): Promise<any> {
|
||||||
|
try {
|
||||||
|
const parsedQuery = queryAccessAuditLogsQuery.safeParse(req.query);
|
||||||
|
if (!parsedQuery.success) {
|
||||||
|
return next(
|
||||||
|
createHttpError(
|
||||||
|
HttpCode.BAD_REQUEST,
|
||||||
|
fromError(parsedQuery.error)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
const { timeStart, timeEnd, limit, offset } = parsedQuery.data;
|
||||||
|
|
||||||
|
const parsedParams = queryAccessAuditLogsParams.safeParse(req.params);
|
||||||
|
if (!parsedParams.success) {
|
||||||
|
return next(
|
||||||
|
createHttpError(
|
||||||
|
HttpCode.BAD_REQUEST,
|
||||||
|
fromError(parsedParams.error)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
const { orgId } = parsedParams.data;
|
||||||
|
|
||||||
|
const baseQuery = querySites(timeStart, timeEnd, orgId);
|
||||||
|
|
||||||
|
const log = await baseQuery.limit(limit).offset(offset);
|
||||||
|
|
||||||
|
const countQuery = db
|
||||||
|
.select({ count: count() })
|
||||||
|
.from(actionAuditLog)
|
||||||
|
.where(
|
||||||
|
and(
|
||||||
|
gt(actionAuditLog.timestamp, timeStart),
|
||||||
|
lt(actionAuditLog.timestamp, timeEnd),
|
||||||
|
eq(actionAuditLog.orgId, orgId)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
const totalCountResult = await countQuery;
|
||||||
|
const totalCount = totalCountResult[0].count;
|
||||||
|
|
||||||
|
return response<QueryActionAuditLogResponse>(res, {
|
||||||
|
data: {
|
||||||
|
log: log,
|
||||||
|
pagination: {
|
||||||
|
total: totalCount,
|
||||||
|
limit,
|
||||||
|
offset
|
||||||
|
}
|
||||||
|
},
|
||||||
|
success: true,
|
||||||
|
error: false,
|
||||||
|
message: "Action audit logs retrieved successfully",
|
||||||
|
status: HttpCode.OK
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
logger.error(error);
|
||||||
|
return next(
|
||||||
|
createHttpError(HttpCode.INTERNAL_SERVER_ERROR, "An error occurred")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -31,6 +31,7 @@ import {
|
|||||||
} from "@server/middlewares";
|
} from "@server/middlewares";
|
||||||
import { ActionsEnum } from "@server/auth/actions";
|
import { ActionsEnum } from "@server/auth/actions";
|
||||||
import {
|
import {
|
||||||
|
logActionAudit,
|
||||||
verifyCertificateAccess,
|
verifyCertificateAccess,
|
||||||
verifyIdpAccess,
|
verifyIdpAccess,
|
||||||
verifyLoginPageAccess,
|
verifyLoginPageAccess,
|
||||||
@@ -72,7 +73,8 @@ authenticated.put(
|
|||||||
verifyValidLicense,
|
verifyValidLicense,
|
||||||
verifyOrgAccess,
|
verifyOrgAccess,
|
||||||
verifyUserHasAction(ActionsEnum.createIdp),
|
verifyUserHasAction(ActionsEnum.createIdp),
|
||||||
orgIdp.createOrgOidcIdp
|
orgIdp.createOrgOidcIdp,
|
||||||
|
logActionAudit(ActionsEnum.createIdp)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.post(
|
authenticated.post(
|
||||||
@@ -81,7 +83,8 @@ authenticated.post(
|
|||||||
verifyOrgAccess,
|
verifyOrgAccess,
|
||||||
verifyIdpAccess,
|
verifyIdpAccess,
|
||||||
verifyUserHasAction(ActionsEnum.updateIdp),
|
verifyUserHasAction(ActionsEnum.updateIdp),
|
||||||
orgIdp.updateOrgOidcIdp
|
orgIdp.updateOrgOidcIdp,
|
||||||
|
logActionAudit(ActionsEnum.updateIdp)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.delete(
|
authenticated.delete(
|
||||||
@@ -90,7 +93,8 @@ authenticated.delete(
|
|||||||
verifyOrgAccess,
|
verifyOrgAccess,
|
||||||
verifyIdpAccess,
|
verifyIdpAccess,
|
||||||
verifyUserHasAction(ActionsEnum.deleteIdp),
|
verifyUserHasAction(ActionsEnum.deleteIdp),
|
||||||
orgIdp.deleteOrgIdp
|
orgIdp.deleteOrgIdp,
|
||||||
|
logActionAudit(ActionsEnum.deleteIdp)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.get(
|
authenticated.get(
|
||||||
@@ -127,7 +131,8 @@ authenticated.post(
|
|||||||
verifyOrgAccess,
|
verifyOrgAccess,
|
||||||
verifyCertificateAccess,
|
verifyCertificateAccess,
|
||||||
verifyUserHasAction(ActionsEnum.restartCertificate),
|
verifyUserHasAction(ActionsEnum.restartCertificate),
|
||||||
certificates.restartCertificate
|
certificates.restartCertificate,
|
||||||
|
logActionAudit(ActionsEnum.restartCertificate)
|
||||||
);
|
);
|
||||||
|
|
||||||
if (build === "saas") {
|
if (build === "saas") {
|
||||||
@@ -152,14 +157,16 @@ if (build === "saas") {
|
|||||||
"/org/:orgId/billing/create-checkout-session",
|
"/org/:orgId/billing/create-checkout-session",
|
||||||
verifyOrgAccess,
|
verifyOrgAccess,
|
||||||
verifyUserHasAction(ActionsEnum.billing),
|
verifyUserHasAction(ActionsEnum.billing),
|
||||||
billing.createCheckoutSession
|
billing.createCheckoutSession,
|
||||||
|
logActionAudit(ActionsEnum.billing)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.post(
|
authenticated.post(
|
||||||
"/org/:orgId/billing/create-portal-session",
|
"/org/:orgId/billing/create-portal-session",
|
||||||
verifyOrgAccess,
|
verifyOrgAccess,
|
||||||
verifyUserHasAction(ActionsEnum.billing),
|
verifyUserHasAction(ActionsEnum.billing),
|
||||||
billing.createPortalSession
|
billing.createPortalSession,
|
||||||
|
logActionAudit(ActionsEnum.billing)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.get(
|
authenticated.get(
|
||||||
@@ -206,7 +213,8 @@ authenticated.put(
|
|||||||
verifyValidLicense,
|
verifyValidLicense,
|
||||||
verifyOrgAccess,
|
verifyOrgAccess,
|
||||||
verifyUserHasAction(ActionsEnum.createRemoteExitNode),
|
verifyUserHasAction(ActionsEnum.createRemoteExitNode),
|
||||||
remoteExitNode.createRemoteExitNode
|
remoteExitNode.createRemoteExitNode,
|
||||||
|
logActionAudit(ActionsEnum.createRemoteExitNode)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.get(
|
authenticated.get(
|
||||||
@@ -240,7 +248,8 @@ authenticated.delete(
|
|||||||
verifyOrgAccess,
|
verifyOrgAccess,
|
||||||
verifyRemoteExitNodeAccess,
|
verifyRemoteExitNodeAccess,
|
||||||
verifyUserHasAction(ActionsEnum.deleteRemoteExitNode),
|
verifyUserHasAction(ActionsEnum.deleteRemoteExitNode),
|
||||||
remoteExitNode.deleteRemoteExitNode
|
remoteExitNode.deleteRemoteExitNode,
|
||||||
|
logActionAudit(ActionsEnum.deleteRemoteExitNode)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.put(
|
authenticated.put(
|
||||||
@@ -248,7 +257,8 @@ authenticated.put(
|
|||||||
verifyValidLicense,
|
verifyValidLicense,
|
||||||
verifyOrgAccess,
|
verifyOrgAccess,
|
||||||
verifyUserHasAction(ActionsEnum.createLoginPage),
|
verifyUserHasAction(ActionsEnum.createLoginPage),
|
||||||
loginPage.createLoginPage
|
loginPage.createLoginPage,
|
||||||
|
logActionAudit(ActionsEnum.createLoginPage)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.post(
|
authenticated.post(
|
||||||
@@ -257,7 +267,8 @@ authenticated.post(
|
|||||||
verifyOrgAccess,
|
verifyOrgAccess,
|
||||||
verifyLoginPageAccess,
|
verifyLoginPageAccess,
|
||||||
verifyUserHasAction(ActionsEnum.updateLoginPage),
|
verifyUserHasAction(ActionsEnum.updateLoginPage),
|
||||||
loginPage.updateLoginPage
|
loginPage.updateLoginPage,
|
||||||
|
logActionAudit(ActionsEnum.updateLoginPage)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.delete(
|
authenticated.delete(
|
||||||
@@ -266,7 +277,8 @@ authenticated.delete(
|
|||||||
verifyOrgAccess,
|
verifyOrgAccess,
|
||||||
verifyLoginPageAccess,
|
verifyLoginPageAccess,
|
||||||
verifyUserHasAction(ActionsEnum.deleteLoginPage),
|
verifyUserHasAction(ActionsEnum.deleteLoginPage),
|
||||||
loginPage.deleteLoginPage
|
loginPage.deleteLoginPage,
|
||||||
|
logActionAudit(ActionsEnum.deleteLoginPage)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.get(
|
authenticated.get(
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import {
|
|||||||
import { ActionsEnum } from "@server/auth/actions";
|
import { ActionsEnum } from "@server/auth/actions";
|
||||||
|
|
||||||
import { unauthenticated as ua, authenticated as a } from "@server/routers/integration";
|
import { unauthenticated as ua, authenticated as a } from "@server/routers/integration";
|
||||||
|
import { logActionAudit } from "#private/middlewares";
|
||||||
|
|
||||||
export const unauthenticated = ua;
|
export const unauthenticated = ua;
|
||||||
export const authenticated = a;
|
export const authenticated = a;
|
||||||
@@ -31,12 +32,14 @@ authenticated.post(
|
|||||||
`/org/:orgId/send-usage-notification`,
|
`/org/:orgId/send-usage-notification`,
|
||||||
verifyApiKeyIsRoot, // We are the only ones who can use root key so its fine
|
verifyApiKeyIsRoot, // We are the only ones who can use root key so its fine
|
||||||
verifyApiKeyHasAction(ActionsEnum.sendUsageNotification),
|
verifyApiKeyHasAction(ActionsEnum.sendUsageNotification),
|
||||||
org.sendUsageNotification
|
org.sendUsageNotification,
|
||||||
|
logActionAudit(ActionsEnum.sendUsageNotification)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.delete(
|
authenticated.delete(
|
||||||
"/idp/:idpId",
|
"/idp/:idpId",
|
||||||
verifyApiKeyIsRoot,
|
verifyApiKeyIsRoot,
|
||||||
verifyApiKeyHasAction(ActionsEnum.deleteIdp),
|
verifyApiKeyHasAction(ActionsEnum.deleteIdp),
|
||||||
orgIdp.deleteOrgIdp
|
orgIdp.deleteOrgIdp,
|
||||||
|
logActionAudit(ActionsEnum.deleteIdp)
|
||||||
);
|
);
|
||||||
14
server/routers/auditLogs/types.ts
Normal file
14
server/routers/auditLogs/types.ts
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
export type QueryActionAuditLogResponse = {
|
||||||
|
log: {
|
||||||
|
orgId: string;
|
||||||
|
action: string;
|
||||||
|
actorType: string;
|
||||||
|
timestamp: number;
|
||||||
|
actor: string;
|
||||||
|
}[];
|
||||||
|
pagination: {
|
||||||
|
total: number;
|
||||||
|
limit: number;
|
||||||
|
offset: number;
|
||||||
|
};
|
||||||
|
};
|
||||||
@@ -44,6 +44,7 @@ import rateLimit, { ipKeyGenerator } from "express-rate-limit";
|
|||||||
import createHttpError from "http-errors";
|
import createHttpError from "http-errors";
|
||||||
import { build } from "@server/build";
|
import { build } from "@server/build";
|
||||||
import { createStore } from "#dynamic/lib/rateLimitStore";
|
import { createStore } from "#dynamic/lib/rateLimitStore";
|
||||||
|
import { logActionAudit } from "#dynamic/middlewares";
|
||||||
|
|
||||||
// Root routes
|
// Root routes
|
||||||
export const unauthenticated = Router();
|
export const unauthenticated = Router();
|
||||||
@@ -75,7 +76,8 @@ authenticated.post(
|
|||||||
"/org/:orgId",
|
"/org/:orgId",
|
||||||
verifyOrgAccess,
|
verifyOrgAccess,
|
||||||
verifyUserHasAction(ActionsEnum.updateOrg),
|
verifyUserHasAction(ActionsEnum.updateOrg),
|
||||||
org.updateOrg
|
org.updateOrg,
|
||||||
|
logActionAudit(ActionsEnum.updateOrg)
|
||||||
);
|
);
|
||||||
|
|
||||||
if (build !== "saas") {
|
if (build !== "saas") {
|
||||||
@@ -84,7 +86,8 @@ if (build !== "saas") {
|
|||||||
verifyOrgAccess,
|
verifyOrgAccess,
|
||||||
verifyUserIsOrgOwner,
|
verifyUserIsOrgOwner,
|
||||||
verifyUserHasAction(ActionsEnum.deleteOrg),
|
verifyUserHasAction(ActionsEnum.deleteOrg),
|
||||||
org.deleteOrg
|
org.deleteOrg,
|
||||||
|
logActionAudit(ActionsEnum.deleteOrg)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -92,7 +95,8 @@ authenticated.put(
|
|||||||
"/org/:orgId/site",
|
"/org/:orgId/site",
|
||||||
verifyOrgAccess,
|
verifyOrgAccess,
|
||||||
verifyUserHasAction(ActionsEnum.createSite),
|
verifyUserHasAction(ActionsEnum.createSite),
|
||||||
site.createSite
|
site.createSite,
|
||||||
|
logActionAudit(ActionsEnum.createSite)
|
||||||
);
|
);
|
||||||
authenticated.get(
|
authenticated.get(
|
||||||
"/org/:orgId/sites",
|
"/org/:orgId/sites",
|
||||||
@@ -149,7 +153,8 @@ authenticated.put(
|
|||||||
verifyClientsEnabled,
|
verifyClientsEnabled,
|
||||||
verifyOrgAccess,
|
verifyOrgAccess,
|
||||||
verifyUserHasAction(ActionsEnum.createClient),
|
verifyUserHasAction(ActionsEnum.createClient),
|
||||||
client.createClient
|
client.createClient,
|
||||||
|
logActionAudit(ActionsEnum.createClient)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.delete(
|
authenticated.delete(
|
||||||
@@ -157,7 +162,8 @@ authenticated.delete(
|
|||||||
verifyClientsEnabled,
|
verifyClientsEnabled,
|
||||||
verifyClientAccess,
|
verifyClientAccess,
|
||||||
verifyUserHasAction(ActionsEnum.deleteClient),
|
verifyUserHasAction(ActionsEnum.deleteClient),
|
||||||
client.deleteClient
|
client.deleteClient,
|
||||||
|
logActionAudit(ActionsEnum.deleteClient)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.post(
|
authenticated.post(
|
||||||
@@ -165,7 +171,8 @@ authenticated.post(
|
|||||||
verifyClientsEnabled,
|
verifyClientsEnabled,
|
||||||
verifyClientAccess, // this will check if the user has access to the client
|
verifyClientAccess, // this will check if the user has access to the client
|
||||||
verifyUserHasAction(ActionsEnum.updateClient), // this will check if the user has permission to update the client
|
verifyUserHasAction(ActionsEnum.updateClient), // this will check if the user has permission to update the client
|
||||||
client.updateClient
|
client.updateClient,
|
||||||
|
logActionAudit(ActionsEnum.updateClient)
|
||||||
);
|
);
|
||||||
|
|
||||||
// authenticated.get(
|
// authenticated.get(
|
||||||
@@ -178,15 +185,18 @@ authenticated.post(
|
|||||||
"/site/:siteId",
|
"/site/:siteId",
|
||||||
verifySiteAccess,
|
verifySiteAccess,
|
||||||
verifyUserHasAction(ActionsEnum.updateSite),
|
verifyUserHasAction(ActionsEnum.updateSite),
|
||||||
site.updateSite
|
site.updateSite,
|
||||||
|
logActionAudit(ActionsEnum.updateSite)
|
||||||
);
|
);
|
||||||
authenticated.delete(
|
authenticated.delete(
|
||||||
"/site/:siteId",
|
"/site/:siteId",
|
||||||
verifySiteAccess,
|
verifySiteAccess,
|
||||||
verifyUserHasAction(ActionsEnum.deleteSite),
|
verifyUserHasAction(ActionsEnum.deleteSite),
|
||||||
site.deleteSite
|
site.deleteSite,
|
||||||
|
logActionAudit(ActionsEnum.deleteSite)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// TODO: BREAK OUT THESE ACTIONS SO THEY ARE NOT ALL "getSite"
|
||||||
authenticated.get(
|
authenticated.get(
|
||||||
"/site/:siteId/docker/status",
|
"/site/:siteId/docker/status",
|
||||||
verifySiteAccess,
|
verifySiteAccess,
|
||||||
@@ -203,13 +213,15 @@ authenticated.post(
|
|||||||
"/site/:siteId/docker/check",
|
"/site/:siteId/docker/check",
|
||||||
verifySiteAccess,
|
verifySiteAccess,
|
||||||
verifyUserHasAction(ActionsEnum.getSite),
|
verifyUserHasAction(ActionsEnum.getSite),
|
||||||
site.checkDockerSocket
|
site.checkDockerSocket,
|
||||||
|
// logActionAudit(ActionsEnum.getSite)
|
||||||
);
|
);
|
||||||
authenticated.post(
|
authenticated.post(
|
||||||
"/site/:siteId/docker/trigger",
|
"/site/:siteId/docker/trigger",
|
||||||
verifySiteAccess,
|
verifySiteAccess,
|
||||||
verifyUserHasAction(ActionsEnum.getSite),
|
verifyUserHasAction(ActionsEnum.getSite),
|
||||||
site.triggerFetchContainers
|
site.triggerFetchContainers,
|
||||||
|
// logActionAudit(ActionsEnum.getSite)
|
||||||
);
|
);
|
||||||
authenticated.get(
|
authenticated.get(
|
||||||
"/site/:siteId/docker/containers",
|
"/site/:siteId/docker/containers",
|
||||||
@@ -224,7 +236,8 @@ authenticated.put(
|
|||||||
verifyOrgAccess,
|
verifyOrgAccess,
|
||||||
verifySiteAccess,
|
verifySiteAccess,
|
||||||
verifyUserHasAction(ActionsEnum.createSiteResource),
|
verifyUserHasAction(ActionsEnum.createSiteResource),
|
||||||
siteResource.createSiteResource
|
siteResource.createSiteResource,
|
||||||
|
logActionAudit(ActionsEnum.createSiteResource)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.get(
|
authenticated.get(
|
||||||
@@ -257,7 +270,8 @@ authenticated.post(
|
|||||||
verifySiteAccess,
|
verifySiteAccess,
|
||||||
verifySiteResourceAccess,
|
verifySiteResourceAccess,
|
||||||
verifyUserHasAction(ActionsEnum.updateSiteResource),
|
verifyUserHasAction(ActionsEnum.updateSiteResource),
|
||||||
siteResource.updateSiteResource
|
siteResource.updateSiteResource,
|
||||||
|
logActionAudit(ActionsEnum.updateSiteResource)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.delete(
|
authenticated.delete(
|
||||||
@@ -266,14 +280,16 @@ authenticated.delete(
|
|||||||
verifySiteAccess,
|
verifySiteAccess,
|
||||||
verifySiteResourceAccess,
|
verifySiteResourceAccess,
|
||||||
verifyUserHasAction(ActionsEnum.deleteSiteResource),
|
verifyUserHasAction(ActionsEnum.deleteSiteResource),
|
||||||
siteResource.deleteSiteResource
|
siteResource.deleteSiteResource,
|
||||||
|
logActionAudit(ActionsEnum.deleteSiteResource)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.put(
|
authenticated.put(
|
||||||
"/org/:orgId/resource",
|
"/org/:orgId/resource",
|
||||||
verifyOrgAccess,
|
verifyOrgAccess,
|
||||||
verifyUserHasAction(ActionsEnum.createResource),
|
verifyUserHasAction(ActionsEnum.createResource),
|
||||||
resource.createResource
|
resource.createResource,
|
||||||
|
logActionAudit(ActionsEnum.createResource)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.get(
|
authenticated.get(
|
||||||
@@ -313,15 +329,18 @@ authenticated.delete(
|
|||||||
"/org/:orgId/invitations/:inviteId",
|
"/org/:orgId/invitations/:inviteId",
|
||||||
verifyOrgAccess,
|
verifyOrgAccess,
|
||||||
verifyUserHasAction(ActionsEnum.removeInvitation),
|
verifyUserHasAction(ActionsEnum.removeInvitation),
|
||||||
user.removeInvitation
|
user.removeInvitation,
|
||||||
|
logActionAudit(ActionsEnum.removeInvitation)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.post(
|
authenticated.post(
|
||||||
"/org/:orgId/create-invite",
|
"/org/:orgId/create-invite",
|
||||||
verifyOrgAccess,
|
verifyOrgAccess,
|
||||||
verifyUserHasAction(ActionsEnum.inviteUser),
|
verifyUserHasAction(ActionsEnum.inviteUser),
|
||||||
user.inviteUser
|
user.inviteUser,
|
||||||
|
logActionAudit(ActionsEnum.inviteUser)
|
||||||
); // maybe make this /invite/create instead
|
); // maybe make this /invite/create instead
|
||||||
|
|
||||||
unauthenticated.post("/invite/accept", user.acceptInvite); // this is supposed to be unauthenticated
|
unauthenticated.post("/invite/accept", user.acceptInvite); // this is supposed to be unauthenticated
|
||||||
|
|
||||||
authenticated.get(
|
authenticated.get(
|
||||||
@@ -354,20 +373,23 @@ authenticated.post(
|
|||||||
"/resource/:resourceId",
|
"/resource/:resourceId",
|
||||||
verifyResourceAccess,
|
verifyResourceAccess,
|
||||||
verifyUserHasAction(ActionsEnum.updateResource),
|
verifyUserHasAction(ActionsEnum.updateResource),
|
||||||
resource.updateResource
|
resource.updateResource,
|
||||||
|
logActionAudit(ActionsEnum.updateResource)
|
||||||
);
|
);
|
||||||
authenticated.delete(
|
authenticated.delete(
|
||||||
"/resource/:resourceId",
|
"/resource/:resourceId",
|
||||||
verifyResourceAccess,
|
verifyResourceAccess,
|
||||||
verifyUserHasAction(ActionsEnum.deleteResource),
|
verifyUserHasAction(ActionsEnum.deleteResource),
|
||||||
resource.deleteResource
|
resource.deleteResource,
|
||||||
|
logActionAudit(ActionsEnum.deleteResource)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.put(
|
authenticated.put(
|
||||||
"/resource/:resourceId/target",
|
"/resource/:resourceId/target",
|
||||||
verifyResourceAccess,
|
verifyResourceAccess,
|
||||||
verifyUserHasAction(ActionsEnum.createTarget),
|
verifyUserHasAction(ActionsEnum.createTarget),
|
||||||
target.createTarget
|
target.createTarget,
|
||||||
|
logActionAudit(ActionsEnum.createTarget)
|
||||||
);
|
);
|
||||||
authenticated.get(
|
authenticated.get(
|
||||||
"/resource/:resourceId/targets",
|
"/resource/:resourceId/targets",
|
||||||
@@ -380,7 +402,8 @@ authenticated.put(
|
|||||||
"/resource/:resourceId/rule",
|
"/resource/:resourceId/rule",
|
||||||
verifyResourceAccess,
|
verifyResourceAccess,
|
||||||
verifyUserHasAction(ActionsEnum.createResourceRule),
|
verifyUserHasAction(ActionsEnum.createResourceRule),
|
||||||
resource.createResourceRule
|
resource.createResourceRule,
|
||||||
|
logActionAudit(ActionsEnum.createResourceRule)
|
||||||
);
|
);
|
||||||
authenticated.get(
|
authenticated.get(
|
||||||
"/resource/:resourceId/rules",
|
"/resource/:resourceId/rules",
|
||||||
@@ -392,13 +415,15 @@ authenticated.post(
|
|||||||
"/resource/:resourceId/rule/:ruleId",
|
"/resource/:resourceId/rule/:ruleId",
|
||||||
verifyResourceAccess,
|
verifyResourceAccess,
|
||||||
verifyUserHasAction(ActionsEnum.updateResourceRule),
|
verifyUserHasAction(ActionsEnum.updateResourceRule),
|
||||||
resource.updateResourceRule
|
resource.updateResourceRule,
|
||||||
|
logActionAudit(ActionsEnum.updateResourceRule)
|
||||||
);
|
);
|
||||||
authenticated.delete(
|
authenticated.delete(
|
||||||
"/resource/:resourceId/rule/:ruleId",
|
"/resource/:resourceId/rule/:ruleId",
|
||||||
verifyResourceAccess,
|
verifyResourceAccess,
|
||||||
verifyUserHasAction(ActionsEnum.deleteResourceRule),
|
verifyUserHasAction(ActionsEnum.deleteResourceRule),
|
||||||
resource.deleteResourceRule
|
resource.deleteResourceRule,
|
||||||
|
logActionAudit(ActionsEnum.deleteResourceRule)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.get(
|
authenticated.get(
|
||||||
@@ -411,20 +436,23 @@ authenticated.post(
|
|||||||
"/target/:targetId",
|
"/target/:targetId",
|
||||||
verifyTargetAccess,
|
verifyTargetAccess,
|
||||||
verifyUserHasAction(ActionsEnum.updateTarget),
|
verifyUserHasAction(ActionsEnum.updateTarget),
|
||||||
target.updateTarget
|
target.updateTarget,
|
||||||
|
logActionAudit(ActionsEnum.updateTarget)
|
||||||
);
|
);
|
||||||
authenticated.delete(
|
authenticated.delete(
|
||||||
"/target/:targetId",
|
"/target/:targetId",
|
||||||
verifyTargetAccess,
|
verifyTargetAccess,
|
||||||
verifyUserHasAction(ActionsEnum.deleteTarget),
|
verifyUserHasAction(ActionsEnum.deleteTarget),
|
||||||
target.deleteTarget
|
target.deleteTarget,
|
||||||
|
logActionAudit(ActionsEnum.deleteTarget)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.put(
|
authenticated.put(
|
||||||
"/org/:orgId/role",
|
"/org/:orgId/role",
|
||||||
verifyOrgAccess,
|
verifyOrgAccess,
|
||||||
verifyUserHasAction(ActionsEnum.createRole),
|
verifyUserHasAction(ActionsEnum.createRole),
|
||||||
role.createRole
|
role.createRole,
|
||||||
|
logActionAudit(ActionsEnum.createRole)
|
||||||
);
|
);
|
||||||
authenticated.get(
|
authenticated.get(
|
||||||
"/org/:orgId/roles",
|
"/org/:orgId/roles",
|
||||||
@@ -449,14 +477,16 @@ authenticated.delete(
|
|||||||
"/role/:roleId",
|
"/role/:roleId",
|
||||||
verifyRoleAccess,
|
verifyRoleAccess,
|
||||||
verifyUserHasAction(ActionsEnum.deleteRole),
|
verifyUserHasAction(ActionsEnum.deleteRole),
|
||||||
role.deleteRole
|
role.deleteRole,
|
||||||
|
logActionAudit(ActionsEnum.deleteRole)
|
||||||
);
|
);
|
||||||
authenticated.post(
|
authenticated.post(
|
||||||
"/role/:roleId/add/:userId",
|
"/role/:roleId/add/:userId",
|
||||||
verifyRoleAccess,
|
verifyRoleAccess,
|
||||||
verifyUserAccess,
|
verifyUserAccess,
|
||||||
verifyUserHasAction(ActionsEnum.addUserRole),
|
verifyUserHasAction(ActionsEnum.addUserRole),
|
||||||
user.addUserRole
|
user.addUserRole,
|
||||||
|
logActionAudit(ActionsEnum.addUserRole)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.post(
|
authenticated.post(
|
||||||
@@ -464,7 +494,8 @@ authenticated.post(
|
|||||||
verifyResourceAccess,
|
verifyResourceAccess,
|
||||||
verifyRoleAccess,
|
verifyRoleAccess,
|
||||||
verifyUserHasAction(ActionsEnum.setResourceRoles),
|
verifyUserHasAction(ActionsEnum.setResourceRoles),
|
||||||
resource.setResourceRoles
|
resource.setResourceRoles,
|
||||||
|
logActionAudit(ActionsEnum.setResourceRoles)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.post(
|
authenticated.post(
|
||||||
@@ -472,35 +503,40 @@ authenticated.post(
|
|||||||
verifyResourceAccess,
|
verifyResourceAccess,
|
||||||
verifySetResourceUsers,
|
verifySetResourceUsers,
|
||||||
verifyUserHasAction(ActionsEnum.setResourceUsers),
|
verifyUserHasAction(ActionsEnum.setResourceUsers),
|
||||||
resource.setResourceUsers
|
resource.setResourceUsers,
|
||||||
|
logActionAudit(ActionsEnum.setResourceUsers)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.post(
|
authenticated.post(
|
||||||
`/resource/:resourceId/password`,
|
`/resource/:resourceId/password`,
|
||||||
verifyResourceAccess,
|
verifyResourceAccess,
|
||||||
verifyUserHasAction(ActionsEnum.setResourcePassword),
|
verifyUserHasAction(ActionsEnum.setResourcePassword),
|
||||||
resource.setResourcePassword
|
resource.setResourcePassword,
|
||||||
|
logActionAudit(ActionsEnum.setResourcePassword)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.post(
|
authenticated.post(
|
||||||
`/resource/:resourceId/pincode`,
|
`/resource/:resourceId/pincode`,
|
||||||
verifyResourceAccess,
|
verifyResourceAccess,
|
||||||
verifyUserHasAction(ActionsEnum.setResourcePincode),
|
verifyUserHasAction(ActionsEnum.setResourcePincode),
|
||||||
resource.setResourcePincode
|
resource.setResourcePincode,
|
||||||
|
logActionAudit(ActionsEnum.setResourcePincode)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.post(
|
authenticated.post(
|
||||||
`/resource/:resourceId/header-auth`,
|
`/resource/:resourceId/header-auth`,
|
||||||
verifyResourceAccess,
|
verifyResourceAccess,
|
||||||
verifyUserHasAction(ActionsEnum.setResourceHeaderAuth),
|
verifyUserHasAction(ActionsEnum.setResourceHeaderAuth),
|
||||||
resource.setResourceHeaderAuth
|
resource.setResourceHeaderAuth,
|
||||||
|
logActionAudit(ActionsEnum.setResourceHeaderAuth)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.post(
|
authenticated.post(
|
||||||
`/resource/:resourceId/whitelist`,
|
`/resource/:resourceId/whitelist`,
|
||||||
verifyResourceAccess,
|
verifyResourceAccess,
|
||||||
verifyUserHasAction(ActionsEnum.setResourceWhitelist),
|
verifyUserHasAction(ActionsEnum.setResourceWhitelist),
|
||||||
resource.setResourceWhitelist
|
resource.setResourceWhitelist,
|
||||||
|
logActionAudit(ActionsEnum.setResourceWhitelist)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.get(
|
authenticated.get(
|
||||||
@@ -514,14 +550,16 @@ authenticated.post(
|
|||||||
`/resource/:resourceId/access-token`,
|
`/resource/:resourceId/access-token`,
|
||||||
verifyResourceAccess,
|
verifyResourceAccess,
|
||||||
verifyUserHasAction(ActionsEnum.generateAccessToken),
|
verifyUserHasAction(ActionsEnum.generateAccessToken),
|
||||||
accessToken.generateAccessToken
|
accessToken.generateAccessToken,
|
||||||
|
logActionAudit(ActionsEnum.generateAccessToken)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.delete(
|
authenticated.delete(
|
||||||
`/access-token/:accessTokenId`,
|
`/access-token/:accessTokenId`,
|
||||||
verifyAccessTokenAccess,
|
verifyAccessTokenAccess,
|
||||||
verifyUserHasAction(ActionsEnum.deleteAcessToken),
|
verifyUserHasAction(ActionsEnum.deleteAcessToken),
|
||||||
accessToken.deleteAccessToken
|
accessToken.deleteAccessToken,
|
||||||
|
logActionAudit(ActionsEnum.deleteAcessToken)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.get(
|
authenticated.get(
|
||||||
@@ -594,7 +632,8 @@ authenticated.put(
|
|||||||
"/org/:orgId/user",
|
"/org/:orgId/user",
|
||||||
verifyOrgAccess,
|
verifyOrgAccess,
|
||||||
verifyUserHasAction(ActionsEnum.createOrgUser),
|
verifyUserHasAction(ActionsEnum.createOrgUser),
|
||||||
user.createOrgUser
|
user.createOrgUser,
|
||||||
|
logActionAudit(ActionsEnum.createOrgUser)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.post(
|
authenticated.post(
|
||||||
@@ -602,7 +641,8 @@ authenticated.post(
|
|||||||
verifyOrgAccess,
|
verifyOrgAccess,
|
||||||
verifyUserAccess,
|
verifyUserAccess,
|
||||||
verifyUserHasAction(ActionsEnum.updateOrgUser),
|
verifyUserHasAction(ActionsEnum.updateOrgUser),
|
||||||
user.updateOrgUser
|
user.updateOrgUser,
|
||||||
|
logActionAudit(ActionsEnum.updateOrgUser)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.get("/org/:orgId/user/:userId", verifyOrgAccess, user.getOrgUser);
|
authenticated.get("/org/:orgId/user/:userId", verifyOrgAccess, user.getOrgUser);
|
||||||
@@ -624,7 +664,8 @@ authenticated.delete(
|
|||||||
verifyOrgAccess,
|
verifyOrgAccess,
|
||||||
verifyUserAccess,
|
verifyUserAccess,
|
||||||
verifyUserHasAction(ActionsEnum.removeUser),
|
verifyUserHasAction(ActionsEnum.removeUser),
|
||||||
user.removeUserOrg
|
user.removeUserOrg,
|
||||||
|
logActionAudit(ActionsEnum.removeUser)
|
||||||
);
|
);
|
||||||
|
|
||||||
// authenticated.put(
|
// authenticated.put(
|
||||||
@@ -757,7 +798,8 @@ authenticated.post(
|
|||||||
verifyOrgAccess,
|
verifyOrgAccess,
|
||||||
verifyApiKeyAccess,
|
verifyApiKeyAccess,
|
||||||
verifyUserHasAction(ActionsEnum.setApiKeyActions),
|
verifyUserHasAction(ActionsEnum.setApiKeyActions),
|
||||||
apiKeys.setApiKeyActions
|
apiKeys.setApiKeyActions,
|
||||||
|
logActionAudit(ActionsEnum.setApiKeyActions)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.get(
|
authenticated.get(
|
||||||
@@ -772,7 +814,8 @@ authenticated.put(
|
|||||||
`/org/:orgId/api-key`,
|
`/org/:orgId/api-key`,
|
||||||
verifyOrgAccess,
|
verifyOrgAccess,
|
||||||
verifyUserHasAction(ActionsEnum.createApiKey),
|
verifyUserHasAction(ActionsEnum.createApiKey),
|
||||||
apiKeys.createOrgApiKey
|
apiKeys.createOrgApiKey,
|
||||||
|
logActionAudit(ActionsEnum.createApiKey)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.delete(
|
authenticated.delete(
|
||||||
@@ -780,7 +823,8 @@ authenticated.delete(
|
|||||||
verifyOrgAccess,
|
verifyOrgAccess,
|
||||||
verifyApiKeyAccess,
|
verifyApiKeyAccess,
|
||||||
verifyUserHasAction(ActionsEnum.deleteApiKey),
|
verifyUserHasAction(ActionsEnum.deleteApiKey),
|
||||||
apiKeys.deleteOrgApiKey
|
apiKeys.deleteOrgApiKey,
|
||||||
|
logActionAudit(ActionsEnum.deleteApiKey)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.get(
|
authenticated.get(
|
||||||
@@ -795,7 +839,8 @@ authenticated.put(
|
|||||||
`/org/:orgId/domain`,
|
`/org/:orgId/domain`,
|
||||||
verifyOrgAccess,
|
verifyOrgAccess,
|
||||||
verifyUserHasAction(ActionsEnum.createOrgDomain),
|
verifyUserHasAction(ActionsEnum.createOrgDomain),
|
||||||
domain.createOrgDomain
|
domain.createOrgDomain,
|
||||||
|
logActionAudit(ActionsEnum.createOrgDomain)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.post(
|
authenticated.post(
|
||||||
@@ -803,7 +848,8 @@ authenticated.post(
|
|||||||
verifyOrgAccess,
|
verifyOrgAccess,
|
||||||
verifyDomainAccess,
|
verifyDomainAccess,
|
||||||
verifyUserHasAction(ActionsEnum.restartOrgDomain),
|
verifyUserHasAction(ActionsEnum.restartOrgDomain),
|
||||||
domain.restartOrgDomain
|
domain.restartOrgDomain,
|
||||||
|
logActionAudit(ActionsEnum.restartOrgDomain)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.delete(
|
authenticated.delete(
|
||||||
@@ -811,7 +857,8 @@ authenticated.delete(
|
|||||||
verifyOrgAccess,
|
verifyOrgAccess,
|
||||||
verifyDomainAccess,
|
verifyDomainAccess,
|
||||||
verifyUserHasAction(ActionsEnum.deleteOrgDomain),
|
verifyUserHasAction(ActionsEnum.deleteOrgDomain),
|
||||||
domain.deleteAccountDomain
|
domain.deleteAccountDomain,
|
||||||
|
logActionAudit(ActionsEnum.deleteOrgDomain)
|
||||||
);
|
);
|
||||||
|
|
||||||
// Auth routes
|
// Auth routes
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ import {
|
|||||||
import HttpCode from "@server/types/HttpCode";
|
import HttpCode from "@server/types/HttpCode";
|
||||||
import { Router } from "express";
|
import { Router } from "express";
|
||||||
import { ActionsEnum } from "@server/auth/actions";
|
import { ActionsEnum } from "@server/auth/actions";
|
||||||
import { build } from "@server/build";
|
import { logActionAudit } from "#dynamic/middlewares";
|
||||||
|
|
||||||
export const unauthenticated = Router();
|
export const unauthenticated = Router();
|
||||||
|
|
||||||
@@ -51,7 +51,8 @@ authenticated.put(
|
|||||||
"/org",
|
"/org",
|
||||||
verifyApiKeyIsRoot,
|
verifyApiKeyIsRoot,
|
||||||
verifyApiKeyHasAction(ActionsEnum.createOrg),
|
verifyApiKeyHasAction(ActionsEnum.createOrg),
|
||||||
org.createOrg
|
org.createOrg,
|
||||||
|
logActionAudit(ActionsEnum.createOrg)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.get(
|
authenticated.get(
|
||||||
@@ -72,21 +73,24 @@ authenticated.post(
|
|||||||
"/org/:orgId",
|
"/org/:orgId",
|
||||||
verifyApiKeyOrgAccess,
|
verifyApiKeyOrgAccess,
|
||||||
verifyApiKeyHasAction(ActionsEnum.updateOrg),
|
verifyApiKeyHasAction(ActionsEnum.updateOrg),
|
||||||
org.updateOrg
|
org.updateOrg,
|
||||||
|
logActionAudit(ActionsEnum.updateOrg)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.delete(
|
authenticated.delete(
|
||||||
"/org/:orgId",
|
"/org/:orgId",
|
||||||
verifyApiKeyIsRoot,
|
verifyApiKeyIsRoot,
|
||||||
verifyApiKeyHasAction(ActionsEnum.deleteOrg),
|
verifyApiKeyHasAction(ActionsEnum.deleteOrg),
|
||||||
org.deleteOrg
|
org.deleteOrg,
|
||||||
|
logActionAudit(ActionsEnum.deleteOrg)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.put(
|
authenticated.put(
|
||||||
"/org/:orgId/site",
|
"/org/:orgId/site",
|
||||||
verifyApiKeyOrgAccess,
|
verifyApiKeyOrgAccess,
|
||||||
verifyApiKeyHasAction(ActionsEnum.createSite),
|
verifyApiKeyHasAction(ActionsEnum.createSite),
|
||||||
site.createSite
|
site.createSite,
|
||||||
|
logActionAudit(ActionsEnum.createSite)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.get(
|
authenticated.get(
|
||||||
@@ -121,14 +125,16 @@ authenticated.post(
|
|||||||
"/site/:siteId",
|
"/site/:siteId",
|
||||||
verifyApiKeySiteAccess,
|
verifyApiKeySiteAccess,
|
||||||
verifyApiKeyHasAction(ActionsEnum.updateSite),
|
verifyApiKeyHasAction(ActionsEnum.updateSite),
|
||||||
site.updateSite
|
site.updateSite,
|
||||||
|
logActionAudit(ActionsEnum.updateSite)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.delete(
|
authenticated.delete(
|
||||||
"/site/:siteId",
|
"/site/:siteId",
|
||||||
verifyApiKeySiteAccess,
|
verifyApiKeySiteAccess,
|
||||||
verifyApiKeyHasAction(ActionsEnum.deleteSite),
|
verifyApiKeyHasAction(ActionsEnum.deleteSite),
|
||||||
site.deleteSite
|
site.deleteSite,
|
||||||
|
logActionAudit(ActionsEnum.deleteSite)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.get(
|
authenticated.get(
|
||||||
@@ -142,7 +148,8 @@ authenticated.put(
|
|||||||
verifyApiKeyOrgAccess,
|
verifyApiKeyOrgAccess,
|
||||||
verifyApiKeySiteAccess,
|
verifyApiKeySiteAccess,
|
||||||
verifyApiKeyHasAction(ActionsEnum.createSiteResource),
|
verifyApiKeyHasAction(ActionsEnum.createSiteResource),
|
||||||
siteResource.createSiteResource
|
siteResource.createSiteResource,
|
||||||
|
logActionAudit(ActionsEnum.createSiteResource)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.get(
|
authenticated.get(
|
||||||
@@ -175,7 +182,8 @@ authenticated.post(
|
|||||||
verifyApiKeySiteAccess,
|
verifyApiKeySiteAccess,
|
||||||
verifyApiKeySiteResourceAccess,
|
verifyApiKeySiteResourceAccess,
|
||||||
verifyApiKeyHasAction(ActionsEnum.updateSiteResource),
|
verifyApiKeyHasAction(ActionsEnum.updateSiteResource),
|
||||||
siteResource.updateSiteResource
|
siteResource.updateSiteResource,
|
||||||
|
logActionAudit(ActionsEnum.updateSiteResource)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.delete(
|
authenticated.delete(
|
||||||
@@ -184,21 +192,24 @@ authenticated.delete(
|
|||||||
verifyApiKeySiteAccess,
|
verifyApiKeySiteAccess,
|
||||||
verifyApiKeySiteResourceAccess,
|
verifyApiKeySiteResourceAccess,
|
||||||
verifyApiKeyHasAction(ActionsEnum.deleteSiteResource),
|
verifyApiKeyHasAction(ActionsEnum.deleteSiteResource),
|
||||||
siteResource.deleteSiteResource
|
siteResource.deleteSiteResource,
|
||||||
|
logActionAudit(ActionsEnum.deleteSiteResource)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.put(
|
authenticated.put(
|
||||||
"/org/:orgId/resource",
|
"/org/:orgId/resource",
|
||||||
verifyApiKeyOrgAccess,
|
verifyApiKeyOrgAccess,
|
||||||
verifyApiKeyHasAction(ActionsEnum.createResource),
|
verifyApiKeyHasAction(ActionsEnum.createResource),
|
||||||
resource.createResource
|
resource.createResource,
|
||||||
|
logActionAudit(ActionsEnum.createResource)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.put(
|
authenticated.put(
|
||||||
"/org/:orgId/site/:siteId/resource",
|
"/org/:orgId/site/:siteId/resource",
|
||||||
verifyApiKeyOrgAccess,
|
verifyApiKeyOrgAccess,
|
||||||
verifyApiKeyHasAction(ActionsEnum.createResource),
|
verifyApiKeyHasAction(ActionsEnum.createResource),
|
||||||
resource.createResource
|
resource.createResource,
|
||||||
|
logActionAudit(ActionsEnum.createResource)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.get(
|
authenticated.get(
|
||||||
@@ -233,7 +244,8 @@ authenticated.post(
|
|||||||
"/org/:orgId/create-invite",
|
"/org/:orgId/create-invite",
|
||||||
verifyApiKeyOrgAccess,
|
verifyApiKeyOrgAccess,
|
||||||
verifyApiKeyHasAction(ActionsEnum.inviteUser),
|
verifyApiKeyHasAction(ActionsEnum.inviteUser),
|
||||||
user.inviteUser
|
user.inviteUser,
|
||||||
|
logActionAudit(ActionsEnum.inviteUser)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.get(
|
authenticated.get(
|
||||||
@@ -261,21 +273,24 @@ authenticated.post(
|
|||||||
"/resource/:resourceId",
|
"/resource/:resourceId",
|
||||||
verifyApiKeyResourceAccess,
|
verifyApiKeyResourceAccess,
|
||||||
verifyApiKeyHasAction(ActionsEnum.updateResource),
|
verifyApiKeyHasAction(ActionsEnum.updateResource),
|
||||||
resource.updateResource
|
resource.updateResource,
|
||||||
|
logActionAudit(ActionsEnum.updateResource)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.delete(
|
authenticated.delete(
|
||||||
"/resource/:resourceId",
|
"/resource/:resourceId",
|
||||||
verifyApiKeyResourceAccess,
|
verifyApiKeyResourceAccess,
|
||||||
verifyApiKeyHasAction(ActionsEnum.deleteResource),
|
verifyApiKeyHasAction(ActionsEnum.deleteResource),
|
||||||
resource.deleteResource
|
resource.deleteResource,
|
||||||
|
logActionAudit(ActionsEnum.deleteResource)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.put(
|
authenticated.put(
|
||||||
"/resource/:resourceId/target",
|
"/resource/:resourceId/target",
|
||||||
verifyApiKeyResourceAccess,
|
verifyApiKeyResourceAccess,
|
||||||
verifyApiKeyHasAction(ActionsEnum.createTarget),
|
verifyApiKeyHasAction(ActionsEnum.createTarget),
|
||||||
target.createTarget
|
target.createTarget,
|
||||||
|
logActionAudit(ActionsEnum.createTarget)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.get(
|
authenticated.get(
|
||||||
@@ -289,7 +304,8 @@ authenticated.put(
|
|||||||
"/resource/:resourceId/rule",
|
"/resource/:resourceId/rule",
|
||||||
verifyApiKeyResourceAccess,
|
verifyApiKeyResourceAccess,
|
||||||
verifyApiKeyHasAction(ActionsEnum.createResourceRule),
|
verifyApiKeyHasAction(ActionsEnum.createResourceRule),
|
||||||
resource.createResourceRule
|
resource.createResourceRule,
|
||||||
|
logActionAudit(ActionsEnum.createResourceRule)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.get(
|
authenticated.get(
|
||||||
@@ -303,14 +319,16 @@ authenticated.post(
|
|||||||
"/resource/:resourceId/rule/:ruleId",
|
"/resource/:resourceId/rule/:ruleId",
|
||||||
verifyApiKeyResourceAccess,
|
verifyApiKeyResourceAccess,
|
||||||
verifyApiKeyHasAction(ActionsEnum.updateResourceRule),
|
verifyApiKeyHasAction(ActionsEnum.updateResourceRule),
|
||||||
resource.updateResourceRule
|
resource.updateResourceRule,
|
||||||
|
logActionAudit(ActionsEnum.updateResourceRule)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.delete(
|
authenticated.delete(
|
||||||
"/resource/:resourceId/rule/:ruleId",
|
"/resource/:resourceId/rule/:ruleId",
|
||||||
verifyApiKeyResourceAccess,
|
verifyApiKeyResourceAccess,
|
||||||
verifyApiKeyHasAction(ActionsEnum.deleteResourceRule),
|
verifyApiKeyHasAction(ActionsEnum.deleteResourceRule),
|
||||||
resource.deleteResourceRule
|
resource.deleteResourceRule,
|
||||||
|
logActionAudit(ActionsEnum.deleteResourceRule)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.get(
|
authenticated.get(
|
||||||
@@ -324,21 +342,24 @@ authenticated.post(
|
|||||||
"/target/:targetId",
|
"/target/:targetId",
|
||||||
verifyApiKeyTargetAccess,
|
verifyApiKeyTargetAccess,
|
||||||
verifyApiKeyHasAction(ActionsEnum.updateTarget),
|
verifyApiKeyHasAction(ActionsEnum.updateTarget),
|
||||||
target.updateTarget
|
target.updateTarget,
|
||||||
|
logActionAudit(ActionsEnum.updateTarget)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.delete(
|
authenticated.delete(
|
||||||
"/target/:targetId",
|
"/target/:targetId",
|
||||||
verifyApiKeyTargetAccess,
|
verifyApiKeyTargetAccess,
|
||||||
verifyApiKeyHasAction(ActionsEnum.deleteTarget),
|
verifyApiKeyHasAction(ActionsEnum.deleteTarget),
|
||||||
target.deleteTarget
|
target.deleteTarget,
|
||||||
|
logActionAudit(ActionsEnum.deleteTarget)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.put(
|
authenticated.put(
|
||||||
"/org/:orgId/role",
|
"/org/:orgId/role",
|
||||||
verifyApiKeyOrgAccess,
|
verifyApiKeyOrgAccess,
|
||||||
verifyApiKeyHasAction(ActionsEnum.createRole),
|
verifyApiKeyHasAction(ActionsEnum.createRole),
|
||||||
role.createRole
|
role.createRole,
|
||||||
|
logActionAudit(ActionsEnum.createRole)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.get(
|
authenticated.get(
|
||||||
@@ -352,7 +373,8 @@ authenticated.delete(
|
|||||||
"/role/:roleId",
|
"/role/:roleId",
|
||||||
verifyApiKeyRoleAccess,
|
verifyApiKeyRoleAccess,
|
||||||
verifyApiKeyHasAction(ActionsEnum.deleteRole),
|
verifyApiKeyHasAction(ActionsEnum.deleteRole),
|
||||||
role.deleteRole
|
role.deleteRole,
|
||||||
|
logActionAudit(ActionsEnum.deleteRole)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.get(
|
authenticated.get(
|
||||||
@@ -367,7 +389,8 @@ authenticated.post(
|
|||||||
verifyApiKeyRoleAccess,
|
verifyApiKeyRoleAccess,
|
||||||
verifyApiKeyUserAccess,
|
verifyApiKeyUserAccess,
|
||||||
verifyApiKeyHasAction(ActionsEnum.addUserRole),
|
verifyApiKeyHasAction(ActionsEnum.addUserRole),
|
||||||
user.addUserRole
|
user.addUserRole,
|
||||||
|
logActionAudit(ActionsEnum.addUserRole)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.post(
|
authenticated.post(
|
||||||
@@ -375,7 +398,8 @@ authenticated.post(
|
|||||||
verifyApiKeyResourceAccess,
|
verifyApiKeyResourceAccess,
|
||||||
verifyApiKeyRoleAccess,
|
verifyApiKeyRoleAccess,
|
||||||
verifyApiKeyHasAction(ActionsEnum.setResourceRoles),
|
verifyApiKeyHasAction(ActionsEnum.setResourceRoles),
|
||||||
resource.setResourceRoles
|
resource.setResourceRoles,
|
||||||
|
logActionAudit(ActionsEnum.setResourceRoles)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.post(
|
authenticated.post(
|
||||||
@@ -383,35 +407,40 @@ authenticated.post(
|
|||||||
verifyApiKeyResourceAccess,
|
verifyApiKeyResourceAccess,
|
||||||
verifyApiKeySetResourceUsers,
|
verifyApiKeySetResourceUsers,
|
||||||
verifyApiKeyHasAction(ActionsEnum.setResourceUsers),
|
verifyApiKeyHasAction(ActionsEnum.setResourceUsers),
|
||||||
resource.setResourceUsers
|
resource.setResourceUsers,
|
||||||
|
logActionAudit(ActionsEnum.setResourceUsers)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.post(
|
authenticated.post(
|
||||||
`/resource/:resourceId/password`,
|
`/resource/:resourceId/password`,
|
||||||
verifyApiKeyResourceAccess,
|
verifyApiKeyResourceAccess,
|
||||||
verifyApiKeyHasAction(ActionsEnum.setResourcePassword),
|
verifyApiKeyHasAction(ActionsEnum.setResourcePassword),
|
||||||
resource.setResourcePassword
|
resource.setResourcePassword,
|
||||||
|
logActionAudit(ActionsEnum.setResourcePassword)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.post(
|
authenticated.post(
|
||||||
`/resource/:resourceId/pincode`,
|
`/resource/:resourceId/pincode`,
|
||||||
verifyApiKeyResourceAccess,
|
verifyApiKeyResourceAccess,
|
||||||
verifyApiKeyHasAction(ActionsEnum.setResourcePincode),
|
verifyApiKeyHasAction(ActionsEnum.setResourcePincode),
|
||||||
resource.setResourcePincode
|
resource.setResourcePincode,
|
||||||
|
logActionAudit(ActionsEnum.setResourcePincode)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.post(
|
authenticated.post(
|
||||||
`/resource/:resourceId/header-auth`,
|
`/resource/:resourceId/header-auth`,
|
||||||
verifyApiKeyResourceAccess,
|
verifyApiKeyResourceAccess,
|
||||||
verifyApiKeyHasAction(ActionsEnum.setResourceHeaderAuth),
|
verifyApiKeyHasAction(ActionsEnum.setResourceHeaderAuth),
|
||||||
resource.setResourceHeaderAuth
|
resource.setResourceHeaderAuth,
|
||||||
|
logActionAudit(ActionsEnum.setResourceHeaderAuth)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.post(
|
authenticated.post(
|
||||||
`/resource/:resourceId/whitelist`,
|
`/resource/:resourceId/whitelist`,
|
||||||
verifyApiKeyResourceAccess,
|
verifyApiKeyResourceAccess,
|
||||||
verifyApiKeyHasAction(ActionsEnum.setResourceWhitelist),
|
verifyApiKeyHasAction(ActionsEnum.setResourceWhitelist),
|
||||||
resource.setResourceWhitelist
|
resource.setResourceWhitelist,
|
||||||
|
logActionAudit(ActionsEnum.setResourceWhitelist)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.get(
|
authenticated.get(
|
||||||
@@ -439,14 +468,16 @@ authenticated.post(
|
|||||||
`/resource/:resourceId/access-token`,
|
`/resource/:resourceId/access-token`,
|
||||||
verifyApiKeyResourceAccess,
|
verifyApiKeyResourceAccess,
|
||||||
verifyApiKeyHasAction(ActionsEnum.generateAccessToken),
|
verifyApiKeyHasAction(ActionsEnum.generateAccessToken),
|
||||||
accessToken.generateAccessToken
|
accessToken.generateAccessToken,
|
||||||
|
logActionAudit(ActionsEnum.generateAccessToken)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.delete(
|
authenticated.delete(
|
||||||
`/access-token/:accessTokenId`,
|
`/access-token/:accessTokenId`,
|
||||||
verifyApiKeyAccessTokenAccess,
|
verifyApiKeyAccessTokenAccess,
|
||||||
verifyApiKeyHasAction(ActionsEnum.deleteAcessToken),
|
verifyApiKeyHasAction(ActionsEnum.deleteAcessToken),
|
||||||
accessToken.deleteAccessToken
|
accessToken.deleteAccessToken,
|
||||||
|
logActionAudit(ActionsEnum.deleteAcessToken)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.get(
|
authenticated.get(
|
||||||
@@ -474,7 +505,8 @@ authenticated.post(
|
|||||||
"/user/:userId/2fa",
|
"/user/:userId/2fa",
|
||||||
verifyApiKeyIsRoot,
|
verifyApiKeyIsRoot,
|
||||||
verifyApiKeyHasAction(ActionsEnum.updateUser),
|
verifyApiKeyHasAction(ActionsEnum.updateUser),
|
||||||
user.updateUser2FA
|
user.updateUser2FA,
|
||||||
|
logActionAudit(ActionsEnum.updateUser)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.get(
|
authenticated.get(
|
||||||
@@ -495,7 +527,8 @@ authenticated.put(
|
|||||||
"/org/:orgId/user",
|
"/org/:orgId/user",
|
||||||
verifyApiKeyOrgAccess,
|
verifyApiKeyOrgAccess,
|
||||||
verifyApiKeyHasAction(ActionsEnum.createOrgUser),
|
verifyApiKeyHasAction(ActionsEnum.createOrgUser),
|
||||||
user.createOrgUser
|
user.createOrgUser,
|
||||||
|
logActionAudit(ActionsEnum.createOrgUser)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.post(
|
authenticated.post(
|
||||||
@@ -503,7 +536,8 @@ authenticated.post(
|
|||||||
verifyApiKeyOrgAccess,
|
verifyApiKeyOrgAccess,
|
||||||
verifyApiKeyUserAccess,
|
verifyApiKeyUserAccess,
|
||||||
verifyApiKeyHasAction(ActionsEnum.updateOrgUser),
|
verifyApiKeyHasAction(ActionsEnum.updateOrgUser),
|
||||||
user.updateOrgUser
|
user.updateOrgUser,
|
||||||
|
logActionAudit(ActionsEnum.updateOrgUser)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.delete(
|
authenticated.delete(
|
||||||
@@ -511,7 +545,8 @@ authenticated.delete(
|
|||||||
verifyApiKeyOrgAccess,
|
verifyApiKeyOrgAccess,
|
||||||
verifyApiKeyUserAccess,
|
verifyApiKeyUserAccess,
|
||||||
verifyApiKeyHasAction(ActionsEnum.removeUser),
|
verifyApiKeyHasAction(ActionsEnum.removeUser),
|
||||||
user.removeUserOrg
|
user.removeUserOrg,
|
||||||
|
logActionAudit(ActionsEnum.removeUser)
|
||||||
);
|
);
|
||||||
|
|
||||||
// authenticated.put(
|
// authenticated.put(
|
||||||
@@ -531,7 +566,8 @@ authenticated.post(
|
|||||||
`/org/:orgId/api-key/:apiKeyId/actions`,
|
`/org/:orgId/api-key/:apiKeyId/actions`,
|
||||||
verifyApiKeyIsRoot,
|
verifyApiKeyIsRoot,
|
||||||
verifyApiKeyHasAction(ActionsEnum.setApiKeyActions),
|
verifyApiKeyHasAction(ActionsEnum.setApiKeyActions),
|
||||||
apiKeys.setApiKeyActions
|
apiKeys.setApiKeyActions,
|
||||||
|
logActionAudit(ActionsEnum.setApiKeyActions)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.get(
|
authenticated.get(
|
||||||
@@ -545,28 +581,32 @@ authenticated.put(
|
|||||||
`/org/:orgId/api-key`,
|
`/org/:orgId/api-key`,
|
||||||
verifyApiKeyIsRoot,
|
verifyApiKeyIsRoot,
|
||||||
verifyApiKeyHasAction(ActionsEnum.createApiKey),
|
verifyApiKeyHasAction(ActionsEnum.createApiKey),
|
||||||
apiKeys.createOrgApiKey
|
apiKeys.createOrgApiKey,
|
||||||
|
logActionAudit(ActionsEnum.createApiKey)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.delete(
|
authenticated.delete(
|
||||||
`/org/:orgId/api-key/:apiKeyId`,
|
`/org/:orgId/api-key/:apiKeyId`,
|
||||||
verifyApiKeyIsRoot,
|
verifyApiKeyIsRoot,
|
||||||
verifyApiKeyHasAction(ActionsEnum.deleteApiKey),
|
verifyApiKeyHasAction(ActionsEnum.deleteApiKey),
|
||||||
apiKeys.deleteApiKey
|
apiKeys.deleteApiKey,
|
||||||
|
logActionAudit(ActionsEnum.deleteApiKey)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.put(
|
authenticated.put(
|
||||||
"/idp/oidc",
|
"/idp/oidc",
|
||||||
verifyApiKeyIsRoot,
|
verifyApiKeyIsRoot,
|
||||||
verifyApiKeyHasAction(ActionsEnum.createIdp),
|
verifyApiKeyHasAction(ActionsEnum.createIdp),
|
||||||
idp.createOidcIdp
|
idp.createOidcIdp,
|
||||||
|
logActionAudit(ActionsEnum.createIdp)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.post(
|
authenticated.post(
|
||||||
"/idp/:idpId/oidc",
|
"/idp/:idpId/oidc",
|
||||||
verifyApiKeyIsRoot,
|
verifyApiKeyIsRoot,
|
||||||
verifyApiKeyHasAction(ActionsEnum.updateIdp),
|
verifyApiKeyHasAction(ActionsEnum.updateIdp),
|
||||||
idp.updateOidcIdp
|
idp.updateOidcIdp,
|
||||||
|
logActionAudit(ActionsEnum.updateIdp)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.get(
|
authenticated.get(
|
||||||
@@ -587,21 +627,24 @@ authenticated.put(
|
|||||||
"/idp/:idpId/org/:orgId",
|
"/idp/:idpId/org/:orgId",
|
||||||
verifyApiKeyIsRoot,
|
verifyApiKeyIsRoot,
|
||||||
verifyApiKeyHasAction(ActionsEnum.createIdpOrg),
|
verifyApiKeyHasAction(ActionsEnum.createIdpOrg),
|
||||||
idp.createIdpOrgPolicy
|
idp.createIdpOrgPolicy,
|
||||||
|
logActionAudit(ActionsEnum.createIdpOrg)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.post(
|
authenticated.post(
|
||||||
"/idp/:idpId/org/:orgId",
|
"/idp/:idpId/org/:orgId",
|
||||||
verifyApiKeyIsRoot,
|
verifyApiKeyIsRoot,
|
||||||
verifyApiKeyHasAction(ActionsEnum.updateIdpOrg),
|
verifyApiKeyHasAction(ActionsEnum.updateIdpOrg),
|
||||||
idp.updateIdpOrgPolicy
|
idp.updateIdpOrgPolicy,
|
||||||
|
logActionAudit(ActionsEnum.updateIdpOrg)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.delete(
|
authenticated.delete(
|
||||||
"/idp/:idpId/org/:orgId",
|
"/idp/:idpId/org/:orgId",
|
||||||
verifyApiKeyIsRoot,
|
verifyApiKeyIsRoot,
|
||||||
verifyApiKeyHasAction(ActionsEnum.deleteIdpOrg),
|
verifyApiKeyHasAction(ActionsEnum.deleteIdpOrg),
|
||||||
idp.deleteIdpOrgPolicy
|
idp.deleteIdpOrgPolicy,
|
||||||
|
logActionAudit(ActionsEnum.deleteIdpOrg)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.get(
|
authenticated.get(
|
||||||
@@ -640,7 +683,8 @@ authenticated.put(
|
|||||||
verifyClientsEnabled,
|
verifyClientsEnabled,
|
||||||
verifyApiKeyOrgAccess,
|
verifyApiKeyOrgAccess,
|
||||||
verifyApiKeyHasAction(ActionsEnum.createClient),
|
verifyApiKeyHasAction(ActionsEnum.createClient),
|
||||||
client.createClient
|
client.createClient,
|
||||||
|
logActionAudit(ActionsEnum.createClient)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.delete(
|
authenticated.delete(
|
||||||
@@ -648,7 +692,8 @@ authenticated.delete(
|
|||||||
verifyClientsEnabled,
|
verifyClientsEnabled,
|
||||||
verifyApiKeyClientAccess,
|
verifyApiKeyClientAccess,
|
||||||
verifyApiKeyHasAction(ActionsEnum.deleteClient),
|
verifyApiKeyHasAction(ActionsEnum.deleteClient),
|
||||||
client.deleteClient
|
client.deleteClient,
|
||||||
|
logActionAudit(ActionsEnum.deleteClient)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.post(
|
authenticated.post(
|
||||||
@@ -656,12 +701,14 @@ authenticated.post(
|
|||||||
verifyClientsEnabled,
|
verifyClientsEnabled,
|
||||||
verifyApiKeyClientAccess,
|
verifyApiKeyClientAccess,
|
||||||
verifyApiKeyHasAction(ActionsEnum.updateClient),
|
verifyApiKeyHasAction(ActionsEnum.updateClient),
|
||||||
client.updateClient
|
client.updateClient,
|
||||||
|
logActionAudit(ActionsEnum.updateClient)
|
||||||
);
|
);
|
||||||
|
|
||||||
authenticated.put(
|
authenticated.put(
|
||||||
"/org/:orgId/blueprint",
|
"/org/:orgId/blueprint",
|
||||||
verifyApiKeyOrgAccess,
|
verifyApiKeyOrgAccess,
|
||||||
verifyApiKeyHasAction(ActionsEnum.applyBlueprint),
|
verifyApiKeyHasAction(ActionsEnum.applyBlueprint),
|
||||||
org.applyBlueprint
|
org.applyBlueprint,
|
||||||
|
logActionAudit(ActionsEnum.applyBlueprint)
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user