forked from FoundKeyGang/FoundKey
server: dont fail if system user exists
closes FoundKeyGang/FoundKey#378 Changelog: Fixed
This commit is contained in:
parent
3a73f2c3de
commit
688deda218
3 changed files with 14 additions and 21 deletions
|
@ -1,7 +1,7 @@
|
||||||
import { IsNull } from 'typeorm';
|
import { IsNull } from 'typeorm';
|
||||||
import { ILocalUser } from '@/models/entities/user.js';
|
import { ILocalUser } from '@/models/entities/user.js';
|
||||||
import { Users } from '@/models/index.js';
|
import { Users } from '@/models/index.js';
|
||||||
import { createSystemUser } from './create-system-user.js';
|
import { getSystemUser } from './system-user.js';
|
||||||
|
|
||||||
const ACTOR_USERNAME = 'instance.actor' as const;
|
const ACTOR_USERNAME = 'instance.actor' as const;
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ let instanceActor = await Users.findOneBy({
|
||||||
|
|
||||||
export async function getInstanceActor(): Promise<ILocalUser> {
|
export async function getInstanceActor(): Promise<ILocalUser> {
|
||||||
if (!instanceActor) {
|
if (!instanceActor) {
|
||||||
instanceActor = await createSystemUser(ACTOR_USERNAME) as ILocalUser;
|
instanceActor = await getSystemUser(ACTOR_USERNAME) as ILocalUser;
|
||||||
}
|
}
|
||||||
|
|
||||||
return instanceActor;
|
return instanceActor;
|
||||||
|
|
|
@ -9,7 +9,7 @@ import { genId } from '@/misc/gen-id.js';
|
||||||
import { Cache } from '@/misc/cache.js';
|
import { Cache } from '@/misc/cache.js';
|
||||||
import { Relay } from '@/models/entities/relay.js';
|
import { Relay } from '@/models/entities/relay.js';
|
||||||
import { MINUTE } from '@/const.js';
|
import { MINUTE } from '@/const.js';
|
||||||
import { createSystemUser } from './create-system-user.js';
|
import { getSystemUser } from './system-user.js';
|
||||||
|
|
||||||
const ACTOR_USERNAME = 'relay.actor' as const;
|
const ACTOR_USERNAME = 'relay.actor' as const;
|
||||||
|
|
||||||
|
@ -24,16 +24,8 @@ const relaysCache = new Cache<Relay[]>(
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
|
||||||
export async function getRelayActor(): Promise<ILocalUser> {
|
async function getRelayActor(): Promise<ILocalUser> {
|
||||||
const user = await Users.findOneBy({
|
return await getSystemUser(ACTOR_USERNAME);
|
||||||
host: IsNull(),
|
|
||||||
username: ACTOR_USERNAME,
|
|
||||||
});
|
|
||||||
|
|
||||||
if (user) return user as ILocalUser;
|
|
||||||
|
|
||||||
const created = await createSystemUser(ACTOR_USERNAME);
|
|
||||||
return created as ILocalUser;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function addRelay(inbox: string): Promise<Relay> {
|
export async function addRelay(inbox: string): Promise<Relay> {
|
||||||
|
|
|
@ -2,6 +2,7 @@ import { v4 as uuid } from 'uuid';
|
||||||
import { IsNull } from 'typeorm';
|
import { IsNull } from 'typeorm';
|
||||||
import { genRsaKeyPair } from '@/misc/gen-key-pair.js';
|
import { genRsaKeyPair } from '@/misc/gen-key-pair.js';
|
||||||
import { hashPassword } from '@/misc/password.js';
|
import { hashPassword } from '@/misc/password.js';
|
||||||
|
import { Users } from '@/models/index.js';
|
||||||
import { User } from '@/models/entities/user.js';
|
import { User } from '@/models/entities/user.js';
|
||||||
import { UserProfile } from '@/models/entities/user-profile.js';
|
import { UserProfile } from '@/models/entities/user-profile.js';
|
||||||
import { genId } from '@/misc/gen-id.js';
|
import { genId } from '@/misc/gen-id.js';
|
||||||
|
@ -10,7 +11,14 @@ import { UsedUsername } from '@/models/entities/used-username.js';
|
||||||
import { db } from '@/db/postgre.js';
|
import { db } from '@/db/postgre.js';
|
||||||
import generateNativeUserToken from '@/server/api/common/generate-native-user-token.js';
|
import generateNativeUserToken from '@/server/api/common/generate-native-user-token.js';
|
||||||
|
|
||||||
export async function createSystemUser(username: string): Promise<User> {
|
export async function getSystemUser(username: string): Promise<User> {
|
||||||
|
const exist = await Users.findBy({
|
||||||
|
usernameLower: username.toLowerCase(),
|
||||||
|
host: IsNull(),
|
||||||
|
});
|
||||||
|
|
||||||
|
if (exist) return exist;
|
||||||
|
|
||||||
const password = await hashPassword(uuid());
|
const password = await hashPassword(uuid());
|
||||||
|
|
||||||
// Generate secret
|
// Generate secret
|
||||||
|
@ -22,13 +30,6 @@ export async function createSystemUser(username: string): Promise<User> {
|
||||||
|
|
||||||
// Start transaction
|
// Start transaction
|
||||||
await db.transaction(async transactionalEntityManager => {
|
await db.transaction(async transactionalEntityManager => {
|
||||||
const exist = await transactionalEntityManager.countBy(User, {
|
|
||||||
usernameLower: username.toLowerCase(),
|
|
||||||
host: IsNull(),
|
|
||||||
});
|
|
||||||
|
|
||||||
if (exist) throw new Error('the user is already exists');
|
|
||||||
|
|
||||||
account = await transactionalEntityManager.insert(User, {
|
account = await transactionalEntityManager.insert(User, {
|
||||||
id: genId(),
|
id: genId(),
|
||||||
createdAt: new Date(),
|
createdAt: new Date(),
|
Loading…
Reference in a new issue