From 85c20aaeb90ef0e0f44c377e62c323fde275cdde Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Thu, 11 May 2023 16:16:27 +0200 Subject: Set actor preferred name case insensitive --- server/models/actor/actor-follow.ts | 22 ++++++---------------- server/models/actor/actor.ts | 36 +++++++++++++++++++++++++----------- 2 files changed, 31 insertions(+), 27 deletions(-) (limited to 'server/models/actor') diff --git a/server/models/actor/actor-follow.ts b/server/models/actor/actor-follow.ts index 32e5d78b0..0f199d208 100644 --- a/server/models/actor/actor-follow.ts +++ b/server/models/actor/actor-follow.ts @@ -37,8 +37,8 @@ import { logger } from '../../helpers/logger' import { ACTOR_FOLLOW_SCORE, CONSTRAINTS_FIELDS, FOLLOW_STATES, SERVER_ACTOR_NAME, SORTABLE_COLUMNS } from '../../initializers/constants' import { AccountModel } from '../account/account' import { ServerModel } from '../server/server' -import { doesExist } from '../shared/query' import { buildSQLAttributes, createSafeIn, getSort, searchAttribute, throwIfNotValid } from '../shared' +import { doesExist } from '../shared/query' import { VideoChannelModel } from '../video/video-channel' import { ActorModel, unusedActorAttributesForAPI } from './actor' import { InstanceListFollowersQueryBuilder, ListFollowersOptions } from './sql/instance-list-followers-query-builder' @@ -265,9 +265,7 @@ export class ActorFollowModel extends Model)[] = unique: true }, { - fields: [ 'preferredUsername', 'serverId' ], + fields: [ fn('lower', col('preferredUsername')), 'serverId' ], + name: 'actor_preferred_username_lower_server_id', unique: true, where: { serverId: { @@ -139,7 +140,8 @@ export const unusedActorAttributesForAPI: (keyof AttributesOnly)[] = } }, { - fields: [ 'preferredUsername' ], + fields: [ fn('lower', col('preferredUsername')) ], + name: 'actor_preferred_username_lower', unique: true, where: { serverId: null @@ -327,6 +329,12 @@ export class ActorModel extends Model>> { // --------------------------------------------------------------------------- + static wherePreferredUsername (preferredUsername: string, colName = 'preferredUsername') { + return where(fn('lower', col(colName)), preferredUsername.toLowerCase()) + } + + // --------------------------------------------------------------------------- + static async load (id: number): Promise { const actorServer = await getServerActor() if (id === actorServer.id) return actorServer @@ -372,8 +380,12 @@ export class ActorModel extends Model>> { const fun = () => { const query = { where: { - preferredUsername, - serverId: null + [Op.and]: [ + this.wherePreferredUsername(preferredUsername), + { + serverId: null + } + ] }, transaction } @@ -395,8 +407,12 @@ export class ActorModel extends Model>> { const query = { attributes: [ 'url' ], where: { - preferredUsername, - serverId: null + [Op.and]: [ + this.wherePreferredUsername(preferredUsername), + { + serverId: null + } + ] }, transaction } @@ -405,7 +421,7 @@ export class ActorModel extends Model>> { } return ModelCache.Instance.doCache({ - cacheType: 'local-actor-name', + cacheType: 'local-actor-url', key: preferredUsername, // The server actor never change, so we can easily cache it whitelist: () => preferredUsername === SERVER_ACTOR_NAME, @@ -415,9 +431,7 @@ export class ActorModel extends Model>> { static loadByNameAndHost (preferredUsername: string, host: string): Promise { const query = { - where: { - preferredUsername - }, + where: this.wherePreferredUsername(preferredUsername), include: [ { model: ServerModel, -- cgit v1.2.3