@withstudiocms/auth-kit
Version:
Utilities for managing authentication
82 lines (81 loc) • 2.33 kB
JavaScript
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
};