diff --git a/frontend/src/federation.js b/frontend/src/federation.js index 90f3085..b91b5ea 100644 --- a/frontend/src/federation.js +++ b/frontend/src/federation.js @@ -6,7 +6,7 @@ class ServerSet { if (!unreachable_neighbors || typeof unreachable_neighbors.queryUnreachable !== 'function' || typeof unreachable_neighbors.unreachable !== 'function') { throw new Error('no unreachable_neighbors') } - this.servers = [... new Set(servers)] // deduplicate + this.servers = [...new Set(servers)] // deduplicate this.unreachable_neighbors = unreachable_neighbors; } @@ -188,11 +188,27 @@ class ServerSetUnion { this.serverSets.push(serverset) } + async get(auth, target) { + try { + const ret = await this.serverSets.reduce(async (acc, serverset) => { + return acc.then(async (acc) => { + return acc.concat(await serverset.get(auth, target)) + }) + }, Promise.resolve([])) + return ret + } catch (e) { + throw new Error('all servers failed') + } + } + async post(auth, target, data) { try { - return await this.serverSets.reduce(async (acc, serverset) => { - return await serverset.post(auth, target, data) - }, Promise.resolve()) + const ret = await this.serverSets.reduce(async (acc, serverset) => { + return acc.then(async (acc) => { + return acc.concat(await serverset.post(auth, target, data)) + }) + }, Promise.resolve([])) + return ret } catch (e) { throw new Error('all servers failed') } @@ -200,29 +216,12 @@ class ServerSetUnion { async patch(auth, target, data) { try { - return await this.serverSets.reduce(async (acc, serverset) => { - return await serverset.patch(auth, target, data) - }, Promise.resolve()) - } catch (e) { - throw new Error('all servers failed') - } - } - - async get(auth, target) { - try { - return await this.serverSets.reduce(async (acc, serverset) => { - return await serverset.get(auth, target) - }, Promise.resolve()) - } catch (e) { - throw new Error('all servers failed') - } - } - - async delete(auth, target) { - try { - return await this.serverSets.reduce(async (acc, serverset) => { - return await serverset.delete(auth, target) - }, Promise.resolve()) + const ret = await this.serverSets.reduce(async (acc, serverset) => { + return acc.then(async (acc) => { + return acc.concat(await serverset.patch(auth, target, data)) + }) + }, Promise.resolve([])) + return ret } catch (e) { throw new Error('all servers failed') } @@ -230,9 +229,25 @@ class ServerSetUnion { async put(auth, target, data) { try { - return await this.serverSets.reduce(async (acc, serverset) => { - return await serverset.put(auth, target, data) - }, Promise.resolve()) + const ret = await this.serverSets.reduce(async (acc, serverset) => { + return acc.then(async (acc) => { + return acc.concat(await serverset.put(auth, target, data)) + }) + }, Promise.resolve([])) + return ret + } catch (e) { + throw new Error('all servers failed') + } + } + + async delete(auth, target) { + try { + const ret = await this.serverSets.reduce(async (acc, serverset) => { + return acc.then(async (acc) => { + return acc.concat(await serverset.delete(auth, target)) + }) + }, Promise.resolve([])) + return ret } catch (e) { throw new Error('all servers failed') } diff --git a/frontend/src/store.js b/frontend/src/store.js index 2b27fa0..29e6af3 100644 --- a/frontend/src/store.js +++ b/frontend/src/store.js @@ -126,7 +126,7 @@ export default createStore({ if (domain === 'localhost') return ['127.0.0.1:8000']; if (domain === 'example.com') - return ['10.23.42.128:8000','10.23.42.128:8000']; + return ['10.23.42.128:8000', '10.23.42.128:8000']; if (domain === 'example.jedi') return ['10.23.42.128:8000']; if (domain === 'example2.com') @@ -153,6 +153,8 @@ export default createStore({ const s = await dispatch('lookupServer', {username: friend.username}) servers.add(new ServerSet(s, state.unreachable_neighbors)) } + const home = await dispatch('getHomeServers') + servers.add(home) return servers })() commit('setAllFriendsServers', promise) diff --git a/frontend/src/views/Search.vue b/frontend/src/views/Search.vue index a951ed6..658fb0d 100644 --- a/frontend/src/views/Search.vue +++ b/frontend/src/views/Search.vue @@ -6,7 +6,7 @@