dmart 1.4.3__py3-none-any.whl → 1.4.5__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.
- alembic/versions/eb5f1ec65156_adding_user_locked_to_device.py +1 -1
- api/managed/utils.py +28 -1
- api/user/router.py +13 -1
- cxb/__init__.py +0 -0
- cxb/client/__init__.py +0 -0
- cxb/client/assets/@codemirror-Rn7_6DkE.js +10 -0
- cxb/client/assets/@edraj-CS4NwVbD.js +1 -0
- cxb/client/assets/@floating-ui-BwwcF-xh.js +1 -0
- cxb/client/assets/@formatjs-yKEsAtjs.js +1 -0
- cxb/client/assets/@fortawesome-DRW1UCdr.js +9 -0
- cxb/client/assets/@jsonquerylang-laKNoFFq.js +12 -0
- cxb/client/assets/@lezer-za4Q-8Ew.js +1 -0
- cxb/client/assets/@marijn-DXwl3gUT.js +1 -0
- cxb/client/assets/@popperjs-l0sNRNKZ.js +1 -0
- cxb/client/assets/@replit--ERk53eB.js +1 -0
- cxb/client/assets/@roxi-CGMFK4i8.js +6 -0
- cxb/client/assets/@typewriter-cCzskkIv.js +17 -0
- cxb/client/assets/@zerodevx-BlBZjKxu.js +1 -0
- cxb/client/assets/@zerodevx-CVEpe6WZ.css +1 -0
- cxb/client/assets/BreadCrumbLite-DAhOx38v.js +1 -0
- cxb/client/assets/EntryRenderer-25YDhRen.js +32 -0
- cxb/client/assets/EntryRenderer-DXytdFp9.css +1 -0
- cxb/client/assets/ListView-BpAycA2h.js +16 -0
- cxb/client/assets/ListView-U8of-_c-.css +1 -0
- cxb/client/assets/Prism--hMplq-p.js +3 -0
- cxb/client/assets/Prism-Uh6uStUw.css +1 -0
- cxb/client/assets/Table2Cols-BsbwicQm.js +1 -0
- cxb/client/assets/_..-BvT6vdHa.css +1 -0
- cxb/client/assets/_...404_-fuLH_rX9.js +2 -0
- cxb/client/assets/_...fallback_-Ba_NLmAE.js +1 -0
- cxb/client/assets/_module-Bfk8MiCs.js +3 -0
- cxb/client/assets/_module-CEW0D5oI.js +4 -0
- cxb/client/assets/_module-Dgq0ZVtz.js +1 -0
- cxb/client/assets/ajv-Cpj98o6Y.js +1 -0
- cxb/client/assets/axios-CG2WSiiR.js +6 -0
- cxb/client/assets/clsx-B-dksMZM.js +1 -0
- cxb/client/assets/codemirror-wrapped-line-indent-DPhKvljI.js +1 -0
- cxb/client/assets/compare-C3AjiGFR.js +1 -0
- cxb/client/assets/compute-scroll-into-view-Bl8rNFhg.js +1 -0
- cxb/client/assets/consolite-DlCuI0F9.js +1 -0
- cxb/client/assets/crelt-C8TCjufn.js +1 -0
- cxb/client/assets/date-fns-l0sNRNKZ.js +1 -0
- cxb/client/assets/deepmerge-rn4rBaHU.js +1 -0
- cxb/client/assets/dmart_services-AL6-IdDE.js +1 -0
- cxb/client/assets/downloadFile-D08i0YDh.js +1 -0
- cxb/client/assets/easy-signal-BiPFIK3O.js +1 -0
- cxb/client/assets/esm-env-rsSWfq8L.js +1 -0
- cxb/client/assets/export-OF_rTiXu.js +1 -0
- cxb/client/assets/fast-deep-equal-l0sNRNKZ.js +1 -0
- cxb/client/assets/fast-diff-C-IidNf4.js +1 -0
- cxb/client/assets/fast-uri-l0sNRNKZ.js +1 -0
- cxb/client/assets/flowbite-svelte-BLvjb-sa.js +1 -0
- cxb/client/assets/flowbite-svelte-CD54FDqW.css +1 -0
- cxb/client/assets/flowbite-svelte-icons-BI8GVhw_.js +1 -0
- cxb/client/assets/github-slugger-CQ4oX9Ud.js +1 -0
- cxb/client/assets/global-igKv-1g9.js +1 -0
- cxb/client/assets/hookar-BMRD9G9H.js +1 -0
- cxb/client/assets/immutable-json-patch-DtRO2E_S.js +1 -0
- cxb/client/assets/import-1vE3gBat.js +1 -0
- cxb/client/assets/index-B-eTh-ZX.js +1 -0
- cxb/client/assets/index-BVyxzKtH.js +1 -0
- cxb/client/assets/index-BdeNM69f.js +1 -0
- cxb/client/assets/index-C6cPO4op.js +1 -0
- cxb/client/assets/index-CC-A1ipE.js +1 -0
- cxb/client/assets/index-CTxJ-lDp.js +1 -0
- cxb/client/assets/index-Cd-F5j_k.js +1 -0
- cxb/client/assets/index-D742rwaM.js +1 -0
- cxb/client/assets/index-DTfhnhwd.js +1 -0
- cxb/client/assets/index-DdXRK7n9.js +2 -0
- cxb/client/assets/index-DtiCmB4o.js +1 -0
- cxb/client/assets/index-NBrXBlLA.css +2 -0
- cxb/client/assets/index-ac-Buu_H.js +4 -0
- cxb/client/assets/index-iYkH7C67.js +1 -0
- cxb/client/assets/info-B986lRiM.js +1 -0
- cxb/client/assets/intl-messageformat-Dc5UU-HB.js +3 -0
- cxb/client/assets/jmespath-l0sNRNKZ.js +1 -0
- cxb/client/assets/json-schema-traverse-l0sNRNKZ.js +1 -0
- cxb/client/assets/json-source-map-DRgZidqy.js +5 -0
- cxb/client/assets/jsonpath-plus-l0sNRNKZ.js +1 -0
- cxb/client/assets/jsonrepair-B30Dx381.js +8 -0
- cxb/client/assets/lodash-es-DZVAA2ox.js +1 -0
- cxb/client/assets/marked-DKjyhwJX.js +56 -0
- cxb/client/assets/marked-gfm-heading-id-U5zO829x.js +2 -0
- cxb/client/assets/marked-mangle-CDMeiHC6.js +1 -0
- cxb/client/assets/memoize-one-BdPwpGay.js +1 -0
- cxb/client/assets/natural-compare-lite-Bg2Xcf-o.js +7 -0
- cxb/client/assets/pagination-svelte-D5CyoiE_.js +13 -0
- cxb/client/assets/pagination-svelte-v10nAbbM.css +1 -0
- cxb/client/assets/plantuml-encoder-C47mzt9T.js +1 -0
- cxb/client/assets/prismjs-DTUiLGJu.js +9 -0
- cxb/client/assets/profile-BUf-tKMe.js +1 -0
- cxb/client/assets/query-CNmXTsgf.js +1 -0
- cxb/client/assets/queryHelpers-C9iBWwqe.js +1 -0
- cxb/client/assets/scroll-into-view-if-needed-KR58zyjF.js +1 -0
- cxb/client/assets/spaces-0oyGvpii.js +1 -0
- cxb/client/assets/style-mod-Bs6eFhZE.js +3 -0
- cxb/client/assets/svelte-B2XmcTi_.js +4 -0
- cxb/client/assets/svelte-awesome-COLlx0DN.css +1 -0
- cxb/client/assets/svelte-awesome-DhnMA6Q_.js +1 -0
- cxb/client/assets/svelte-datatables-net-CY7LBj6I.js +1 -0
- cxb/client/assets/svelte-floating-ui-BlS3sOAQ.js +1 -0
- cxb/client/assets/svelte-i18n-CT2KkQaN.js +3 -0
- cxb/client/assets/svelte-jsoneditor-BzfX6Usi.css +1 -0
- cxb/client/assets/svelte-jsoneditor-CUGSvWId.js +25 -0
- cxb/client/assets/svelte-select-CegQKzqH.css +1 -0
- cxb/client/assets/svelte-select-CjHAt_85.js +6 -0
- cxb/client/assets/tailwind-merge-CJvxXMcu.js +1 -0
- cxb/client/assets/tailwind-variants-Cj20BoQ3.js +1 -0
- cxb/client/assets/toast-B9WDyfyI.js +1 -0
- cxb/client/assets/tslib-pJfR_DrR.js +1 -0
- cxb/client/assets/typewriter-editor-DkTVIJdm.js +25 -0
- cxb/client/assets/user-DeK_NB5v.js +1 -0
- cxb/client/assets/vanilla-picker-l5rcX3cq.js +8 -0
- cxb/client/assets/w3c-keyname-Vcq4gwWv.js +1 -0
- cxb/client/config.json +11 -0
- cxb/client/config.sample.json +11 -0
- cxb/client/favicon.ico +0 -0
- cxb/client/favicon.png +0 -0
- cxb/client/index.html +28 -0
- {dmart-1.4.3.dist-info → dmart-1.4.5.dist-info}/METADATA +1 -1
- dmart-1.4.5.dist-info/RECORD +265 -0
- {dmart-1.4.3.dist-info → dmart-1.4.5.dist-info}/top_level.txt +1 -0
- dmart.py +20 -12
- main.py +16 -21
- utils/query_policies_helper.py +24 -8
- utils/settings.py +2 -2
- dmart-1.4.3.dist-info/RECORD +0 -149
- {dmart-1.4.3.dist-info → dmart-1.4.5.dist-info}/WHEEL +0 -0
- {dmart-1.4.3.dist-info → dmart-1.4.5.dist-info}/entry_points.txt +0 -0
|
@@ -23,7 +23,7 @@ depends_on: Union[str, Sequence[str], None] = None
|
|
|
23
23
|
def upgrade() -> None:
|
|
24
24
|
# ### commands auto generated by Alembic - please adjust! ###
|
|
25
25
|
with op.batch_alter_table('users', schema=None) as batch_op:
|
|
26
|
-
batch_op.add_column(sa.Column('locked_to_device', sa.Boolean(),
|
|
26
|
+
batch_op.add_column(sa.Column('locked_to_device', sa.Boolean(), nullable=False, server_default='false'))
|
|
27
27
|
|
|
28
28
|
# ### end Alembic commands ###
|
|
29
29
|
|
api/managed/utils.py
CHANGED
|
@@ -3,6 +3,8 @@ from io import BytesIO
|
|
|
3
3
|
from typing import Any
|
|
4
4
|
|
|
5
5
|
from fastapi import status
|
|
6
|
+
from models.api import Exception as API_Exception, Error as API_Error
|
|
7
|
+
from utils import password_hashing
|
|
6
8
|
from utils.generate_email import generate_email_from_template, generate_subject
|
|
7
9
|
from data_adapters.file.custom_validations import validate_csv_with_schema, validate_jsonl_with_schema
|
|
8
10
|
from utils.internal_error_code import InternalErrorCode
|
|
@@ -526,6 +528,26 @@ async def serve_request_update(request, owner_shortname: str):
|
|
|
526
528
|
else:
|
|
527
529
|
new_resource_payload_data = None
|
|
528
530
|
else:
|
|
531
|
+
if 'password' in record.attributes:
|
|
532
|
+
if 'old_password' not in record.attributes:
|
|
533
|
+
raise API_Exception(
|
|
534
|
+
status.HTTP_403_FORBIDDEN,
|
|
535
|
+
API_Error(
|
|
536
|
+
type="auth",
|
|
537
|
+
code=InternalErrorCode.PASSWORD_RESET_ERROR,
|
|
538
|
+
message="missing old_password!",
|
|
539
|
+
),
|
|
540
|
+
)
|
|
541
|
+
else:
|
|
542
|
+
if not password_hashing.verify_password(record.attributes.get('old_password'), old_resource_obj.password):
|
|
543
|
+
raise API_Exception(
|
|
544
|
+
status.HTTP_403_FORBIDDEN,
|
|
545
|
+
API_Error(
|
|
546
|
+
type="auth",
|
|
547
|
+
code=InternalErrorCode.PASSWORD_RESET_ERROR,
|
|
548
|
+
message="Wrong password have been provided!",
|
|
549
|
+
),
|
|
550
|
+
)
|
|
529
551
|
new_resource_payload_data = resource_obj.update_from_record(
|
|
530
552
|
record=record,
|
|
531
553
|
old_body=old_resource_payload_body,
|
|
@@ -600,7 +622,12 @@ async def serve_request_update(request, owner_shortname: str):
|
|
|
600
622
|
|
|
601
623
|
if (
|
|
602
624
|
isinstance(resource_obj, core.User) and
|
|
603
|
-
|
|
625
|
+
(
|
|
626
|
+
record.attributes.get("is_active", None) is not None
|
|
627
|
+
or (
|
|
628
|
+
settings.logout_on_pwd_change and record.attributes.get("password", None) is not None
|
|
629
|
+
)
|
|
630
|
+
)
|
|
604
631
|
):
|
|
605
632
|
if not record.attributes.get("is_active"):
|
|
606
633
|
await db.remove_user_session(record.shortname)
|
api/user/router.py
CHANGED
|
@@ -673,7 +673,16 @@ async def update_profile(
|
|
|
673
673
|
|
|
674
674
|
old_version_flattened = flatten_dict(user.model_dump())
|
|
675
675
|
|
|
676
|
-
if profile_user.password
|
|
676
|
+
if profile_user.password:
|
|
677
|
+
if "old_password" not in profile.attributes:
|
|
678
|
+
raise Exception(
|
|
679
|
+
status.HTTP_403_FORBIDDEN,
|
|
680
|
+
Error(
|
|
681
|
+
type="auth",
|
|
682
|
+
code=InternalErrorCode.PASSWORD_RESET_ERROR,
|
|
683
|
+
message="Wrong password have been provided!",
|
|
684
|
+
),
|
|
685
|
+
)
|
|
677
686
|
if not password_hashing.verify_password(
|
|
678
687
|
profile.attributes["old_password"], user.password or ""
|
|
679
688
|
):
|
|
@@ -766,6 +775,9 @@ async def update_profile(
|
|
|
766
775
|
retrieve_lock_status=profile.retrieve_lock_status,
|
|
767
776
|
)
|
|
768
777
|
|
|
778
|
+
if settings.logout_on_pwd_change and profile_user.password:
|
|
779
|
+
await db.remove_user_session(shortname)
|
|
780
|
+
|
|
769
781
|
await plugin_manager.after_action(
|
|
770
782
|
core.Event(
|
|
771
783
|
space_name=MANAGEMENT_SPACE,
|
cxb/__init__.py
ADDED
|
File without changes
|
cxb/client/__init__.py
ADDED
|
File without changes
|