[FIX] website: correct geoip resolver

- "`record_by_addr()` method require the city database.
- The loaded geoip database can be specified via config file
This commit is contained in:
Christophe Simonis 2014-06-27 12:46:56 +02:00
parent 6db8bf3def
commit 3db44722d4
1 changed files with 12 additions and 2 deletions

View File

@ -2,8 +2,10 @@
import datetime
import hashlib
import logging
import os
import re
import traceback
import werkzeug
import werkzeug.routing
@ -12,6 +14,7 @@ from openerp.addons.base import ir
from openerp.addons.base.ir import ir_qweb
from openerp.addons.website.models.website import slug, url_for, _UNSLUG_RE
from openerp.http import request
from openerp.tools import config
from openerp.osv import orm
logger = logging.getLogger(__name__)
@ -54,12 +57,19 @@ class ir_http(orm.AbstractModel):
request.website_multilang = request.website_enabled and func and func.routing.get('multilang', True)
if not request.session.has_key('geoip'):
if 'geoip' not in request.session:
record = {}
if self.geo_ip_resolver is None:
try:
import GeoIP
self.geo_ip_resolver = GeoIP.open('/usr/share/GeoIP/GeoIP.dat', GeoIP.GEOIP_STANDARD)
# updated database can be downloaded on MaxMind website
# http://dev.maxmind.com/geoip/legacy/install/city/
geofile = config.get('geoip_database', '/usr/share/GeoIP/GeoLiteCity.dat')
if os.path.exists(geofile):
self.geo_ip_resolver = GeoIP.open(geofile, GeoIP.GEOIP_STANDARD)
else:
self.geo_ip_resolver = False
logger.warning('GeoIP database file %r does not exists', geofile)
except ImportError:
self.geo_ip_resolver = False
if self.geo_ip_resolver and request.httprequest.remote_addr: