예제 #1
0
    def get(self, filename):
        image = Image.get_by_filename(filename)
        if not image:
            return self.abort(404)

        # Gather the information we take from the user.
        identifier = self.request.get('identifier', '')
        ip_address = self.request.remote_addr
        referrer = self.request.referrer
        user_agent = self.request.headers.get('User-Agent', '')
        visitor_uuid = self.request.cookies.get('VISITOR_UUID', '')

        # If they're not in our database, create a new entity to track them.
        visitor = Visitor.get_by_uuid(visitor_uuid)
        if visitor is None:
            visitor = Visitor()
            visitor.put()

        visit = Visit(identifier=identifier, ip_address=ip_address,
                      user_agent=user_agent, referrer=referrer,
                      image=image.key, visitor=visitor.key)
        visit.put()

        # Dispatch a task to send the visit to keen.io for analysis.
        visit_key = visit.key.urlsafe()
        logging.info('Dispatching task to process {visit_key}'
        .format(visit_key=visit_key))
        taskqueue.add(url=self.uri_for('analytics'),
                      params={'visit_key': visit_key})

        self.response.content_type = str(image.content_type)
        self.response.set_cookie(key='VISITOR_UUID', value=visitor.uuid)
        self.response.out.write(image.data)
예제 #2
0
 def test_defaults(self):
     visit = Visit()
     visit.put()
     self.assertIsNone(visit.ip_address)
     self.assertIsNone(visit.identifier)
     self.assertIsNone(visit.image)
     self.assertIsNone(visit.referrer)
     self.assertIsNone(visit.visitor)
     self.assertIsNone(visit.user_agent)
     self.assertAlmostEqual(datetime.datetime.now(), visit.timestamp,
                            delta=datetime.timedelta(seconds=5))
예제 #3
0
  def post(self):
    if get_current_user():
      return self.redirect('/')
    token = self.request.get('session')
    if token:
      session = SignupSession.getSignupSession(token)
      if not session:
        return self.redirect('/auth/login')
      fb_id = session.fb_id
      g_user = None
    else:
      if not GOOGLE_USERS:
        return self.redirect('/auth/login')
      fb_id = None
      g_user = users.get_current_user()
      if not g_user:
        return self.redirect('/auth/login')
    name = cgi.escape(self.request.get('name'))
    email = cgi.escape(self.request.get('email'))
    if not name or not email:
      template = jinja_environment.get_template('templates/signup.html')
      values = {'name':name,'email':email,'session':token,'errormsg':'Please supply a name and email address'}
      self.response.out.write(template.render(values))
      return
    user = User(name=name,email=email,google_user=g_user,fb_id=fb_id)
    user.put()

    pubs = Pub.all().run()
    for pub in pubs:
      v = Visit(parent=user,pub=pub)
      v.put()

    rand_string=base64.urlsafe_b64encode(os.urandom(32))
    session = Session()
    session.user_id = user.key().id()
    session.token = rand_string
    session.save()
    self.response.set_cookie("session",rand_string,expires=datetime.datetime.now()+datetime.timedelta(days=30));
    self.redirect('/')
예제 #4
0
  def post(self):
    name = self.request.get('name')
    p = Pub.all().filter('name =', name).get(keys_only=True)
    if p:
      self.response.out.write('already exists')
      return
    nlat = None
    nlong = None
    lat = self.request.get('lat')
    long = self.request.get('long')
    if lat:
      nlat = float(lat)
    if long:
      nlong = float(long)
    p = Pub(name=name, latitude=nlat, longitude=nlong)
    p.put()

    users = User.all().run()
    for u in users:
      v = Visit(parent=u, pub=p)
      v.put()
    self.response.out.write('added ' + name)
예제 #5
0
 def test_get_by_ip_address(self):
     visit = Visit(ip_address=self.DEFAULT_IP)
     visit.put()
     self.assertLength(1, Visit.get_by_ip_address(self.DEFAULT_IP))
     self.assertLength(0, Visit.get_by_ip_address('1.1.1.1'))
예제 #6
0
 def test_get_by_identifier(self):
     visit = Visit(identifier=self.DEFAULT_IDENTIFIER)
     visit.put()
     self.assertLength(1, Visit.get_by_identifier(self.DEFAULT_IDENTIFIER))
     self.assertLength(0, Visit.get_by_identifier('*****@*****.**'))