HookHub - Web Hooks Hub

Recently Invoked Web Hooks

/*
 * Configuration
 */

/* Set this to your Review Board server URL (without a trailing slash). */
var REVIEWBOARD_URL = "http://reviews.review-board.org"

/* The regular expression to match a review request ID. */
var REVIEW_REQUEST_RE = "Reviewed at:? " + REVIEWBOARD_URL + "/r/([0-9]+)/?";



/*
 * Everything below should be common and untouched.
 */
var errors = [];
var cookie = "";

function get_review_requests(request_data) {
    var review_requests = [];

    /* Look for all mentioned review requests in the commits. */
    for (var i = 0; i < request_data.commits.length; i++) {
        var re = new RegExp(REVIEW_REQUEST_RE, "i");
        var m = re.exec(request_data.commits[i].message);

        if (m != null) {
            review_requests.push(m[1]);
        }
    }

    return review_requests;
}

function report_error(text) {
    errors.push(text);
}

function api_post(url, post_data) {
    var serialized_post_data = (post_data ? http.data(post_data) : "");

    var response = http({
        method: "post",
        url: REVIEWBOARD_URL + url,
        data: serialized_post_data,
        headers: {
            "Cookie": cookie
        }
    });

    if (response.code != 200) {
        report_error("The Web Hook failed to login. Got a " +
                     response.code + " error from the server " +
                     "during login.");
        return null;
    }

    var response_data = eval("(" + response.body + ")");

    if (response_data.stat == "fail") {
        report_error("API call to " + url + " failed.\n\n" +
                     "Post data: " + serialized_post_data + "\n" +
                     "Error code: " + response_data.err.code + "\n" +
                     "Error text: " + response_data.err.msg + "\n" +
                     "Details:\n\n" + response.data);
        return null;
    }

    if (response.headers['Set-cookie']) {
        cookie = response.headers['Set-cookie'];
    }

    return response_data;
}

function login() {
    return api_post("/api/json/accounts/login/", {
        username: stash.config.reviewboard_user,
        password: stash.config.reviewboard_password        
    }) != null;
}

function set_submitted(review_request_id) {
    return api_post("/api/json/reviewrequests/" + review_request_id +
                    "/close/submitted/") != null;
}

function process_request() {
    var request_data = eval("(" + stash.params.payload + ")");
    var review_requests = get_review_requests(request_data);

    if (review_requests.length == 0) {
        return true;
    }

    if (!login()) {
        return false;
    }

    var success = true;

    for (var i = 0; i < review_requests.length; i++) {
        if (!set_submitted(review_requests[i])) {
            success = false;
        }
    }

    return success;
}


var success = process_request();

if (!success) {
    mail("GitHub to Review Board Web Hook Failure",
         "Errors:\n\n");// + errors.join("\n\n"));
    500;
} else {
    200;
}