1{ lib 2, buildPythonPackage 3, django 4, django-formtools 5, django-otp 6, django-phonenumber-field 7, fetchFromGitHub 8, phonenumbers 9, pydantic 10, pythonOlder 11, pythonRelaxDepsHook 12, qrcode 13, setuptools-scm 14, twilio 15, webauthn 16}: 17 18buildPythonPackage rec { 19 pname = "django-two-factor-auth"; 20 version = "1.15.1"; 21 format = "setuptools"; 22 23 disabled = pythonOlder "3.7"; 24 25 src = fetchFromGitHub { 26 owner = "jazzband"; 27 repo = "django-two-factor-auth"; 28 rev = "refs/tags/${version}"; 29 hash = "sha256-+E6kSD00ChPiRLT2i43dNlVkbvuR1vKkbSZfD1Bf3qc="; 30 }; 31 32 nativeBuildInputs = [ 33 pythonRelaxDepsHook 34 setuptools-scm 35 ]; 36 37 pythonRelaxDeps = [ 38 "django-phonenumber-field" 39 ]; 40 41 propagatedBuildInputs = [ 42 django 43 django-formtools 44 django-otp 45 django-phonenumber-field 46 qrcode 47 ]; 48 49 passthru.optional-dependencies = { 50 call = [ 51 twilio 52 ]; 53 sms = [ 54 twilio 55 ]; 56 webauthn = [ 57 pydantic 58 webauthn 59 ]; 60 # yubikey = [ 61 # django-otp-yubikey 62 # ]; 63 phonenumbers = [ 64 phonenumbers 65 ]; 66 # phonenumberslite = [ 67 # phonenumberslite 68 # ]; 69 }; 70 71 # Tests require internet connection 72 doCheck = false; 73 74 pythonImportsCheck = [ 75 "two_factor" 76 ]; 77 78 meta = with lib; { 79 description = "Complete Two-Factor Authentication for Django"; 80 homepage = "https://github.com/jazzband/django-two-factor-auth"; 81 changelog = "https://github.com/jazzband/django-two-factor-auth/releases/tag/${version}"; 82 license = licenses.mit; 83 maintainers = with maintainers; [ derdennisop ]; 84 }; 85}