Substitute hardcoded auth modes for variables

This commit is contained in:
Tuan Dang
2023-04-07 16:50:05 +03:00
parent a7880db871
commit 5bbe09e4be
31 changed files with 285 additions and 155 deletions

View File

@@ -506,10 +506,4 @@ export const toggleAutoCapitalization = async (req: Request, res: Response) => {
message: 'Successfully changed autoCapitalization setting',
workspace
});
};
export const getAak = (req: Request, res: Response) => {
return res.status(200).send({
message: 'getAak'
});
}
};

View File

@@ -1,14 +1,70 @@
import * as Sentry from '@sentry/node';
import Stripe from 'stripe';
import { Types } from 'mongoose';
import { ACCEPTED } from '../variables';
import {
IUser,
User,
IServiceAccount,
ServiceAccount,
IServiceTokenData,
ServiceTokenData
} from '../models';
import { Organization, MembershipOrg } from '../models';
import {
ACCEPTED,
AUTH_MODE_JWT,
AUTH_MODE_SERVICE_ACCOUNT,
AUTH_MODE_SERVICE_TOKEN,
AUTH_MODE_API_KEY
} from '../variables';
import {
getStripeSecretKey,
getStripeProductPro,
getStripeProductTeam,
getStripeProductStarter
} from '../config';
import {
UnauthorizedRequestError
} from '../utils/errors';
/**
* Validate accepted clients for organization with id [organizationId]
* @param {Object} obj
* @param {Object} obj.authData - authenticated client details
* @param {Types.ObjectId} obj.organizationId - id of organization to validate against
*/
const validateClientForOrganization = async ({
authData,
organizationId
}: {
authData: {
authMode: string;
authPayload: IUser | IServiceAccount | IServiceTokenData;
},
organizationId: string;
}) => {
// TODO
if (authData.authMode === AUTH_MODE_JWT && authData.authPayload instanceof User) {
// TODO
}
if (authData.authMode === AUTH_MODE_SERVICE_ACCOUNT && authData.authPayload instanceof ServiceAccount) {
// TODO
}
if (authData.authMode === AUTH_MODE_SERVICE_TOKEN && authData.authPayload instanceof ServiceTokenData) {
// TODO
}
if (authData.authMode === AUTH_MODE_API_KEY && authData.authPayload instanceof User) {
// TODO
}
throw UnauthorizedRequestError({
message: 'Failed client authorization for organization resource'
});
}
/**
* Create an organization with name [name]

View File

@@ -28,12 +28,10 @@ import {
} from '../variables';
/**
* Validate accepted clients for workspace with id [workspaceId] based
* Validate authenticated clients for workspace with id [workspaceId] based
* on any known permissions.
* @param {Object} obj
* @param {User} obj.user - user client
* @param {ServiceAccount} obj.serviceAccount - service account client
* @param {ServiceTokenData} obj.serviceTokenData - service token client
* @param {Object} obj.authData - authenticated client details
* @param {Types.ObjectId} obj.workspaceId - id of workspace to validate against
* @param {String} obj.environment - (optional) environment in workspace to validate against
* @param {String[]} obj.requiredPermissions - required permissions as part of the endpoint

View File

@@ -79,6 +79,12 @@ const requireAuth = ({
break;
}
req.requestData = {
...req.params,
...req.query,
...req.body,
}
req.authData = {
authMode,
authPayload

View File

@@ -25,7 +25,7 @@ const requireWorkspaceAuth = ({
requiredPermissions?: string[];
}) => {
return async (req: Request, res: Response, next: NextFunction) => {
const workspaceId = req[locationWorkspaceId]?.workspaceId;
const environment = locationEnvironment ? req[locationEnvironment]?.environment : undefined;

View File

@@ -4,6 +4,7 @@ import { body } from 'express-validator';
import { requireAuth, validateRequest } from '../../middleware';
import { authController } from '../../controllers/v1';
import { authLimiter } from '../../helpers/rateLimiter';
import { AUTH_MODE_JWT } from '../../variables';
router.post('/token', validateRequest, authController.getNewToken);
@@ -29,7 +30,7 @@ router.post(
'/logout',
authLimiter,
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
authController.logout
);
@@ -37,7 +38,7 @@ router.post(
router.post(
'/checkAuth',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
authController.checkAuth
);

View File

@@ -8,12 +8,12 @@ import {
validateRequest
} from '../../middleware';
import { botController } from '../../controllers/v1';
import { ADMIN, MEMBER } from '../../variables';
import { ADMIN, MEMBER, AUTH_MODE_JWT } from '../../variables';
router.get(
'/:workspaceId',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireWorkspaceAuth({
acceptedRoles: [ADMIN, MEMBER],
@@ -27,7 +27,7 @@ router.get(
router.patch(
'/:botId/active',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireBotAuth({
acceptedRoles: [ADMIN, MEMBER]

View File

@@ -6,14 +6,19 @@ import {
requireIntegrationAuthorizationAuth,
validateRequest
} from '../../middleware';
import { ADMIN, MEMBER } from '../../variables';
import {
ADMIN,
MEMBER,
AUTH_MODE_JWT,
AUTH_MODE_API_KEY
} from '../../variables';
import { body, param } from 'express-validator';
import { integrationController } from '../../controllers/v1';
router.post( // new: add new integration for integration auth
'/',
requireAuth({
acceptedAuthModes: ['jwt', 'apiKey']
acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_API_KEY]
}),
requireIntegrationAuthorizationAuth({
acceptedRoles: [ADMIN, MEMBER],
@@ -35,7 +40,7 @@ router.post( // new: add new integration for integration auth
router.patch(
'/:integrationId',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireIntegrationAuth({
acceptedRoles: [ADMIN, MEMBER]
@@ -54,7 +59,7 @@ router.patch(
router.delete(
'/:integrationId',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireIntegrationAuth({
acceptedRoles: [ADMIN, MEMBER]

View File

@@ -7,13 +7,18 @@ import {
requireIntegrationAuthorizationAuth,
validateRequest
} from '../../middleware';
import { ADMIN, MEMBER } from '../../variables';
import {
ADMIN,
MEMBER,
AUTH_MODE_JWT,
AUTH_MODE_API_KEY
} from '../../variables';
import { integrationAuthController } from '../../controllers/v1';
router.get(
'/integration-options',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
integrationAuthController.getIntegrationOptions
);
@@ -21,7 +26,7 @@ router.get(
router.get(
'/:integrationAuthId',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireIntegrationAuthorizationAuth({
acceptedRoles: [ADMIN, MEMBER]
@@ -34,7 +39,7 @@ router.get(
router.post(
'/oauth-token',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireWorkspaceAuth({
acceptedRoles: [ADMIN, MEMBER],
@@ -55,7 +60,7 @@ router.post(
body('integration').exists().trim().notEmpty(),
validateRequest,
requireAuth({
acceptedAuthModes: ['jwt', 'apiKey']
acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_API_KEY]
}),
requireWorkspaceAuth({
acceptedRoles: [ADMIN, MEMBER],
@@ -67,7 +72,7 @@ router.post(
router.get(
'/:integrationAuthId/apps',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireIntegrationAuthorizationAuth({
acceptedRoles: [ADMIN, MEMBER]
@@ -81,7 +86,7 @@ router.get(
router.get(
'/:integrationAuthId/teams',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireIntegrationAuthorizationAuth({
acceptedRoles: [ADMIN, MEMBER]
@@ -94,7 +99,7 @@ router.get(
router.delete(
'/:integrationAuthId',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireIntegrationAuthorizationAuth({
acceptedRoles: [ADMIN, MEMBER],

View File

@@ -3,11 +3,12 @@ const router = express.Router();
import { body } from 'express-validator';
import { requireAuth, validateRequest } from '../../middleware';
import { membershipOrgController } from '../../controllers/v1';
import { AUTH_MODE_JWT } from '../../variables';
router.post(
'/signup',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
body('inviteeEmail').exists().trim().notEmpty().isEmail(),
body('organizationId').exists().trim().notEmpty(),

View File

@@ -6,13 +6,13 @@ import {
validateRequest
} from '../../middleware';
import { body, param } from 'express-validator';
import { ADMIN, MEMBER } from '../../variables';
import { ADMIN, MEMBER, AUTH_MODE_JWT } from '../../variables';
import { keyController } from '../../controllers/v1';
router.post(
'/:workspaceId',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireWorkspaceAuth({
acceptedRoles: [ADMIN, MEMBER],
@@ -27,7 +27,7 @@ router.post(
router.get(
'/:workspaceId/latest',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireWorkspaceAuth({
acceptedRoles: [ADMIN, MEMBER],

View File

@@ -4,13 +4,14 @@ import { body, param } from 'express-validator';
import { requireAuth, validateRequest } from '../../middleware';
import { membershipController } from '../../controllers/v1';
import { membershipController as EEMembershipControllers } from '../../ee/controllers/v1';
import { AUTH_MODE_JWT } from '../../variables';
// note: ALL DEPRECIATED (moved to api/v2/workspace/:workspaceId/memberships/:membershipId)
router.get( // used for old CLI (deprecate)
'/:workspaceId/connect',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
param('workspaceId').exists().trim(),
validateRequest,
@@ -20,7 +21,7 @@ router.get( // used for old CLI (deprecate)
router.delete(
'/:membershipId',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
param('membershipId').exists().trim(),
validateRequest,
@@ -30,7 +31,7 @@ router.delete(
router.post(
'/:membershipId/change-role',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
body('role').exists().trim(),
validateRequest,
@@ -40,7 +41,7 @@ router.post(
router.post(
'/:membershipId/deny-permissions',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
param('membershipId').isMongoId().exists().trim(),
body('permissions').isArray().exists(),

View File

@@ -3,12 +3,13 @@ const router = express.Router();
import { param } from 'express-validator';
import { requireAuth, validateRequest } from '../../middleware';
import { membershipOrgController } from '../../controllers/v1';
import { AUTH_MODE_JWT } from '../../variables';
router.post(
// TODO
'/membershipOrg/:membershipOrgId/change-role',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
param('membershipOrgId'),
validateRequest,
@@ -18,7 +19,7 @@ router.post(
router.delete(
'/:membershipOrgId',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
param('membershipOrgId').exists().trim(),
validateRequest,

View File

@@ -6,13 +6,19 @@ import {
requireOrganizationAuth,
validateRequest
} from '../../middleware';
import { OWNER, ADMIN, MEMBER, ACCEPTED } from '../../variables';
import {
OWNER,
ADMIN,
MEMBER,
ACCEPTED,
AUTH_MODE_JWT
} from '../../variables';
import { organizationController } from '../../controllers/v1';
router.get( // deprecated (moved to api/v2/users/me/organizations)
'/',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
organizationController.getOrganizations
);
@@ -20,7 +26,7 @@ router.get( // deprecated (moved to api/v2/users/me/organizations)
router.post( // not used on frontend
'/',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
body('organizationName').exists().trim().notEmpty(),
validateRequest,
@@ -30,7 +36,7 @@ router.post( // not used on frontend
router.get(
'/:organizationId',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireOrganizationAuth({
acceptedRoles: [OWNER, ADMIN, MEMBER],
@@ -44,7 +50,7 @@ router.get(
router.get( // deprecated (moved to api/v2/organizations/:organizationId/memberships)
'/:organizationId/users',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireOrganizationAuth({
acceptedRoles: [OWNER, ADMIN, MEMBER],
@@ -58,7 +64,7 @@ router.get( // deprecated (moved to api/v2/organizations/:organizationId/members
router.get(
'/:organizationId/my-workspaces', // deprecated (moved to api/v2/organizations/:organizationId/workspaces)
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireOrganizationAuth({
acceptedRoles: [OWNER, ADMIN, MEMBER],
@@ -72,7 +78,7 @@ router.get(
router.patch(
'/:organizationId/name',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireOrganizationAuth({
acceptedRoles: [OWNER, ADMIN, MEMBER],
@@ -87,7 +93,7 @@ router.patch(
router.get(
'/:organizationId/incidentContactOrg',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireOrganizationAuth({
acceptedRoles: [OWNER, ADMIN, MEMBER],
@@ -101,7 +107,7 @@ router.get(
router.post(
'/:organizationId/incidentContactOrg',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireOrganizationAuth({
acceptedRoles: [OWNER, ADMIN, MEMBER],
@@ -116,7 +122,7 @@ router.post(
router.delete(
'/:organizationId/incidentContactOrg',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireOrganizationAuth({
acceptedRoles: [OWNER, ADMIN, MEMBER],
@@ -131,7 +137,7 @@ router.delete(
router.post(
'/:organizationId/customer-portal-session',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireOrganizationAuth({
acceptedRoles: [OWNER, ADMIN, MEMBER],
@@ -145,7 +151,7 @@ router.post(
router.get(
'/:organizationId/subscriptions',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireOrganizationAuth({
acceptedRoles: [OWNER, ADMIN, MEMBER],
@@ -159,7 +165,7 @@ router.get(
router.get(
'/:organizationId/workspace-memberships',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireOrganizationAuth({
acceptedRoles: [OWNER, ADMIN, MEMBER],

View File

@@ -4,11 +4,14 @@ import { body } from 'express-validator';
import { requireAuth, requireSignupAuth, validateRequest } from '../../middleware';
import { passwordController } from '../../controllers/v1';
import { passwordLimiter } from '../../helpers/rateLimiter';
import {
AUTH_MODE_JWT
} from '../../variables';
router.post(
'/srp1',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
body('clientPublicKey').exists().isString().trim().notEmpty(),
validateRequest,
@@ -19,7 +22,7 @@ router.post(
'/change-password',
passwordLimiter,
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
body('clientProof').exists().trim().notEmpty(),
body('protectedKey').exists().isString().trim().notEmpty(),
@@ -62,7 +65,7 @@ router.post(
'/backup-private-key',
passwordLimiter,
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
body('clientProof').exists().isString().trim().notEmpty(),
body('encryptedPrivateKey').exists().isString().trim().notEmpty(), // (backup) private key encrypted under a strong key

View File

@@ -8,14 +8,18 @@ import {
} from '../../middleware';
import { body, query, param } from 'express-validator';
import { secretController } from '../../controllers/v1';
import { ADMIN, MEMBER } from '../../variables';
import {
ADMIN,
MEMBER,
AUTH_MODE_JWT
} from '../../variables';
// note to devs: these endpoints will be deprecated in favor of v2
router.post(
'/:workspaceId',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireWorkspaceAuth({
acceptedRoles: [ADMIN, MEMBER],
@@ -33,7 +37,7 @@ router.post(
router.get(
'/:workspaceId',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireWorkspaceAuth({
acceptedRoles: [ADMIN, MEMBER],

View File

@@ -7,7 +7,11 @@ import {
validateRequest
} from '../../middleware';
import { body } from 'express-validator';
import { ADMIN, MEMBER } from '../../variables';
import {
ADMIN,
MEMBER,
AUTH_MODE_JWT
} from '../../variables';
import { serviceTokenController } from '../../controllers/v1';
// note: deprecate service-token routes in favor of service-token data routes/structure
@@ -21,7 +25,7 @@ router.get(
router.post(
'/',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireWorkspaceAuth({
acceptedRoles: [ADMIN, MEMBER],

View File

@@ -2,11 +2,14 @@ import express from 'express';
const router = express.Router();
import { requireAuth } from '../../middleware';
import { userController } from '../../controllers/v1';
import {
AUTH_MODE_JWT
} from '../../variables';
router.get(
'/',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
userController.getUser
);

View File

@@ -3,12 +3,13 @@ const router = express.Router();
import { requireAuth, validateRequest } from '../../middleware';
import { body, query } from 'express-validator';
import { userActionController } from '../../controllers/v1';
import { AUTH_MODE_JWT } from '../../variables';
// note: [userAction] will be deprecated in /v2 in favor of [action]
router.post(
'/',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
body('action'),
validateRequest,
@@ -18,7 +19,7 @@ router.post(
router.get(
'/',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
query('action'),
validateRequest,

View File

@@ -6,13 +6,17 @@ import {
requireWorkspaceAuth,
validateRequest
} from '../../middleware';
import { ADMIN, MEMBER } from '../../variables';
import {
ADMIN,
MEMBER,
AUTH_MODE_JWT
} from '../../variables';
import { workspaceController, membershipController } from '../../controllers/v1';
router.get(
'/:workspaceId/keys',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireWorkspaceAuth({
acceptedRoles: [ADMIN, MEMBER],
@@ -26,7 +30,7 @@ router.get(
router.get(
'/:workspaceId/users',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireWorkspaceAuth({
acceptedRoles: [ADMIN, MEMBER],
@@ -40,7 +44,7 @@ router.get(
router.get(
'/',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
workspaceController.getWorkspaces
);
@@ -48,7 +52,7 @@ router.get(
router.get(
'/:workspaceId',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireWorkspaceAuth({
acceptedRoles: [ADMIN, MEMBER],
@@ -62,7 +66,7 @@ router.get(
router.post(
'/',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
body('workspaceName').exists().trim().notEmpty(),
body('organizationId').exists().trim().notEmpty(),
@@ -73,7 +77,7 @@ router.post(
router.delete(
'/:workspaceId',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireWorkspaceAuth({
acceptedRoles: [ADMIN],
@@ -87,7 +91,7 @@ router.delete(
router.post(
'/:workspaceId/name',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireWorkspaceAuth({
acceptedRoles: [ADMIN, MEMBER],
@@ -102,7 +106,7 @@ router.post(
router.post(
'/:workspaceId/invite-signup',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireWorkspaceAuth({
acceptedRoles: [ADMIN, MEMBER],
@@ -117,7 +121,7 @@ router.post(
router.get(
'/:workspaceId/integrations',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireWorkspaceAuth({
acceptedRoles: [ADMIN, MEMBER],
@@ -131,7 +135,7 @@ router.get(
router.get(
'/:workspaceId/authorizations',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireWorkspaceAuth({
acceptedRoles: [ADMIN, MEMBER],
@@ -145,7 +149,7 @@ router.get(
router.get(
'/:workspaceId/service-tokens', // deprecate
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireWorkspaceAuth({
acceptedRoles: [ADMIN, MEMBER],

View File

@@ -1,16 +1,19 @@
import express from 'express';
const router = express.Router();
import { param, body } from 'express-validator';
import {
requireAuth,
validateRequest
} from '../../middleware';
import { param, body } from 'express-validator';
import { apiKeyDataController } from '../../controllers/v2';
import {
AUTH_MODE_JWT
} from '../../variables';
router.get(
'/',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
apiKeyDataController.getAPIKeyData
);
@@ -18,7 +21,7 @@ router.get(
router.post(
'/',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
body('name').exists().trim(),
body('expiresIn'), // measured in ms
@@ -29,7 +32,7 @@ router.post(
router.delete(
'/:apiKeyDataId',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
param('apiKeyDataId').exists().trim(),
validateRequest,

View File

@@ -7,12 +7,16 @@ import {
requireWorkspaceAuth,
validateRequest,
} from '../../middleware';
import { ADMIN, MEMBER } from '../../variables';
import {
ADMIN,
MEMBER,
AUTH_MODE_JWT
} from '../../variables';
router.post(
'/:workspaceId/environments',
requireAuth({
acceptedAuthModes: ['jwt'],
acceptedAuthModes: [AUTH_MODE_JWT],
}),
requireWorkspaceAuth({
acceptedRoles: [ADMIN, MEMBER],
@@ -28,7 +32,7 @@ router.post(
router.put(
'/:workspaceId/environments',
requireAuth({
acceptedAuthModes: ['jwt'],
acceptedAuthModes: [AUTH_MODE_JWT],
}),
requireWorkspaceAuth({
acceptedRoles: [ADMIN, MEMBER],
@@ -45,7 +49,7 @@ router.put(
router.delete(
'/:workspaceId/environments',
requireAuth({
acceptedAuthModes: ['jwt'],
acceptedAuthModes: [AUTH_MODE_JWT],
}),
requireWorkspaceAuth({
acceptedRoles: [ADMIN],
@@ -60,7 +64,7 @@ router.delete(
router.get(
'/:workspaceId/environments',
requireAuth({
acceptedAuthModes: ['jwt'],
acceptedAuthModes: [AUTH_MODE_JWT],
}),
requireWorkspaceAuth({
acceptedRoles: [MEMBER, ADMIN],
@@ -71,4 +75,4 @@ router.get(
environmentController.getAllAccessibleEnvironmentsOfWorkspace
);
export default router;
export default router;

View File

@@ -7,7 +7,14 @@ import {
validateRequest
} from '../../middleware';
import { body, param } from 'express-validator';
import { OWNER, ADMIN, MEMBER, ACCEPTED } from '../../variables';
import {
OWNER,
ADMIN,
MEMBER,
ACCEPTED,
AUTH_MODE_JWT,
AUTH_MODE_API_KEY
} from '../../variables';
import { organizationsController } from '../../controllers/v2';
// TODO: /POST to create membership
@@ -17,7 +24,7 @@ router.get(
param('organizationId').exists().trim(),
validateRequest,
requireAuth({
acceptedAuthModes: ['jwt', 'apiKey']
acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_API_KEY]
}),
requireOrganizationAuth({
acceptedRoles: [OWNER, ADMIN, MEMBER],
@@ -33,7 +40,7 @@ router.patch(
body('role').exists().isString().trim().isIn([OWNER, ADMIN, MEMBER]),
validateRequest,
requireAuth({
acceptedAuthModes: ['jwt', 'apiKey']
acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_API_KEY]
}),
requireOrganizationAuth({
acceptedRoles: [OWNER, ADMIN],
@@ -52,7 +59,7 @@ router.delete(
param('membershipId').exists().trim(),
validateRequest,
requireAuth({
acceptedAuthModes: ['jwt', 'apiKey']
acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_API_KEY]
}),
requireOrganizationAuth({
acceptedRoles: [OWNER, ADMIN],
@@ -70,7 +77,7 @@ router.get(
param('organizationId').exists().trim(),
validateRequest,
requireAuth({
acceptedAuthModes: ['jwt', 'apiKey']
acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_API_KEY]
}),
requireOrganizationAuth({
acceptedRoles: [OWNER, ADMIN],
@@ -84,7 +91,7 @@ router.get(
param('organizationId').exists().trim(),
validateRequest,
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireOrganizationAuth({
acceptedRoles: [OWNER, ADMIN],

View File

@@ -6,7 +6,12 @@ import {
validateRequest
} from '../../middleware';
import { body, param, query } from 'express-validator';
import { ADMIN, MEMBER } from '../../variables';
import {
ADMIN,
MEMBER,
AUTH_MODE_JWT,
AUTH_MODE_SERVICE_TOKEN
} from '../../variables';
import { CreateSecretRequestBody, ModifySecretRequestBody } from '../../types/secret';
import { secretController } from '../../controllers/v2';
@@ -17,7 +22,7 @@ const router = express.Router();
router.post(
'/batch-create/workspace/:workspaceId/environment/:environment',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireWorkspaceAuth({
acceptedRoles: [ADMIN, MEMBER],
@@ -34,7 +39,7 @@ router.post(
router.post(
'/workspace/:workspaceId/environment/:environment',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireWorkspaceAuth({
acceptedRoles: [ADMIN, MEMBER],
@@ -53,7 +58,7 @@ router.get(
param('workspaceId').exists().trim(),
query("environment").exists(),
requireAuth({
acceptedAuthModes: ['jwt', 'serviceToken']
acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_SERVICE_TOKEN]
}),
requireWorkspaceAuth({
acceptedRoles: [ADMIN, MEMBER],
@@ -67,7 +72,7 @@ router.get(
router.get(
'/:secretId',
requireAuth({
acceptedAuthModes: ['jwt', 'serviceToken']
acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_SERVICE_TOKEN]
}),
requireSecretAuth({
acceptedRoles: [ADMIN, MEMBER]
@@ -79,7 +84,7 @@ router.get(
router.delete(
'/batch/workspace/:workspaceId/environment/:environmentName',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
param('workspaceId').exists().isMongoId().trim(),
param('environmentName').exists().trim(),
@@ -95,7 +100,7 @@ router.delete(
router.delete(
'/:secretId',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireSecretAuth({
acceptedRoles: [ADMIN, MEMBER]
@@ -108,7 +113,7 @@ router.delete(
router.patch(
'/batch-modify/workspace/:workspaceId/environment/:environmentName',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
body('secrets').exists().isArray().custom((secrets: ModifySecretRequestBody[]) => secrets.length > 0),
param('workspaceId').exists().isMongoId().trim(),
@@ -124,7 +129,7 @@ router.patch(
router.patch(
'/workspace/:workspaceId/environment/:environmentName',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
body('secret').isObject(),
param('workspaceId').exists().isMongoId().trim(),

View File

@@ -15,7 +15,11 @@ import {
SECRET_PERSONAL,
SECRET_SHARED,
PERMISSION_READ_SECRETS,
PERMISSION_WRITE_SECRETS
PERMISSION_WRITE_SECRETS,
AUTH_MODE_JWT,
AUTH_MODE_SERVICE_ACCOUNT,
AUTH_MODE_SERVICE_TOKEN,
AUTH_MODE_API_KEY
} from '../../variables';
import {
BatchSecretRequest
@@ -24,7 +28,7 @@ import {
router.post(
'/batch',
requireAuth({
acceptedAuthModes: ['jwt', 'apiKey', 'serviceToken']
acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_API_KEY, AUTH_MODE_SERVICE_TOKEN]
}),
requireWorkspaceAuth({
acceptedRoles: [ADMIN, MEMBER],
@@ -100,7 +104,7 @@ router.post(
}),
validateRequest,
requireAuth({
acceptedAuthModes: ['jwt', 'apiKey', 'serviceToken', 'serviceAccount']
acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_API_KEY, AUTH_MODE_SERVICE_TOKEN, AUTH_MODE_SERVICE_ACCOUNT]
}),
requireWorkspaceAuth({
acceptedRoles: [ADMIN, MEMBER],
@@ -118,7 +122,7 @@ router.get(
query('tagSlugs'),
validateRequest,
requireAuth({
acceptedAuthModes: ['jwt', 'apiKey', 'serviceToken', 'serviceAccount']
acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_API_KEY, AUTH_MODE_SERVICE_TOKEN, AUTH_MODE_SERVICE_ACCOUNT]
}),
requireWorkspaceAuth({
acceptedRoles: [ADMIN, MEMBER],
@@ -159,7 +163,7 @@ router.patch(
}),
validateRequest,
requireAuth({
acceptedAuthModes: ['jwt', 'apiKey', 'serviceToken', 'serviceAccount']
acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_API_KEY, AUTH_MODE_SERVICE_TOKEN, AUTH_MODE_SERVICE_ACCOUNT]
}),
requireSecretsAuth({
acceptedRoles: [ADMIN, MEMBER],
@@ -188,7 +192,7 @@ router.delete(
.isEmpty(),
validateRequest,
requireAuth({
acceptedAuthModes: ['jwt', 'apiKey', 'serviceToken', 'serviceAccount']
acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_API_KEY, AUTH_MODE_SERVICE_TOKEN, AUTH_MODE_SERVICE_ACCOUNT]
}),
requireSecretsAuth({
acceptedRoles: [ADMIN, MEMBER],

View File

@@ -13,14 +13,16 @@ import {
OWNER,
ADMIN,
MEMBER,
ACCEPTED
ACCEPTED,
AUTH_MODE_JWT,
AUTH_MODE_SERVICE_ACCOUNT
} from '../../variables';
import { serviceAccountsController } from '../../controllers/v2';
router.get( // TODO: check
'/me',
requireAuth({
acceptedAuthModes: ['serviceAccount']
acceptedAuthModes: [AUTH_MODE_SERVICE_ACCOUNT]
}),
serviceAccountsController.getCurrentServiceAccount
);
@@ -29,7 +31,7 @@ router.get(
'/:serviceAccountId',
param('serviceAccountId').exists().isString().trim(),
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireServiceAccountAuth({
acceptedRoles: [OWNER, ADMIN],
@@ -46,7 +48,7 @@ router.post(
body('expiresIn').isNumeric(), // measured in ms
validateRequest,
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireOrganizationAuth({
acceptedRoles: [OWNER, ADMIN, MEMBER],
@@ -61,7 +63,7 @@ router.patch(
param('serviceAccountId').exists().isString().trim(),
validateRequest,
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireServiceAccountAuth({
acceptedRoles: [OWNER, ADMIN],
@@ -75,7 +77,7 @@ router.delete(
param('serviceAccountId').exists().isString().trim(),
validateRequest,
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireServiceAccountAuth({
acceptedRoles: [OWNER, ADMIN],
@@ -89,7 +91,7 @@ router.get(
param('serviceAccountId').exists().isString().trim(),
validateRequest,
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireServiceAccountAuth({
acceptedRoles: [OWNER, ADMIN],
@@ -109,7 +111,7 @@ router.post(
body('nonce').exists().isString().notEmpty(),
validateRequest,
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireServiceAccountAuth({
acceptedRoles: [OWNER, ADMIN],
@@ -128,7 +130,7 @@ router.delete(
param('serviceAccountWorkspacePermissionId').exists().isString().trim(),
validateRequest,
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireServiceAccountAuth({
acceptedRoles: [OWNER, ADMIN],
@@ -145,7 +147,7 @@ router.get(
'/:serviceAccountId/keys',
query('workspaceId').optional().isString(),
requireAuth({
acceptedAuthModes: ['jwt', 'serviceAccount']
acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_SERVICE_ACCOUNT]
}),
requireServiceAccountAuth({
acceptedRoles: [OWNER, ADMIN],

View File

@@ -10,14 +10,17 @@ import { param, body } from 'express-validator';
import {
ADMIN,
MEMBER,
PERMISSION_WRITE_SECRETS
PERMISSION_WRITE_SECRETS,
AUTH_MODE_JWT,
AUTH_MODE_SERVICE_ACCOUNT,
AUTH_MODE_SERVICE_TOKEN
} from '../../variables';
import { serviceTokenDataController } from '../../controllers/v2';
router.get(
'/',
requireAuth({
acceptedAuthModes: ['serviceToken']
acceptedAuthModes: [AUTH_MODE_SERVICE_TOKEN]
}),
serviceTokenDataController.getServiceTokenData
);
@@ -25,7 +28,7 @@ router.get(
router.post(
'/',
requireAuth({
acceptedAuthModes: ['jwt', 'serviceAccount']
acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_SERVICE_ACCOUNT]
}),
requireWorkspaceAuth({
acceptedRoles: [ADMIN, MEMBER],
@@ -56,7 +59,7 @@ router.post(
router.delete(
'/:serviceTokenDataId',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireServiceTokenDataAuth({
acceptedRoles: [ADMIN, MEMBER]

View File

@@ -7,12 +7,16 @@ import {
requireWorkspaceAuth,
validateRequest
} from '../../middleware';
import { ADMIN, MEMBER } from '../../variables';
import {
ADMIN,
MEMBER,
AUTH_MODE_JWT
} from '../../variables';
router.get(
'/:workspaceId/tags',
requireAuth({
acceptedAuthModes: ['jwt'],
acceptedAuthModes: [AUTH_MODE_JWT],
}),
requireWorkspaceAuth({
acceptedRoles: [MEMBER, ADMIN],
@@ -26,7 +30,7 @@ router.get(
router.delete(
'/tags/:tagId',
requireAuth({
acceptedAuthModes: ['jwt'],
acceptedAuthModes: [AUTH_MODE_JWT],
}),
param('tagId').exists().trim(),
validateRequest,
@@ -36,7 +40,7 @@ router.delete(
router.post(
'/:workspaceId/tags',
requireAuth({
acceptedAuthModes: ['jwt'],
acceptedAuthModes: [AUTH_MODE_JWT],
}),
requireWorkspaceAuth({
acceptedRoles: [MEMBER, ADMIN],

View File

@@ -6,11 +6,15 @@ import {
} from '../../middleware';
import { body } from 'express-validator';
import { usersController } from '../../controllers/v2';
import {
AUTH_MODE_JWT,
AUTH_MODE_API_KEY
} from '../../variables';
router.get(
'/me',
requireAuth({
acceptedAuthModes: ['jwt', 'apiKey']
acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_API_KEY]
}),
usersController.getMe
);
@@ -18,7 +22,7 @@ router.get(
router.patch(
'/me/mfa',
requireAuth({
acceptedAuthModes: ['jwt', 'apiKey']
acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_API_KEY]
}),
body('isMfaEnabled').exists().isBoolean(),
validateRequest,
@@ -28,7 +32,7 @@ router.patch(
router.get(
'/me/organizations',
requireAuth({
acceptedAuthModes: ['jwt', 'apiKey']
acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_API_KEY]
}),
usersController.getMyOrganizations
);

View File

@@ -7,13 +7,19 @@ import {
requireWorkspaceAuth,
validateRequest
} from '../../middleware';
import { ADMIN, MEMBER } from '../../variables';
import {
ADMIN,
MEMBER,
AUTH_MODE_JWT,
AUTH_MODE_SERVICE_TOKEN,
AUTH_MODE_API_KEY
} from '../../variables';
import { workspaceController } from '../../controllers/v2';
router.post(
'/:workspaceId/secrets',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireWorkspaceAuth({
acceptedRoles: [ADMIN, MEMBER],
@@ -31,7 +37,7 @@ router.post(
router.get(
'/:workspaceId/secrets',
requireAuth({
acceptedAuthModes: ['jwt', 'serviceToken']
acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_SERVICE_TOKEN]
}),
requireWorkspaceAuth({
acceptedRoles: [ADMIN, MEMBER],
@@ -47,7 +53,7 @@ router.get(
router.get(
'/:workspaceId/encrypted-key',
requireAuth({
acceptedAuthModes: ['jwt', 'apiKey']
acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_API_KEY]
}),
requireWorkspaceAuth({
acceptedRoles: [ADMIN, MEMBER],
@@ -61,7 +67,7 @@ router.get(
router.get(
'/:workspaceId/service-token-data',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireWorkspaceAuth({
acceptedRoles: [ADMIN, MEMBER],
@@ -72,14 +78,12 @@ router.get(
workspaceController.getWorkspaceServiceTokenData
);
// TODO: /POST to create membership and re-route inviting user to workspace there
router.get( // new - TODO: rewire dashboard to this route
'/:workspaceId/memberships',
param('workspaceId').exists().trim(),
validateRequest,
requireAuth({
acceptedAuthModes: ['jwt', 'apiKey']
acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_API_KEY]
}),
requireWorkspaceAuth({
acceptedRoles: [ADMIN, MEMBER],
@@ -95,7 +99,7 @@ router.patch( // TODO - rewire dashboard to this route
body('role').exists().isString().trim().isIn([ADMIN, MEMBER]),
validateRequest,
requireAuth({
acceptedAuthModes: ['jwt', 'apiKey']
acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_API_KEY]
}),
requireWorkspaceAuth({
acceptedRoles: [ADMIN],
@@ -113,7 +117,7 @@ router.delete( // TODO - rewire dashboard to this route
param('membershipId').exists().trim(),
validateRequest,
requireAuth({
acceptedAuthModes: ['jwt', 'apiKey']
acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_API_KEY]
}),
requireWorkspaceAuth({
acceptedRoles: [ADMIN],
@@ -128,7 +132,7 @@ router.delete( // TODO - rewire dashboard to this route
router.patch(
'/:workspaceId/auto-capitalization',
requireAuth({
acceptedAuthModes: ['jwt']
acceptedAuthModes: [AUTH_MODE_JWT]
}),
requireWorkspaceAuth({
acceptedRoles: [ADMIN, MEMBER],
@@ -140,18 +144,4 @@ router.patch(
workspaceController.toggleAutoCapitalization
);
router.get(
'/:workspaceId/aak',
requireAuth({
acceptedAuthModes: ['serviceAccount']
}),
requireWorkspaceAuth({
acceptedRoles: [ADMIN, MEMBER],
locationWorkspaceId: 'params'
}),
param('workspaceId').exists().trim(),
validateRequest,
workspaceController.getAak
);
export default router;

View File

@@ -1,5 +1,10 @@
import * as express from 'express';
import { ISecret } from '../../models';
import {
IUser,
IServiceAccount,
IServiceTokenData,
ISecret
} from '../../models';
// TODO: fix (any) types
declare global {
@@ -24,7 +29,13 @@ declare global {
serviceTokenData: any;
apiKeyData: any;
query?: any;
authData: any;
authData: {
authMode: string;
authPayload: IUser | IServiceAccount | IServiceTokenData;
};
requestData: {
[key: string]: string
};
}
}
}