/* * This file is part of gwap, an open platform for games with a purpose * * Copyright (C) 2013 * Project play4science * Lehr- und Forschungseinheit für Programmier- und Modellierungssprachen * Ludwig-Maximilians-Universität München * * 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 gwap.tools; import gwap.game.AbstractGameSessionBean; import java.io.IOException; import java.io.Serializable; import java.net.URL; import org.jboss.seam.ScopeType; import org.jboss.seam.annotations.AutoCreate; import org.jboss.seam.annotations.Create; import org.jboss.seam.annotations.Destroy; import org.jboss.seam.annotations.Logger; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Scope; import org.jboss.seam.log.Log; import com.maxmind.geoip.Location; import com.maxmind.geoip.LookupService; /** * Provides methods for looking up the country, region, and city * from an IP address. * * @author Fabian Kneißl */ @Name("ipBasedLocationBean") @Scope(ScopeType.APPLICATION)@AutoCreate public class IpBasedLocationBean implements Serializable { @Logger private Log log; private LookupService lookupService; @Create public void startService() { URL url = AbstractGameSessionBean.class.getResource("/GeoLiteCity.dat"); try { lookupService = new LookupService(url.getFile(), LookupService.GEOIP_MEMORY_CACHE); log.info("Started Lookup Service"); } catch (IOException e) { log.warn("Could not start LookupService", e); } } @Destroy public void stopService() { if (lookupService != null) lookupService.close(); log.info("Stopped Lookup Service"); } /** * Lookup the location (country, region, city) from an IP address. * * @param ipAddress * @return Location */ public Location findByIpAddress(String ipAddress) { if (lookupService == null) return null; else { Location location = lookupService.getLocation(ipAddress); return location; } } }