Stackedit/src/services/userSvc.js
2018-07-17 20:58:40 +01:00

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;
}
}
}
}
}
},
};