package org.kvj.lima1.sync.controller.net; import java.io.InputStream; import java.util.HashMap; import java.util.Map; import org.json.JSONObject; import org.kvj.lima1.sync.controller.net.NetTransport.NetTransportException; import org.kvj.lima1.sync.controller.net.NetTransport.RequestType; import android.text.TextUtils; public class OAuthProvider { public static interface OAuthProviderListener { public void onNeedToken(); } private NetTransport transport; private String appID; private String token; private OAuthProviderListener listener; public OAuthProvider(NetTransport transport, String appID, String token, OAuthProviderListener listener) { this.transport = transport; this.appID = appID; this.token = token; this.listener = listener; } public JSONObject rest(String app, String path, Object body) throws NetTransportException { try { String uri = String.format("%sapp=%s&oauth_token=%s", path, app, token); return transport.request(uri, null == body ? RequestType.Get : RequestType.Post, body, null == body ? null : "text/plain; charset=utf-8"); } catch (NetTransportException e) { if (e.getCode() == 401) { listener.onNeedToken(); } throw e; } } public InputStream raw(String app, String path, Object body) throws NetTransportException { try { String uri = String.format("%sapp=%s&oauth_token=%s", path, app, token); return transport.rawRequest(uri, null == body ? RequestType.Get : RequestType.Post, body, null == body ? null : "text/plain; charset=utf-8"); } catch (NetTransportException e) { if (e.getCode() == 401) { listener.onNeedToken(); } throw e; } } public String tokenByUsernamePassword(String username, String password) throws NetTransportException { Map<String, String> params = new HashMap<String, String>(); params.put("username", username); params.put("password", password); params.put("client_id", appID); params.put("grant_type", "password"); JSONObject json = transport.request("/token", RequestType.Post, params, null); String t = json.optString("access_token", ""); if (!TextUtils.isEmpty(t)) { token = t; return t; } throw new NetTransportException(401, "No token provided", null); } }