arpakitlib 1.8.40__py3-none-any.whl → 1.8.41__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- arpakitlib/_arpakit_project_template_v_5/arpakitlib_project_template_info.json +1 -1
- arpakitlib/_arpakit_project_template_v_5/project/sandbox/sandbox_1.py +2 -5
- arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/admin_authorize.py +37 -18
- arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/user.py +1 -0
- arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/user.py +5 -0
- {arpakitlib-1.8.40.dist-info → arpakitlib-1.8.41.dist-info}/METADATA +1 -1
- {arpakitlib-1.8.40.dist-info → arpakitlib-1.8.41.dist-info}/RECORD +10 -10
- {arpakitlib-1.8.40.dist-info → arpakitlib-1.8.41.dist-info}/LICENSE +0 -0
- {arpakitlib-1.8.40.dist-info → arpakitlib-1.8.41.dist-info}/WHEEL +0 -0
- {arpakitlib-1.8.40.dist-info → arpakitlib-1.8.41.dist-info}/entry_points.txt +0 -0
@@ -1,13 +1,10 @@
|
|
1
1
|
import asyncio
|
2
2
|
|
3
|
-
import
|
4
|
-
|
5
|
-
from project.sqlalchemy_db_.sqlalchemy_model import SimpleDBM
|
3
|
+
from project.sqlalchemy_db_.sqlalchemy_model import UserDBM
|
6
4
|
|
7
5
|
|
8
6
|
def __sandbox():
|
9
|
-
|
10
|
-
print(a)
|
7
|
+
print(UserDBM.Roles.admin)
|
11
8
|
|
12
9
|
|
13
10
|
async def __async_sandbox():
|
@@ -1,14 +1,15 @@
|
|
1
1
|
import logging
|
2
2
|
|
3
3
|
import fastapi
|
4
|
+
import sqlalchemy
|
4
5
|
from sqladmin.authentication import AuthenticationBackend
|
5
6
|
|
6
|
-
from arpakitlib.ar_str_util import make_none_if_blank
|
7
|
+
from arpakitlib.ar_str_util import make_none_if_blank, strip_if_not_none
|
7
8
|
from project.core.settings import get_cached_settings
|
8
9
|
from project.sqlalchemy_db_.sqlalchemy_db import get_cached_sqlalchemy_db
|
9
10
|
from project.sqlalchemy_db_.sqlalchemy_model import UserTokenDBM, UserDBM
|
10
11
|
|
11
|
-
|
12
|
+
SQLADMIN_AUTHORIZE_KEY = "sqladmin_authorize_key"
|
12
13
|
|
13
14
|
|
14
15
|
class SQLAdminAuth(AuthenticationBackend):
|
@@ -19,15 +20,8 @@ class SQLAdminAuth(AuthenticationBackend):
|
|
19
20
|
async def login(self, request: fastapi.Request) -> bool:
|
20
21
|
form = await request.form()
|
21
22
|
|
22
|
-
username = form.get("username")
|
23
|
-
|
24
|
-
username = username.strip()
|
25
|
-
username = make_none_if_blank(username)
|
26
|
-
|
27
|
-
password = form.get("password")
|
28
|
-
if password:
|
29
|
-
password = password.strip()
|
30
|
-
password = make_none_if_blank(password)
|
23
|
+
username = make_none_if_blank(strip_if_not_none(form.get("username")))
|
24
|
+
password = make_none_if_blank(strip_if_not_none(form.get("password")))
|
31
25
|
|
32
26
|
if (
|
33
27
|
get_cached_settings().sqladmin_authorize_keys is not None
|
@@ -43,23 +37,46 @@ class SQLAdminAuth(AuthenticationBackend):
|
|
43
37
|
)
|
44
38
|
):
|
45
39
|
if is_username_correct is True:
|
46
|
-
request.session.update({
|
40
|
+
request.session.update({SQLADMIN_AUTHORIZE_KEY: username})
|
47
41
|
elif is_password_correct is True:
|
48
|
-
request.session.update({
|
42
|
+
request.session.update({SQLADMIN_AUTHORIZE_KEY: password})
|
49
43
|
return True
|
50
44
|
|
51
45
|
if get_cached_sqlalchemy_db() is not None and (username is not None or password is not None):
|
52
46
|
with get_cached_sqlalchemy_db().new_session() as session:
|
53
|
-
query = session.query(UserTokenDBM)
|
47
|
+
query = session.query(UserTokenDBM).filter(UserTokenDBM.is_active == True)
|
54
48
|
if username is not None:
|
55
49
|
query = query.filter(UserTokenDBM.value == username)
|
56
50
|
elif password is not None:
|
57
51
|
query = query.filter(UserTokenDBM.value == password)
|
52
|
+
else:
|
53
|
+
raise ValueError("no username and no password")
|
58
54
|
user_token = query.one_or_none()
|
59
55
|
if user_token is not None and user_token.user.compare_roles(UserDBM.Roles.admin):
|
60
|
-
request.session.update({
|
56
|
+
request.session.update({SQLADMIN_AUTHORIZE_KEY: user_token.value})
|
61
57
|
return True
|
62
58
|
|
59
|
+
if get_cached_sqlalchemy_db() is not None and (username is not None and password is not None):
|
60
|
+
query = session.query(UserDBM)
|
61
|
+
query = query.filter(UserDBM.is_active == True)
|
62
|
+
_or_conditions = [
|
63
|
+
UserDBM.long_id == username,
|
64
|
+
UserDBM.slug == username,
|
65
|
+
UserDBM.email == username,
|
66
|
+
]
|
67
|
+
if username.isdigit():
|
68
|
+
_or_conditions.append(UserDBM.id == int(username))
|
69
|
+
query = query.filter(sqlalchemy.or_(*_or_conditions))
|
70
|
+
query = query.filter(UserDBM.password == password)
|
71
|
+
user_dbm: UserDBM | None = query.one_or_none()
|
72
|
+
if user_dbm is not None and user_dbm.compare_roles(UserDBM.Roles.admin):
|
73
|
+
new_user_token_dbm = UserTokenDBM(user_id=user_dbm.id)
|
74
|
+
session.add(new_user_token_dbm)
|
75
|
+
session.commit()
|
76
|
+
session.refresh(new_user_token_dbm)
|
77
|
+
request.session.update({SQLADMIN_AUTHORIZE_KEY: new_user_token_dbm.value})
|
78
|
+
return True
|
79
|
+
|
63
80
|
return False
|
64
81
|
|
65
82
|
async def logout(self, request: fastapi.Request) -> bool:
|
@@ -67,7 +84,7 @@ class SQLAdminAuth(AuthenticationBackend):
|
|
67
84
|
return True
|
68
85
|
|
69
86
|
async def authenticate(self, request: fastapi.Request) -> bool:
|
70
|
-
sqladmin_auth_key = request.session.get(
|
87
|
+
sqladmin_auth_key = request.session.get(SQLADMIN_AUTHORIZE_KEY)
|
71
88
|
if sqladmin_auth_key:
|
72
89
|
sqladmin_auth_key = sqladmin_auth_key.strip()
|
73
90
|
sqladmin_auth_key = make_none_if_blank(sqladmin_auth_key)
|
@@ -82,9 +99,11 @@ class SQLAdminAuth(AuthenticationBackend):
|
|
82
99
|
UserTokenDBM
|
83
100
|
).filter(
|
84
101
|
UserTokenDBM.value == sqladmin_auth_key
|
102
|
+
).filter(
|
103
|
+
UserTokenDBM.is_active == True
|
85
104
|
)
|
86
|
-
|
87
|
-
if
|
105
|
+
user_token_dbm: UserTokenDBM | None = query.one_or_none()
|
106
|
+
if user_token_dbm is not None and user_token_dbm.user.compare_roles(UserDBM.Roles.admin):
|
88
107
|
return True
|
89
108
|
|
90
109
|
return False
|
@@ -40,6 +40,11 @@ class UserDBM(SimpleDBM):
|
|
40
40
|
server_default="true",
|
41
41
|
nullable=False
|
42
42
|
)
|
43
|
+
password: Mapped[str | None] = mapped_column(
|
44
|
+
sqlalchemy.TEXT,
|
45
|
+
index=True,
|
46
|
+
nullable=True
|
47
|
+
)
|
43
48
|
tg_id: Mapped[int | None] = mapped_column(
|
44
49
|
sqlalchemy.BIGINT,
|
45
50
|
unique=True,
|
@@ -8,7 +8,7 @@ arpakitlib/_arpakit_project_template_v_5/alembic/env.py,sha256=Qesmnj5A2kB-Doeuf
|
|
8
8
|
arpakitlib/_arpakit_project_template_v_5/alembic/script.py.mako,sha256=MEqL-2qATlST9TAOeYgscMn1uy6HUS9NFvDgl93dMj8,635
|
9
9
|
arpakitlib/_arpakit_project_template_v_5/alembic/versions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
10
10
|
arpakitlib/_arpakit_project_template_v_5/alembic.ini,sha256=8fuyeEvGBiPGbxEFy8ISBV3xX_fgVmuhEGpB10_B5Uo,3733
|
11
|
-
arpakitlib/_arpakit_project_template_v_5/arpakitlib_project_template_info.json,sha256=
|
11
|
+
arpakitlib/_arpakit_project_template_v_5/arpakitlib_project_template_info.json,sha256=UxuwFiz4xIUfSWNYNCUUkJPV25uB6wWHtAnFWUT0O3Y,97
|
12
12
|
arpakitlib/_arpakit_project_template_v_5/command/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
13
13
|
arpakitlib/_arpakit_project_template_v_5/command/alembic_history.sh,sha256=OMnDNtHIksGh9iavWnzbtxcudZW4vjdcISsBXvzZSPw,22
|
14
14
|
arpakitlib/_arpakit_project_template_v_5/command/alembic_revision_autogenerate.sh,sha256=yW2i-SBOtBx15Ya0poVQqKkJM5t2JZp06r9AEW-DmGE,46
|
@@ -198,7 +198,7 @@ arpakitlib/_arpakit_project_template_v_5/project/resource/static/swagger-ui/swag
|
|
198
198
|
arpakitlib/_arpakit_project_template_v_5/project/resource/static/swagger-ui/swagger-ui.js,sha256=yHKu9z0C2kOO5j9n9D8oQzuBLeEoMGrFcMWQN27V554,339285
|
199
199
|
arpakitlib/_arpakit_project_template_v_5/project/resource/static/swagger-ui/swagger-ui.js.map,sha256=jeX-b8zAm2jsTGGCznrc49McbLKSfXspwECPhEAp0Xc,1159444
|
200
200
|
arpakitlib/_arpakit_project_template_v_5/project/sandbox/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
201
|
-
arpakitlib/_arpakit_project_template_v_5/project/sandbox/sandbox_1.py,sha256=
|
201
|
+
arpakitlib/_arpakit_project_template_v_5/project/sandbox/sandbox_1.py,sha256=SJ_VICHmbPL6duwOrT2kRnnH_MQrCvbfMRPTS05wazc,246
|
202
202
|
arpakitlib/_arpakit_project_template_v_5/project/sandbox/sandbox_2.py,sha256=xKSp7tIBu3Ffp_kgJkwVtdam3BcoFZ44JPVHoRRaP0E,163
|
203
203
|
arpakitlib/_arpakit_project_template_v_5/project/sandbox/sandbox_3.py,sha256=xKSp7tIBu3Ffp_kgJkwVtdam3BcoFZ44JPVHoRRaP0E,163
|
204
204
|
arpakitlib/_arpakit_project_template_v_5/project/sandbox/sandbox_4.py,sha256=xKSp7tIBu3Ffp_kgJkwVtdam3BcoFZ44JPVHoRRaP0E,163
|
@@ -215,7 +215,7 @@ arpakitlib/_arpakit_project_template_v_5/project/site/router/__init__.py,sha256=
|
|
215
215
|
arpakitlib/_arpakit_project_template_v_5/project/site/router/main_router.py,sha256=J5jNfgd-3OiWTtuubimEUz6wrOogupj9PkUdDmwz-2U,62
|
216
216
|
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
217
217
|
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/add_admin_in_app.py,sha256=JTXLf18DQVsZtoe6yFpZIVJI95rgJofnTe9YKyVwwhQ,851
|
218
|
-
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/admin_authorize.py,sha256=
|
218
|
+
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/admin_authorize.py,sha256=S5BtbbLEl-D0DlwDPOkWYpjqQhFaUoqvvlElAmbP25c,4937
|
219
219
|
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/asgi.py,sha256=DRlRPkcOGXOccfP73oKEXolZTsc5VWdQgEG-qoW03ms,99
|
220
220
|
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/create_sqladmin_app.py,sha256=x5F8--5KA4cmTrb6kAAmp6fVd2TiqxPOzxqUkSEhSG4,1298
|
221
221
|
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/event.py,sha256=LjAUYNlsX9Sj_QLMzYuTQbbYYbIMHhbsSjTXt-G7lOE,849
|
@@ -224,7 +224,7 @@ arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/api_key.py
|
|
224
224
|
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/common.py,sha256=US1tueTCPvAdse6TLT6yRLUHbvwGGagApYhFJzE_6Yc,576
|
225
225
|
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/operation.py,sha256=ZPoq3SueGJfR_aWk-a6dIHRNmO1Qa-8kHUW0aR4ZW3g,920
|
226
226
|
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/story_log.py,sha256=GMSICxW_A8RTCtoENDEjce-R8GRLKtHa-OU5OLMdH5s,720
|
227
|
-
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/user.py,sha256=
|
227
|
+
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/user.py,sha256=LYPqVRpaxmicWV3_STW7Ko56vrdeJizeAINknBN12bM,797
|
228
228
|
arpakitlib/_arpakit_project_template_v_5/project/sqladmin_/model_view/user_token.py,sha256=OvvWwzZV6QJGt5XL1KPgPSVN5TvBeawgbWSFYX81KUQ,802
|
229
229
|
arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
230
230
|
arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/const.py,sha256=dcvj5C9E2F2KCsGZPBBncQf_EvVJAC1qQgnyD8P4ZEw,6
|
@@ -234,7 +234,7 @@ arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model
|
|
234
234
|
arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/common.py,sha256=xhMxNea8ndjmdsNwp_a9L_VUkkRb8jjVLhczxDasNss,2090
|
235
235
|
arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/operation.py,sha256=rwLyqChjx_EOsw9nj333NFxZJ1Qpfj9Yz6POO4Wq690,3670
|
236
236
|
arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/story_log.py,sha256=iarF0bREQAlXlqw0XvTEPkYVAUdRz4idAZEOnqISfCY,1451
|
237
|
-
arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/user.py,sha256=
|
237
|
+
arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/user.py,sha256=_pqpJ9ClDguwwi-bWaP1BYkT2vgaIaSw_cqvHvQRFKE,5032
|
238
238
|
arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/sqlalchemy_model/user_token.py,sha256=CRcpUp93WvcFqOsCcLMEVexWMzUYUtImukDZSeBcJtc,1617
|
239
239
|
arpakitlib/_arpakit_project_template_v_5/project/sqlalchemy_db_/util.py,sha256=QSA_nT6aWdtE412-Uj3VTd7yh3dzS4HugDK9FivjTPo,570
|
240
240
|
arpakitlib/_arpakit_project_template_v_5/project/test_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -369,8 +369,8 @@ arpakitlib/ar_type_util.py,sha256=Cs_tef-Fc5xeyAF54KgISCsP11NHyzIsglm4S3Xx7iM,40
|
|
369
369
|
arpakitlib/ar_wata_api_client.py,sha256=gdHOqDbuqxhTjVDtRW1DvkRJLdDofCrOq51GTctzLns,242
|
370
370
|
arpakitlib/ar_yookassa_api_client_util.py,sha256=VozuZeCJjmLd1zj2BdC9WfiAQ3XYOrIMsdpNK-AUlm0,5347
|
371
371
|
arpakitlib/ar_zabbix_api_client_util.py,sha256=AV7yxzG46blyQQDI-is0BwHfzuZlrkiHOkuOpfzQ90A,7934
|
372
|
-
arpakitlib-1.8.
|
373
|
-
arpakitlib-1.8.
|
374
|
-
arpakitlib-1.8.
|
375
|
-
arpakitlib-1.8.
|
376
|
-
arpakitlib-1.8.
|
372
|
+
arpakitlib-1.8.41.dist-info/LICENSE,sha256=GPEDQMam2r7FSTYqM1mm7aKnxLaWcBotH7UvQtea-ec,11355
|
373
|
+
arpakitlib-1.8.41.dist-info/METADATA,sha256=zuwhjzTci1nBmftTugfwsuVZpCsWrR7v0ordbnWOzRk,3477
|
374
|
+
arpakitlib-1.8.41.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
|
375
|
+
arpakitlib-1.8.41.dist-info/entry_points.txt,sha256=36xqR3PJFT2kuwjkM_EqoIy0qFUDPKSm_mJaI7emewE,87
|
376
|
+
arpakitlib-1.8.41.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|