from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin from django.db import models from django.utils import timezone from django.contrib.auth.hashers import check_password import uuid from ..managers import UserManager class User(AbstractBaseUser, PermissionsMixin): email = models.EmailField('email address', unique=True) is_staff = models.BooleanField(default=False) is_active = models.BooleanField(default=True) date_joined = models.DateTimeField(auto_now_add=True) USERNAME_FIELD = 'email' REQUIRED_FIELDS = [] objects = UserManager() def __str__(self): return self.email class APIUser(models.Model): username = models.CharField(max_length=256, unique=True) password = models.CharField(max_length=256) def check_password(self, password): return check_password(password, self.password) def __str__(self): return self.username class APIToken(models.Model): value = models.UUIDField(default=uuid.uuid4, unique=True) user = models.ForeignKey(APIUser, models.CASCADE) expiry = models.DateTimeField() created_at = models.DateTimeField(auto_now_add=True) def is_valid(self): return timezone.now() < self.expiry