dice-cyfronet/plgapp

View on GitHub
public/plgapp/plgdata.js

Summary

Maintainability
C
1 day
Test Coverage
/**
 * PLGData
 */

var PLGData = function () {
    var plgdataProxy = '/plgdata';
    var downloadPrefix = plgdataProxy + '/download';
    var uploadPrefix = plgdataProxy + '/upload';

    //TODO: use parser error from PlgApp
    var parseError = function (xhr, status, error) {
        var data = xhr.responseText;
        try {
            data = JSON.parse(data);
        } catch (err) {
        }
        return new AppError(status + ' ' + xhr.status + ' ' + error, data);
    };

    var getHome = function (userLogin) {
        return '/people/' + userLogin + '/';
    };

    var expandPath = function (path, login) {
        if (path.length > 0 && path.charAt(0) == '/') {
            return path;
        } else {
            if (path.length > 1 && path.slice(0, 2) == '~/') {
                path = path.slice(2);
            }
            return getHome(login) + path;
        }
    };

    this.generatePath = function (cb, path, prefix) {
        plgapp.getInfo(function (err, login, token) {
            if (err) {
                cb(err);
                return;
            }
            cb(null, prefix + expandPath(path, login));
        });
    };

    this.generateDownloadPath = function (cb, path) {
        this.generatePath(cb, path, downloadPrefix);
    };

    this.generateUploadPath = function (cb, path) {
        this.generatePath(cb, path, uploadPrefix);
    };

    this.mkdir = function (cb, path) {

        var success = function (data, status) {
            if (cb !== undefined) {
                cb(null);
            }
        };
        var error = function (xhr, status, error) {
            if (cb !== undefined) {
                if (xhr.status == 200) {
                    //ignore json parse errors of empty response
                    cb(null);
                } else {
                    cb(parseError(xhr, status, error));
                }
            }
        };

        var doRequest = function (userLogin, token) {
            $.ajax({
                url: plgdataProxy + '/mkdir' + expandPath(path, userLogin),
                type: 'POST',
                headers: {'X-CSRF-Token': token},
                contentType: 'application/json',
                data: JSON.stringify({recursive: 'true'}),
                success: success,
                error: error
            });
        };

        plgapp.getInfo(function (err, login, token) {
            if (err) {
                cb(err);
                return;
            }
            doRequest(login, token);
        });
    };
};

var plgdata = new PLGData();