Files
FrozenFriendsYume/packages/backend/built/server/api/endpoints/admin/accounts/create.js
T
2026-07-26 18:25:37 +09:00

54 lines
1.3 KiB
JavaScript

import define from "../../../define.js";
import { Users } from "../../../../../models/index.js";
import { signup } from "../../../common/signup.js";
import { IsNull } from "typeorm";
export const meta = {
tags: [
"admin"
],
res: {
type: "object",
optional: false,
nullable: false,
ref: "User",
properties: {
token: {
type: "string",
optional: false,
nullable: false
}
}
}
};
export const paramDef = {
type: "object",
properties: {
username: Users.localUsernameSchema,
password: Users.passwordSchema
},
required: [
"username",
"password"
]
};
export default define(meta, paramDef, async (ps, _me)=>{
const me = _me ? await Users.findOneByOrFail({
id: _me.id
}) : null;
const noUsers = await Users.countBy({
host: IsNull(),
isAdmin: true
}) === 0;
if (!(noUsers || me?.isAdmin)) throw new Error("access denied");
const { account, secret } = await signup({
username: ps.username,
password: ps.password
});
const res = await Users.pack(account, account, {
detail: true,
includeSecrets: true
});
res.token = secret;
return res;
});