summaryrefslogtreecommitdiff
path: root/src/remote/resolve-user.ts
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2021-11-12 02:02:25 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2021-11-12 02:02:25 +0900
commit0e4a111f81cceed275d9bec2695f6e401fb654d8 (patch)
tree40874799472fa07416f17b50a398ac33b7771905 /src/remote/resolve-user.ts
parentupdate deps (diff)
downloadsharkey-0e4a111f81cceed275d9bec2695f6e401fb654d8.tar.gz
sharkey-0e4a111f81cceed275d9bec2695f6e401fb654d8.tar.bz2
sharkey-0e4a111f81cceed275d9bec2695f6e401fb654d8.zip
refactoring
Resolve #7779
Diffstat (limited to 'src/remote/resolve-user.ts')
-rw-r--r--src/remote/resolve-user.ts110
1 files changed, 0 insertions, 110 deletions
diff --git a/src/remote/resolve-user.ts b/src/remote/resolve-user.ts
deleted file mode 100644
index a12396abc8..0000000000
--- a/src/remote/resolve-user.ts
+++ /dev/null
@@ -1,110 +0,0 @@
-import { URL } from 'url';
-import webFinger from './webfinger';
-import config from '@/config/index';
-import { createPerson, updatePerson } from './activitypub/models/person';
-import { remoteLogger } from './logger';
-import * as chalk from 'chalk';
-import { User, IRemoteUser } from '@/models/entities/user';
-import { Users } from '@/models/index';
-import { toPuny } from '@/misc/convert-host';
-
-const logger = remoteLogger.createSubLogger('resolve-user');
-
-export async function resolveUser(username: string, host: string | null, option?: any, resync = false): Promise<User> {
- const usernameLower = username.toLowerCase();
-
- if (host == null) {
- logger.info(`return local user: ${usernameLower}`);
- return await Users.findOne({ usernameLower, host: null }).then(u => {
- if (u == null) {
- throw new Error('user not found');
- } else {
- return u;
- }
- });
- }
-
- host = toPuny(host);
-
- if (config.host == host) {
- logger.info(`return local user: ${usernameLower}`);
- return await Users.findOne({ usernameLower, host: null }).then(u => {
- if (u == null) {
- throw new Error('user not found');
- } else {
- return u;
- }
- });
- }
-
- const user = await Users.findOne({ usernameLower, host }, option) as IRemoteUser;
-
- const acctLower = `${usernameLower}@${host}`;
-
- if (user == null) {
- const self = await resolveSelf(acctLower);
-
- logger.succ(`return new remote user: ${chalk.magenta(acctLower)}`);
- return await createPerson(self.href);
- }
-
- // resyncオプション OR ユーザー情報が古い場合は、WebFilgerからやりなおして返す
- if (resync || user.lastFetchedAt == null || Date.now() - user.lastFetchedAt.getTime() > 1000 * 60 * 60 * 24) {
- // 繋がらないインスタンスに何回も試行するのを防ぐ, 後続の同様処理の連続試行を防ぐ ため 試行前にも更新する
- await Users.update(user.id, {
- lastFetchedAt: new Date(),
- });
-
- logger.info(`try resync: ${acctLower}`);
- const self = await resolveSelf(acctLower);
-
- if (user.uri !== self.href) {
- // if uri mismatch, Fix (user@host <=> AP's Person id(IRemoteUser.uri)) mapping.
- logger.info(`uri missmatch: ${acctLower}`);
- logger.info(`recovery missmatch uri for (username=${username}, host=${host}) from ${user.uri} to ${self.href}`);
-
- // validate uri
- const uri = new URL(self.href);
- if (uri.hostname !== host) {
- throw new Error(`Invalid uri`);
- }
-
- await Users.update({
- usernameLower,
- host: host
- }, {
- uri: self.href
- });
- } else {
- logger.info(`uri is fine: ${acctLower}`);
- }
-
- await updatePerson(self.href);
-
- logger.info(`return resynced remote user: ${acctLower}`);
- return await Users.findOne({ uri: self.href }).then(u => {
- if (u == null) {
- throw new Error('user not found');
- } else {
- return u;
- }
- });
- }
-
- logger.info(`return existing remote user: ${acctLower}`);
- return user;
-}
-
-async function resolveSelf(acctLower: string) {
- logger.info(`WebFinger for ${chalk.yellow(acctLower)}`);
- const finger = await webFinger(acctLower).catch(e => {
- logger.error(`Failed to WebFinger for ${chalk.yellow(acctLower)}: ${ e.statusCode || e.message }`);
- throw new Error(`Failed to WebFinger for ${acctLower}: ${ e.statusCode || e.message }`);
- });
- const self = finger.links.find(link => link.rel != null && link.rel.toLowerCase() === 'self');
- if (!self) {
- logger.error(`Failed to WebFinger for ${chalk.yellow(acctLower)}: self link not found`);
- throw new Error('self link not found');
- }
- return self;
-}