Skip to content

Commit

Permalink
fix(nodejs): invalid characters in admin role
Browse files Browse the repository at this point in the history
  • Loading branch information
takoring committed Feb 4, 2025
1 parent 3cdd393 commit 739819b
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 3 deletions.
2 changes: 1 addition & 1 deletion example/nodejs/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"main": "dist/server.js",
"dependencies": {
"@aws-sdk/client-s3": "^3.451.0",
"@viron/lib": "2.4.0-alpha.2",
"@viron/lib": "2.4.0-alpha.3",
"accepts": "^1.3.7",
"compression": "^1.7.4",
"cookie-parser": "^1.4.5",
Expand Down
2 changes: 1 addition & 1 deletion packages/nodejs/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@viron/lib",
"version": "2.4.0-alpha.2",
"version": "2.4.0-alpha.3",
"scripts": {
"build": "npm run clean && tsc --project tsconfig.json && cp -fr src/openapi dist/",
"clean": "rm -rf dist && rm -f tsconfig.tsbuildinfo",
Expand Down
27 changes: 26 additions & 1 deletion packages/nodejs/src/domains/adminrole.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
import { newModel } from 'casbin';
import { roleIdAlreadyExists, unableToDeleteRole } from '../errors';
import {
roleIdAlreadyExists,
unableToDeleteRole,
invalidAdminRole,
} from '../errors';
import {
ADMIN_ROLE,
API_METHOD,
Expand Down Expand Up @@ -89,6 +93,25 @@ const sync = async (now = Date.now()): Promise<void> => {
}
};

// adminroles(casbin_rule)で不正な文字列チェック
const validateAdminRole = (obj: AdminRole): void => {
console.log('validateAdminRole: ', obj);
// obj.idにカンマ、シングルクォート、ダブルクォートが文字列に含まれないことを確認
if (/[,'"]/.test(obj.id)) {
throw invalidAdminRole();
}
for (const { resourceId, permission } of obj.permissions) {
// resourceIdにカンマ、シングルクォート、ダブルクォートが文字列に含まれないことを確認
if (/[,'"]/.test(resourceId)) {
throw invalidAdminRole();
}
// permissionがPermissionに含まれることを確認
if (!Object.values(PERMISSION).includes(permission)) {
throw invalidAdminRole();
}
}
};

// APIメソッドをPermissionに変換
export const method2Permissions = (method: ApiMethod): Permission[] =>
permissionMap[method];
Expand Down Expand Up @@ -291,6 +314,7 @@ export const listByOas = async (

// 1件作成
export const createOne = async (obj: AdminRole): Promise<AdminRole> => {
validateAdminRole(obj);
const roleId = obj.id;
const policies = await listPolicies(roleId);
if (policies?.length) {
Expand All @@ -305,6 +329,7 @@ export const updateOneById = async (
roleId: string,
permissions: AdminRolePermissions
): Promise<void> => {
validateAdminRole({ id: roleId, permissions });
await updatePermissionsForRole(roleId, permissions);
};

Expand Down
4 changes: 4 additions & 0 deletions packages/nodejs/src/errors.ts
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,10 @@ export const invalidAuthType = (): VironError => {
return new VironError('Invalid Auth type.', 400);
};

export const invalidAdminRole = (): VironError => {
return new VironError('Invalid Admin role.', 400);
};

export const unsupportedScope = (): VironError => {
return new VironError('Unsupported scope.', 500);
};
Expand Down

0 comments on commit 739819b

Please sign in to comment.