1{
2 lib,
3 buildPythonPackage,
4 fetchFromGitHub,
5 pythonOlder,
6 flit-core,
7
8 # extras: babel
9 babel,
10 flask-babel,
11
12 # extras: common
13 argon2-cffi,
14 bcrypt,
15 bleach,
16 flask-mailman,
17
18 # extras: fsqla
19 flask-sqlalchemy,
20 sqlalchemy,
21 sqlalchemy-utils,
22
23 # extras: mfa
24 cryptography,
25 phonenumberslite,
26 webauthn,
27 qrcode,
28
29 # propagates
30 email-validator,
31 flask,
32 flask-login,
33 flask-principal,
34 flask-wtf,
35 markupsafe,
36 passlib,
37 importlib-resources,
38 wtforms,
39
40 # tests
41 authlib,
42 flask-sqlalchemy-lite,
43 freezegun,
44 mongoengine,
45 mongomock,
46 peewee,
47 pony,
48 pytestCheckHook,
49 requests,
50 zxcvbn,
51}:
52
53buildPythonPackage rec {
54 pname = "flask-security";
55 version = "5.6.1";
56 pyproject = true;
57
58 disabled = pythonOlder "3.9";
59
60 src = fetchFromGitHub {
61 owner = "pallets-eco";
62 repo = "flask-security";
63 tag = version;
64 hash = "sha256-sAO8wQd/YgPbi5+nQmkmmcTg7DJPYdUoT/EOMUpzr/M=";
65 };
66
67 build-system = [ flit-core ];
68
69 dependencies = [
70 email-validator
71 flask
72 flask-login
73 flask-principal
74 flask-wtf
75 markupsafe
76 passlib
77 importlib-resources
78 wtforms
79 ];
80
81 optional-dependencies = {
82 babel = [
83 babel
84 flask-babel
85 ];
86 common = [
87 argon2-cffi
88 bcrypt
89 bleach
90 flask-mailman
91 ];
92 fsqla = [
93 flask-sqlalchemy
94 sqlalchemy
95 sqlalchemy-utils
96 ];
97 mfa = [
98 cryptography
99 phonenumberslite
100 webauthn
101 qrcode
102 ];
103 };
104
105 nativeCheckInputs =
106 [
107 authlib
108 flask-sqlalchemy-lite
109 freezegun
110 mongoengine
111 mongomock
112 peewee
113 pony
114 pytestCheckHook
115 requests
116 zxcvbn
117 ]
118 ++ optional-dependencies.babel
119 ++ optional-dependencies.common
120 ++ optional-dependencies.fsqla
121 ++ optional-dependencies.mfa;
122
123 preCheck = ''
124 pybabel compile --domain flask_security -d flask_security/translations
125 '';
126
127 disabledTests = [
128 # needs /etc/resolv.conf
129 "test_login_email_whatever"
130 ];
131
132 pythonImportsCheck = [ "flask_security" ];
133
134 meta = with lib; {
135 changelog = "https://github.com/pallets-eco/flask-security/blob/${version}/CHANGES.rst";
136 homepage = "https://github.com/pallets-eco/flask-security";
137 description = "Quickly add security features to your Flask application";
138 license = licenses.mit;
139 maintainers = with maintainers; [ gador ];
140 };
141}