Code owners
Assign users and groups as approvers for specific file changes. Learn more.
agent.js 3.03 KiB
import superagentPromise from 'superagent-promise';
import _superagent from 'superagent';
const superagent = superagentPromise(_superagent, global.Promise);
//const API_ROOT = process.env.REACT_APP_API_ROOT || 'http://vm3733.kaj.pouta.csc.fi:30000/api'
// IP given by Kubernetes cluster
const API_ROOT = process.env.REACT_APP_API_ROOT || 'http://192.168.1.241:3000/api'
const encode = encodeURIComponent;
const responseBody = res => res.body;
let token = null;
const tokenPlugin = req => {
if (token) {
req.set('authorization', `Token ${token}`);
}
}
const requests = {
del: (url, body) =>
superagent.del(`${API_ROOT}${url}`, body).use(tokenPlugin).then(responseBody),
get: url =>
superagent.get(`${API_ROOT}${url}`).use(tokenPlugin).then(responseBody),
put: (url, body) =>
superagent.put(`${API_ROOT}${url}`, body).use(tokenPlugin).then(responseBody),
post: (url, body) =>
superagent.post(`${API_ROOT}${url}`, body).use(tokenPlugin).then(responseBody)
};
const Auth = {
current: () =>
requests.get('/user'),
login: (email, password) =>
requests.post('/users/login', { user: { email, password } }),
register: (username, email, password) =>
requests.post('/users', { user: { username, email, password } }),
save: user =>
requests.put('/user', { user }),
delete: user =>
requests.del('/user', { user })
};
const Tags = {
getAll: () => requests.get('/tags')
};
//feed offset was 0
const limit = (count, p) => `limit=${count}&offset=${p ? p * count : 0}`;
const omitSlug = article => Object.assign({}, article, { slug: undefined })
const Articles = {
all: page =>
requests.get(`/articles?${limit(10, page)}`),
byAuthor: (author, page) =>
requests.get(`/articles?author=${encode(author)}&${limit(5, page)}`),
byTag: (tag, page) =>
requests.get(`/articles?tag=${encode(tag)}&${limit(10, page)}`),
del: slug =>
requests.del(`/articles/${slug}`),
favorite: slug =>
requests.post(`/articles/${slug}/favorite`),
favoritedBy: (author, page) =>
requests.get(`/articles?favorited=${encode(author)}&${limit(5, page)}`),
feed: (page) =>
requests.get(`/articles/feed?${limit(10, page)}`),
get: slug =>
requests.get(`/articles/${slug}`),
unfavorite: slug =>
requests.del(`/articles/${slug}/favorite`),
update: article =>
requests.put(`/articles/${article.slug}`, { article: omitSlug(article) }),
create: article =>
requests.post('/articles', { article })
};
const Comments = {
create: (slug, comment) =>
requests.post(`/articles/${slug}/comments`, { comment }),
delete: (slug, commentId) =>
requests.del(`/articles/${slug}/comments/${commentId}`),
forArticle: slug =>
requests.get(`/articles/${slug}/comments`)
};
const Profile = {
follow: username =>
requests.post(`/profiles/${username}/follow`),
get: username =>
requests.get(`/profiles/${username}`),
unfollow: username =>
requests.del(`/profiles/${username}/follow`)
};
export default {
Articles,
Auth,
Comments,
Profile,
Tags,
setToken: _token => { token = _token; }
};