package ru.qatools.gridrouter; import org.apache.http.client.utils.URIBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.http.HttpServletRequest; import java.io.UnsupportedEncodingException; import java.net.URISyntaxException; import java.net.URLDecoder; import static java.nio.charset.StandardCharsets.UTF_8; import static org.springframework.http.HttpMethod.DELETE; /** * @author Alexander Andyashin aandryashin@yandex-team.ru * @author Innokenty Shuvalov innokenty@yandex-team.ru * @author Dmitry Baev charlie@yandex-team.ru * @author Artem Eroshenko eroshenkoam@yandex-team.ru */ public final class JsonWireUtils { private static final Logger LOGGER = LoggerFactory.getLogger(JsonWireUtils.class); public static final String WD_HUB_SESSION = "/wd/hub/session/"; public static final int SESSION_HASH_LENGTH = 32; private JsonWireUtils() { } public static boolean isUriValid(String uri) { return uri.length() > getUriPrefixLength(); } public static boolean isSessionDeleteRequest(HttpServletRequest request, String command) { return DELETE.name().equalsIgnoreCase(request.getMethod()) && !command.contains("/"); } public static String getSessionHash(String uri) { return uri.substring(WD_HUB_SESSION.length(), getUriPrefixLength()); } public static String getFullSessionId(String uri) { String tail = uri.substring(WD_HUB_SESSION.length()); int end = tail.indexOf('/'); if (end < 0) { return tail; } return tail.substring(0, end); } public static int getUriPrefixLength() { return WD_HUB_SESSION.length() + SESSION_HASH_LENGTH; } public static String redirectionUrl(String host, String command) throws URISyntaxException { return new URIBuilder(host).setPath(WD_HUB_SESSION + command).build().toString(); } public static String getCommand(String uri) { String encodedCommand = uri.substring(getUriPrefixLength()); try { return URLDecoder.decode(encodedCommand, UTF_8.name()); } catch (UnsupportedEncodingException e) { LOGGER.error("[UNABLE_TO_DECODE_COMMAND] - could not decode command: {}", encodedCommand, e); return encodedCommand; } } }