rezometz/paiji2

View on GitHub
home/middleware.py

Summary

Maintainability
A
25 mins
Test Coverage
from iptools import IpRangeList

from django.conf import settings
from django.db import models
from django.contrib.auth import get_user_model
from django.contrib.auth.models import Group


groups = {}
users = {}


class IpAuthGroupMiddleware(object):
    def __init__(self):
        user_model = get_user_model()
        try:
            for groupname, ranges in settings.IP_AUTH_GROUPS.iteritems():
                (groups[groupname], created) = Group.objects.get_or_create(
                    name=groupname,
                )
                (users[groupname], created) = user_model.objects.get_or_create(
                    username=groupname,
                )
                groups[groupname].user_set.add(users[groupname])
        except ImportError:
            pass

    def process_request(self, request):
        user = request.user

        if not user.is_authenticated():
            for groupname, ranges in settings.IP_AUTH_GROUPS.iteritems():
                ip_range = IpRangeList(*ranges)
                if request.META['REMOTE_ADDR'] in ip_range:
                    request.user = users[groupname]


class UserAuthGroupMixin(models.Model):
    def is_authenticated(self):
        return self not in users.itervalues()

    class Meta:
        abstract = True