From 92afd296509de82e7550f67064b032db916b1f63 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Fri, 26 Aug 2016 19:12:19 +0200 Subject: The frontend will now be an OAuth app, auto-authorized. The frontend will use an access token for API requests Adding better errors for the API controllers, posting a simple status works from the frontend now --- app/assets/javascripts/components/actions/meta.jsx | 8 ++++ .../javascripts/components/actions/statuses.jsx | 56 ++++++++++++++++++++-- 2 files changed, 60 insertions(+), 4 deletions(-) create mode 100644 app/assets/javascripts/components/actions/meta.jsx (limited to 'app/assets/javascripts/components/actions') diff --git a/app/assets/javascripts/components/actions/meta.jsx b/app/assets/javascripts/components/actions/meta.jsx new file mode 100644 index 000000000..1b64db1c2 --- /dev/null +++ b/app/assets/javascripts/components/actions/meta.jsx @@ -0,0 +1,8 @@ +export const SET_ACCESS_TOKEN = 'SET_ACCESS_TOKEN'; + +export function setAccessToken(token) { + return { + type: SET_ACCESS_TOKEN, + token: token + }; +} diff --git a/app/assets/javascripts/components/actions/statuses.jsx b/app/assets/javascripts/components/actions/statuses.jsx index fece257d5..45d62fab2 100644 --- a/app/assets/javascripts/components/actions/statuses.jsx +++ b/app/assets/javascripts/components/actions/statuses.jsx @@ -2,7 +2,11 @@ import fetch from 'isomorphic-fetch' export const SET_TIMELINE = 'SET_TIMELINE'; export const ADD_STATUS = 'ADD_STATUS'; -export const PUBLISH = 'PUBLISH'; + +export const PUBLISH = 'PUBLISH'; +export const PUBLISH_START = 'PUBLISH_START'; +export const PUBLISH_SUCC = 'PUBLISH_SUCC'; +export const PUBLISH_ERROR = 'PUBLISH_ERROR'; export function setTimeline(timeline, statuses) { return { @@ -20,14 +24,58 @@ export function addStatus(timeline, status) { }; } +export function publishStart() { + return { + type: PUBLISH_START + }; +} + +export function publishError(error) { + return { + type: PUBLISH_ERROR, + error: error + }; +} + +export function publishSucc(status) { + return { + type: PUBLISH_SUCC, + status: status + }; +} + export function publish(text, in_reply_to_id) { - return function (dispatch) { + return function (dispatch, getState) { + const access_token = getState().getIn(['meta', 'access_token']); + + var data = new FormData(); + + data.append('status', text); + + if (in_reply_to_id !== null) { + data.append('in_reply_to_id', in_reply_to_id); + } + + dispatch(publishStart()); + return fetch('/api/statuses', { - method: 'POST' + method: 'POST', + + headers: { + 'Authorization': `Bearer ${access_token}` + }, + + body: data }).then(function (response) { return response.json(); }).then(function (json) { - console.log(json); + if (json.error) { + dispatch(publishError(json.error)); + } else { + dispatch(publishSucc(json)); + } + }).catch(function (error) { + dispatch(publishError(error)); }); }; } -- cgit