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 libpass,
36 markupsafe,
37 passlib,
38 importlib-resources,
39 wtforms,
40
41 # tests
42 authlib,
43 flask-sqlalchemy-lite,
44 freezegun,
45 mongoengine,
46 mongomock,
47 peewee,
48 pytestCheckHook,
49 requests,
50 zxcvbn,
51}:
52
53buildPythonPackage rec {
54 pname = "flask-security";
55 version = "5.6.2";
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-mEl98Yp4USKu+z636yAb5p5qPBzcdQraZ/XaPbDoGWU=";
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 (if pythonOlder "3.12" then passlib else libpass)
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 authlib
107 flask-sqlalchemy-lite
108 freezegun
109 mongoengine
110 mongomock
111 peewee
112 pytestCheckHook
113 requests
114 zxcvbn
115 ]
116 ++ optional-dependencies.babel
117 ++ optional-dependencies.common
118 ++ optional-dependencies.fsqla
119 ++ optional-dependencies.mfa;
120
121 preCheck = ''
122 pybabel compile --domain flask_security -d flask_security/translations
123 '';
124
125 disabledTests = [
126 # needs /etc/resolv.conf
127 "test_login_email_whatever"
128 ];
129
130 pythonImportsCheck = [ "flask_security" ];
131
132 meta = {
133 changelog = "https://github.com/pallets-eco/flask-security/blob/${src.tag}/CHANGES.rst";
134 homepage = "https://github.com/pallets-eco/flask-security";
135 description = "Quickly add security features to your Flask application";
136 license = lib.licenses.mit;
137 maintainers = with lib.maintainers; [ gador ];
138 };
139}