UNPKG

wranglebot

Version:

open source media asset management

82 lines (70 loc) 2.3 kB
import { v4 as uuidv4 } from "uuid"; export default class User { id; username; password; firstName; lastName; email; roles: string[] = []; // ["admin", "maintainer", "contributor", "curator"] libraries = []; //@deprecated config: any = {}; query: any; token: string = ""; constructor(options) { if (!options.username) throw new Error("Username is required"); if (!options.password) throw new Error("Password is required"); this.id = options.id || uuidv4(); this.firstName = options.firstName; this.lastName = options.lastName; this.username = options.username; this.password = options.password; this.email = options.email; this.roles = options.roles || []; this.libraries = options.libraries || []; //@deprecated this.config = options.config || {}; } get fullName() { return `${this.firstName} ${this.lastName}`; } update(options) { this.username = options.username || this.username; this.firstName = options.firstName || this.firstName; this.lastName = options.lastName || this.lastName; this.email = options.email || this.email; this.roles = options.roles || this.roles; this.libraries = options.libraries || this.libraries; //@deprecated this.config = options.config ? { ...this.config, ...options.config } : this.config; } /** * @description Checks if the user has the specified role or roles * @param role The role or roles to check * @returns {boolean} True if the user has the role or roles, false otherwise */ hasRole(role: string | string[]) { if (typeof role === "string") { return this.roles.includes(role); } return role.some((r) => this.roles.includes(r)); } setConfig(options) { this.config = { ...this.config, ...options }; } /** * @description Returns a JSON representation of the user * @param options set db to true to include the hashed password */ toJSON(options = { db: false }) { return { id: this.id, username: this.username, firstName: this.firstName, lastName: this.lastName, password: options.db ? this.password : undefined, email: this.email, roles: this.roles, libraries: this.libraries, //@deprecated, config: this.config, }; } }