UNPKG

@sync-in/server

Version:

The secure, open-source platform for file storage, sharing, collaboration, and sync

97 lines (96 loc) 3.73 kB
/* * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com> * This file is part of Sync-in | The open source file sync and share solution * See the LICENSE file for licensing details */ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const _drizzleorm = require("drizzle-orm"); const _user = require("../../../applications/users/constants/user"); const _usersschema = require("../../../applications/users/schemas/users.schema"); const _functions = require("../../../common/functions"); const _shared = require("../../../common/shared"); const _db = require("./db"); async function createUserInDatabase(user) { let failed = 0; const db = await (0, _db.getDB)(); try { const nbUsers = (await db.select({ count: (0, _drizzleorm.count)() }).from(_usersschema.users).where((0, _drizzleorm.or)((0, _drizzleorm.eq)(_usersschema.users.login, user.login), (0, _drizzleorm.eq)(_usersschema.users.email, user.email))))[0].count; if (nbUsers === 0) { console.log(`${user.lastName} *${user.login}* was not found, let's create it !`); await db.insert(_usersschema.users).values(user); console.log(`${user.lastName} *${user.login}* created successfully`); } else { console.warn(`${user.lastName} *${user.login}* already exists`); } } catch (e) { failed = 1; console.error(`${user.lastName} *${user.login}* was not created`, e); } await db.$client.end(); process.exit(failed); } async function parseArgs() { const args = process.argv.slice(2); // 1. Collect raw values for each flag const raw = {}; for(let i = 0; i < args.length; i++){ const key = args[i]; const val = args[i + 1]; if (key.startsWith('--') && val && !val.startsWith('--')) { raw[key.slice(2)] = val.trim(); i++; } } // 2. Derive and validate options with defaults const login = raw.login || 'sync-in'; const email = raw.email?.trim() || `${login}@sync-in.com`; const pwdPlain = raw.password && raw.password.length > 3 ? raw.password : 'sync-in'; if (!raw.password || raw.password.length <= 3) { console.warn('Password invalid or not specified, using default.'); } const password = await (0, _functions.hashPassword)(pwdPlain); const role = raw.role?.toLowerCase() === 'admin' ? _user.USER_ROLE.ADMINISTRATOR : _user.USER_ROLE.USER; if (raw.role && ![ 'admin', 'user' ].includes(raw.role.toLowerCase())) { console.warn(`Unknown role '${raw.role}', defaulting to 'user'.`); } const storageQuota = (()=>{ const v = raw['storage-quota']; const n = Number(v); if (v && Number.isInteger(n) && n >= 0) { return n; } return null; })(); if (raw['storage-quota'] && storageQuota === null) { console.warn(`Invalid storage-quota '${raw['storage-quota']}', ignoring.`); } let permissions = raw.permissions || ''; if (permissions === 'all') { permissions = Object.values(_user.USER_PERMISSION).join(','); } const firstName = raw['first-name']?.trim() || (0, _shared.capitalizeString)(login); const lastName = raw['last-name']?.trim() || (role === _user.USER_ROLE.ADMINISTRATOR ? 'Administrator' : 'User'); return { login, password, email, firstName, lastName, role, permissions, storageQuota }; } async function main() { const user = await parseArgs(); await createUserInDatabase(user); } main().catch((e)=>console.error(e)); //# sourceMappingURL=create-user.js.map