brilliance-admin 0.44.15__py3-none-any.whl → 0.44.16__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.
- brilliance_admin/api/views/auth.py +1 -1
- brilliance_admin/auth.py +1 -1
- brilliance_admin/integrations/sqlalchemy/auth.py +24 -2
- brilliance_admin/locales/ru.yml +2 -0
- {brilliance_admin-0.44.15.dist-info → brilliance_admin-0.44.16.dist-info}/METADATA +1 -1
- {brilliance_admin-0.44.15.dist-info → brilliance_admin-0.44.16.dist-info}/RECORD +9 -9
- {brilliance_admin-0.44.15.dist-info → brilliance_admin-0.44.16.dist-info}/WHEEL +0 -0
- {brilliance_admin-0.44.15.dist-info → brilliance_admin-0.44.16.dist-info}/licenses/LICENSE +0 -0
- {brilliance_admin-0.44.15.dist-info → brilliance_admin-0.44.16.dist-info}/top_level.txt +0 -0
|
@@ -22,7 +22,7 @@ async def login(request: Request, auth_data: AuthData) -> AuthResult:
|
|
|
22
22
|
|
|
23
23
|
auth: AdminAuthentication = schema.auth
|
|
24
24
|
try:
|
|
25
|
-
result: AuthResult = await auth.login(auth_data)
|
|
25
|
+
result: AuthResult = await auth.login(auth_data, debug=schema.debug)
|
|
26
26
|
except AdminAPIException as e:
|
|
27
27
|
return JSONResponse(e.get_error().model_dump(mode='json', context=context), status_code=e.status_code)
|
|
28
28
|
|
brilliance_admin/auth.py
CHANGED
|
@@ -25,7 +25,7 @@ class AuthResult(BaseModel):
|
|
|
25
25
|
|
|
26
26
|
|
|
27
27
|
class AdminAuthentication(abc.ABC):
|
|
28
|
-
async def login(self, data: AuthData) -> AuthResult:
|
|
28
|
+
async def login(self, data: AuthData, debug: bool = False) -> AuthResult:
|
|
29
29
|
raise NotImplementedError('Login is not implemented')
|
|
30
30
|
|
|
31
31
|
async def authenticate(self, headers: dict) -> UserABC:
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
from typing import Callable
|
|
2
|
+
|
|
1
3
|
from brilliance_admin.auth import AdminAuthentication, AuthData, AuthResult, UserABC, UserResult
|
|
2
4
|
from brilliance_admin.exceptions import AdminAPIException, APIError
|
|
3
5
|
from brilliance_admin.translations import TranslateText as _
|
|
@@ -12,11 +14,18 @@ class SQLAlchemyJWTAdminAuthentication(AdminAuthentication):
|
|
|
12
14
|
user_model = None
|
|
13
15
|
pk_name = None
|
|
14
16
|
|
|
15
|
-
|
|
17
|
+
password_validator: Callable[[UserABC, str], bool] | None = None
|
|
18
|
+
|
|
19
|
+
def __init__(self, secret: str, db_async_session, user_model, pk_name='id', password_validator=None):
|
|
16
20
|
self.pk_name = pk_name
|
|
17
21
|
self.secret = secret
|
|
18
22
|
self.db_async_session = db_async_session
|
|
19
23
|
self.user_model = user_model
|
|
24
|
+
self.password_validator = password_validator
|
|
25
|
+
|
|
26
|
+
if self.password_validator:
|
|
27
|
+
if not callable(self.password_validator):
|
|
28
|
+
raise ValueError("password_validator must be callable")
|
|
20
29
|
|
|
21
30
|
if not isinstance(secret, str) or not secret:
|
|
22
31
|
raise ValueError("JWT secret must be a non-empty string")
|
|
@@ -41,7 +50,7 @@ class SQLAlchemyJWTAdminAuthentication(AdminAuthentication):
|
|
|
41
50
|
msg = f"user_model is missing required columns: {', '.join(sorted(missing))}"
|
|
42
51
|
raise ValueError(msg)
|
|
43
52
|
|
|
44
|
-
async def login(self, data: AuthData) -> AuthResult:
|
|
53
|
+
async def login(self, data: AuthData, debug: bool = False) -> AuthResult:
|
|
45
54
|
# pylint: disable=import-outside-toplevel
|
|
46
55
|
from sqlalchemy import select
|
|
47
56
|
|
|
@@ -65,6 +74,19 @@ class SQLAlchemyJWTAdminAuthentication(AdminAuthentication):
|
|
|
65
74
|
if not user:
|
|
66
75
|
raise AdminAPIException(APIError(code="user_not_found"), status_code=401)
|
|
67
76
|
|
|
77
|
+
try:
|
|
78
|
+
if self.password_validator:
|
|
79
|
+
if not self.password_validator(user, data.password):
|
|
80
|
+
raise AdminAPIException(APIError(code="user_not_found"), status_code=401)
|
|
81
|
+
|
|
82
|
+
except AdminAPIException as e:
|
|
83
|
+
raise e
|
|
84
|
+
except Exception as e:
|
|
85
|
+
msg = _('errors.password_exception') % {
|
|
86
|
+
'error_type': str(e) if schema.debug else type(e).__name__,
|
|
87
|
+
}
|
|
88
|
+
raise AdminAPIException(APIError(message=msg, code="password_exception"), status_code=500) from e
|
|
89
|
+
|
|
68
90
|
if not user.is_admin:
|
|
69
91
|
raise AdminAPIException(APIError(code="not_an_admin"), status_code=401)
|
|
70
92
|
|
brilliance_admin/locales/ru.yml
CHANGED
|
@@ -11,6 +11,8 @@ errors:
|
|
|
11
11
|
db_error_retrieve: 'Ошибка получения записи из базы данных: %(error_type)s'
|
|
12
12
|
db_error_list: 'Ошибка получения данных таблицы из базы данных: %(error_type)s'
|
|
13
13
|
|
|
14
|
+
password_exception: 'Произошла неизвестная ошибка при проверке пароля: %(error_type)s'
|
|
15
|
+
|
|
14
16
|
connection_refused_error: 'Ошибка подключения к базе данных: %(error)s'
|
|
15
17
|
filters_exception: 'Произошла неизвестная техническая ошибка при фильтрации данных: %(error_type)s'
|
|
16
18
|
method_not_allowed: 'Ошибка, данный метод недоступен.'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: brilliance-admin
|
|
3
|
-
Version: 0.44.
|
|
3
|
+
Version: 0.44.16
|
|
4
4
|
Summary: Simple and lightweight data managment framework powered by FastAPI and Vue3 Vuetify all-in-one. Some call it heavenly in its brilliance.
|
|
5
5
|
License-Expression: MIT
|
|
6
6
|
Requires-Python: >=3.10
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
brilliance_admin/__init__.py,sha256=qxGzLVhFNm2FKL2lVt7bEFb6pTPqyXEQvUsDfyfv6SM,183
|
|
2
|
-
brilliance_admin/auth.py,sha256=
|
|
2
|
+
brilliance_admin/auth.py,sha256=3I844ZF87f-V73LoQf62BY6AqrqoU986_gGJq0X4poo,694
|
|
3
3
|
brilliance_admin/docs.py,sha256=fKeJKuiCCi1jHRmNcmkuDD6_2di7bwc6-w8V1VCTu0s,1231
|
|
4
4
|
brilliance_admin/exceptions.py,sha256=CJGvpo7EiaX3RVAEUDpwgH_Tuw8kY7tMy57pVcnBxak,947
|
|
5
5
|
brilliance_admin/translations.py,sha256=r5xy3Iara_7m2E7rgG8goPFDcKdPLUGAKIWIt6TdulA,3906
|
|
@@ -8,7 +8,7 @@ brilliance_admin/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
|
|
|
8
8
|
brilliance_admin/api/routers.py,sha256=S8IV7JxA1wLspYn3qxESMI3Qt6UhQK-Gy0PsZi8hcwQ,819
|
|
9
9
|
brilliance_admin/api/utils.py,sha256=ezvHK49OlpCdT9fLB41Y1nswZDLdzC3zTcQtGtuTYUk,999
|
|
10
10
|
brilliance_admin/api/views/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
11
|
-
brilliance_admin/api/views/auth.py,sha256=
|
|
11
|
+
brilliance_admin/api/views/auth.py,sha256=op52EpxxiE7sUoJPFSQXDd-jZc1ff-ZX4g1qoggEbtg,1153
|
|
12
12
|
brilliance_admin/api/views/autocomplete.py,sha256=lpFDq46OCuiPhkUedv4y6GmJQVy3iX4P-di_-GMzabY,1516
|
|
13
13
|
brilliance_admin/api/views/dashboard.py,sha256=tLFdbKrePH-A91HNCN4F_FXdlRQ1tA9D2tGLvzDOoFM,1389
|
|
14
14
|
brilliance_admin/api/views/index.py,sha256=DkMshrs5zmqpbbF9G2RhqeLGFKMrkrAmQ6nnba7aLl8,1400
|
|
@@ -17,7 +17,7 @@ brilliance_admin/api/views/settings.py,sha256=2A9suZQONEtW9LkFban29Fe5ipQaaGT0Cz
|
|
|
17
17
|
brilliance_admin/api/views/table.py,sha256=dLo_ic9LPeAvkeelbkHZs9oC9g9ZlXPPMiQMszlwDIQ,5979
|
|
18
18
|
brilliance_admin/integrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
19
19
|
brilliance_admin/integrations/sqlalchemy/__init__.py,sha256=AmQHOvegS6_uaE4xYDHzRMdA9PyHn0cCt1s1IWc9G2U,318
|
|
20
|
-
brilliance_admin/integrations/sqlalchemy/auth.py,sha256=
|
|
20
|
+
brilliance_admin/integrations/sqlalchemy/auth.py,sha256=nvTZd1HW-2_vs672ohcbWLP8pA2bHDXd66tuEkD-2f0,5853
|
|
21
21
|
brilliance_admin/integrations/sqlalchemy/autocomplete.py,sha256=IKZwdjb5tM_pA5PBUhwYo4n_8nEfy_WcSu8Yu4ftarI,1572
|
|
22
22
|
brilliance_admin/integrations/sqlalchemy/fields.py,sha256=7D0E4-12rqraqHek2yNuHzRdO7hhxjp0edhJu-mTnWQ,9897
|
|
23
23
|
brilliance_admin/integrations/sqlalchemy/fields_schema.py,sha256=7WkOrt5dVvrsZppNZEZS8QaQPMSrfcWChwOaOFSRVOg,11419
|
|
@@ -29,7 +29,7 @@ brilliance_admin/integrations/sqlalchemy/table/list.py,sha256=Y76B5CFqQb2nfV0i0M
|
|
|
29
29
|
brilliance_admin/integrations/sqlalchemy/table/retrieve.py,sha256=EKwGH8Mz3Jd-uR43WibD3hFiZVGK_ra_5Cu5XeoEf6Y,3508
|
|
30
30
|
brilliance_admin/integrations/sqlalchemy/table/update.py,sha256=NxcYPqRZbm_BM-4QHzEbhgAhYSs3SXzYMMzKCalqahU,3800
|
|
31
31
|
brilliance_admin/locales/en.yml,sha256=YBjkq2Tm0KjXKOMgnIM5etO42Pkm8mDdQlvmpITwsA4,1453
|
|
32
|
-
brilliance_admin/locales/ru.yml,sha256=
|
|
32
|
+
brilliance_admin/locales/ru.yml,sha256=__reAnXeIo3KDqiyAxL4xp4rbsclWcYS002sK8iRAps,2185
|
|
33
33
|
brilliance_admin/schema/__init__.py,sha256=H5UFO5dub_k5id8WdGRVy9G8RnqZuBSjw9XgPafj1VQ,293
|
|
34
34
|
brilliance_admin/schema/admin_schema.py,sha256=SGdNuYUKrwAc6SA4RYh8TgSrod5RuY7lpXKzmY1SHZ4,6812
|
|
35
35
|
brilliance_admin/schema/category.py,sha256=UTnUexbCHe9vfwi3ygX34YkLAH2ixfMWqe4H6xos0fI,6604
|
|
@@ -66,8 +66,8 @@ brilliance_admin/static/tinymce/plugins/codesample/css/prism.css,sha256=exAdMtHb
|
|
|
66
66
|
brilliance_admin/static/tinymce/plugins/customLink/plugin.js,sha256=illBNpnHDkBsLG6wo_jDPF6z7CGnO1MQWUoDwZKy6vQ,5589
|
|
67
67
|
brilliance_admin/static/tinymce/plugins/customLink/css/link.css,sha256=gh5nvY8Z92hJfCEBPnIm4jIPCcKKbJnab-30oIfX7Hc,56
|
|
68
68
|
brilliance_admin/templates/index.html,sha256=RKvUZ386hjV5EV09vneHhFY3BrwmMsTsm9wUpPV7D08,1294
|
|
69
|
-
brilliance_admin-0.44.
|
|
70
|
-
brilliance_admin-0.44.
|
|
71
|
-
brilliance_admin-0.44.
|
|
72
|
-
brilliance_admin-0.44.
|
|
73
|
-
brilliance_admin-0.44.
|
|
69
|
+
brilliance_admin-0.44.16.dist-info/licenses/LICENSE,sha256=rgWE5Cxk53W0PhTOVmcQedABEWN1QMG-PRz3fz531sE,1074
|
|
70
|
+
brilliance_admin-0.44.16.dist-info/METADATA,sha256=dEpRtxx5sqZksbv5YHyZlyTL2SI5Xg9ShTzNK29MvRE,7449
|
|
71
|
+
brilliance_admin-0.44.16.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
72
|
+
brilliance_admin-0.44.16.dist-info/top_level.txt,sha256=almFFSWrVYieI3i54hYL0fMUaeuIYiazS2Kx4wtK-ns,17
|
|
73
|
+
brilliance_admin-0.44.16.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|