This commit is contained in:
j3d1 2023-05-31 20:43:14 +02:00
parent 7e8f984ee2
commit a1fd49c5d1
11 changed files with 406 additions and 214 deletions

View file

@ -2,7 +2,7 @@ import {createStore} from 'vuex';
import router from '@/router';
import FallBackResolver from "@/dns";
import NeighborsCache from "@/neigbors";
import {createSignAuth, createTokenAuth, createNullAuth, ServerSet} from "@/federation";
import {createSignAuth, createTokenAuth, createNullAuth, ServerSet, ServerSetUnion} from "@/federation";
export default createStore({
@ -50,26 +50,21 @@ export default createStore({
localStorage.setItem('remember', remember);
},
setInventoryItems(state, {url, items}) {
console.log('setInventoryItems', url, items)
state.item_map[url] = items;
},
setFriends(state, friends) {
state.friends = friends;
},
setHomeServers(state, home_servers) {
console.log('setHomeServer', home_servers)
state.home_servers = home_servers;
},
setAllFriendsServers(state, servers) {
console.log('setAllFriendsServers', servers)
state.all_friends_servers = servers;
},
setTags(state, tags) {
console.log('setTags', tags)
state.tags = tags;
},
setProperties(state, properties) {
console.log('setProperties', properties)
state.properties = properties;
},
logout(state) {
@ -131,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'];
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')
@ -149,13 +144,14 @@ export default createStore({
return promise
},
async getAllFriendsServers({state, dispatch, commit}) {
const friends = await dispatch('fetchFriends')
if (state.all_friends_servers)
return state.all_friends_servers
const promise = (async () => {
const servers = new ServerSet([], state.unreachable_neighbors)
for (const friend of state.friends) {
const s = await dispatch('lookupServer', {username: friend})
servers.add(s)
const servers = new ServerSetUnion([])
for (const friend of friends) {
const s = await dispatch('lookupServer', {username: friend.username})
servers.add(new ServerSet(s, state.unreachable_neighbors))
}
return servers
})()
@ -177,31 +173,24 @@ export default createStore({
},
async createInventoryItem({state, dispatch, getters}, item) {
const servers = await dispatch('getHomeServers')
const data = {...item, owned_amount: 1, availability_policy: 'friends', category: 'other'}
const data = {availability_policy: 'friends', category: 'other', ...item}
return await servers.post(getters.signAuth, '/api/inventory_items/', data)
},
async updateInventoryItem({state, dispatch, getters}, item) {
const servers = await dispatch('getHomeServers')
return await servers.patch(getters.signAuth, '/api/inventory_items/' + item.id + '/', item)
const data = {availability_policy: 'friends', category: 'other', ...item}
return await servers.patch(getters.signAuth, '/api/inventory_items/' + item.id + '/', data)
},
async deleteInventoryItem({state, dispatch, getters}, item) {
const servers = await dispatch('getHomeServers')
return await servers.delete(getters.signAuth, '/api/inventory_items/' + item.id + '/')
const ret = await servers.delete(getters.signAuth, '/api/inventory_items/' + item.id + '/')
dispatch('fetchInventoryItems')
return ret
},
async fetchSearchResults({state, dispatch, getters}, {query}) {
const servers = await dispatch('getAllFriendsServers')
return await servers.get(getters.signAuth, '/api/search/?query=' + query)
},
/*async searchInventoryItems() {
try {
const servers = await this.fetchFriends().then(friends => friends.map(friend => this.lookupServer({username: friend.name})))
const urls = servers.map(server => server.then(s => {
return {host: s, target: "/api/inventory_items/"}
}))
urls.map(url => url.then(u => this.apiFederatedGet(u).then(items => {
this.setInventoryItems({url: u.domain, items})
}).catch(e => {
}))) // TODO: handle error
} catch (e) {
console.error(e)
}
},*/
async fetchFriends({commit, dispatch, getters, state}) {
const servers = await dispatch('getHomeServers')
const data = await servers.get(getters.signAuth, '/api/friends/')
@ -252,7 +241,7 @@ export default createStore({
console.log('declining friend ' + args)
},
async fetchTags({state, commit, dispatch, getters}) {
if(state.last_load.tags > Date.now() - 1000 * 60 * 60 * 24) {
if (state.last_load.tags > Date.now() - 1000 * 60 * 60 * 24) {
return state.tags
}
const servers = await dispatch('getHomeServers')
@ -262,7 +251,7 @@ export default createStore({
return data
},
async fetchProperties({state, commit, dispatch, getters}) {
if(state.last_load.properties > Date.now() - 1000 * 60 * 60 * 24) {
if (state.last_load.properties > Date.now() - 1000 * 60 * 60 * 24) {
return state.properties
}
const servers = await dispatch('getHomeServers')
@ -270,6 +259,47 @@ export default createStore({
commit('setProperties', data)
state.last_load.properties = Date.now()
return data
},
async fetchCategories({state, commit, dispatch, getters}) {
if (state.last_load.categories > Date.now() - 1000 * 60 * 60 * 24) {
return state.categories
}
const servers = await dispatch('getHomeServers')
const data = await servers.get(getters.signAuth, '/api/categories/')
commit('setCategories', data)
state.last_load.categories = Date.now()
return data
},
async fetchAvailabilityPolicies({state, commit, dispatch, getters}) {
if (state.last_load.availability_policies > Date.now() - 1000 * 60 * 60 * 24) {
return state.availability_policies
}
const servers = await dispatch('getHomeServers')
const data = await servers.get(getters.signAuth, '/api/availability_policies/')
commit('setAvailabilityPolicies', data)
state.last_load.availability_policies = Date.now()
return data
},
async fetchInfo({state, commit, dispatch, getters}) {
const last_load_info = Math.min(
state.last_load.tags,
state.last_load.properties,
state.last_load.categories,
state.last_load.availability_policies)
if (last_load_info > Date.now() - 1000 * 60 * 60 * 24) {
return state.info
}
const servers = await dispatch('getHomeServers')
const data = await servers.get(getters.signAuth, '/api/info/')
commit('setTags', data.tags)
commit('setProperties', data.properties)
commit('setCategories', data.categories)
commit('setAvailabilityPolicies', data.availability_policies)
state.last_load.tags = Date.now()
state.last_load.properties = Date.now()
state.last_load.categories = Date.now()
state.last_load.availability_policies = Date.now()
return data
}
},
getters: {
@ -287,11 +317,9 @@ export default createStore({
return state.user !== null && state.token !== null;
},
signAuth(state) {
console.log('signAuth', state.user, state.keypair.signSk)
return createSignAuth(state.user, state.keypair.signSk)
},
tokenAuth(state) {
console.log('tokenAuth', state.token)
return createTokenAuth(state.token)
},
nullAuth(state) {