| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 | 
							- from django.conf import settings
 
- from django.contrib.auth.hashers import make_password
 
- from django.contrib.auth.models import UserManager
 
- from django.core.exceptions import ImproperlyConfigured
 
- from django.db import models
 
- from django.utils.importlib import import_module
 
- from django.utils.translation import ugettext_lazy as _
 
- __all__ = (
 
-     'get_user_document',
 
- )
 
- MONGOENGINE_USER_DOCUMENT = getattr(
 
-     settings, 'MONGOENGINE_USER_DOCUMENT', 'mongoengine.django.auth.User')
 
- def get_user_document():
 
-     """Get the user document class used for authentication.
 
-     This is the class defined in settings.MONGOENGINE_USER_DOCUMENT, which
 
-     defaults to `mongoengine.django.auth.User`.
 
-     """
 
-     name = MONGOENGINE_USER_DOCUMENT
 
-     dot = name.rindex('.')
 
-     module = import_module(name[:dot])
 
-     return getattr(module, name[dot + 1:])
 
- class MongoUserManager(UserManager):
 
-     """A User manager wich allows the use of MongoEngine documents in Django.
 
-     To use the manager, you must tell django.contrib.auth to use MongoUser as
 
-     the user model. In you settings.py, you need:
 
-         INSTALLED_APPS = (
 
-             ...
 
-             'django.contrib.auth',
 
-             'mongoengine.django.mongo_auth',
 
-             ...
 
-         )
 
-         AUTH_USER_MODEL = 'mongo_auth.MongoUser'
 
-     Django will use the model object to access the custom Manager, which will
 
-     replace the original queryset with MongoEngine querysets.
 
-     By default, mongoengine.django.auth.User will be used to store users. You
 
-     can specify another document class in MONGOENGINE_USER_DOCUMENT in your
 
-     settings.py.
 
-     The User Document class has the same requirements as a standard custom user
 
-     model: https://docs.djangoproject.com/en/dev/topics/auth/customizing/
 
-     In particular, the User Document class must define USERNAME_FIELD and
 
-     REQUIRED_FIELDS.
 
-     `AUTH_USER_MODEL` has been added in Django 1.5.
 
-     """
 
-     def contribute_to_class(self, model, name):
 
-         super(MongoUserManager, self).contribute_to_class(model, name)
 
-         self.dj_model = self.model
 
-         self.model = get_user_document()
 
-         self.dj_model.USERNAME_FIELD = self.model.USERNAME_FIELD
 
-         username = models.CharField(_('username'), max_length=30, unique=True)
 
-         username.contribute_to_class(self.dj_model, self.dj_model.USERNAME_FIELD)
 
-         self.dj_model.REQUIRED_FIELDS = self.model.REQUIRED_FIELDS
 
-         for name in self.dj_model.REQUIRED_FIELDS:
 
-             field = models.CharField(_(name), max_length=30)
 
-             field.contribute_to_class(self.dj_model, name)
 
-     def get(self, *args, **kwargs):
 
-         try:
 
-             return self.get_query_set().get(*args, **kwargs)
 
-         except self.model.DoesNotExist:
 
-             # ModelBackend expects this exception
 
-             raise self.dj_model.DoesNotExist
 
-     @property
 
-     def db(self):
 
-         raise NotImplementedError
 
-     def get_empty_query_set(self):
 
-         return self.model.objects.none()
 
-     def get_query_set(self):
 
-         return self.model.objects
 
- class MongoUser(models.Model):
 
-     """"Dummy user model for Django.
 
-     MongoUser is used to replace Django's UserManager with MongoUserManager.
 
-     The actual user document class is mongoengine.django.auth.User or any
 
-     other document class specified in MONGOENGINE_USER_DOCUMENT.
 
-     To get the user document class, use `get_user_document()`.
 
-     """
 
-     objects = MongoUserManager()
 
-     class Meta:
 
-         app_label = 'mongo_auth'
 
-     def set_password(self, password):
 
-         """Doesn't do anything, but works around the issue with Django 1.6."""
 
-         make_password(password)
 
 
  |