2024-09-27 21:39:03 -04:00
|
|
|
import { Router } from "express";
|
2024-10-02 00:04:40 -04:00
|
|
|
import * as site from "./site";
|
|
|
|
import * as org from "./org";
|
|
|
|
import * as resource from "./resource";
|
|
|
|
import * as target from "./target";
|
|
|
|
import * as user from "./user";
|
|
|
|
import * as auth from "./auth";
|
2024-10-12 21:36:14 -04:00
|
|
|
import * as role from "./role";
|
2024-10-02 00:04:40 -04:00
|
|
|
import HttpCode from "@server/types/HttpCode";
|
2024-10-04 23:14:40 -04:00
|
|
|
import {
|
|
|
|
rateLimitMiddleware,
|
|
|
|
verifySessionMiddleware,
|
|
|
|
verifySessionUserMiddleware,
|
|
|
|
} from "@server/middlewares";
|
|
|
|
import {
|
|
|
|
verifyOrgAccess,
|
|
|
|
getUserOrgs,
|
|
|
|
verifySiteAccess,
|
|
|
|
verifyResourceAccess,
|
|
|
|
verifyTargetAccess,
|
2024-10-12 21:36:14 -04:00
|
|
|
verifyRoleAccess,
|
2024-11-03 17:28:12 -05:00
|
|
|
verifySuperUser,
|
2024-10-12 22:31:24 -04:00
|
|
|
verifyUserInRole,
|
2024-10-12 23:03:56 -04:00
|
|
|
verifyUserAccess,
|
2024-10-04 23:14:40 -04:00
|
|
|
} from "./auth";
|
2024-09-27 21:39:03 -04:00
|
|
|
|
2024-10-02 00:04:40 -04:00
|
|
|
// Root routes
|
|
|
|
export const unauthenticated = Router();
|
2024-09-27 21:39:03 -04:00
|
|
|
|
2024-10-02 00:04:40 -04:00
|
|
|
unauthenticated.get("/", (_, res) => {
|
|
|
|
res.status(HttpCode.OK).json({ message: "Healthy" });
|
2024-09-27 21:39:03 -04:00
|
|
|
});
|
|
|
|
|
2024-10-02 00:04:40 -04:00
|
|
|
// Authenticated Root routes
|
|
|
|
export const authenticated = Router();
|
2024-10-04 23:14:40 -04:00
|
|
|
authenticated.use(verifySessionUserMiddleware);
|
2024-09-28 12:14:44 -04:00
|
|
|
|
2024-10-14 19:30:38 -04:00
|
|
|
authenticated.get("/org/checkId", org.checkId);
|
2024-10-03 22:31:20 -04:00
|
|
|
authenticated.put("/org", getUserOrgs, org.createOrg);
|
|
|
|
authenticated.get("/orgs", getUserOrgs, org.listOrgs); // TODO we need to check the orgs here
|
|
|
|
authenticated.get("/org/:orgId", verifyOrgAccess, org.getOrg);
|
|
|
|
authenticated.post("/org/:orgId", verifyOrgAccess, org.updateOrg);
|
2024-11-03 17:28:12 -05:00
|
|
|
// authenticated.delete("/org/:orgId", verifyOrgAccess, org.deleteOrg);
|
2024-10-02 00:04:40 -04:00
|
|
|
|
2024-10-03 22:31:20 -04:00
|
|
|
authenticated.put("/org/:orgId/site", verifyOrgAccess, site.createSite);
|
|
|
|
authenticated.get("/org/:orgId/sites", verifyOrgAccess, site.listSites);
|
2024-10-14 22:26:32 -04:00
|
|
|
authenticated.get("/org/:orgId/site/:niceId", verifyOrgAccess, site.getSite);
|
|
|
|
|
2024-11-02 18:12:17 -04:00
|
|
|
authenticated.get(
|
2024-11-03 13:57:51 -05:00
|
|
|
"/org/:orgId/pick-site-defaults",
|
2024-11-02 18:12:17 -04:00
|
|
|
verifyOrgAccess,
|
|
|
|
site.pickSiteDefaults
|
|
|
|
);
|
2024-10-19 12:48:07 -04:00
|
|
|
authenticated.get("/site/:siteId", verifySiteAccess, site.getSite);
|
2024-11-03 17:28:12 -05:00
|
|
|
// authenticated.get("/site/:siteId/roles", verifySiteAccess, site.listSiteRoles);
|
2024-10-19 12:48:07 -04:00
|
|
|
authenticated.post("/site/:siteId", verifySiteAccess, site.updateSite);
|
|
|
|
authenticated.delete("/site/:siteId", verifySiteAccess, site.deleteSite);
|
2024-10-02 22:05:21 -04:00
|
|
|
|
2024-10-04 23:14:40 -04:00
|
|
|
authenticated.put(
|
|
|
|
"/org/:orgId/site/:siteId/resource",
|
|
|
|
verifyOrgAccess,
|
2024-11-02 18:12:17 -04:00
|
|
|
resource.createResource
|
2024-10-04 23:14:40 -04:00
|
|
|
);
|
2024-10-02 22:05:21 -04:00
|
|
|
authenticated.get("/site/:siteId/resources", resource.listResources);
|
2024-10-04 23:14:40 -04:00
|
|
|
authenticated.get(
|
|
|
|
"/org/:orgId/resources",
|
|
|
|
verifyOrgAccess,
|
2024-11-02 18:12:17 -04:00
|
|
|
resource.listResources
|
|
|
|
);
|
|
|
|
|
|
|
|
authenticated.post(
|
|
|
|
"/org/:orgId/create-invite",
|
|
|
|
verifyOrgAccess,
|
|
|
|
user.inviteUser
|
2024-11-02 23:46:08 -04:00
|
|
|
); // maybe make this /invite/create instead
|
|
|
|
authenticated.post("/invite/accept", user.acceptInvite);
|
2024-11-02 18:12:17 -04:00
|
|
|
|
2024-11-03 17:28:12 -05:00
|
|
|
// authenticated.get(
|
|
|
|
// "/resource/:resourceId/roles",
|
|
|
|
// verifyResourceAccess,
|
|
|
|
// resource.listResourceRoles
|
|
|
|
// );
|
2024-10-04 23:14:40 -04:00
|
|
|
authenticated.get(
|
|
|
|
"/resource/:resourceId",
|
|
|
|
verifyResourceAccess,
|
2024-11-02 18:12:17 -04:00
|
|
|
resource.getResource
|
2024-10-04 23:14:40 -04:00
|
|
|
);
|
|
|
|
authenticated.post(
|
|
|
|
"/resource/:resourceId",
|
|
|
|
verifyResourceAccess,
|
2024-11-02 18:12:17 -04:00
|
|
|
resource.updateResource
|
2024-10-04 23:14:40 -04:00
|
|
|
);
|
|
|
|
authenticated.delete(
|
|
|
|
"/resource/:resourceId",
|
|
|
|
verifyResourceAccess,
|
2024-11-02 18:12:17 -04:00
|
|
|
resource.deleteResource
|
2024-10-04 23:14:40 -04:00
|
|
|
);
|
2024-10-03 22:31:20 -04:00
|
|
|
|
2024-10-04 23:14:40 -04:00
|
|
|
authenticated.put(
|
|
|
|
"/resource/:resourceId/target",
|
|
|
|
verifyResourceAccess,
|
2024-11-02 18:12:17 -04:00
|
|
|
target.createTarget
|
2024-10-04 23:14:40 -04:00
|
|
|
);
|
|
|
|
authenticated.get(
|
|
|
|
"/resource/:resourceId/targets",
|
|
|
|
verifyResourceAccess,
|
2024-11-02 18:12:17 -04:00
|
|
|
target.listTargets
|
2024-10-04 23:14:40 -04:00
|
|
|
);
|
2024-10-03 22:31:20 -04:00
|
|
|
authenticated.get("/target/:targetId", verifyTargetAccess, target.getTarget);
|
2024-10-04 23:14:40 -04:00
|
|
|
authenticated.post(
|
|
|
|
"/target/:targetId",
|
|
|
|
verifyTargetAccess,
|
2024-11-02 18:12:17 -04:00
|
|
|
target.updateTarget
|
2024-10-04 23:14:40 -04:00
|
|
|
);
|
|
|
|
authenticated.delete(
|
|
|
|
"/target/:targetId",
|
|
|
|
verifyTargetAccess,
|
2024-11-02 18:12:17 -04:00
|
|
|
target.deleteTarget
|
2024-10-04 23:14:40 -04:00
|
|
|
);
|
2024-10-02 00:04:40 -04:00
|
|
|
|
2024-11-03 13:57:51 -05:00
|
|
|
// authenticated.put(
|
|
|
|
// "/org/:orgId/role",
|
|
|
|
// verifyOrgAccess,
|
2024-11-03 17:28:12 -05:00
|
|
|
// verifySuperUser,
|
2024-11-03 13:57:51 -05:00
|
|
|
// role.createRole
|
|
|
|
// );
|
2024-11-03 17:28:12 -05:00
|
|
|
// authenticated.get("/org/:orgId/roles", verifyOrgAccess, role.listRoles);
|
|
|
|
// authenticated.get(
|
|
|
|
// "/role/:roleId",
|
|
|
|
// verifyRoleAccess,
|
|
|
|
// verifyUserInRole,
|
|
|
|
// role.getRole
|
|
|
|
// );
|
2024-11-03 13:57:51 -05:00
|
|
|
// authenticated.post(
|
|
|
|
// "/role/:roleId",
|
|
|
|
// verifyRoleAccess,
|
2024-11-03 17:28:12 -05:00
|
|
|
// verifySuperUser,
|
2024-11-03 13:57:51 -05:00
|
|
|
// role.updateRole
|
|
|
|
// );
|
|
|
|
// authenticated.delete(
|
|
|
|
// "/role/:roleId",
|
|
|
|
// verifyRoleAccess,
|
2024-11-03 17:28:12 -05:00
|
|
|
// verifySuperUser,
|
2024-11-03 13:57:51 -05:00
|
|
|
// role.deleteRole
|
|
|
|
// );
|
2024-10-12 21:36:14 -04:00
|
|
|
|
2024-11-03 17:28:12 -05:00
|
|
|
// authenticated.put(
|
|
|
|
// "/role/:roleId/site",
|
|
|
|
// verifyRoleAccess,
|
|
|
|
// verifyUserInRole,
|
|
|
|
// role.addRoleSite
|
|
|
|
// );
|
|
|
|
// authenticated.delete(
|
|
|
|
// "/role/:roleId/site",
|
|
|
|
// verifyRoleAccess,
|
|
|
|
// verifyUserInRole,
|
|
|
|
// role.removeRoleSite
|
|
|
|
// );
|
|
|
|
// authenticated.get(
|
|
|
|
// "/role/:roleId/sites",
|
|
|
|
// verifyRoleAccess,
|
|
|
|
// verifyUserInRole,
|
|
|
|
// role.listRoleSites
|
|
|
|
// );
|
|
|
|
// authenticated.put(
|
|
|
|
// "/role/:roleId/resource",
|
|
|
|
// verifyRoleAccess,
|
|
|
|
// verifyUserInRole,
|
|
|
|
// role.addRoleResource
|
|
|
|
// );
|
|
|
|
// authenticated.delete(
|
|
|
|
// "/role/:roleId/resource",
|
|
|
|
// verifyRoleAccess,
|
|
|
|
// verifyUserInRole,
|
|
|
|
// role.removeRoleResource
|
|
|
|
// );
|
|
|
|
// authenticated.get(
|
|
|
|
// "/role/:roleId/resources",
|
|
|
|
// verifyRoleAccess,
|
|
|
|
// verifyUserInRole,
|
|
|
|
// role.listRoleResources
|
|
|
|
// );
|
|
|
|
// authenticated.put(
|
|
|
|
// "/role/:roleId/action",
|
|
|
|
// verifyRoleAccess,
|
|
|
|
// verifyUserInRole,
|
|
|
|
// role.addRoleAction
|
|
|
|
// );
|
|
|
|
// authenticated.delete(
|
|
|
|
// "/role/:roleId/action",
|
|
|
|
// verifyRoleAccess,
|
|
|
|
// verifyUserInRole,
|
|
|
|
// verifySuperUser,
|
|
|
|
// role.removeRoleAction
|
|
|
|
// );
|
|
|
|
// authenticated.get(
|
|
|
|
// "/role/:roleId/actions",
|
|
|
|
// verifyRoleAccess,
|
|
|
|
// verifyUserInRole,
|
|
|
|
// verifySuperUser,
|
|
|
|
// role.listRoleActions
|
|
|
|
// );
|
2024-10-12 21:36:14 -04:00
|
|
|
|
2024-10-13 15:05:52 -04:00
|
|
|
unauthenticated.get("/user", verifySessionMiddleware, user.getUser);
|
|
|
|
|
2024-10-12 22:31:24 -04:00
|
|
|
authenticated.get("/org/:orgId/users", verifyOrgAccess, user.listUsers);
|
2024-10-12 23:03:56 -04:00
|
|
|
authenticated.delete(
|
|
|
|
"/org/:orgId/user/:userId",
|
|
|
|
verifyOrgAccess,
|
|
|
|
verifyUserAccess,
|
2024-11-02 18:12:17 -04:00
|
|
|
user.removeUserOrg
|
2024-10-12 23:03:56 -04:00
|
|
|
);
|
2024-10-12 22:31:24 -04:00
|
|
|
|
2024-11-03 17:28:12 -05:00
|
|
|
// authenticated.put(
|
|
|
|
// "/user/:userId/site",
|
|
|
|
// verifySiteAccess,
|
|
|
|
// verifyUserAccess,
|
|
|
|
// role.addRoleSite
|
|
|
|
// );
|
|
|
|
// authenticated.delete(
|
|
|
|
// "/user/:userId/site",
|
|
|
|
// verifySiteAccess,
|
|
|
|
// verifyUserAccess,
|
|
|
|
// role.removeRoleSite
|
|
|
|
// );
|
|
|
|
// authenticated.put(
|
|
|
|
// "/user/:userId/resource",
|
|
|
|
// verifyResourceAccess,
|
|
|
|
// verifyUserAccess,
|
|
|
|
// role.addRoleResource
|
|
|
|
// );
|
|
|
|
// authenticated.delete(
|
|
|
|
// "/user/:userId/resource",
|
|
|
|
// verifyResourceAccess,
|
|
|
|
// verifyUserAccess,
|
|
|
|
// role.removeRoleResource
|
|
|
|
// );
|
|
|
|
// authenticated.put(
|
|
|
|
// "/org/:orgId/user/:userId/action",
|
|
|
|
// verifyOrgAccess,
|
|
|
|
// verifyUserAccess,
|
|
|
|
// verifySuperUser,
|
|
|
|
// role.addRoleAction
|
|
|
|
// );
|
|
|
|
// authenticated.delete(
|
|
|
|
// "/org/:orgId/user/:userId/action",
|
|
|
|
// verifyOrgAccess,
|
|
|
|
// verifyUserAccess,
|
|
|
|
// verifySuperUser,
|
|
|
|
// role.removeRoleAction
|
|
|
|
// );
|
2024-10-02 00:04:40 -04:00
|
|
|
|
|
|
|
// Auth routes
|
2024-10-05 15:11:51 -04:00
|
|
|
export const authRouter = Router();
|
|
|
|
unauthenticated.use("/auth", authRouter);
|
|
|
|
authRouter.use(
|
|
|
|
rateLimitMiddleware({
|
|
|
|
windowMin: 10,
|
|
|
|
max: 15,
|
|
|
|
type: "IP_AND_PATH",
|
2024-11-02 18:12:17 -04:00
|
|
|
})
|
2024-10-05 15:11:51 -04:00
|
|
|
);
|
|
|
|
|
|
|
|
authRouter.put("/signup", auth.signup);
|
|
|
|
authRouter.post("/login", auth.login);
|
|
|
|
authRouter.post("/logout", auth.logout);
|
2024-10-05 17:01:49 -04:00
|
|
|
authRouter.post("/2fa/enable", verifySessionUserMiddleware, auth.verifyTotp);
|
2024-10-05 15:11:51 -04:00
|
|
|
authRouter.post(
|
2024-10-05 17:01:49 -04:00
|
|
|
"/2fa/request",
|
2024-10-05 15:11:51 -04:00
|
|
|
verifySessionUserMiddleware,
|
2024-11-02 18:12:17 -04:00
|
|
|
auth.requestTotpSecret
|
2024-10-04 23:14:40 -04:00
|
|
|
);
|
2024-10-05 15:48:19 -04:00
|
|
|
authRouter.post("/2fa/disable", verifySessionUserMiddleware, auth.disable2fa);
|
2024-10-05 15:11:51 -04:00
|
|
|
authRouter.post("/verify-email", verifySessionMiddleware, auth.verifyEmail);
|
|
|
|
authRouter.post(
|
2024-10-05 17:01:49 -04:00
|
|
|
"/verify-email/request",
|
2024-10-04 23:14:40 -04:00
|
|
|
verifySessionMiddleware,
|
2024-11-02 18:12:17 -04:00
|
|
|
auth.requestEmailVerificationCode
|
2024-10-04 23:14:40 -04:00
|
|
|
);
|
2024-10-05 15:11:51 -04:00
|
|
|
authRouter.post(
|
|
|
|
"/change-password",
|
|
|
|
verifySessionUserMiddleware,
|
2024-11-02 18:12:17 -04:00
|
|
|
auth.changePassword
|
2024-10-05 15:11:51 -04:00
|
|
|
);
|
2024-10-05 17:01:49 -04:00
|
|
|
authRouter.post("/reset-password/request", auth.requestPasswordReset);
|
|
|
|
authRouter.post("/reset-password/", auth.resetPassword);
|