def process_request(self, request): if not request.user.is_authenticated(): return urlsModule = __import__(settings.ROOT_URLCONF, {}, {}, ['']) skipList = getattr(urlsModule, 'ignore_latest_activity', None) skippedPath = request.path if skippedPath.startswith('/'): skippedPath = skippedPath[1:] if skipList is not None: for expression in skipList: compiledVersion = None if not compiledLists.has_key(expression): compiledLists[expression] = re.compile(expression) compiledVersion = compiledLists[expression] if compiledVersion.search(skippedPath): return activity = None try: activity = request.user.useractivity except: activity = UserActivity() activity.user = request.user activity.latest_activity = datetime.now() activity.current_template = request.build_absolute_uri() activity.save() return activity.latest_activity = datetime.now() activity.current_template = request.build_absolute_uri() activity.save()
class Activity: """Middleware that tracks the user activity on every website hit.""" def process_request(self, request): # Checks if we need to keep track of this activity... request_url = request.META.get('PATH_INFO', '').strip() if request_url[0] == '/': request_url = request_url[1:] if True in [bool(k.match(request_url)) for k in NOTRACK_REGEXP]: self.activity = None return self.activity = UserActivity( user = request.user if request.user.is_authenticated() else None, date = datetime.now(), request_url = request.META.get('PATH_INFO', ''), referer_url = request.META.get('HTTP_REFERER', ''), client_address = request.META.get('REMOTE_ADDR', ''), client_host = request.META.get('REMOTE_HOST', ''), browser_info = request.META.get('HTTP_USER_AGENT', ''), languages = request.META.get('HTTP_ACCEPT_LANGUAGE', ''), ) # Makes 1 database lookup. If the city database is available, prefer that # one, otherwise, mark the city as "Unknown" and perform country lookup. try_set_location(self.activity) # Makes a second database lookup for decoding the UserAgent string try_ua_parsing(self.activity) def process_exception(self, request, exception): if self.activity: self.activity.error = str(exception) self.activity.set_processing_time() self.activity.save() def process_response(self, request, response): if self.activity: self.activity.set_processing_time() self.activity.save() return response
def login(): form = LoginForm() if flask.request.method == "POST": if form.validate_on_submit(): user = User.query.filter_by(username=form.username.data).first() if user is None: return render_template( "login.html", title="Login", form=form, form_title="Login", login_failure=True, ) if not check_password_hash(user.password, form.password.data): abort(403) user.create_session() user = user.save() login_user(user) user_activity = UserActivity(activity_name="login", user=user) user_activity.save() return redirect(url_for("spell_checker")) else: return render_template( "login.html", title="Login", form=form, form_title="Login", login_failure=True, ) # default is a GET request return render_template("login.html", title="Login", form=form, form_title="David's Spell Checker")
def logout(): user_id = current_user.id logout_user() user_activity = UserActivity(activity_name="logout", user_id=user_id) user_activity.save() return redirect(url_for("login"))