@sync-in/server
Version:
The secure, open-source platform for file storage, sharing, collaboration, and sync
97 lines (96 loc) • 3.73 kB
JavaScript
/*
* 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