owncloud/core

View on GitHub
apps/files_external/js/gdrive.js

Summary

Maintainability
A
0 mins
Test Coverage
$(document).ready(function() {
    var backendId = 'googledrive';
    var backendUrl = OC.generateUrl('apps/files_external/ajax/oauth2.php');

    function generateUrl($tr) {
        // no mapping between client ID and Google 'project', so we always load the same URL
        return 'https://console.developers.google.com/';
    }

    OCA.External.Settings.mountConfig.whenSelectBackend(function($tr, backend, onCompletion) {
        if (backend === backendId) {
            var backendEl = $tr.find('.backend');
            var el = $(document.createElement('a'))
                .attr('href', generateUrl($tr))
                .attr('target', '_blank')
                .attr('title', t('files_external', 'Google Drive App Configuration'))
                .addClass('icon-settings svg')
            ;
            el.on('click', function(event) {
                var a = $(event.target);
                a.attr('href', generateUrl($(this).closest('tr')));
            });
            el.tooltip({placement: 'top'});
            backendEl.append(el);

            /**
             * ------- OAUTH2 Events ----------
             *
             * The files_external_{backendId} app's CUSTOM JS should handle the OAuth2 events itself
             * instead on relying on the core for the implementation. These two functions
             * [1] OCA.External.Settings.OAuth2.getAuthUrl, [2] OCA.External.Settings.OAuth2.verifyCode
             * abstract away the details of sending the request to backend for getting the AuthURL or
             * verifying the code, mounting the storage config etc
             */
            $tr.find('.configuration').on('oauth_step1', function (event, data) {
                if (data['backend_id'] !== backendId) {
                    return;    // means the trigger is not for this storage adapter
                }

                // Redirects the User on success else displays an alert (with error message sent by backend)
                OCA.External.Settings.OAuth2.getAuthUrl(backendUrl, data);
            });

            $tr.find('.configuration').on('oauth_step2', function (event, data) {
                if (data['backend_id'] !== backendId || data['code'] === undefined) {
                    return;        // means the trigger is not for this OAuth2 grant
                }

                OCA.External.Settings.OAuth2.verifyCode(backendUrl, data)
                    .fail(function (message) {
                        OC.dialogs.alert(message,
                            t('files_external', 'Error verifying OAuth2 Code for ' + backendId)
                        );
                    });
            });
        }
    });
});