/* * * Copyright (C) 2007-2015 Licensed to the Comunes Association (CA) under * one or more contributor license agreements (see COPYRIGHT for details). * The CA licenses this file to you under the GNU Affero General Public * License version 3, (the "License"); you may not use this file except in * compliance with the License. This file is part of kune. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * */ package cc.kune.embed.client; import cc.kune.common.client.log.Log; import cc.kune.common.shared.utils.TextUtils; import cc.kune.core.shared.FileConstants; import cc.kune.core.shared.dto.InitDataDTO; import cc.kune.core.shared.dto.InitDataDTOJs; import cc.kune.core.shared.dto.StateAbstractDTO; import cc.kune.core.shared.dto.StateAbstractDTOJs; import cc.kune.core.shared.dto.StateContentDTO; import cc.kune.core.shared.dto.UserInfoDTO; import cc.kune.core.shared.dto.UserInfoDTOJs; import cc.kune.embed.client.conf.EmbedConfiguration; import com.google.gwt.core.client.Callback; import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.JavaScriptObject; import com.google.gwt.http.client.Request; import com.google.gwt.http.client.RequestBuilder; import com.google.gwt.http.client.RequestCallback; import com.google.gwt.http.client.RequestException; import com.google.gwt.http.client.Response; import com.google.gwt.jsonp.client.JsonpRequest; import com.google.gwt.jsonp.client.JsonpRequestBuilder; import com.google.gwt.user.client.rpc.AsyncCallback; /** * The Class EmbedHelper. * */ public class EmbedHelper { /** * Fix content urls. * * We do some html fix in html content because we are in embeded in another * site domain, and the server don't know how to do this * * @param serverUrl * the server url * @param content * the content * @return the string */ public static String fixContentUrls(final String serverUrl, final String content) { return content.replaceAll(FileConstants.LOGODOWNLOADSERVLET, TextUtils.removeLastSlash(serverUrl) + FileConstants.LOGODOWNLOADSERVLET); } /** * Gets the server. * * @return the server */ public static String getServer() { final String serverConf = EmbedConfiguration.get().getServerUrl(); return serverConf == null ? GWT.getHostPageBaseURL() : serverConf; } /** * Gets the server with path. * * @return the server with path */ public static String getServerWithPath() { final String confServer = EmbedConfiguration.get().getServerUrl(); final String server = confServer != null ? (confServer.endsWith("/") ? confServer + "wse/" : confServer + "/wse/") : GWT.getModuleBaseURL(); return server; } /** * Parses the init data in js * * @param init * data the init js * @return the inidata DTO */ public static InitDataDTO parse(final InitDataDTOJs initJ) { final InitDataDTO init = new InitDataDTO(); init.setStoreUntranslatedStrings(initJ.getStoreUntranslatedStrings()); return init; } /** * Parses the state in js. * * @param stateJs * the state js * @return the state abstract dto */ public static StateAbstractDTO parse(final StateAbstractDTOJs stateJs) { final StateContentDTO state = new StateContentDTO(); state.setContent(stateJs.getContent()); state.setWaveRef(stateJs.getWaveRef()); state.setTitle(stateJs.getTitle()); state.setIsParticipant(stateJs.isParticipant()); // state.setStateToken(new StateToken((StateTokenJs) // stateJs.getStateToken()).getEncoded()); return state; } /** * Parses the userInfo js. * * @param userInfo * the user info * @return the user info dto */ public static UserInfoDTO parse(final UserInfoDTOJs userInfo) { final String userHash = userInfo.getUserHash(); if (userHash == null || userHash.equals("null")) { // sesssion.setHash? Log.info("We are NOT logged"); return null; } else { final UserInfoDTO info = new UserInfoDTO(); info.setUserHash(userHash); Log.info("We are logged, userhash: " + userHash); final String waveSession = userInfo.getSessionJSON(); info.setSessionJSON(waveSession); Log.info("wave session: " + waveSession); info.setWebsocketAddress(userInfo.getWebsocketAddress()); info.setClientFlags(userInfo.getClientFlags()); return info; } } /** * Process json request. * * @param url * the url * @param callback * the callback */ public static void processJSONRequest(final String url, final Callback<JavaScriptObject, Void> callback) { final JsonpRequestBuilder builder = new JsonpRequestBuilder(); builder.setTimeout(60000); @SuppressWarnings("unused") final JsonpRequest<JavaScriptObject> request = builder.requestObject(url, new AsyncCallback<JavaScriptObject>() { @Override public void onFailure(final Throwable exception) { Log.error("JSON exception: ", exception); callback.onFailure(null); } @Override public void onSuccess(final JavaScriptObject result) { callback.onSuccess(result); } }); } /** * Process request. * * @param url * the url * @param callback * the callback */ public static void processRequest(final String url, final Callback<Response, Void> callback) { try { final RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, url); // Needed for CORS builder.setIncludeCredentials(true); @SuppressWarnings("unused") final Request request = builder.sendRequest(null, new RequestCallback() { @Override public void onError(final Request request, final Throwable exception) { Log.error("CORS exception: ", exception); callback.onFailure(null); } @Override public void onResponseReceived(final Request request, final Response response) { if (200 == response.getStatusCode()) { callback.onSuccess(response); } else { Log.error("Couldn't retrieve CORS (" + response.getStatusText() + ")"); callback.onFailure(null); } } }); } catch (final RequestException exception) { Log.error("CORS exception: ", exception); callback.onFailure(null); } } }