71 lines
2.0 KiB
JavaScript
71 lines
2.0 KiB
JavaScript
import googleHelper from './providers/helpers/googleHelper';
|
|
import githubHelper from './providers/helpers/githubHelper';
|
|
import store from '../store';
|
|
import dropboxHelper from './providers/helpers/dropboxHelper';
|
|
import constants from '../data/constants';
|
|
|
|
const promised = {};
|
|
|
|
const parseUserId = (userId) => {
|
|
const prefix = userId[2] === ':' && userId.slice(0, 2);
|
|
const type = prefix && constants.userIdPrefixes[prefix];
|
|
return type ? [type, userId.slice(3)] : ['google', userId];
|
|
};
|
|
|
|
export default {
|
|
addInfo({ id, name, imageUrl }) {
|
|
promised[id] = true;
|
|
store.commit('userInfo/addItem', { id, name, imageUrl });
|
|
},
|
|
async getInfo(userId) {
|
|
if (userId && !promised[userId]) {
|
|
const [type, sub] = parseUserId(userId);
|
|
|
|
// Try to find a token with this sub
|
|
const token = store.getters[`data/${type}TokensBySub`][sub];
|
|
if (token) {
|
|
store.commit('userInfo/addItem', {
|
|
id: userId,
|
|
name: token.name,
|
|
});
|
|
}
|
|
|
|
// Get user info from provider
|
|
if (!store.state.offline) {
|
|
promised[userId] = true;
|
|
switch (type) {
|
|
case 'dropbox': {
|
|
const dropboxToken = Object.values(store.getters['data/dropboxTokensBySub'])[0];
|
|
try {
|
|
await dropboxHelper.getAccount(dropboxToken, sub);
|
|
} catch (err) {
|
|
if (!token || err.status !== 404) {
|
|
promised[userId] = false;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
case 'github':
|
|
try {
|
|
await githubHelper.getUser(sub);
|
|
} catch (err) {
|
|
if (err.status !== 404) {
|
|
promised[userId] = false;
|
|
}
|
|
}
|
|
break;
|
|
case 'google':
|
|
default:
|
|
try {
|
|
await googleHelper.getUser(sub);
|
|
} catch (err) {
|
|
if (err.status !== 404) {
|
|
promised[userId] = false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
};
|