Skip to content

Create tests for Nonce model and logic #43

@payton

Description

@payton

Write unit tests for...

  1. nonce_is_valid function
    def _nonce_is_valid(nonce: str) -> bool:
    """
    Check if given nonce exists and has not yet expired.
    :param nonce: The nonce string to validate.
    :return: True if valid else False.
    """
    n = Nonce.objects.get(value=nonce)
    is_valid = False
    if n is not None and n.expiration > datetime.datetime.now(tz=pytz.UTC):
    is_valid = True
    n.delete()
    return is_valid
  2. Nonce model itself
    class Nonce(models.Model):
    value = models.CharField(max_length=24, primary_key=True)
    expiration = models.DateTimeField()
    def __str__(self):
    return self.value
  3. Nonce scrubbing logic (with freezegun?)
    @ratelimit(key='ip', rate='5/m')
    @require_http_methods(["GET"])
    def nonce(request):
    now = datetime.now(tz=pytz.UTC)
    _scrub_nonce()
    n = Nonce(value=secrets.token_hex(12), expiration=now + timedelta(hours=12))
    n.save()
    return JsonResponse({"nonce": n.value})
    def _scrub_nonce():
    # Delete all expired nonce's
    for n in Nonce.objects.filter(expiration__lte=datetime.now(tz=pytz.UTC)):
    n.delete()

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions