diff --git a/lib/build/framework/fastify/index.d.ts b/lib/build/framework/fastify/index.d.ts index 3cca3a1a2..fb2d3fe21 100644 --- a/lib/build/framework/fastify/index.d.ts +++ b/lib/build/framework/fastify/index.d.ts @@ -1,18 +1,21 @@ // @ts-nocheck /// export type { SessionRequest } from "./framework"; -export declare const plugin: import("fastify").FastifyPluginCallback, import("http").Server>; +export declare const plugin: import("fastify").FastifyPluginCallback< + Record, + import("fastify").RawServerDefault +>; export declare const errorHandler: () => ( err: any, req: import("fastify").FastifyRequest< import("fastify/types/route").RouteGenericInterface, - import("http").Server, + import("fastify").RawServerDefault, import("http").IncomingMessage >, res: import("fastify").FastifyReply< - import("http").Server, + import("fastify").RawServerDefault, import("http").IncomingMessage, - import("http").ServerResponse, + import("http").ServerResponse, import("fastify/types/route").RouteGenericInterface, unknown > diff --git a/lib/build/framework/utils.d.ts b/lib/build/framework/utils.d.ts index 636a97724..123ddf23c 100644 --- a/lib/build/framework/utils.d.ts +++ b/lib/build/framework/utils.d.ts @@ -45,7 +45,7 @@ export declare function setCookieForServerResponse( expires: number, path: string, sameSite: "strict" | "lax" | "none" -): ServerResponse; +): ServerResponse; export declare function getCookieValueToSetInHeader( prev: string | string[] | undefined, val: string | string[], diff --git a/lib/build/recipe/dashboard/api/userroles/permissions/addPermissions.d.ts b/lib/build/recipe/dashboard/api/userroles/permissions/addPermissions.d.ts new file mode 100644 index 000000000..c57497345 --- /dev/null +++ b/lib/build/recipe/dashboard/api/userroles/permissions/addPermissions.d.ts @@ -0,0 +1,12 @@ +// @ts-nocheck +import { APIInterface, APIOptions } from "../../../types"; +declare const addPermissions: ( + _: APIInterface, + ___: string, + options: APIOptions, + __: any +) => Promise<{ + status: "OK"; + createdNewRole: boolean; +}>; +export default addPermissions; diff --git a/lib/build/recipe/dashboard/api/userroles/permissions/addPermissions.js b/lib/build/recipe/dashboard/api/userroles/permissions/addPermissions.js new file mode 100644 index 000000000..afca59408 --- /dev/null +++ b/lib/build/recipe/dashboard/api/userroles/permissions/addPermissions.js @@ -0,0 +1,29 @@ +"use strict"; +var __importDefault = + (this && this.__importDefault) || + function (mod) { + return mod && mod.__esModule ? mod : { default: mod }; + }; +Object.defineProperty(exports, "__esModule", { value: true }); +const userroles_1 = __importDefault(require("../../../../userroles")); +const error_1 = __importDefault(require("../../../../../error")); +const addPermissions = async (_, ___, options, __) => { + const requestBody = await options.req.getJSONBody(); + const role = requestBody.role; + const permissions = requestBody.permissions; + if (role === undefined || typeof role === "string") { + throw new error_1.default({ + message: "Required parameter 'role' is missing or has an invalid type", + type: error_1.default.BAD_INPUT_ERROR, + }); + } + if (permissions === undefined || Array.isArray(permissions) === false) { + throw new error_1.default({ + message: "Required parameter 'permissions' is missing or has an invalid type", + type: error_1.default.BAD_INPUT_ERROR, + }); + } + const response = await userroles_1.default.createNewRoleOrAddPermissions(role, permissions); + return response; +}; +exports.default = addPermissions; diff --git a/lib/build/recipe/dashboard/api/userroles/permissions/getPermissionsForRole.d.ts b/lib/build/recipe/dashboard/api/userroles/permissions/getPermissionsForRole.d.ts new file mode 100644 index 000000000..875f5e331 --- /dev/null +++ b/lib/build/recipe/dashboard/api/userroles/permissions/getPermissionsForRole.d.ts @@ -0,0 +1,12 @@ +// @ts-nocheck +import { APIInterface, APIOptions } from "../../../types"; +declare const getPermissionsForRole: ( + _: APIInterface, + ___: string, + options: APIOptions, + __: any +) => Promise<{ + status: "OK"; + permissions: string[]; +}>; +export default getPermissionsForRole; diff --git a/lib/build/recipe/dashboard/api/userroles/permissions/getPermissionsForRole.js b/lib/build/recipe/dashboard/api/userroles/permissions/getPermissionsForRole.js new file mode 100644 index 000000000..07dc02f03 --- /dev/null +++ b/lib/build/recipe/dashboard/api/userroles/permissions/getPermissionsForRole.js @@ -0,0 +1,27 @@ +"use strict"; +var __importDefault = + (this && this.__importDefault) || + function (mod) { + return mod && mod.__esModule ? mod : { default: mod }; + }; +Object.defineProperty(exports, "__esModule", { value: true }); +const userroles_1 = __importDefault(require("../../../../userroles")); +const error_1 = __importDefault(require("../../../../../error")); +const getPermissionsForRole = async (_, ___, options, __) => { + const role = options.req.getKeyValueFromQuery("role"); + if (role === undefined) { + throw new error_1.default({ + message: "Required parameter 'role' is missing or has an invalid type", + type: error_1.default.BAD_INPUT_ERROR, + }); + } + const response = await userroles_1.default.getPermissionsForRole(role); + if (response.status === "UNKNOWN_ROLE_ERROR") { + return { + status: "OK", + permissions: [], + }; + } + return response; +}; +exports.default = getPermissionsForRole; diff --git a/lib/build/recipe/dashboard/api/userroles/permissions/removePermissions.d.ts b/lib/build/recipe/dashboard/api/userroles/permissions/removePermissions.d.ts new file mode 100644 index 000000000..6d8686959 --- /dev/null +++ b/lib/build/recipe/dashboard/api/userroles/permissions/removePermissions.d.ts @@ -0,0 +1,11 @@ +// @ts-nocheck +import { APIInterface, APIOptions } from "../../../types"; +declare const removePermissionsFromRole: ( + _: APIInterface, + ___: string, + options: APIOptions, + __: any +) => Promise<{ + status: "OK" | "UNKNOWN_ROLE_ERROR"; +}>; +export default removePermissionsFromRole; diff --git a/lib/build/recipe/dashboard/api/userroles/permissions/removePermissions.js b/lib/build/recipe/dashboard/api/userroles/permissions/removePermissions.js new file mode 100644 index 000000000..556a3ee97 --- /dev/null +++ b/lib/build/recipe/dashboard/api/userroles/permissions/removePermissions.js @@ -0,0 +1,24 @@ +"use strict"; +var __importDefault = + (this && this.__importDefault) || + function (mod) { + return mod && mod.__esModule ? mod : { default: mod }; + }; +Object.defineProperty(exports, "__esModule", { value: true }); +const userroles_1 = __importDefault(require("../../../../userroles")); +const error_1 = __importDefault(require("../../../../../error")); +const removePermissionsFromRole = async (_, ___, options, __) => { + const requestBody = await options.req.getJSONBody(); + const role = requestBody.role; + const permissions = requestBody.permissions; + if (permissions === undefined || Array.isArray(permissions) === false) + if (role === undefined) { + throw new error_1.default({ + message: "Required parameter 'role' is missing or has an invalid type", + type: error_1.default.BAD_INPUT_ERROR, + }); + } + const response = await userroles_1.default.removePermissionsFromRole(role, permissions); + return response; +}; +exports.default = removePermissionsFromRole; diff --git a/lib/build/recipe/dashboard/api/userroles/roles/createRole.d.ts b/lib/build/recipe/dashboard/api/userroles/roles/createRole.d.ts new file mode 100644 index 000000000..8241b6d6e --- /dev/null +++ b/lib/build/recipe/dashboard/api/userroles/roles/createRole.d.ts @@ -0,0 +1,12 @@ +// @ts-nocheck +import { APIInterface, APIOptions } from "../../../types"; +declare const createRole: ( + _: APIInterface, + __: string, + options: APIOptions, + ___: any +) => Promise<{ + status: "OK"; + createdNewRole: boolean; +}>; +export default createRole; diff --git a/lib/build/recipe/dashboard/api/userroles/roles/createRole.js b/lib/build/recipe/dashboard/api/userroles/roles/createRole.js new file mode 100644 index 000000000..f739b88a8 --- /dev/null +++ b/lib/build/recipe/dashboard/api/userroles/roles/createRole.js @@ -0,0 +1,29 @@ +"use strict"; +var __importDefault = + (this && this.__importDefault) || + function (mod) { + return mod && mod.__esModule ? mod : { default: mod }; + }; +Object.defineProperty(exports, "__esModule", { value: true }); +const userroles_1 = __importDefault(require("../../../../userroles")); +const error_1 = __importDefault(require("../../../../../error")); +const createRole = async (_, __, options, ___) => { + const requestBody = await options.req.getJSONBody(); + const permissions = requestBody.permissions; + const role = requestBody.role; + if (permissions === undefined) { + throw new error_1.default({ + message: "Required parameter 'permissions' is missing or has an invalid type", + type: error_1.default.BAD_INPUT_ERROR, + }); + } + if (role === undefined) { + throw new error_1.default({ + message: "Required parameter 'role' is missing or has an invalid type", + type: error_1.default.BAD_INPUT_ERROR, + }); + } + const response = await userroles_1.default.createNewRoleOrAddPermissions(role, permissions); + return response; +}; +exports.default = createRole; diff --git a/lib/build/recipe/dashboard/api/userroles/roles/deleteRole.d.ts b/lib/build/recipe/dashboard/api/userroles/roles/deleteRole.d.ts new file mode 100644 index 000000000..18d98c07e --- /dev/null +++ b/lib/build/recipe/dashboard/api/userroles/roles/deleteRole.d.ts @@ -0,0 +1,12 @@ +// @ts-nocheck +import { APIInterface, APIOptions } from "../../../types"; +declare const deleteRole: ( + _: APIInterface, + ___: string, + options: APIOptions, + __: any +) => Promise<{ + status: "OK"; + didRoleExist: boolean; +}>; +export default deleteRole; diff --git a/lib/build/recipe/dashboard/api/userroles/roles/deleteRole.js b/lib/build/recipe/dashboard/api/userroles/roles/deleteRole.js new file mode 100644 index 000000000..5c471e728 --- /dev/null +++ b/lib/build/recipe/dashboard/api/userroles/roles/deleteRole.js @@ -0,0 +1,21 @@ +"use strict"; +var __importDefault = + (this && this.__importDefault) || + function (mod) { + return mod && mod.__esModule ? mod : { default: mod }; + }; +Object.defineProperty(exports, "__esModule", { value: true }); +const userroles_1 = __importDefault(require("../../../../userroles")); +const error_1 = __importDefault(require("../../../../../error")); +const deleteRole = async (_, ___, options, __) => { + const role = options.req.getKeyValueFromQuery("userId"); + if (role === undefined) { + throw new error_1.default({ + message: "Required parameter 'role' is missing or has an invalid type", + type: error_1.default.BAD_INPUT_ERROR, + }); + } + const response = await userroles_1.default.deleteRole(role); + return response; +}; +exports.default = deleteRole; diff --git a/lib/build/recipe/dashboard/api/userroles/roles/getAllRoles.d.ts b/lib/build/recipe/dashboard/api/userroles/roles/getAllRoles.d.ts new file mode 100644 index 000000000..21655d964 --- /dev/null +++ b/lib/build/recipe/dashboard/api/userroles/roles/getAllRoles.d.ts @@ -0,0 +1,4 @@ +// @ts-nocheck +import { APIFunction } from "../../../types"; +declare const getAllRoles: APIFunction; +export default getAllRoles; diff --git a/lib/build/recipe/dashboard/api/userroles/roles/getAllRoles.js b/lib/build/recipe/dashboard/api/userroles/roles/getAllRoles.js new file mode 100644 index 000000000..383064d29 --- /dev/null +++ b/lib/build/recipe/dashboard/api/userroles/roles/getAllRoles.js @@ -0,0 +1,29 @@ +"use strict"; +var __importDefault = + (this && this.__importDefault) || + function (mod) { + return mod && mod.__esModule ? mod : { default: mod }; + }; +Object.defineProperty(exports, "__esModule", { value: true }); +const userroles_1 = __importDefault(require("../../../../userroles")); +const getAllRoles = async (_, __, ___, userContext) => { + const response = await userroles_1.default.getAllRoles(userContext); + let roles = []; + for (let i = 0; i < response.roles.length; i++) { + const role = response.roles[i]; + try { + const res = await userroles_1.default.getPermissionsForRole(role); + if (res.status === "OK") { + roles.push({ + role, + permissions: res.permissions, + }); + } + } catch (_) {} + } + return { + roles, + status: "OK", + }; +}; +exports.default = getAllRoles; diff --git a/lib/build/recipe/dashboard/constants.d.ts b/lib/build/recipe/dashboard/constants.d.ts index 58c53c2fc..fccb15388 100644 --- a/lib/build/recipe/dashboard/constants.d.ts +++ b/lib/build/recipe/dashboard/constants.d.ts @@ -14,4 +14,10 @@ export declare const USER_EMAIL_VERIFY_TOKEN_API = "/api/user/email/verify/token export declare const SEARCH_TAGS_API = "/api/search/tags"; export declare const DASHBOARD_ANALYTICS_API = "/api/analytics"; export declare const TENANTS_LIST_API = "/api/tenants/list"; +export declare const USERROLES_LIST_API = "/api/userroles/roles"; +export declare const USERROLES_CREATE_ROLE_API = "/api/userroles/role"; +export declare const USERROLES_DELETE_ROLE_API = "/api/userroles/role"; +export declare const USERROLES_ADD_PERMISSIONS_API = "/api/userroles/role/permissions"; +export declare const USERROLES_GET_PERMISSIONS_API = "/api/userroles/role/permissions"; +export declare const USERROLES_REMOVE_PERMISSIONS_API = "/api/userroles/role/permissions/remove"; export declare const UNLINK_USER = "/api/user/unlink"; diff --git a/lib/build/recipe/dashboard/constants.js b/lib/build/recipe/dashboard/constants.js index d551fd218..9b7ef4ba7 100644 --- a/lib/build/recipe/dashboard/constants.js +++ b/lib/build/recipe/dashboard/constants.js @@ -14,7 +14,7 @@ * under the License. */ Object.defineProperty(exports, "__esModule", { value: true }); -exports.UNLINK_USER = exports.TENANTS_LIST_API = exports.DASHBOARD_ANALYTICS_API = exports.SEARCH_TAGS_API = exports.USER_EMAIL_VERIFY_TOKEN_API = exports.USER_PASSWORD_API = exports.USER_SESSIONS_API = exports.USER_METADATA_API = exports.USER_EMAIL_VERIFY_API = exports.USER_API = exports.USERS_COUNT_API = exports.USERS_LIST_GET_API = exports.VALIDATE_KEY_API = exports.SIGN_OUT_API = exports.SIGN_IN_API = exports.DASHBOARD_API = void 0; +exports.UNLINK_USER = exports.USERROLES_REMOVE_PERMISSIONS_API = exports.USERROLES_GET_PERMISSIONS_API = exports.USERROLES_ADD_PERMISSIONS_API = exports.USERROLES_DELETE_ROLE_API = exports.USERROLES_CREATE_ROLE_API = exports.USERROLES_LIST_API = exports.TENANTS_LIST_API = exports.DASHBOARD_ANALYTICS_API = exports.SEARCH_TAGS_API = exports.USER_EMAIL_VERIFY_TOKEN_API = exports.USER_PASSWORD_API = exports.USER_SESSIONS_API = exports.USER_METADATA_API = exports.USER_EMAIL_VERIFY_API = exports.USER_API = exports.USERS_COUNT_API = exports.USERS_LIST_GET_API = exports.VALIDATE_KEY_API = exports.SIGN_OUT_API = exports.SIGN_IN_API = exports.DASHBOARD_API = void 0; exports.DASHBOARD_API = "/dashboard"; exports.SIGN_IN_API = "/api/signin"; exports.SIGN_OUT_API = "/api/signout"; @@ -30,4 +30,10 @@ exports.USER_EMAIL_VERIFY_TOKEN_API = "/api/user/email/verify/token"; exports.SEARCH_TAGS_API = "/api/search/tags"; exports.DASHBOARD_ANALYTICS_API = "/api/analytics"; exports.TENANTS_LIST_API = "/api/tenants/list"; +exports.USERROLES_LIST_API = "/api/userroles/roles"; +exports.USERROLES_CREATE_ROLE_API = "/api/userroles/role"; +exports.USERROLES_DELETE_ROLE_API = "/api/userroles/role"; +exports.USERROLES_ADD_PERMISSIONS_API = "/api/userroles/role/permissions"; +exports.USERROLES_GET_PERMISSIONS_API = "/api/userroles/role/permissions"; +exports.USERROLES_REMOVE_PERMISSIONS_API = "/api/userroles/role/permissions/remove"; exports.UNLINK_USER = "/api/user/unlink"; diff --git a/lib/build/recipe/dashboard/recipe.js b/lib/build/recipe/dashboard/recipe.js index 6a8011b5c..4d0a2a595 100644 --- a/lib/build/recipe/dashboard/recipe.js +++ b/lib/build/recipe/dashboard/recipe.js @@ -49,6 +49,12 @@ const tagsGet_1 = require("./api/search/tagsGet"); const analytics_1 = __importDefault(require("./api/analytics")); const listTenants_1 = __importDefault(require("./api/listTenants")); const userUnlinkGet_1 = require("./api/userdetails/userUnlinkGet"); +const getAllRoles_1 = __importDefault(require("./api/userroles/roles/getAllRoles")); +const createRole_1 = __importDefault(require("./api/userroles/roles/createRole")); +const deleteRole_1 = __importDefault(require("./api/userroles/roles/deleteRole")); +const addPermissions_1 = __importDefault(require("./api/userroles/permissions/addPermissions")); +const removePermissions_1 = __importDefault(require("./api/userroles/permissions/removePermissions")); +const getPermissionsForRole_1 = __importDefault(require("./api/userroles/permissions/getPermissionsForRole")); class Recipe extends recipeModule_1.default { constructor(recipeId, appInfo, isInServerlessEnv, config) { super(recipeId, appInfo); @@ -229,6 +235,54 @@ class Recipe extends recipeModule_1.default { disabled: false, method: "get", }, + { + id: constants_1.USERROLES_LIST_API, + pathWithoutApiBasePath: new normalisedURLPath_1.default( + utils_1.getApiPathWithDashboardBase(constants_1.USERROLES_LIST_API) + ), + disabled: false, + method: "get", + }, + { + id: constants_1.USERROLES_CREATE_ROLE_API, + pathWithoutApiBasePath: new normalisedURLPath_1.default( + utils_1.getApiPathWithDashboardBase(constants_1.USERROLES_CREATE_ROLE_API) + ), + disabled: false, + method: "post", + }, + { + id: constants_1.USERROLES_DELETE_ROLE_API, + pathWithoutApiBasePath: new normalisedURLPath_1.default( + utils_1.getApiPathWithDashboardBase(constants_1.USERROLES_DELETE_ROLE_API) + ), + disabled: false, + method: "delete", + }, + { + id: constants_1.USERROLES_GET_PERMISSIONS_API, + pathWithoutApiBasePath: new normalisedURLPath_1.default( + utils_1.getApiPathWithDashboardBase(constants_1.USERROLES_GET_PERMISSIONS_API) + ), + disabled: false, + method: "get", + }, + { + id: constants_1.USERROLES_ADD_PERMISSIONS_API, + pathWithoutApiBasePath: new normalisedURLPath_1.default( + utils_1.getApiPathWithDashboardBase(constants_1.USERROLES_ADD_PERMISSIONS_API) + ), + disabled: false, + method: "put", + }, + { + id: constants_1.USERROLES_REMOVE_PERMISSIONS_API, + pathWithoutApiBasePath: new normalisedURLPath_1.default( + utils_1.getApiPathWithDashboardBase(constants_1.USERROLES_REMOVE_PERMISSIONS_API) + ), + disabled: false, + method: "put", + }, ]; }; this.handleAPIRequest = async (id, tenantId, req, res, __, ___, userContext) => { @@ -302,6 +356,18 @@ class Recipe extends recipeModule_1.default { apiFunction = listTenants_1.default; } else if (id === constants_1.UNLINK_USER) { apiFunction = userUnlinkGet_1.userUnlink; + } else if (id === constants_1.USERROLES_LIST_API) { + apiFunction = getAllRoles_1.default; + } else if (id === constants_1.USERROLES_CREATE_ROLE_API) { + apiFunction = createRole_1.default; + } else if (id === constants_1.USERROLES_DELETE_ROLE_API) { + apiFunction = deleteRole_1.default; + } else if (id === constants_1.USERROLES_ADD_PERMISSIONS_API) { + apiFunction = addPermissions_1.default; + } else if (id === constants_1.USERROLES_REMOVE_PERMISSIONS_API) { + apiFunction = removePermissions_1.default; + } else if ((id = constants_1.USERROLES_GET_PERMISSIONS_API)) { + apiFunction = getPermissionsForRole_1.default; } // If the id doesnt match any APIs return false if (apiFunction === undefined) {