Skip to content

Commit

Permalink
Merge e55569f into 3bcce7e
Browse files Browse the repository at this point in the history
  • Loading branch information
MMFernando committed May 9, 2019
2 parents 3bcce7e + e55569f commit 1e0adec
Show file tree
Hide file tree
Showing 8 changed files with 108 additions and 264 deletions.
6 changes: 6 additions & 0 deletions docs/online_status_middleware.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Online status middleware

This middleware keeps track of which users are online, it is entirely cache based so no database/model queries are required.

The basic functionality of the middleware is that it keeps track of all logged in users (that are not anonymous), and stores this list in the cache. Users that don't perform an action after a fixed amount of time are removed from the list of online users and thus considered offline. *This can be seen in the `status.py` file within the `django-online-status` directory*

4 changes: 2 additions & 2 deletions portal/autoconfig.py
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.auth.middleware.SessionAuthenticationMiddleware",
"portal.middleware.online_status.middleware.OnlineStatusMiddleware",
"portal.middleware.online_status.OnlineStatusMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
"deploy.middleware.exceptionlogging.ExceptionLoggingMiddleware",
Expand Down Expand Up @@ -141,7 +141,7 @@
RELATIONSHIPS = [
OrderingRelationship(
"MIDDLEWARE",
"portal.middleware.online_status.middleware.OnlineStatusMiddleware",
"portal.middleware.online_status.OnlineStatusMiddleware",
after=["django.contrib.auth.middleware.AuthenticationMiddleware"],
add_missing=False,
),
Expand Down
39 changes: 3 additions & 36 deletions portal/middleware/online_status/__init__.py
Original file line number Diff line number Diff line change
@@ -1,36 +1,3 @@
# -*- coding: utf-8 -*-
# Code for Life
#
# Copyright (C) 2019, Ocado Innovation Limited
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# ADDITIONAL TERMS – Section 7 GNU General Public Licence
#
# This licence does not grant any right, title or interest in any “Ocado” logos,
# trade names or the trademark “Ocado” or any other trademarks or domain names
# owned by Ocado Innovation Limited or the Ocado group of companies or any other
# distinctive brand features of “Ocado” as may be secured from time to time. You
# must not distribute any modification of this program using the trademark
# “Ocado” or claim any affiliation or association with Ocado or its employees.
#
# You are not authorised to use the name Ocado (or any of its trade names) or
# the names of any author or contributor in advertising or for publicity purposes
# pertaining to the distribution of this program, without the prior written
# authorisation of Ocado.
#
# Any propagation, distribution or conveyance of this program must include this
# copyright notice and these terms. You must not misrepresent the origins of this
# program; modified versions of the program must be marked as such and not
# identified as the original program.
from .middleware import OnlineStatusMiddleware

__all__ = ["OnlineStatusMiddleware"]
73 changes: 0 additions & 73 deletions portal/middleware/online_status/conf.py

This file was deleted.

67 changes: 15 additions & 52 deletions portal/middleware/online_status/middleware.py
Original file line number Diff line number Diff line change
@@ -1,45 +1,11 @@
# -*- coding: utf-8 -*-
# Code for Life
#
# Copyright (C) 2019, Ocado Innovation Limited
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# ADDITIONAL TERMS – Section 7 GNU General Public Licence
#
# This licence does not grant any right, title or interest in any “Ocado” logos,
# trade names or the trademark “Ocado” or any other trademarks or domain names
# owned by Ocado Innovation Limited or the Ocado group of companies or any other
# distinctive brand features of “Ocado” as may be secured from time to time. You
# must not distribute any modification of this program using the trademark
# “Ocado” or claim any affiliation or association with Ocado or its employees.
#
# You are not authorised to use the name Ocado (or any of its trade names) or
# the names of any author or contributor in advertising or for publicity purposes
# pertaining to the distribution of this program, without the prior written
# authorisation of Ocado.
#
# Any propagation, distribution or conveyance of this program must include this
# copyright notice and these terms. You must not misrepresent the origins of this
# program; modified versions of the program must be marked as such and not
# identified as the original program.
from __future__ import unicode_literals

from django.core.cache import cache

from conf import online_status_settings as config
from status import refresh_user, refresh_users_list, OnlineStatus
from portal.middleware.online_status.status import refresh_user, refresh_users_list
from status import (
OnlineStatus,
CACHE_PREFIX_USER,
CACHE_PREFIX_ANONYM_USER,
ONLY_LOGGED_USERS,
)


class OnlineStatusMiddleware(object):
Expand All @@ -49,24 +15,21 @@ def __init__(self, get_response):
self.get_response = get_response

def __call__(self, request):
self.set_status(request)

self.process_request(request)
response = self.get_response(request)

return response

def set_status(self, request):
if request.user.is_authenticated:
onlinestatus = cache.get(config.CACHE_PREFIX_USER % request.user.pk)
elif not config.ONLY_LOGGED_USERS:
def process_request(self, request):
if request.user.is_authenticated():
onlinestatus = cache.get(CACHE_PREFIX_USER % request.user.pk)
elif not ONLY_LOGGED_USERS:
onlinestatus = cache.get(
config.CACHE_PREFIX_ANONYM_USER % request.session.session_key
CACHE_PREFIX_ANONYM_USER % request.session.session_key
)
else:
return

if not onlinestatus:
onlinestatus = OnlineStatus(request)

refresh_user(request)
refresh_users_list(request, updated=onlinestatus)
refresh_users_list(request=request, updated=onlinestatus)
return

0 comments on commit 1e0adec

Please sign in to comment.