Ejemplo n.º 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)
Ejemplo n.º 2
0
    def test_get_tracking_image(self):
        image = Image(
            filename=self.DEFAULT_FILENAME, content_type=self.DEFAULT_CONTENT_TYPE)
        image.put()
        response = self.app.get(
            self.uri_for('tracking_image', filename=image.filename))
        self.assertOk(response)
        self.assertEqual(image.content_type, response.content_type)
        self.assertLength(1, Visit.query())
        self.assertLength(1, Visitor.query())

        visit = Visit.query().get()
        visitor = Visitor.query().get()
        self.assertEqual(image.key, visit.image)
        self.assertEqual(visitor.key, visit.visitor)
Ejemplo n.º 3
0
def add():
    form = request.form
    u = current_user()
    if u is None:
        u = Visitor.singleton()
    t = Reply.new(form, user_id=u.id)
    return redirect(url_for('topic.detail', id=t.topic_id))
Ejemplo n.º 4
0
    def __init__(self, request=None, response=None):
        super(BasePageHandler, self).__init__(request, response)
        self.LogInOutURL = users.create_logout_url('/')
        self.template_values = {}
        self.application_user = None
        self.google_user = None
        self.logged_in = None
        self.redirected = False
        google_user = users.get_current_user()
        if google_user is not None:
            try:
                Visitor.add_or_get_current_user_as_visitor()
            except:
                # Simply ignore failures to add the google_user object as a Visitor to our model for now:
                pass
            self.google_user = google_user
            self.logged_in = True
            google_user_id = google_user.user_id()
            application_user = User.get_user_by_google_user_id(google_user_id)
            if application_user is not None:
                self.application_user = application_user
                display_user_name = application_user.first_name + ' ' + application_user.last_name
                self.template_values['display_user_name'] = display_user_name
                user_profile = Profile.get_profile_by_application_user_id(application_user.application_user_id)
                user_page_url = self.request.application_url
                if not re.match(r"^.*/$", user_page_url):
                    user_page_url += '/'
                if user_profile is not None:
                    user_page_url += urllib.quote(str(user_profile.profile_unique_display_name), safe='')
                else:
                    user_page_url += str(application_user.application_user_id)
                self.template_values['user_page_url'] = user_page_url
            else:
                if google_user.email():
                    display_user_name = google_user.email()
                elif google_user.nickname():
                    display_user_name = google_user.nickname()
                else:
                    display_user_name = 'Sweet Vision User'

                self.template_values['display_user_name'] = display_user_name
        else:
            self.logged_in = False
            self.LogInOutURL = users.create_login_url('/')

        self.template_values['LogInOutURL'] = self.LogInOutURL
Ejemplo n.º 5
0
    def test_duplicate_visitors_not_made(self):
        image = Image(
            filename=self.DEFAULT_FILENAME, content_type=self.DEFAULT_CONTENT_TYPE)
        image.put()
        response = self.app.get(
            self.uri_for('tracking_image', filename=image.filename))
        self.assertOk(response)
        self.assertLength(1, Visit.query())
        self.assertLength(1, Visitor.query())
        response = self.app.get(
            self.uri_for('tracking_image', filename=image.filename))
        self.assertOk(response)
        self.assertLength(2, Visit.query())
        self.assertLength(1, Visitor.query())

        visit1, visit2 = Visit.query()
        visitor = Visitor.query().get()
        self.assertEqual(visitor.key, visit1.visitor, visit2.visitor)
        self.assertEqual(image.key, visit1.image, visit2.image)
Ejemplo n.º 6
0
    def get_visitor_by_id(visitor_id):
        try:
            client = MongoClient(Constant.DB_CONNECTION_URL)
            document = client[Constant.DB_NAME][VisitorDB.COLLECTION_NAME]

            visitor_object = document.find_one({'_id': ObjectId(visitor_id)})
            visitor = Visitor(visitor_id, visitor_object['name'],
                              visitor_object['address'],
                              visitor_object['phoneNumber'])

            client.close()
            return visitor

        except Exception as e:
            print('unable to get visitor: ' + str(e))
            raise Exception('Could not get visitor from DB')
Ejemplo n.º 7
0
    def get(self):
        # Only let an admin user retrieve the information about visitors:
        if not users.is_current_user_admin():
            self.response.headers['Content-Type'] = 'application/json'
            self.response.status = '401 Unauthorized'
            self.response.write(json.dumps({'status': 401,
                                            'error': 'Unauthorized'}))
            return

        visitors_from_datastore = Visitor.get_visitors()
        visitors = []
        for visitor_instance in visitors_from_datastore:
            visitor = dict()
            visitor['google_user_id'] = None
            if visitor_instance.google_user_id is not None:
                visitor['google_user_id'] = str(visitor_instance.google_user_id)
            visitor['email'] = None
            if visitor_instance.email is not None:
                visitor['email'] = str(visitor_instance.email)
            visitor['auth_domain'] = None
            if visitor_instance.auth_domain is not None:
                visitor['auth_domain'] = str(visitor_instance.auth_domain)
            visitor['nickname'] = None
            if visitor_instance.nickname is not None:
                visitor['nickname'] = str(visitor_instance.nickname)
            if visitor_instance.is_admin:
                visitor['is_admin'] = True
            else:
                visitor['is_admin'] = False
            visitor['google_user_object'] = None
            if visitor_instance.google_user_object is not None:
                visitor['google_user_object'] = str(visitor_instance.google_user_object)
            visitors.append(visitor)
            visitor['created_at'] = None
            if visitor_instance.created_at is not None:
                created_at_epoch_time = time.mktime(visitor_instance.created_at.timetuple())
                visitor['created_at'] = created_at_epoch_time

        self.response.headers['Content-Type'] = 'application/json'
        self.response.write(json.dumps({'visitors': visitors}))
Ejemplo n.º 8
0
 def user(self):
     if self.user_id == '0':
         u = Visitor.singleton()
     else:
         u = User.find(self.user_id)
     return u
Ejemplo n.º 9
0
 def test_get_by_uuid(self):
     visitor = Visitor()
     visitor.put()
     self.assertIsNotNone(Visitor.get_by_uuid(visitor.uuid))
     self.assertIsNone(Visitor.get_by_uuid(''))
Ejemplo n.º 10
0
 def test_put(self):
     visitor = Visitor()
     visitor.put()
     self.assertIsNotNone(visitor.uuid)
Ejemplo n.º 11
0
 def get_visitor(self, badge_id):
     visitor_data = self.db.get_visitor(badge_id)
     if not visitor_data:
         return None
     return Visitor(**visitor_data)
Ejemplo n.º 12
0
 def create_visitor(self, badge_id, name, associated_employee):
     visitor = Visitor(badge_id=badge_id,
                       name=name,
                       associated_employee=associated_employee)
     return self.db.put_visitor(visitor)