package kornell.api.client; import static kornell.core.util.StringUtils.isSome; import static kornell.core.util.StringUtils.mkurl; import java.util.Date; import java.util.logging.Logger; import com.github.gwtbootstrap.client.ui.constants.AlertType; import com.google.gwt.http.client.RequestBuilder; import com.google.gwt.user.client.Cookies; import com.google.gwt.user.client.Window; import kornell.core.entity.AuthClientType; import kornell.gui.client.util.ClientProperties; import kornell.gui.client.util.view.KornellNotification; public class RESTClient { Logger logger = Logger.getLogger(RESTClient.class.getName()); private String apiURL = "/api"; public String getApiUrl() { return apiURL; } protected ExceptionalRequestBuilder GET(String... path) { String url = mkurl(getApiUrl(), path); url = appendTimestampIfIE(url); ExceptionalRequestBuilder reqBuilder = new ExceptionalRequestBuilder( RequestBuilder.GET, url); setAuthenticationHeaders(reqBuilder); return reqBuilder; } protected ExceptionalRequestBuilder HEAD(String... path) { String url = mkurl(getApiUrl(), path); ExceptionalRequestBuilder reqBuilder = new ExceptionalRequestBuilder( RequestBuilder.HEAD, url); setAuthenticationHeaders(reqBuilder); return reqBuilder; } protected ExceptionalRequestBuilder PUT(String... path) { String url = mkurl(getApiUrl(), path); ExceptionalRequestBuilder reqBuilder = new ExceptionalRequestBuilder( RequestBuilder.PUT, url); setAuthenticationHeaders(reqBuilder); return reqBuilder; } protected ExceptionalRequestBuilder POST(String... path) { String url = mkurl(getApiUrl(), path); ExceptionalRequestBuilder reqBuilder = new ExceptionalRequestBuilder( RequestBuilder.POST, url); setAuthenticationHeaders(reqBuilder); return reqBuilder; } protected ExceptionalRequestBuilder POST_LOGIN(String username, String password, String institutionUUID, String... path) { String url = mkurl(getApiUrl(), path); ExceptionalRequestBuilder reqBuilder = new ExceptionalRequestBuilder( RequestBuilder.POST, url); reqBuilder.setHeader("Content-Type","application/x-www-form-urlencoded"); StringBuilder sb = new StringBuilder(); sb.append("userkey=" + username + "&"); sb.append("password=" + password + "&"); sb.append("institutionUUID=" + institutionUUID + "&"); sb.append("clientType=" + AuthClientType.web.toString()); reqBuilder.setRequestData(sb.toString()); return reqBuilder; } protected ExceptionalRequestBuilder DELETE(String... path) { String url = mkurl(getApiUrl(), path); ExceptionalRequestBuilder reqBuilder = new ExceptionalRequestBuilder( RequestBuilder.DELETE, url); setAuthenticationHeaders(reqBuilder); return reqBuilder; } protected void setAuthenticationHeaders(ExceptionalRequestBuilder reqBuilder) { String auth = ClientProperties.get(ClientProperties.X_KNL_TOKEN); if (isSome(auth)) { reqBuilder.setHeader(ClientProperties.X_KNL_TOKEN, auth); } } public void locationAssign(String... path) { if(Cookies.isCookieEnabled()){ ClientProperties.setCookie(ClientProperties.X_KNL_TOKEN, ClientProperties.get(ClientProperties.X_KNL_TOKEN), new Date(new Date().getTime() + 2000)); String url = appendTimestampIfIE(mkurl(getApiUrl(), path)); Window.open(url, "_blank", ""); } else { KornellNotification.show("Por motivos de segurança, é necessário que os cookies estejam ativados para esta operação. Entre em contato com o suporte caso tenha alguma dúvida.", AlertType.ERROR, 10000); } } public String appendTimestampIfIE(String url) { if((Window.Navigator.getUserAgent().toLowerCase().indexOf("trident/") != -1)) return url + (url.indexOf("?") == -1 ? "?" : "&") + "t=" + (new Date()).getTime(); return url; } }