/******************************************************************************* * Copyright 2013-2015 alladin-IT GmbH * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package at.alladin.rmbt.controlServer; import java.util.List; import net.sf.uadetector.ReadableUserAgent; import net.sf.uadetector.UserAgentStringParser; import net.sf.uadetector.service.UADetectorServiceFactory; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import org.restlet.Request; import org.restlet.data.ClientInfo; import org.restlet.data.Language; import org.restlet.data.Preference; import org.restlet.engine.header.Header; import org.restlet.resource.Get; import org.restlet.util.Series; import at.alladin.rmbt.shared.GeoIPHelper; import com.google.common.net.InetAddresses; public class RequestDataCollector extends ServerResource { @Get("json") public String request(final String entity) throws JSONException { addAllowOrigin(); final JSONObject answer = new JSONObject(); final Request request = getRequest(); final ClientInfo clientInfo = request.getClientInfo(); final String uaString = clientInfo.getAgent(); final String ip = getIP(); answer.put("ip", ip); answer.put("country_geoip", GeoIPHelper.lookupCountry(InetAddresses.forString(ip))); answer.put("port", clientInfo.getPort()); UserAgentStringParser parser = UADetectorServiceFactory.getResourceModuleParser(); ReadableUserAgent agent = parser.parse(uaString); answer.put("product", agent.getName()); answer.put("version", agent.getVersionNumber().getMajor()); answer.put("version_minor", agent.getVersionNumber().getMinor()); answer.put("category", agent.getDeviceCategory().getCategory()); answer.put("os", agent.getOperatingSystem().getFamilyName()); answer.put("family", agent.getFamily()); answer.put("agent", uaString); answer.put("url", getURL().toString()); final List<Preference<Language>> acceptedLanguages = clientInfo.getAcceptedLanguages(); final JSONArray languages = new JSONArray(); answer.put("languages", languages); for (int i = 0; i < acceptedLanguages.size(); i++) { final Preference<Language> preference = acceptedLanguages.get(i); final Language language = preference.getMetadata(); languages.put(language.getName()); } final JSONObject headersObj = new JSONObject(); answer.put("headers", headersObj); @SuppressWarnings("unchecked") final Series<Header> headers = (Series<Header>) request.getAttributes().get("org.restlet.http.headers"); if (headers != null) for (final Header h : headers) { final String name = h.getName(); if (!name.equalsIgnoreCase("X-Real-IP") && !name.equalsIgnoreCase("X-Real-URL")) headersObj.put(name, h.getValue()); } return answer.toString(); } }