From dd4ca9432aff209d546d3e21e33ebb5ac6ff667c Mon Sep 17 00:00:00 2001 From: AkiraFukushima Date: Sat, 14 Sep 2019 22:22:43 +0900 Subject: [PATCH 1/2] refs #1028 Confirm ActivityPub instance to read host-meta before login --- src/renderer/store/Login.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/renderer/store/Login.ts b/src/renderer/store/Login.ts index 6ce8ee0d..75ce668c 100644 --- a/src/renderer/store/Login.ts +++ b/src/renderer/store/Login.ts @@ -46,9 +46,17 @@ const actions: ActionTree = { }, confirmInstance: async ({ commit }, domain: string): Promise => { commit(MUTATION_TYPES.CHANGE_SEARCHING, true) - await axios.get(`https://${domain}/api/v1/instance`).finally(() => { + // https://gist.github.com/okapies/60d62d0df0163bbfb4ab09c1766558e8 + // Check /.well-known/host-meta to confirm mastodon instance. + const res = await axios.get(`https://${domain}/.well-known/host-meta`).finally(() => { commit(MUTATION_TYPES.CHANGE_SEARCHING, false) }) + const parser = new DOMParser() + const dom = parser.parseFromString(res.data, 'text/xml') + const link = dom.getElementsByTagName('Link')[0].outerHTML + if (!link.includes(`https://${domain}/.well-known/webfinger`)) { + throw new Error('domain is not activity pub') + } commit(MUTATION_TYPES.CHANGE_INSTANCE, domain) return true } From 2a8f3ec226723e5b037ab81c780e84f553393aa3 Mon Sep 17 00:00:00 2001 From: AkiraFukushima Date: Sat, 14 Sep 2019 22:34:45 +0900 Subject: [PATCH 2/2] refs #1028 Fix mocked response for login confirm in tests --- spec/renderer/integration/store/Login.spec.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/spec/renderer/integration/store/Login.spec.ts b/spec/renderer/integration/store/Login.spec.ts index e2f13af5..421bdb84 100644 --- a/spec/renderer/integration/store/Login.spec.ts +++ b/spec/renderer/integration/store/Login.spec.ts @@ -42,10 +42,9 @@ describe('Login', () => { ipcMain.once('get-auth-url', event => { event.sender.send('error-get-auth-url', new Error()) }) - await store.dispatch('Login/fetchLogin', 'pleroma.io') - .catch((err: Error) => { - expect(err instanceof Error).toEqual(true) - }) + await store.dispatch('Login/fetchLogin', 'pleroma.io').catch((err: Error) => { + expect(err instanceof Error).toEqual(true) + }) }) }) describe('success', () => { @@ -72,9 +71,10 @@ describe('Login', () => { // https://github.com/facebook/jest/issues/6552 // https://github.com/kulshekhar/ts-jest/issues/828 const mockedAxios = axios as any - const res: Promise = new Promise(resolve => { + const res: Promise<{}> = new Promise<{}>(resolve => { resolve({ - data: 'test' + data: + '' }) }) mockedAxios.get.mockImplementation(() => res)