package org.geogebra.desktop.move.ggtapi.models; import org.geogebra.common.move.ggtapi.models.ClientInfo; import org.geogebra.common.move.ggtapi.models.GeoGebraTubeAPI; import org.geogebra.common.move.ggtapi.models.GeoGebraTubeUser; import org.geogebra.common.move.ggtapi.models.json.JSONArray; import org.geogebra.common.move.ggtapi.models.json.JSONObject; import org.geogebra.common.move.ggtapi.models.json.JSONTokener; import org.geogebra.common.util.HttpRequest; import org.geogebra.desktop.util.HttpRequestD; /** * API Interface for GeoGebraTube requests and responses * * @author stefan * */ public class GeoGebraTubeAPID extends GeoGebraTubeAPI { @Override protected HttpRequest createHttpRequest() { return new HttpRequestD(); } /** * Get Singleton GeogebraTubeAPI * * @return GeogebraTubeAPI singleton */ public GeoGebraTubeAPID(boolean beta, ClientInfo client) { super(beta); this.client = client; // just for testing (or certificate emergency) // HttpRequestD.ignoreSSL(); } @Override public boolean parseUserDataFromResponse(GeoGebraTubeUser user, String responseStr) { try { JSONTokener tokener = new JSONTokener(responseStr); JSONObject response = new JSONObject(tokener); // Check if an error occurred if (response.has("error")) { return false; } JSONArray responseArray = response.getJSONObject("responses") .getJSONArray("response"); JSONObject userinfo = ((JSONObject) responseArray.get(0)) .getJSONObject("userinfo"); user.setUserId(userinfo.getInt("user_id")); user.setUserName(userinfo.getString("username")); user.setRealName(userinfo.getString("realname")); user.setIdentifier(userinfo.get("identifier").toString()); // Further fields are not parsed yet, because they are not needed // This is the complete response with all available fields: /* * <responses> <response> <userinfo> <user_id>4711</user_id> * <username>johndoe</username> * <ggt_profile_url>http://tube.geogebra.org/user/profile/id/4711 * </ggt_profile_url> <group>user</group> * <date_created>2012-09-18</date_created> <lang_ui>en</lang_ui> * <lang_content>en,en_US,it</lang_content> * <timezone>America/New_York</timezone> <materials>31</materials> * <favorites>4</favorites> <collections>2</collections> * <identifier>forum:0815</identifier> <realname>John Doe</realname> * <occupation>Maths teacher</occupation> <location>New * York</location> <website>www.thisisme.com</website> * <profilemessage>Any text</profilemessage> </userinfo> </response> * </responses> */ // user.setGGTProfileURL(userinfo.getString("ggt_profile_url")); // user.setGroup(userinfo.getString("group")); // user.setDateCreated(userinfo.getString("date_created")); } catch (Exception e) { e.printStackTrace(); return false; } return true; } @Override protected String getToken() { return client.getModel().getLoginToken(); } }