add /friends page
This commit is contained in:
parent
c49a40df01
commit
157e47d3ef
6 changed files with 293 additions and 10 deletions
|
|
@ -14,6 +14,7 @@ export default createStore({
|
|||
keypair: null,
|
||||
remember: false,
|
||||
home_servers: null,
|
||||
all_friends_servers: null,
|
||||
resolver: new FallBackResolver(),
|
||||
unreachable_neighbors: new NeighborsCache(),
|
||||
},
|
||||
|
|
@ -42,9 +43,15 @@ export default createStore({
|
|||
}
|
||||
localStorage.setItem('remember', remember);
|
||||
},
|
||||
setFriends(state, friends) {
|
||||
state.friends = friends;
|
||||
},
|
||||
setHomeServers(state, home_servers) {
|
||||
state.home_servers = home_servers;
|
||||
},
|
||||
setAllFriendsServers(state, servers) {
|
||||
state.all_friends_servers = servers;
|
||||
},
|
||||
logout(state) {
|
||||
state.user = null;
|
||||
state.token = null;
|
||||
|
|
@ -101,9 +108,79 @@ export default createStore({
|
|||
commit('setHomeServers', promise)
|
||||
return promise
|
||||
},
|
||||
async getAllKnownServers({state, dispatch, commit}) {
|
||||
const friends = await dispatch('fetchFriends')
|
||||
if (state.all_friends_servers)
|
||||
return state.all_friends_servers
|
||||
const promise = (async () => {
|
||||
const servers = new ServerSetUnion([])
|
||||
const home = await dispatch('getHomeServers')
|
||||
servers.add(home)
|
||||
for (const friend of friends) {
|
||||
const s = await dispatch('lookupServer', {username: friend.username})
|
||||
servers.add(new ServerSet(s, state.unreachable_neighbors))
|
||||
}
|
||||
return servers
|
||||
})()
|
||||
commit('setAllFriendsServers', promise)
|
||||
return promise
|
||||
},
|
||||
async getFriendServers({state, dispatch, commit}, {username}) {
|
||||
return dispatch('lookupServer', {username}).then(servers => new ServerSet(servers, state.unreachable_neighbors))
|
||||
},
|
||||
async fetchFriends({commit, dispatch, getters, state}) {
|
||||
const servers = await dispatch('getHomeServers')
|
||||
const data = await servers.get(getters.signAuth, '/api/friends/')
|
||||
commit('setFriends', data)
|
||||
return data
|
||||
},
|
||||
async fetchFriendRequests({state, dispatch, getters}) {
|
||||
const servers = await dispatch('getHomeServers')
|
||||
return await servers.get(getters.signAuth, '/api/friendrequests/')
|
||||
},
|
||||
async requestFriend({state, dispatch, getters}, {username}) {
|
||||
if (username in state.friends) {
|
||||
return true;
|
||||
}
|
||||
const home_servers = await dispatch('getHomeServers')
|
||||
const home_reply = await home_servers.post(getters.signAuth, '/api/friendrequests/', {
|
||||
befriender: state.user,
|
||||
befriendee: username
|
||||
})
|
||||
if (home_reply.status !== 'pending' || !home_reply.secret)
|
||||
return false;
|
||||
|
||||
const befriendee_servers = await dispatch('getFriendServers', {username})
|
||||
const ext_reply = await befriendee_servers.post(getters.signAuth, '/api/friendrequests/', {
|
||||
befriender: state.user,
|
||||
befriendee: username,
|
||||
befriender_key: nacl.to_hex(state.keypair.signPk),
|
||||
secret: home_reply.secret
|
||||
})
|
||||
return true;
|
||||
},
|
||||
async acceptFriend({state, dispatch, getters}, {id, secret, befriender}) {
|
||||
const home_servers = await dispatch('getHomeServers')
|
||||
const home_reply = await home_servers.post(getters.signAuth, '/api/friends/', {
|
||||
friend_request_id: id, secret: secret
|
||||
})
|
||||
const ext_servers = await dispatch('getFriendServers', {username: befriender})
|
||||
const ext_reply = await ext_servers.post(getters.signAuth, '/api/friendrequests/', {
|
||||
befriender: state.user,
|
||||
befriendee: befriender,
|
||||
befriender_key: nacl.to_hex(state.keypair.signPk),
|
||||
secret: secret
|
||||
})
|
||||
return true
|
||||
},
|
||||
async declineFriend({state, dispatch, getters}, {id}) {
|
||||
const servers = await dispatch('getHomeServers')
|
||||
return await servers.delete(getters.signAuth, '/api/friendrequests/' + id + '/')
|
||||
},
|
||||
async dropFriend({state, dispatch, getters}, {id}) {
|
||||
const servers = await dispatch('getHomeServers')
|
||||
return await servers.delete(getters.signAuth, '/api/friends/' + id + '/')
|
||||
},
|
||||
},
|
||||
getters: {
|
||||
isLoggedIn(state) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue