package com.mediafire.sdk.requests;
import com.mediafire.sdk.util.HashUtil;
import com.mediafire.sdk.util.RequestUtil;
import java.util.*;
/**
* ApiPostRequest is used to make api requests via POST
*/
public class ApiPostRequest {
private static final String DEFAULT_SCHEME = "https";
private static final String DEFAULT_DOMAIN = "www.mediafire.com";
private final String scheme;
private final String domain;
private final String path;
private final boolean requiresToken;
private final LinkedHashMap<String, Object> query = new LinkedHashMap<String, Object>();
public ApiPostRequest(String scheme, String domain, String path, LinkedHashMap<String, Object> query, boolean requiresToken) {
this.scheme = scheme;
this.domain = domain;
this.path = path;
this.query.putAll(query);
if (!this.query.containsKey("response_format")) {
this.query.put("response_format", "json");
} else if (!"json".equals(this.query.get("response_format"))) {
this.query.put("response_format", "json");
}
this.requiresToken = requiresToken;
}
public ApiPostRequest(String scheme, String domain, String path, LinkedHashMap<String, Object> query) {
this(scheme, domain, path, query, true);
}
public ApiPostRequest(String path, LinkedHashMap<String, Object> query, boolean requiresToken) {
this(DEFAULT_SCHEME, DEFAULT_DOMAIN, path, query, requiresToken);
}
public ApiPostRequest(String path, LinkedHashMap<String, Object> query) {
this(DEFAULT_SCHEME, DEFAULT_DOMAIN, path, query);
}
public ApiPostRequest(ApiPostRequest request) {
this(request.scheme, request.domain, request.path, request.query);
}
public ApiPostRequest(ApiPostRequest request, String alternateDomain) {
this(request.scheme, alternateDomain, request.path, request.query);
}
public String getPath() {
return path;
}
public String getDomain() {
return domain;
}
public String getScheme() {
return scheme;
}
public boolean requiresToken() {
return requiresToken;
}
public void addSessionToken(String token) {
query.put("session_token", token);
}
public void addSignature(String signature) {
query.put("signature", signature);
}
public String getQueryString(boolean encodeValues) {
return RequestUtil.makeQueryStringFromMap(query, encodeValues);
}
public static ApiPostRequest newSessionRequestWithEmail(String apiKey, String appId, String email, String password) {
LinkedHashMap<String, Object> query = getBaseParamsForNewSessionRequest(appId);
query.put("email", email);
query.put("password", password);
return getApiRequestFromUserCredentials(apiKey, appId, query, email + password);
}
public static ApiPostRequest newSessionRequestWithEkey(String apiKey, String appId, String ekey, String password) {
LinkedHashMap<String, Object> query = getBaseParamsForNewSessionRequest(appId);
query.put("ekey", ekey);
query.put("password", password);
return getApiRequestFromUserCredentials(apiKey, appId, query, ekey + password);
}
public static ApiPostRequest newSessionRequestWithFacebook(String apiKey, String appId, String facebookAccessToken) {
LinkedHashMap<String, Object> query = getBaseParamsForNewSessionRequest(appId);
query.put("fb_access_token", facebookAccessToken);
return getApiRequestFromUserCredentials(apiKey, appId, query, facebookAccessToken);
}
private static LinkedHashMap<String, Object> getBaseParamsForNewSessionRequest(String appId) {
LinkedHashMap<String, Object> query = new LinkedHashMap<String, Object>();
query.put("application_id", appId);
query.put("token_version", 2);
query.put("response_format", "json");
return query;
}
private static ApiPostRequest getApiRequestFromUserCredentials(String apiKey, String appId, LinkedHashMap<String, Object> query, String userPortion) {
if (apiKey != null) {
query.put("signature", HashUtil.sha1(userPortion + appId + apiKey));
} else {
query.put("signature", HashUtil.sha1(userPortion + appId));
}
return new ApiPostRequest("/api/1.4/user/get_session_token.php", query);
}
}