owncloud/core

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

Summary

Maintainability
A
2 hrs
Test Coverage
$(document).ready(function() {

    function displayGranted($tr) {
        $tr.find('.configuration input.auth-param').attr('disabled', 'disabled').addClass('disabled-success');
    }

    OCA.External.Settings.mountConfig.whenSelectAuthMechanism(function($tr, authMechanism, scheme, onCompletion) {
        if (authMechanism === 'oauth1::oauth1') {
            var config = $tr.find('.configuration');
            config.append($(document.createElement('input'))
                .addClass('button auth-param')
                .attr('type', 'button')
                .attr('value', t('files_external', 'Grant access'))
                .attr('name', 'oauth1_grant')
            );

            onCompletion.then(function() {
                var configured = $tr.find('[data-parameter="configured"]');
                if ($(configured).val() == 'true') {
                    displayGranted($tr);
                } else {
                    var app_key = $tr.find('.configuration [data-parameter="app_key"]').val();
                    var app_secret = $tr.find('.configuration [data-parameter="app_secret"]').val();
                    if (app_key != '' && app_secret != '') {
                        var pos = window.location.search.indexOf('oauth_token') + 12;
                        var token = $tr.find('.configuration [data-parameter="token"]');
                        if (pos != -1 && window.location.search.substr(pos, $(token).val().length) == $(token).val()) {
                            var token_secret = $tr.find('.configuration [data-parameter="token_secret"]');
                            var statusSpan = $tr.find('.status span');
                            statusSpan.removeClass();
                            statusSpan.addClass('waiting');
                            $.post(OC.filePath('files_external', 'ajax', 'oauth1.php'), { step: 2, app_key: app_key, app_secret: app_secret, request_token: $(token).val(), request_token_secret: $(token_secret).val() }, function(result) {
                                if (result && result.status == 'success') {
                                    $(token).val(result.access_token);
                                    $(token_secret).val(result.access_token_secret);
                                    $(configured).val('true');
                                    OCA.External.Settings.mountConfig.saveStorageConfig($tr, function(status) {
                                        if (status) {
                                            displayGranted($tr);
                                        }
                                    });
                                } else {
                                    OC.dialogs.alert(result.data.message, t('files_external', 'Error configuring OAuth1'));
                                }
                            });
                        }
                    }
                }
            });
        }
    });

    $('#externalStorage').on('click', '[name="oauth1_grant"]', function(event) {
        event.preventDefault();
        var tr = $(this).parent().parent();
        var app_key = $(this).parent().find('[data-parameter="app_key"]').val();
        var app_secret = $(this).parent().find('[data-parameter="app_secret"]').val();
        if (app_key != '' && app_secret != '') {
            var configured = $(this).parent().find('[data-parameter="configured"]');
            var token = $(this).parent().find('[data-parameter="token"]');
            var token_secret = $(this).parent().find('[data-parameter="token_secret"]');
            $.post(OC.filePath('files_external', 'ajax', 'oauth1.php'), { step: 1, app_key: app_key, app_secret: app_secret, callback: location.protocol + '//' + location.host + location.pathname + '?sectionid=storage' }, function(result) {
                if (result && result.status == 'success') {
                    $(configured).val('false');
                    $(token).val(result.data.request_token);
                    $(token_secret).val(result.data.request_token_secret);
                    OCA.External.Settings.mountConfig.saveStorageConfig(tr, function() {
                        window.location = result.data.url;
                    });
                } else {
                    OC.dialogs.alert(result.data.message, t('files_external', 'Error configuring OAuth1'));
                }
            });
        } else {
            OC.dialogs.alert(
                t('files_external', 'Please provide a valid app key and secret.'),
                t('files_external', 'Error configuring OAuth1')
            );
        }
    });

});