62 lines
1.8 KiB
Python
62 lines
1.8 KiB
Python
# -*- coding: utf-8 -*-
|
|
from django.db import models
|
|
from django.conf import settings
|
|
from django.utils.translation import gettext_lazy as _
|
|
from django.core.exceptions import ValidationError
|
|
|
|
from model_utils.models import TimeStampedModel
|
|
|
|
from .validators import validate_monero_address, validate_bitcoin_address
|
|
from .managers import ChallengeManager
|
|
|
|
|
|
class Address(TimeStampedModel):
|
|
"""Addresses that belong to a given user account."""
|
|
|
|
NETWORK_MONERO = 1
|
|
NETWORK_BITCOIN = 2
|
|
|
|
NETWORKS = ((NETWORK_MONERO, "Monero"), (NETWORK_BITCOIN, "Bitcoin"))
|
|
|
|
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
|
|
network = models.PositiveSmallIntegerField(choices=NETWORKS, default=NETWORK_MONERO)
|
|
address = models.CharField(max_length=106, unique=True)
|
|
|
|
class Meta:
|
|
"""Meta definition for Address."""
|
|
|
|
verbose_name = _("Address")
|
|
verbose_name_plural = _("Addresses")
|
|
|
|
def __str__(self):
|
|
"""Unicode representation of Address."""
|
|
return self.address
|
|
|
|
def clean(self):
|
|
try:
|
|
if self.network == self.NETWORK_MONERO:
|
|
validate_monero_address(self.address)
|
|
else:
|
|
validate_bitcoin_address(self.address)
|
|
except ValidationError:
|
|
raise ValidationError(_("Invalid address for the given network"))
|
|
|
|
|
|
class Challenge(TimeStampedModel):
|
|
"""Challenges provided to users for authentication purposes."""
|
|
|
|
challenge = models.CharField(max_length=150)
|
|
expires = models.DateTimeField(null=False)
|
|
|
|
objects = ChallengeManager()
|
|
|
|
class Meta:
|
|
"""Meta definition for Challenge."""
|
|
|
|
verbose_name = _("Challenge")
|
|
verbose_name_plural = _("Challenges")
|
|
|
|
def __str__(self):
|
|
"""Unicode representation of Challenge."""
|
|
return self.challenge
|