UNPKG

@withstudiocms/auth-kit

Version:

Utilities for managing authentication

82 lines (81 loc) 2.33 kB
import { Effect } from "@withstudiocms/effect"; import { useUserError } from "../errors.js"; import { UserPermissionLevel } from "../types.js"; import { CheckIfUnsafe } from "./unsafeCheck.js"; const verifyUsernameLength = (username) => useUserError(() => { if (username.length < 3 || username.length > 32) { return "Username must be between 3 and 32 characters long"; } return void 0; }); const verifyUsernameCharacters = Effect.fn( (username) => useUserError(() => { if (!/^[a-z0-9_-]+$/.test(username)) { return "Username can only contain lowercase letters, numbers, hyphens (-), and underscores (_)"; } return void 0; }) ); const verifyUsernameSafe = (username) => Effect.gen(function* () { const check = yield* CheckIfUnsafe; const isUnsafe = yield* check.username(username); if (isUnsafe) { return "Username should not be a commonly used unsafe username (admin, root, etc.)"; } return void 0; }).pipe(Effect.provide(CheckIfUnsafe.Default)); const getDefaultUserSession = Effect.fn( () => Effect.succeed({ isLoggedIn: false, user: null, permissionLevel: "unknown" }) ); const normalizeRank = (v) => { switch (v) { case "owner": case "admin": case "editor": case "visitor": case "unknown": return v; /* v8 ignore next 2 */ default: return "unknown"; } }; const getLevel = (userData) => useUserError(() => { if (!userData) return "unknown"; let userPermissionLevel = "unknown"; if ("permissionLevel" in userData) { userPermissionLevel = normalizeRank(userData.permissionLevel); } if ("permissionsData" in userData && userData.permissionsData?.rank) { userPermissionLevel = normalizeRank(userData.permissionsData.rank); } return userPermissionLevel; }); const parseRequiredPerms = (requiredPerms) => useUserError(() => { switch (requiredPerms) { case "owner": return UserPermissionLevel.owner; case "admin": return UserPermissionLevel.admin; case "editor": return UserPermissionLevel.editor; case "visitor": return UserPermissionLevel.visitor; default: return UserPermissionLevel.unknown; } }); export { getDefaultUserSession, getLevel, parseRequiredPerms, verifyUsernameCharacters, verifyUsernameLength, verifyUsernameSafe };