def __call__(self): long = self.request.params.get('longitude') lat = self.request.params.get('latitude') try: tz = int(self.request.params.get('tz', 0)) except (TypeError, ValueError): tz = 0 session = get_platform().session(long, lat, tz=tz) get_platform().get_storage().set(session) new_session_url = '%s/%s' % (self.request.application_url, session.admin_id) cookie_age = int(settings.get('mappp.me.storage.expires', 0)) new_cookie = session.admin_id if self.request.existing_sessions: new_cookie = ','.join(self.request.existing_sessions + [session.admin_id]) self.request.response.set_cookie('mappp', new_cookie, max_age=cookie_age, httponly=True) # for older browsers self.request.response.content_type = 'text/plain' return {'admin_link': new_session_url}
def __call__(self): get_platform().get_storage().remove(self.request.context) self.request.response.delete_cookie('mappp') front_page_url = '%s/' % (self.request.application_url,) raise HTTPFound(location=front_page_url)
def __init__(self, longitude, latitude, tz=None): storage = get_platform().get_storage() self._id = storage.get_new_id() self._admin_id = storage.get_new_id(admin=True) self._tz = tz or 0 self.longitude = longitude self.latitude = latitude self.last_updated = self.created = datetime.datetime.now(tz=self.tz)
def existing_sessions(self): """Get a list of mappps that are currently valid for this browser session. """ existing_sessions = self.cookies.get('mappp') if existing_sessions: sessions = [] storage = get_platform().get_storage() for session in existing_sessions.split(','): if storage.has(session): sessions.append(session) if sessions: return sessions self.response.delete_cookie('mappp') return []
def SessionFactory(request): """Loads a session as the context and applies permissions.""" acl = [(Allow, Everyone, 'view')] session_id = request.matchdict.get('session') session = get_platform().get_storage().get(session_id) if not session: raise NotFound('No such session') is_admin_link = session_id==session.admin_id if is_admin_link: acl += [(Allow, Everyone, 'owner')] session.__acl__ = acl return session
from pyramid.decorator import reify from pyramid.request import Request from pywurfl.algorithms import TwoStepAnalysis from wurfl import devices from mappp.me.platform import get_platform _ua_device_cache = get_platform().ua_device_cache def on_newrequest(event): """Fix the https bug in Pyramid / Paste.""" if 'HTTP_X_VHM_ROOT' in event.request.environ: event.request.environ['wsgi.url_scheme'] = 'https' class EnhancedRequest(Request): @reify def device(self): """Look up the device profile based on the UA and cache it on the request object. """ global _ua_device_cache ua = unicode(self.user_agent) if "HTTP_X_OPERAMINI_PHONE_UA" in self.environ: # Opera mini proxy specia case
def cache(self): """Get the platform-specific cache.""" # Defer creation of cache so we may create the platform first return get_platform().memory_cache(max_bytes=self.cache_size)
def populate(self, request): is_wml = request.environ.get('PATH_INFO', '').endswith('.wml') if not is_wml and \ 'text/vnd.wap.wml' in request.accept and \ request.accept.best_match(['text/html', 'application/json', 'text/javascript', 'application/xhtml+xml', 'text/vnd.wap.wml', ])=='text/vnd.wap.wml': wml_uri = '%s/%s.wml' % (request.application_url, request.context.id) raise HTTPFound(location=wml_uri) is_owner_view = bool(has_permission('owner', request.context, request)) today = datetime.datetime.now(tz=request.context.tz).replace(hour=0, minute=0, second=0, microsecond=0) created = request.context.created created_text = created.strftime('%H:%M') if created < today: diff = today - created if diff > datetime.timedelta(days=1): created_text = '%s %s days ago' % (created_text, diff.days) else: created_text = '%s yesterday' % (created_text,) else: created_text = '%s today' % (created_text,) zoom = 13 if False not in [c.isdigit() for c in request.params.get('zoom', 'foo')] or \ False not in [c.isdigit() for c in request.cookies.get('zoom', 'foo')]: zoom = int(request.params.get('zoom') or request.cookies.get('zoom')) map_upgrade = False # map_upgrade = request.supports_javascript and \ # request.device.resolution_width>=600 and \ # ( # request.device.is_tablet or # request.device.wifi or # request.device.brand_name=='Desktop' or # not request.device.mobile_browser # ) result = {'is_owner_view': is_owner_view, 'latitude': request.context.latitude, 'longitude': request.context.longitude, 'created': created_text, 'sms_link': '', #'marker_style': 'icon:' + quote(request.static_url('mappp.me:static/images/pointer-small-filled-transparent.png')), 'marker_style': quote('color:white|size:med'), 'quoted_uri': quote(request.route_url('session', session=request.context.id)), 'zoom': zoom, 'map_upgrade': map_upgrade, 'user_is_owner': request.context.admin_id in request.existing_sessions } send_string = request.device.xhtml_send_sms_string if send_string!=u'none': if request.device.mobile_browser!=u'Android Webkit': # workaround for: # http://code.google.com/p/android/issues/detail?id=11451 # http://code.google.com/p/android/issues/detail?id=12142 # http://code.google.com/p/android/issues/detail?id=15866 result['sms_link'] = '%s?body=%s' % (send_string, quote('Find me at %s/%s .' % (request.application_url, request.context.id))) if request.method=='POST' and is_owner_view: long = float(request.params.get('longitude')) lat = float(request.params.get('latitude')) request.context.update(long, lat) get_platform().get_storage().set(request.context) result.update({'latitude': lat, 'longitude': long}) last_updated = request.context.last_updated.astimezone(request.context.tz) result['last_updated'] = last_updated.strftime('%H:%M') expires = (last_updated + datetime.timedelta(minutes=30)).astimezone(request.context.tz) result['expires'] = format_date_time(mktime(expires.timetuple())) request.response.expires = expires request.response.last_modified = last_updated request.response.cache_control = 'no-cache' if request.method=='POST' and is_owner_view: result['response'] = render_to_response('json', result, request=request) if request.existing_sessions: # reset the ages cookie_age = int(settings.get('mappp.me.storage.expires', 0)) self.request.response.set_cookie('mappp', ','.join(request.existing_sessions), max_age=cookie_age, httponly=True) if is_wml: request.response.content_type = 'text/vnd.wap.wml' return result