1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- // @flow
-
- import { Dropbox } from 'dropbox';
-
- import {
- getJitsiMeetGlobalNS,
- getLocationContextRoot,
- parseStandardURIString
- } from '../base/util';
- import { parseURLParams } from '../base/config';
-
- import { UPDATE_DROPBOX_TOKEN } from './actionTypes';
-
- /**
- * Executes the oauth flow.
- *
- * @param {string} authUrl - The URL to oauth service.
- * @returns {Promise<string>} - The URL with the authorization details.
- */
- function authorize(authUrl: string): Promise<string> {
- const windowName = `oauth${Date.now()}`;
- const gloabalNS = getJitsiMeetGlobalNS();
-
- gloabalNS.oauthCallbacks = gloabalNS.oauthCallbacks || {};
-
- return new Promise(resolve => {
- const popup = window.open(authUrl, windowName);
-
- gloabalNS.oauthCallbacks[windowName] = () => {
- const returnURL = popup.location.href;
-
- popup.close();
- delete gloabalNS.oauthCallbacks.windowName;
- resolve(returnURL);
- };
- });
- }
-
- /**
- * Action to authorize the Jitsi Recording app in dropbox.
- *
- * @returns {Function}
- */
- export function authorizeDropbox() {
- return (dispatch: Function, getState: Function) => {
- const state = getState();
- const { locationURL } = state['features/base/connection'];
- const { dropbox } = state['features/base/config'];
- const redirectURI = `${locationURL.origin
- + getLocationContextRoot(locationURL)}static/oauth.html`;
- const dropboxAPI = new Dropbox({ clientId: dropbox.clientId });
- const url = dropboxAPI.getAuthenticationUrl(redirectURI);
-
- authorize(url).then(returnUrl => {
- const params
- = parseURLParams(parseStandardURIString(returnUrl), true) || {};
-
- dispatch(updateDropboxToken(params.access_token));
- });
- };
- }
-
- /**
- * Action to update the dropbox access token.
- *
- * @param {string} token - The new token.
- * @returns {{
- * type: UPDATE_DROPBOX_TOKEN,
- * token: string
- * }}
- */
- export function updateDropboxToken(token: string) {
- return {
- type: UPDATE_DROPBOX_TOKEN,
- token
- };
- }
|