Package co.arcs.groove.thresher

Source Code of co.arcs.groove.thresher.RequestBuilder

package co.arcs.groove.thresher;

import com.belladati.httpclientandroidlib.client.methods.HttpPost;
import com.belladati.httpclientandroidlib.entity.StringEntity;
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.google.common.base.Charsets;
import com.google.common.base.Joiner;

/**
* Builder class for API requests that depend on a valid {@link Session}.
*/
abstract class RequestBuilder {

    final String method;
    final boolean secure;

    RequestBuilder(String method, boolean secure) {
        this.method = method;
        this.secure = secure;
    }

    HttpPost build(Session session) {
        // Build JSON payload
        JsonNodeFactory nodeFactory = JsonNodeFactory.instance;
        ObjectNode rootNode = nodeFactory.objectNode();
        {
            // Header
            ObjectNode header = nodeFactory.objectNode();
            header.put("client", "mobileshark");
            header.put("clientRevision", "20120830");
            header.put("country", session.getCountry());
            header.put("privacy", 0);
            header.put("session", session.getPhpSession());
            header.put("token", signRequest(method, session.getCommsToken()));
            header.put("uuid", session.getUuid());
            rootNode.put("header", header);

            // Method
            rootNode.put("method", method);

            // Parameters
            ObjectNode parameters = nodeFactory.objectNode();
            populateParameters(session, parameters);
            if (parameters.size() > 0) {
                rootNode.put("parameters", parameters);
            }
        }

        // Build request object
        String url = (secure ? "https" : "http") + "://" + Client.DOMAIN + "/more.php#" + method;
        HttpPost httpRequest = new HttpPost(url);
        httpRequest.setEntity(new StringEntity(rootNode.toString(), Charsets.UTF_8));
        return httpRequest;
    }

    static String signRequest(String method, String commsToken) {
        String salt = "gooeyFlubber";
        String rand = Utils.randHexChars(6);
        String s = Joiner.on(':').join(method, commsToken, salt, rand);
        return rand + DigestUtils.shaHex(s);
    }

    abstract void populateParameters(Session session, ObjectNode parameters);
}
TOP

Related Classes of co.arcs.groove.thresher.RequestBuilder

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.