Lidarr/frontend/src/Store/Actions/oAuthActionHandlers.js

82 lines
1.8 KiB
JavaScript

/* eslint callback-return: 0 */
import _ from 'lodash';
import $ from 'jquery';
import requestAction from 'Utilities/requestAction';
import * as types from './actionTypes';
import { setOAuthValue } from './oAuthActions';
function showOAuthWindow(url) {
const deferred = $.Deferred();
const selfWindow = window;
window.open(url);
selfWindow.onCompleteOauth = function(query, callback) {
delete selfWindow.onCompleteOauth;
const queryParams = {};
const splitQuery = query.substring(1).split('&');
_.each(splitQuery, (param) => {
const paramSplit = param.split('=');
queryParams[paramSplit[0]] = paramSplit[1];
});
callback();
deferred.resolve(queryParams);
};
return deferred.promise();
}
const oAuthActionHandlers = {
[types.START_OAUTH]: function(payload) {
return (dispatch, getState) => {
const actionPayload = {
action: 'startOAuth',
queryParams: { callbackUrl: `${window.location.origin}/oauth.html` },
...payload
};
dispatch(setOAuthValue({
authorizing: true
}));
const promise = requestAction(actionPayload)
.then((response) => {
return showOAuthWindow(response.oauthUrl);
})
.then((queryParams) => {
return requestAction({
action: 'getOAuthToken',
queryParams,
...payload
});
})
.then((response) => {
const {
accessToken,
accessTokenSecret
} = response;
dispatch(setOAuthValue({
authorizing: false,
accessToken,
accessTokenSecret
}));
});
promise.fail(() => {
dispatch(setOAuthValue({
authorizing: false
}));
});
};
}
};
export default oAuthActionHandlers;