X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fmodels%2Factor%2Factor.ts;h=80a646c77f59e669119c61a8337a50d1534353a4;hb=3f0ceab06e5320f62f593c49daa30d963dbc36f9;hp=1432e87574468e493a8d9ec3e225c4c6b927e4dd;hpb=8c4bbd946d2247c2e239cbbf8773d2d31c1a57aa;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/models/actor/actor.ts b/server/models/actor/actor.ts index 1432e8757..80a646c77 100644 --- a/server/models/actor/actor.ts +++ b/server/models/actor/actor.ts @@ -1,4 +1,4 @@ -import { literal, Op, QueryTypes, Transaction } from 'sequelize' +import { col, fn, literal, Op, QueryTypes, Transaction, where } from 'sequelize' import { AllowNull, BelongsTo, @@ -130,7 +130,8 @@ export const unusedActorAttributesForAPI: (keyof AttributesOnly)[] = 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, '"ActorModel"."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, '"ActorModel"."preferredUsername"'), include: [ { model: ServerModel,