From 583cd0d2129dc855e599f981d70e537feade1632 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?= Date: Tue, 18 Dec 2018 18:42:39 +0900 Subject: [PATCH] Add WebFinger support (#1498) * Add WebFinger support * Fix TS7006 * Follow lint * Fix TS7006 --- .../remote-subscribe.component.ts | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/client/src/app/shared/user-subscription/remote-subscribe.component.ts b/client/src/app/shared/user-subscription/remote-subscribe.component.ts index 7a81108cd..49722ce40 100644 --- a/client/src/app/shared/user-subscription/remote-subscribe.component.ts +++ b/client/src/app/shared/user-subscription/remote-subscribe.component.ts @@ -37,7 +37,24 @@ export class RemoteSubscribeComponent extends FormReactive implements OnInit { formValidated () { const address = this.form.value['text'] - const [ , hostname ] = address.split('@') - window.open(`https://${hostname}/authorize_interaction?acct=${this.account}`) + const [ username, hostname ] = address.split('@') + + fetch(`https://${hostname}/.well-known/webfinger?resource=acct:${username}@${hostname}`) + .then(response => response.json()) + .then(data => new Promise((resolve, reject) => { + if (data && Array.isArray(data.links)) { + const link: { + template: string + } = data.links.find((link: any) => + link && typeof link.template === 'string' && link.rel === 'http://ostatus.org/schema/1.0/subscribe') + + if (link && link.template.includes('{uri}')) { + resolve(link.template.replace('{uri}', `acct:${this.account}`)) + } + } + reject() + })) + .then(window.open) + .catch(() => window.open(`https://${hostname}/authorize_interaction?acct=${this.account}`)) } } -- 2.25.1