@ozdao/martyrs 0.2.584 → 0.2.586
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.
- package/dist/auth.server.js +161 -96
- package/dist/{authJwt-J1csaMWA.js → authJwt-DKbMMjw0.js} +33 -0
- package/dist/builder.js +2 -0
- package/dist/chats.server.js +2 -2
- package/dist/community.server.js +1 -1
- package/dist/core.server.js +191 -2
- package/dist/{core.websocket-C2FxNmZ1.js → core.websocket-Cl76z2wT.js} +41 -5
- package/dist/{crud-q1ye5IhV.js → crud-DpOXTZep.js} +1 -1
- package/dist/events.server.js +2 -2
- package/dist/files.server.js +1 -1
- package/dist/gallery.server.js +1 -1
- package/dist/index-kvBwwb0w.js +427 -0
- package/dist/inventory.server.js +2 -2
- package/dist/{mailing-DuEFRsa3.js → mailing-DT7nbNjZ.js} +16 -3
- package/dist/{main-fmp55tJF.js → main-BIf-WirR.js} +864 -865
- package/dist/marketplace.server.js +1 -1
- package/dist/martyrs/dist/{main-fmp55tJF.js → main-BIf-WirR.js} +193 -38
- package/dist/martyrs/dist/main-BIf-WirR.js.map +1 -0
- package/dist/martyrs/dist/{web-BDuQSQKS.js → web-O7lXcjg0.js} +2 -2
- package/dist/martyrs/dist/{web-BDuQSQKS.js.map → web-O7lXcjg0.js.map} +1 -1
- package/dist/martyrs/src/components/Button/{Button.vue2.js → Button.vue.js} +8 -7
- package/dist/martyrs/src/components/Button/Button.vue.js.map +1 -0
- package/dist/martyrs/src/components/EditImages/{EditImages.vue2.js → EditImages.vue.js} +2 -2
- package/dist/martyrs/src/components/EditImages/EditImages.vue.js.map +1 -0
- package/dist/martyrs/src/components/Feed/Feed.vue.js +1 -1
- package/dist/martyrs/src/components/FieldBig/FieldBig.vue.js +1 -1
- package/dist/martyrs/src/components/Loader/Loader.vue.js +1 -1
- package/dist/martyrs/src/components/Loader/Loader.vue.js.map +1 -1
- package/dist/martyrs/src/components/Spoiler/{Spoiler.vue2.js → Spoiler.vue.js} +2 -2
- package/dist/martyrs/src/components/Spoiler/Spoiler.vue.js.map +1 -0
- package/dist/martyrs/src/components/Tab/{Tab.vue.js → Tab.vue2.js} +2 -2
- package/dist/martyrs/src/components/Tab/Tab.vue2.js.map +1 -0
- package/dist/martyrs/src/components/Tooltip/Tooltip.vue2.js +17 -22
- package/dist/martyrs/src/components/Tooltip/Tooltip.vue2.js.map +1 -1
- package/dist/martyrs/src/modules/auth/auth.client.js +18 -24
- package/dist/martyrs/src/modules/auth/auth.client.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/blocks/OtpDialog.vue.js +178 -0
- package/dist/martyrs/src/modules/auth/views/components/blocks/OtpDialog.vue.js.map +1 -0
- package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +104 -77
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileBlogposts.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.js +198 -14
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js +71 -30
- package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js +3 -3
- package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js +87 -31
- package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/plugins/otp.plugin.js +100 -0
- package/dist/martyrs/src/modules/auth/views/plugins/otp.plugin.js.map +1 -0
- package/dist/martyrs/src/modules/auth/views/router/auth.router.js +2 -31
- package/dist/martyrs/src/modules/auth/views/router/auth.router.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/router/users.router.js +0 -14
- package/dist/martyrs/src/modules/auth/views/router/users.router.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/store/auth.js +1 -56
- package/dist/martyrs/src/modules/auth/views/store/auth.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/store/users.js +5 -1
- package/dist/martyrs/src/modules/auth/views/store/users.js.map +1 -1
- package/dist/martyrs/src/modules/backoffice/backoffice.client.js +3 -15
- package/dist/martyrs/src/modules/backoffice/backoffice.client.js.map +1 -1
- package/dist/martyrs/src/modules/backoffice/configs/navigation.backoffice.config.js +99 -0
- package/dist/martyrs/src/modules/backoffice/configs/navigation.backoffice.config.js.map +1 -0
- package/dist/martyrs/src/modules/backoffice/{backoffice.router.js → router/backoffice.router.js} +9 -7
- package/dist/martyrs/src/modules/backoffice/router/backoffice.router.js.map +1 -0
- package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js +7 -1
- package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js.map +1 -1
- package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js +1 -1
- package/dist/martyrs/src/modules/core/core.client.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/classes/core.app.js +5 -1
- package/dist/martyrs/src/modules/core/views/classes/core.app.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/components/blocks/CardHeader.vue.js +0 -1
- package/dist/martyrs/src/modules/core/views/components/blocks/CardHeader.vue.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/components/blocks/PopupAuth.vue.js +1 -1
- package/dist/martyrs/src/modules/core/views/components/blocks/PopupDateSelector.vue.js +1 -1
- package/dist/martyrs/src/modules/core/views/components/elements/OnlineIndicator.vue.js +74 -0
- package/dist/martyrs/src/modules/core/views/components/elements/OnlineIndicator.vue.js.map +1 -0
- package/dist/martyrs/src/modules/core/views/components/layouts/App.vue.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/components/layouts/Client.vue.js +77 -67
- package/dist/martyrs/src/modules/core/views/components/layouts/Client.vue.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/components/pages/404.vue.js +76 -7
- package/dist/martyrs/src/modules/core/views/components/pages/404.vue.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/components/partials/Header.vue.js +1 -1
- package/dist/martyrs/src/modules/core/views/components/partials/Navigation.vue.js +1 -1
- package/dist/martyrs/src/modules/core/views/components/partials/NavigationBar.vue.js +1 -1
- package/dist/martyrs/src/modules/core/views/components/sections/{Filters.vue2.js → Filters.vue.js} +2 -2
- package/dist/martyrs/src/modules/core/views/components/sections/Filters.vue.js.map +1 -0
- package/dist/martyrs/src/modules/core/views/components/sections/SectionPageTitle.vue.js +1 -1
- package/dist/martyrs/src/modules/core/views/store/core.store.js +1 -0
- package/dist/martyrs/src/modules/core/views/store/core.store.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/utils/vue-app-renderer.js +2 -1
- package/dist/martyrs/src/modules/core/views/utils/vue-app-renderer.js.map +1 -1
- package/dist/martyrs/src/modules/events/components/elements/ButtonCheck.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/elements/ButtonJoin.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +2 -2
- package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +2 -1
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.js.map +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/sections/EditTickets.vue.js +1 -1
- package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +2 -2
- package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.js +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/ColumnSettingsMenu.vue.js +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.js +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.js +1 -1
- package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/landing/components/sections/SectionGuide.vue.js +1 -1
- package/dist/martyrs/src/modules/marketplace/views/components/pages/Marketplace.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/blocks/ActionButtons.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Artist.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.js +0 -1
- package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/player/FullscreenPlayer.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/player/PlayerControls.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/player/VolumeControl.vue.js +1 -1
- package/dist/martyrs/src/modules/notifications/components/sections/NotificationPreferences.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.js +1 -2
- package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +2 -2
- package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/ApplicationDetails.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/CustomerDetails.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +4 -3
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.js +1 -2
- package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +1 -2
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js.map +1 -1
- package/dist/martyrs/src/modules/pages/pages.router.js +7 -5
- package/dist/martyrs/src/modules/pages/pages.router.js.map +1 -1
- package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.js +0 -1
- package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.js.map +1 -1
- package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/pages/views/components/partials/SidebarPages.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js +0 -1
- package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/pages/Product.vue.js +1 -2
- package/dist/martyrs/src/modules/products/components/pages/Product.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +3 -3
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.js +4 -4
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/sections/FilterProducts.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js +2 -2
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.js +2 -2
- package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.js +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/RentsEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/Map.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/Spot.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +2 -2
- package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.js +1 -1
- package/dist/martyrs.css +1 -1
- package/dist/martyrs.es.js +1 -1
- package/dist/music.server.js +1 -1
- package/dist/notifications.server.js +1 -1
- package/dist/orders.server.js +7 -6
- package/dist/organizations.server.js +2 -2
- package/dist/products.server.js +2 -2
- package/dist/profile.schema-C31Lynn3.js +21 -0
- package/dist/rents.server.js +1 -1
- package/dist/sessions.service-COcwjd0f.js +86 -0
- package/dist/style.css +183 -108
- package/dist/{tickets.controller-B7r0mK-5.js → tickets.controller-DdF85W-i.js} +1 -1
- package/dist/visitors.service-B1dhhuSo.js +83 -0
- package/dist/wallet.server.js +2 -2
- package/dist/{web-BDuQSQKS.js → web-O7lXcjg0.js} +1 -1
- package/package.json +5 -1
- package/src/builder/modes/ssr.rspack.dev.js +2 -0
- package/src/cli/commands/create.js +106 -0
- package/src/cli/index.js +25 -0
- package/src/cli/templates/app/.env.development.mustache +14 -0
- package/src/cli/templates/app/.env.production.mustache +14 -0
- package/src/cli/templates/app/Dockerfile +36 -0
- package/src/cli/templates/app/babel.config.js +14 -0
- package/src/cli/templates/app/env.js +3 -0
- package/src/cli/templates/app/index.js +46 -0
- package/src/cli/templates/app/mongodb.config.js +18 -0
- package/src/cli/templates/app/package.json.mustache +65 -0
- package/src/cli/templates/app/src/client.js +22 -0
- package/src/cli/templates/app/src/components/pages/Index.vue +11 -0
- package/src/cli/templates/app/src/configs/global.config.js.mustache +40 -0
- package/src/cli/templates/app/src/localization/extensions.js +2 -0
- package/src/cli/templates/app/src/localization/index.js +44 -0
- package/src/cli/templates/app/src/localization/overrides.js +2 -0
- package/src/cli/templates/app/src/localization/translations.js +10 -0
- package/src/cli/templates/app/src/models/index.js +9 -0
- package/src/cli/templates/app/src/router/index.js +48 -0
- package/src/cli/templates/app/src/scss/theme.scss +18 -0
- package/src/cli/templates/app/src/server.js +68 -0
- package/src/cli/templates/app/src/store/index.js +9 -0
- package/src/cli/templates/docker-compose.yaml.mustache +47 -0
- package/src/cli/templates/nginx/Dockerfile +5 -0
- package/src/cli/templates/nginx/default.conf.mustache +55 -0
- package/src/cli/templates/public/favicon/.gitkeep +0 -0
- package/src/cli/templates/start-dev.sh.mustache +131 -0
- package/src/cli/templates/start-prod.sh.mustache +12 -0
- package/src/components/Button/Button.vue +61 -15
- package/src/components/Loader/Loader.vue +1 -1
- package/src/components/Tooltip/Tooltip.vue +31 -23
- package/src/modules/TASKS.MD +30 -1
- package/src/modules/auth/CLAUDE.md +381 -0
- package/src/modules/auth/FIXES.md +0 -38
- package/src/modules/auth/auth.client.js +4 -6
- package/src/modules/auth/auth.server.js +4 -15
- package/src/modules/auth/controllers/middlewares/authJwt.js +59 -17
- package/src/modules/auth/controllers/middlewares/index.js +4 -1
- package/src/modules/auth/controllers/middlewares/otp.middleware.js +166 -0
- package/src/modules/auth/controllers/middlewares/verifySignUp.js +0 -1
- package/src/modules/auth/controllers/middlewares/verifyUser.js +58 -11
- package/src/modules/auth/controllers/routes/auth.routes.js +48 -6
- package/src/modules/auth/controllers/routes/users.routes.js +29 -8
- package/src/modules/auth/controllers/services/auth.service.js +62 -12
- package/src/modules/auth/controllers/services/otp.service.js +109 -0
- package/src/modules/auth/controllers/services/users.service.js +46 -6
- package/src/modules/auth/models/otp.model.js +20 -0
- package/src/modules/auth/views/components/blocks/OtpDialog.vue +168 -0
- package/src/modules/auth/views/components/pages/Profile.vue +51 -18
- package/src/modules/auth/views/components/pages/ProfileEditAccount.vue +199 -45
- package/src/modules/auth/views/components/pages/ResetPassword.vue +170 -132
- package/src/modules/auth/views/components/pages/SignIn.vue +2 -1
- package/src/modules/auth/views/components/pages/SignUp.vue +203 -147
- package/src/modules/auth/views/plugins/otp.plugin.js +104 -0
- package/src/modules/auth/views/router/auth.router.js +1 -24
- package/src/modules/auth/views/router/users.router.js +1 -12
- package/src/modules/auth/views/store/auth.js +0 -68
- package/src/modules/auth/views/store/users.js +6 -2
- package/src/modules/backoffice/backoffice.client.js +1 -25
- package/src/modules/backoffice/configs/navigation.backoffice.config.js +99 -0
- package/src/modules/backoffice/router/backoffice.router.js +8 -7
- package/src/modules/community/components/pages/BlogPost.vue +9 -1
- package/src/modules/core/controllers/classes/core.websocket.js +57 -6
- package/src/modules/core/controllers/middlewares/visitor.logger.js +49 -0
- package/src/modules/core/controllers/services/requests.service.js +53 -0
- package/src/modules/core/controllers/services/sessions.service.js +98 -0
- package/src/modules/core/controllers/services/visitors.service.js +102 -0
- package/src/modules/core/controllers/utils/mailing.js +16 -3
- package/src/modules/core/core.client.js +1 -0
- package/src/modules/core/core.server.js +45 -3
- package/src/modules/core/models/request.model.js +30 -0
- package/src/modules/core/models/session.model.js +43 -0
- package/src/modules/core/models/visitor.model.js +28 -0
- package/src/modules/core/views/classes/core.app.js +8 -3
- package/src/modules/core/views/components/elements/OnlineIndicator.vue +115 -0
- package/src/modules/core/views/components/layouts/App.vue +2 -2
- package/src/modules/core/views/components/layouts/Client.vue +444 -479
- package/src/modules/core/views/components/pages/404.vue +55 -3
- package/src/modules/core/views/store/core.store.js +1 -0
- package/src/modules/core/views/utils/vue-app-renderer.js +9 -1
- package/src/modules/orders/controllers/orders.controller.js +3 -3
- package/src/modules/pages/pages.router.js +4 -2
- package/src/modules/pages/views/router/pages.backoffice.router.js +4 -3
- package/src/modules/products/components/pages/Products.vue +1 -1
- package/dist/_virtual/alignment-pattern.js +0 -5
- package/dist/_virtual/alignment-pattern.js.map +0 -1
- package/dist/_virtual/browser.js +0 -8
- package/dist/_virtual/browser.js.map +0 -1
- package/dist/_virtual/browser2.js +0 -5
- package/dist/_virtual/browser2.js.map +0 -1
- package/dist/_virtual/canvas.js +0 -5
- package/dist/_virtual/canvas.js.map +0 -1
- package/dist/_virtual/dijkstra.js +0 -5
- package/dist/_virtual/dijkstra.js.map +0 -1
- package/dist/_virtual/error-correction-code.js +0 -5
- package/dist/_virtual/error-correction-code.js.map +0 -1
- package/dist/_virtual/error-correction-level.js +0 -5
- package/dist/_virtual/error-correction-level.js.map +0 -1
- package/dist/_virtual/finder-pattern.js +0 -5
- package/dist/_virtual/finder-pattern.js.map +0 -1
- package/dist/_virtual/format-info.js +0 -5
- package/dist/_virtual/format-info.js.map +0 -1
- package/dist/_virtual/galois-field.js +0 -5
- package/dist/_virtual/galois-field.js.map +0 -1
- package/dist/_virtual/mask-pattern.js +0 -5
- package/dist/_virtual/mask-pattern.js.map +0 -1
- package/dist/_virtual/mode.js +0 -5
- package/dist/_virtual/mode.js.map +0 -1
- package/dist/_virtual/polynomial.js +0 -5
- package/dist/_virtual/polynomial.js.map +0 -1
- package/dist/_virtual/qrcode.js +0 -5
- package/dist/_virtual/qrcode.js.map +0 -1
- package/dist/_virtual/regex.js +0 -5
- package/dist/_virtual/regex.js.map +0 -1
- package/dist/_virtual/segments.js +0 -5
- package/dist/_virtual/segments.js.map +0 -1
- package/dist/_virtual/svg-tag.js +0 -5
- package/dist/_virtual/svg-tag.js.map +0 -1
- package/dist/_virtual/utils.js +0 -5
- package/dist/_virtual/utils.js.map +0 -1
- package/dist/_virtual/utils2.js +0 -5
- package/dist/_virtual/utils2.js.map +0 -1
- package/dist/_virtual/version-check.js +0 -5
- package/dist/_virtual/version-check.js.map +0 -1
- package/dist/_virtual/version.js +0 -5
- package/dist/_virtual/version.js.map +0 -1
- package/dist/index-_Edcmck_.js +0 -170
- package/dist/martyrs/dist/main-fmp55tJF.js.map +0 -1
- package/dist/martyrs/node_modules/.pnpm/bignumber.js@9.1.2/node_modules/bignumber.js/bignumber.js +0 -1336
- package/dist/martyrs/node_modules/.pnpm/bignumber.js@9.1.2/node_modules/bignumber.js/bignumber.js.map +0 -1
- package/dist/martyrs/src/components/Button/Button.vue2.js.map +0 -1
- package/dist/martyrs/src/components/EditImages/EditImages.vue2.js.map +0 -1
- package/dist/martyrs/src/components/Spoiler/Spoiler.vue2.js.map +0 -1
- package/dist/martyrs/src/components/Tab/Tab.vue.js.map +0 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.js +0 -166
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.js.map +0 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js +0 -118
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js.map +0 -1
- package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.js +0 -360
- package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.js.map +0 -1
- package/dist/martyrs/src/modules/auth/views/store/twofa.js +0 -40
- package/dist/martyrs/src/modules/auth/views/store/twofa.js.map +0 -1
- package/dist/martyrs/src/modules/backoffice/backoffice.router.js.map +0 -1
- package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.js +0 -150
- package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.js.map +0 -1
- package/dist/martyrs/src/modules/core/views/components/sections/Filters.vue2.js.map +0 -1
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CardBalanceReplenished.vue.js +0 -43
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CardBalanceReplenished.vue.js.map +0 -1
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CardDeposit.vue.js +0 -47
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CardDeposit.vue.js.map +0 -1
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CashDeposit.vue.js +0 -29
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CashDeposit.vue.js.map +0 -1
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.js +0 -89
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.js.map +0 -1
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDepositProcessing.vue.js +0 -136
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDepositProcessing.vue.js.map +0 -1
- package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js +0 -238
- package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js.map +0 -1
- package/dist/martyrs/src/modules/wallet/views/localization/wallet.json.js +0 -9
- package/dist/martyrs/src/modules/wallet/views/localization/wallet.json.js.map +0 -1
- package/dist/martyrs/src/modules/wallet/views/store/wallet.store.js +0 -134
- package/dist/martyrs/src/modules/wallet/views/store/wallet.store.js.map +0 -1
- package/dist/node_modules/.pnpm/dijkstrajs@1.0.3/node_modules/dijkstrajs/dijkstra.js +0 -106
- package/dist/node_modules/.pnpm/dijkstrajs@1.0.3/node_modules/dijkstrajs/dijkstra.js.map +0 -1
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/browser.js +0 -79
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/browser.js.map +0 -1
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/can-promise.js +0 -14
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/can-promise.js.map +0 -1
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/alignment-pattern.js +0 -43
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/alignment-pattern.js.map +0 -1
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/alphanumeric-data.js +0 -85
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/alphanumeric-data.js.map +0 -1
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/bit-buffer.js +0 -40
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/bit-buffer.js.map +0 -1
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/bit-matrix.js +0 -34
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/bit-matrix.js.map +0 -1
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/byte-data.js +0 -36
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/byte-data.js.map +0 -1
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/error-correction-code.js +0 -367
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/error-correction-code.js.map +0 -1
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/error-correction-level.js +0 -52
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/error-correction-level.js.map +0 -1
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/finder-pattern.js +0 -25
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/finder-pattern.js.map +0 -1
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/format-info.js +0 -24
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/format-info.js.map +0 -1
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/galois-field.js +0 -38
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/galois-field.js.map +0 -1
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/kanji-data.js +0 -46
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/kanji-data.js.map +0 -1
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/mask-pattern.js +0 -149
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/mask-pattern.js.map +0 -1
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/mode.js +0 -90
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/mode.js.map +0 -1
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/numeric-data.js +0 -41
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/numeric-data.js.map +0 -1
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/polynomial.js +0 -44
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/polynomial.js.map +0 -1
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/qrcode.js +0 -279
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/qrcode.js.map +0 -1
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/reed-solomon-encoder.js +0 -38
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/reed-solomon-encoder.js.map +0 -1
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/regex.js +0 -33
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/regex.js.map +0 -1
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/segments.js +0 -201
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/segments.js.map +0 -1
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/utils.js +0 -84
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/utils.js.map +0 -1
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/version-check.js +0 -14
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/version-check.js.map +0 -1
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/version.js +0 -107
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/version.js.map +0 -1
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/canvas.js +0 -61
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/canvas.js.map +0 -1
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/svg-tag.js +0 -64
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/svg-tag.js.map +0 -1
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/utils.js +0 -87
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/utils.js.map +0 -1
- package/dist/profile.schema-CjLOfG7b.js +0 -92
- package/src/modules/auth/controllers/middlewares/visitor.logger.js +0 -75
- package/src/modules/auth/controllers/routes/twofa.routes.js +0 -8
- package/src/modules/auth/controllers/services/twofa.service.js +0 -30
- package/src/modules/auth/models/request.model.js +0 -14
- package/src/modules/auth/models/visitor.model.js +0 -11
- package/src/modules/auth/views/components/pages/EnterCode.vue +0 -204
- package/src/modules/auth/views/components/pages/EnterPassword.vue +0 -123
- package/src/modules/auth/views/components/sections/ProfileEditCredentials.vue +0 -329
- package/src/modules/auth/views/store/twofa.js +0 -70
- package/src/modules/auth//320/220/320/240/320/245/320/230/320/242/320/225/320/232/320/242/320/243/320/240/320/220.md +0 -445
- package/src/modules/backoffice/backoffice.router.js +0 -69
- package/src/modules/backoffice/components/partials/Sidebar.vue +0 -165
|
@@ -1,445 +0,0 @@
|
|
|
1
|
-
# Модуль Auth - Техническая архитектура
|
|
2
|
-
|
|
3
|
-
## 1. Назначение модуля
|
|
4
|
-
|
|
5
|
-
Модуль `auth` представляет собой изоморфное решение для аутентификации и управления пользователями в приложении OZDAO Martyrs. Модуль обеспечивает:
|
|
6
|
-
|
|
7
|
-
- **Аутентификацию пользователей** через email, телефон или Apple ID
|
|
8
|
-
- **Регистрацию новых пользователей** с поддержкой приглашений
|
|
9
|
-
- **Двухфакторную аутентификацию** (2FA) для повышения безопасности
|
|
10
|
-
- **Управление профилями пользователей** (CRUD операции)
|
|
11
|
-
- **Восстановление паролей** через email или SMS
|
|
12
|
-
- **Ролевую модель доступа** с поддержкой различных ролей
|
|
13
|
-
- **JWT-токены** для безопасной авторизации
|
|
14
|
-
- **Логирование посетителей** для аналитики
|
|
15
|
-
|
|
16
|
-
## 2. Архитектура взаимодействия клиент ⇄ сервер
|
|
17
|
-
|
|
18
|
-
```
|
|
19
|
-
┌─────────────────────────────────┐ ┌──────────────────────────────────┐
|
|
20
|
-
│ КЛИЕНТ (Vue) │ │ СЕРВЕР (Express) │
|
|
21
|
-
├─────────────────────────────────┤ ├──────────────────────────────────┤
|
|
22
|
-
│ Views/Components │ │ Routes │
|
|
23
|
-
│ ├─ SignIn/SignUp │◄────────┤ ├─ /api/auth/signin │
|
|
24
|
-
│ ├─ Profile/ProfileEdit │ │ ├─ /api/auth/signup │
|
|
25
|
-
│ ├─ ResetPassword │ │ ├─ /api/auth/reset-password │
|
|
26
|
-
│ └─ EnterCode/EnterPassword │ │ └─ /api/auth/update-password │
|
|
27
|
-
│ │ │ │
|
|
28
|
-
│ Stores (State Management) │ │ Services (Controllers) │
|
|
29
|
-
│ ├─ auth.js (login/signup) │◄────────┤ ├─ auth.service.js │
|
|
30
|
-
│ ├─ twofa.js (2FA codes) │ │ ├─ twofa.service.js │
|
|
31
|
-
│ └─ users.js (CRUD operations) │ │ └─ users.service.js │
|
|
32
|
-
│ │ │ │
|
|
33
|
-
│ Router + Middleware │ │ Middleware │
|
|
34
|
-
│ ├─ auth.validation.js │ │ ├─ authJwt.js (токены) │
|
|
35
|
-
│ └─ ownership.validation.js │ │ ├─ verifySignUp.js │
|
|
36
|
-
│ │ │ └─ verifyUser.js │
|
|
37
|
-
│ │ │ │
|
|
38
|
-
│ Cookie/Storage Management │ │ Models (MongoDB) │
|
|
39
|
-
│ ├─ JWT tokens │ │ ├─ User │
|
|
40
|
-
│ ├─ User data │ │ ├─ Role │
|
|
41
|
-
│ └─ Capacitor support │ │ └─ Visitor │
|
|
42
|
-
└─────────────────────────────────┘ └──────────────────────────────────┘
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
## 3. Точки входа и инициализация
|
|
46
|
-
|
|
47
|
-
### 3.1 Клиентская инициализация
|
|
48
|
-
|
|
49
|
-
**Файл**: `auth.client.js:34`
|
|
50
|
-
|
|
51
|
-
```javascript
|
|
52
|
-
function initializeAuth(app, store, router, options = {}) {
|
|
53
|
-
const route = options.route || 'Home';
|
|
54
|
-
|
|
55
|
-
// Регистрация локализации
|
|
56
|
-
i18nManager.register('auth', locales);
|
|
57
|
-
|
|
58
|
-
// Добавление маршрутов
|
|
59
|
-
router.addRoute(route, routerAuth);
|
|
60
|
-
router.addRoute(route, routerUsers);
|
|
61
|
-
|
|
62
|
-
// Регистрация хранилищ
|
|
63
|
-
store.addStore('auth', storeAuth);
|
|
64
|
-
store.addStore('twofa', storeTwofa);
|
|
65
|
-
store.addStore('users', storeUsers);
|
|
66
|
-
}
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
### 3.2 Серверная инициализация
|
|
70
|
-
|
|
71
|
-
**Файл**: `auth.server.js:12`
|
|
72
|
-
|
|
73
|
-
```javascript
|
|
74
|
-
function initializeAuth(app, db, origins, publicPath) {
|
|
75
|
-
// Настройка моделей
|
|
76
|
-
db.role = RoleModel(db);
|
|
77
|
-
db.user = UserModel(db);
|
|
78
|
-
db.visitor = VisitorModel(db);
|
|
79
|
-
db.request = RequestModel(db);
|
|
80
|
-
|
|
81
|
-
// Подключение маршрутов
|
|
82
|
-
authRoutes(app, db, origins, publicPath);
|
|
83
|
-
twofaRoutes(app, db, origins, publicPath);
|
|
84
|
-
usersRoutes(app, db, origins, publicPath);
|
|
85
|
-
|
|
86
|
-
// Логирование посетителей
|
|
87
|
-
const visitorModule = visitors(db);
|
|
88
|
-
app.use(visitorModule.visitorLogger);
|
|
89
|
-
}
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
## 4. Потоки аутентификации
|
|
93
|
-
|
|
94
|
-
### 4.1 Поток входа (Login)
|
|
95
|
-
|
|
96
|
-
```
|
|
97
|
-
1. Пользователь → SignIn.vue
|
|
98
|
-
2. Ввод email/phone + пароль
|
|
99
|
-
3. store/auth.js:login() → POST /api/auth/signin
|
|
100
|
-
4. Сервер:
|
|
101
|
-
├─ Проверка пользователя в БД
|
|
102
|
-
├─ Валидация пароля (bcrypt)
|
|
103
|
-
├─ Генерация JWT токена (10 дней)
|
|
104
|
-
└─ Возврат данных пользователя + токен
|
|
105
|
-
5. Клиент:
|
|
106
|
-
├─ Сохранение в cookie/storage
|
|
107
|
-
├─ Установка токена в axios
|
|
108
|
-
└─ GET /api/organizations/check-accesses для прав доступа
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
### 4.2 Поток регистрации (Signup)
|
|
112
|
-
|
|
113
|
-
```
|
|
114
|
-
1. Пользователь → SignUp.vue
|
|
115
|
-
2. Ввод данных + опциональный invite код
|
|
116
|
-
3. store/auth.js:signup() → POST /api/auth/signup
|
|
117
|
-
4. Сервер:
|
|
118
|
-
├─ Проверка дублирования (middleware)
|
|
119
|
-
├─ Хеширование пароля (bcrypt, salt:8)
|
|
120
|
-
├─ Создание пользователя
|
|
121
|
-
├─ Присвоение роли 'user'
|
|
122
|
-
├─ Обработка приглашения (если есть)
|
|
123
|
-
└─ Генерация JWT токена
|
|
124
|
-
5. Клиент: как при входе
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
### 4.3 Поток 2FA и восстановления пароля
|
|
128
|
-
|
|
129
|
-
```
|
|
130
|
-
1. Запрос сброса → ResetPassword.vue
|
|
131
|
-
2. store/auth.js:resetPassword() → POST /api/auth/reset-password
|
|
132
|
-
3. Сервер:
|
|
133
|
-
├─ Проверка существования пользователя
|
|
134
|
-
├─ Генерация 4-значного кода
|
|
135
|
-
└─ Отправка email/SMS
|
|
136
|
-
4. Клиент → EnterCode.vue
|
|
137
|
-
5. Ввод кода → EnterPassword.vue
|
|
138
|
-
6. store/auth.js:updatePassword() → POST /api/auth/update-password
|
|
139
|
-
7. Сервер: обновление пароля + новый JWT
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
### 4.4 Поток проверки доступов
|
|
143
|
-
|
|
144
|
-
```
|
|
145
|
-
1. Инициализация → store/auth.js:initialize()
|
|
146
|
-
2. GET /api/organizations/check-accesses (в модуле organizations!)
|
|
147
|
-
3. Сервер:
|
|
148
|
-
├─ Проверка JWT токена
|
|
149
|
-
├─ Поиск департаментов пользователя
|
|
150
|
-
├─ Поиск организаций в собственности
|
|
151
|
-
└─ Формирование массива прав доступа
|
|
152
|
-
4. Клиент: сохранение в state.accesses
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
## 5. Структура файлов и их связи
|
|
156
|
-
|
|
157
|
-
### 5.1 Клиентская часть
|
|
158
|
-
|
|
159
|
-
```
|
|
160
|
-
views/
|
|
161
|
-
├── components/
|
|
162
|
-
│ ├── layouts/Auth.vue # Общий layout для auth страниц
|
|
163
|
-
│ ├── pages/ # Страницы аутентификации
|
|
164
|
-
│ │ ├── SignIn.vue # Вход в систему
|
|
165
|
-
│ │ ├── SignUp.vue # Регистрация
|
|
166
|
-
│ │ ├── ResetPassword.vue # Сброс пароля
|
|
167
|
-
│ │ ├── EnterCode.vue # Ввод 2FA кода
|
|
168
|
-
│ │ ├── EnterPassword.vue # Новый пароль
|
|
169
|
-
│ │ ├── Invite.vue # Регистрация по приглашению
|
|
170
|
-
│ │ ├── Profile.vue # Профиль пользователя
|
|
171
|
-
│ │ └── ProfileEdit.vue # Редактирование профиля
|
|
172
|
-
│ └── sections/ # Переиспользуемые секции
|
|
173
|
-
├── store/ # Vuex-подобные хранилища
|
|
174
|
-
│ ├── auth.js # Основная аутентификация
|
|
175
|
-
│ ├── twofa.js # Двухфакторная аутентификация
|
|
176
|
-
│ └── users.js # Управление пользователями
|
|
177
|
-
├── router/ # Маршрутизация
|
|
178
|
-
│ ├── auth.js # Маршруты аутентификации
|
|
179
|
-
│ └── users.js # Маршруты пользователей
|
|
180
|
-
├── middlewares/ # Валидация на клиенте
|
|
181
|
-
│ ├── auth.validation.js # Проверка аутентификации
|
|
182
|
-
│ └── ownership.validation.js # Проверка прав доступа
|
|
183
|
-
└── validations/
|
|
184
|
-
└── inputs.validation.js # Валидация форм
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
### 5.2 Серверная часть
|
|
188
|
-
|
|
189
|
-
```
|
|
190
|
-
controllers/
|
|
191
|
-
├── services/ # Бизнес-логика
|
|
192
|
-
│ ├── auth.service.js # Аутентификация
|
|
193
|
-
│ ├── twofa.service.js # 2FA коды
|
|
194
|
-
│ └── users.service.js # CRUD пользователей
|
|
195
|
-
├── routes/ # API маршруты
|
|
196
|
-
│ ├── auth.routes.js # /api/auth/*
|
|
197
|
-
│ ├── twofa.routes.js # /api/twofa/*
|
|
198
|
-
│ └── users.routes.js # /api/users/*
|
|
199
|
-
├── middlewares/ # Серверные middleware
|
|
200
|
-
│ ├── authJwt.js # JWT валидация
|
|
201
|
-
│ ├── verifySignUp.js # Валидация регистрации
|
|
202
|
-
│ ├── verifyUser.js # Проверка пользователей
|
|
203
|
-
│ └── visitor.logger.js # Логирование посещений
|
|
204
|
-
└── utils/
|
|
205
|
-
└── verifyAppleIdToken.js # Apple ID интеграция
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
### 5.3 Модели данных
|
|
209
|
-
|
|
210
|
-
```
|
|
211
|
-
models/
|
|
212
|
-
├── user.model.js # Пользователи
|
|
213
|
-
├── role.model.js # Роли
|
|
214
|
-
├── visitor.model.js # Логи посещений
|
|
215
|
-
└── request.model.js # Запросы
|
|
216
|
-
```
|
|
217
|
-
|
|
218
|
-
## 6. API Endpoints
|
|
219
|
-
|
|
220
|
-
### 6.1 Аутентификация (/api/auth/*)
|
|
221
|
-
|
|
222
|
-
| Endpoint | Method | Middleware | Описание |
|
|
223
|
-
|----------|---------|------------|----------|
|
|
224
|
-
| `/api/auth/signin` | POST | - | Вход в систему |
|
|
225
|
-
| `/api/auth/signup` | POST | `checkDuplicateUsernameOrEmail` | Регистрация |
|
|
226
|
-
| `/api/auth/reset-password` | POST | `checkUserExist` | Сброс пароля |
|
|
227
|
-
| `/api/auth/update-password` | POST | - | Обновление пароля |
|
|
228
|
-
|
|
229
|
-
### 6.2 Двухфакторная аутентификация (/api/twofa/*)
|
|
230
|
-
|
|
231
|
-
| Endpoint | Method | Описание |
|
|
232
|
-
|----------|---------|----------|
|
|
233
|
-
| `/api/twofa/sendcode` | POST | Отправка кода при регистрации |
|
|
234
|
-
| `/api/twofa/sendcodereset` | POST | Отправка кода для сброса пароля |
|
|
235
|
-
|
|
236
|
-
### 6.3 Пользователи (/api/users/*)
|
|
237
|
-
|
|
238
|
-
| Endpoint | Method | Middleware | Описание |
|
|
239
|
-
|----------|---------|------------|----------|
|
|
240
|
-
| `/api/users` | GET | - | Получение пользователей |
|
|
241
|
-
| `/api/users` | POST | `verifyToken, checkDuplicateUsername` | Создание |
|
|
242
|
-
| `/api/users/:_id` | PUT | `verifyToken, checkDuplicateUsername` | Обновление |
|
|
243
|
-
| `/api/users/:_id` | DELETE | `verifyToken` | Удаление |
|
|
244
|
-
|
|
245
|
-
### 6.4 Проверка доступов
|
|
246
|
-
|
|
247
|
-
| Endpoint | Method | Middleware | Модуль | Описание |
|
|
248
|
-
|----------|---------|------------|---------|----------|
|
|
249
|
-
| `/api/organizations/check-accesses` | GET | `verifyToken` | **organizations** | Получение прав доступа |
|
|
250
|
-
|
|
251
|
-
## 7. Безопасность
|
|
252
|
-
|
|
253
|
-
### 7.1 Хеширование паролей
|
|
254
|
-
|
|
255
|
-
**Файл**: `auth.service.js:93, 164`
|
|
256
|
-
|
|
257
|
-
- Библиотека: `bcrypt`
|
|
258
|
-
- Salt rounds: 8
|
|
259
|
-
- Асинхронное хеширование при обновлении
|
|
260
|
-
|
|
261
|
-
### 7.2 JWT Токены
|
|
262
|
-
|
|
263
|
-
**Конфигурация**:
|
|
264
|
-
- Секретный ключ: `process.env.SECRET_KEY`
|
|
265
|
-
- Время жизни: 864000 секунд (10 дней)
|
|
266
|
-
- Содержит: `{ _id: userId, organization: orgId }`
|
|
267
|
-
|
|
268
|
-
### 7.3 Middleware безопасности
|
|
269
|
-
|
|
270
|
-
**authJwt.js**:
|
|
271
|
-
- `verifyToken(continueOnFail)` - проверка JWT
|
|
272
|
-
- Поддержка сервисных ключей (`x-service-key`)
|
|
273
|
-
- Извлечение токенов из headers или cookies
|
|
274
|
-
- Роли: `isAdmin`, `isModerator`
|
|
275
|
-
|
|
276
|
-
### 7.4 CORS и Cookie
|
|
277
|
-
|
|
278
|
-
**Настройки cookie**:
|
|
279
|
-
```javascript
|
|
280
|
-
development: { secure: false, expires: 7, sameSite: 'Lax' }
|
|
281
|
-
production: {
|
|
282
|
-
expires: 7,
|
|
283
|
-
domain: process.env.DOMAIN_URL,
|
|
284
|
-
sameSite: 'strict',
|
|
285
|
-
secure: true
|
|
286
|
-
}
|
|
287
|
-
```
|
|
288
|
-
|
|
289
|
-
## 8. Интеграция в проект
|
|
290
|
-
|
|
291
|
-
### 8.1 Основная инициализация
|
|
292
|
-
|
|
293
|
-
```javascript
|
|
294
|
-
// Клиент
|
|
295
|
-
import ModuleAuth from '@martyrs/src/modules/auth/auth.client.js';
|
|
296
|
-
ModuleAuth.initialize(app, store, router, { route: 'Home' });
|
|
297
|
-
|
|
298
|
-
// Сервер
|
|
299
|
-
import AuthModule from '@martyrs/src/modules/auth/auth.server.js';
|
|
300
|
-
AuthModule.initialize(app, db, origins, publicPath);
|
|
301
|
-
```
|
|
302
|
-
|
|
303
|
-
### 8.2 Использование в компонентах
|
|
304
|
-
|
|
305
|
-
```javascript
|
|
306
|
-
// Аутентификация
|
|
307
|
-
import * as auth from '@martyrs/src/modules/auth/views/store/auth.js';
|
|
308
|
-
await auth.actions.login({ email: 'user@example.com', password: '123' }, 'email');
|
|
309
|
-
|
|
310
|
-
// Управление пользователями
|
|
311
|
-
import * as users from '@martyrs/src/modules/auth/views/store/users.js';
|
|
312
|
-
const users = await users.actions.read();
|
|
313
|
-
```
|
|
314
|
-
|
|
315
|
-
### 8.3 Защищенные маршруты
|
|
316
|
-
|
|
317
|
-
```javascript
|
|
318
|
-
// Клиент
|
|
319
|
-
import * as authValidation from '@martyrs/src/modules/auth/views/middlewares/auth.validation.js';
|
|
320
|
-
|
|
321
|
-
{
|
|
322
|
-
path: '/profile',
|
|
323
|
-
beforeEnter: [authValidation.requiresAuth]
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
// Сервер
|
|
327
|
-
import middlewareFactory from '@martyrs/src/modules/auth/controllers/middlewares/index.js';
|
|
328
|
-
const { authJwt } = middlewareFactory(db);
|
|
329
|
-
|
|
330
|
-
app.get('/api/protected', [authJwt.verifyToken()], controller);
|
|
331
|
-
```
|
|
332
|
-
|
|
333
|
-
## 9. Расширение и конфигурация
|
|
334
|
-
|
|
335
|
-
### 9.1 Добавление новой роли
|
|
336
|
-
|
|
337
|
-
1. **База данных**:
|
|
338
|
-
```javascript
|
|
339
|
-
db.role.create({ name: 'editor' })
|
|
340
|
-
```
|
|
341
|
-
|
|
342
|
-
2. **Middleware**:
|
|
343
|
-
```javascript
|
|
344
|
-
const isEditor = middlewareFactory(db).authJwt.checkRole('editor');
|
|
345
|
-
```
|
|
346
|
-
|
|
347
|
-
3. **Маршрут**:
|
|
348
|
-
```javascript
|
|
349
|
-
app.post('/api/content', [authJwt.verifyToken(), isEditor], controller);
|
|
350
|
-
```
|
|
351
|
-
|
|
352
|
-
### 9.2 Добавление провайдера аутентификации
|
|
353
|
-
|
|
354
|
-
1. **Сервер** (`auth.service.js`):
|
|
355
|
-
```javascript
|
|
356
|
-
if (type === 'google' && authorization.id_token) {
|
|
357
|
-
payload = await verifyGoogleIdToken(authorization.id_token);
|
|
358
|
-
// ...
|
|
359
|
-
}
|
|
360
|
-
```
|
|
361
|
-
|
|
362
|
-
2. **Клиент** (`auth.js`):
|
|
363
|
-
```javascript
|
|
364
|
-
await auth.actions.login({ authorization: googleToken }, 'google');
|
|
365
|
-
```
|
|
366
|
-
|
|
367
|
-
### 9.3 Переменные окружения
|
|
368
|
-
|
|
369
|
-
```bash
|
|
370
|
-
SECRET_KEY=your-jwt-secret # JWT секрет
|
|
371
|
-
DOMAIN_URL=example.com # Домен для cookies
|
|
372
|
-
SERVICE_KEY=service-secret # Сервисные запросы
|
|
373
|
-
NODE_ENV=production # Окружение
|
|
374
|
-
MOBILE_APP=true # Мобильное приложение
|
|
375
|
-
APP_NAME=MyApp # Название в письмах
|
|
376
|
-
```
|
|
377
|
-
|
|
378
|
-
### 9.4 Мобильная поддержка
|
|
379
|
-
|
|
380
|
-
Модуль поддерживает Capacitor через `@capacitor/preferences`:
|
|
381
|
-
- Автоматическое переключение между cookies и Capacitor storage
|
|
382
|
-
- Определение через `process.env.MOBILE_APP`
|
|
383
|
-
|
|
384
|
-
## 10. Ключевые сценарии использования
|
|
385
|
-
|
|
386
|
-
### 10.1 Полный цикл аутентификации
|
|
387
|
-
|
|
388
|
-
```javascript
|
|
389
|
-
// 1. Инициализация приложения
|
|
390
|
-
const cookie = await getCookie('user');
|
|
391
|
-
await auth.actions.initialize(cookie);
|
|
392
|
-
|
|
393
|
-
// 2. Вход пользователя
|
|
394
|
-
await auth.actions.login({
|
|
395
|
-
email: 'user@example.com',
|
|
396
|
-
password: 'password123'
|
|
397
|
-
}, 'email');
|
|
398
|
-
|
|
399
|
-
// 3. Проверка прав доступа происходит автоматически
|
|
400
|
-
// state.accesses теперь содержит права пользователя
|
|
401
|
-
|
|
402
|
-
// 4. Выход
|
|
403
|
-
await auth.actions.logout();
|
|
404
|
-
```
|
|
405
|
-
|
|
406
|
-
### 10.2 Регистрация с приглашением
|
|
407
|
-
|
|
408
|
-
```javascript
|
|
409
|
-
// 1. Переход по приглашению → /auth/invite?code=INVITE123
|
|
410
|
-
// 2. Заполнение формы
|
|
411
|
-
await auth.actions.signup({
|
|
412
|
-
email: 'newuser@example.com',
|
|
413
|
-
password: 'password123'
|
|
414
|
-
}, 'email', 'INVITE123');
|
|
415
|
-
|
|
416
|
-
// 3. Автоматическое создание membership в организации
|
|
417
|
-
```
|
|
418
|
-
|
|
419
|
-
### 10.3 Восстановление пароля
|
|
420
|
-
|
|
421
|
-
```javascript
|
|
422
|
-
// 1. Запрос сброса
|
|
423
|
-
await auth.actions.resetPassword({ email: 'user@example.com' }, 'email');
|
|
424
|
-
|
|
425
|
-
// 2. Отправка кода → state.twofa.code.isSended = true
|
|
426
|
-
|
|
427
|
-
// 3. Новый пароль
|
|
428
|
-
state.user.password = 'newpassword123';
|
|
429
|
-
state.user.passwordRepeat = 'newpassword123';
|
|
430
|
-
await auth.actions.updatePassword({ email: 'user@example.com' }, 'email');
|
|
431
|
-
```
|
|
432
|
-
|
|
433
|
-
### 10.4 Управление профилем
|
|
434
|
-
|
|
435
|
-
```javascript
|
|
436
|
-
// Получение данных профиля
|
|
437
|
-
await users.actions.read({ _id: userId });
|
|
438
|
-
|
|
439
|
-
// Обновление профиля
|
|
440
|
-
await users.actions.update({
|
|
441
|
-
_id: userId,
|
|
442
|
-
profile: { name: 'New Name' },
|
|
443
|
-
socials: { twitter: '@username' }
|
|
444
|
-
});
|
|
445
|
-
```
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
// backoffice.meta.js
|
|
2
|
-
import Sidebar from './components/partials/Sidebar.vue';
|
|
3
|
-
|
|
4
|
-
export function getRoutes(options = {}) {
|
|
5
|
-
const route = options.route || 'Home';
|
|
6
|
-
const routes = [];
|
|
7
|
-
|
|
8
|
-
routes.push({
|
|
9
|
-
parentName: route,
|
|
10
|
-
config: {
|
|
11
|
-
basePath: 'backoffice',
|
|
12
|
-
routes: [
|
|
13
|
-
{
|
|
14
|
-
path: '',
|
|
15
|
-
name: 'Backoffice Root',
|
|
16
|
-
meta: {
|
|
17
|
-
sidebar_navigation: Sidebar,
|
|
18
|
-
sidebar_width_hidden: 'w-0',
|
|
19
|
-
},
|
|
20
|
-
props: {
|
|
21
|
-
newsletterPopup: 12344,
|
|
22
|
-
},
|
|
23
|
-
beforeEnter: [
|
|
24
|
-
() => import(/* webpackChunkName: "auth-validation" */ '@martyrs/src/modules/auth/views/middlewares/auth.validation.js').then(m => m.requiresAdmin),
|
|
25
|
-
],
|
|
26
|
-
children: [
|
|
27
|
-
{
|
|
28
|
-
path: '',
|
|
29
|
-
name: 'Backoffice Admin',
|
|
30
|
-
meta: {
|
|
31
|
-
title: {
|
|
32
|
-
en: 'Backoffice',
|
|
33
|
-
ru: 'Управление',
|
|
34
|
-
},
|
|
35
|
-
},
|
|
36
|
-
component: () => import(/* webpackChunkName: 'BackofficeGallery' */ './components/pages/Dashboard.vue'),
|
|
37
|
-
},
|
|
38
|
-
{
|
|
39
|
-
path: 'organizations',
|
|
40
|
-
name: 'Backoffice Organizations',
|
|
41
|
-
meta: {
|
|
42
|
-
title: {
|
|
43
|
-
en: 'Backoffice Organizations',
|
|
44
|
-
ru: 'Управление Организациями',
|
|
45
|
-
},
|
|
46
|
-
authorize: [],
|
|
47
|
-
},
|
|
48
|
-
component: () => import(/* webpackChunkName: 'BackofficeOrganizations' */ '@martyrs/src/modules/organizations/components/pages/Organizations.vue'),
|
|
49
|
-
},
|
|
50
|
-
{
|
|
51
|
-
path: 'community',
|
|
52
|
-
name: 'Backoffice Community',
|
|
53
|
-
meta: {
|
|
54
|
-
title: {
|
|
55
|
-
en: 'Backoffice Community',
|
|
56
|
-
ru: 'Управление Сообществом',
|
|
57
|
-
},
|
|
58
|
-
authorize: [],
|
|
59
|
-
},
|
|
60
|
-
component: () => import(/* webpackChunkName: 'BackofficeCommunity' */ '@martyrs/src/modules/community/components/pages/Blog.vue'),
|
|
61
|
-
},
|
|
62
|
-
],
|
|
63
|
-
}
|
|
64
|
-
],
|
|
65
|
-
}
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
return routes;
|
|
69
|
-
}
|
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div class="pos-relative o-y-scroll o-x-hidden h-100">
|
|
3
|
-
<div class="br-b-1px h3 h-4r pd-semi br-black-transp-10">Backoffice</div>
|
|
4
|
-
<div class="pd-semi">
|
|
5
|
-
<span class="pd-thin uppercase fw-medium t-transp">Menu</span>
|
|
6
|
-
<div
|
|
7
|
-
v-for="item in menuItems"
|
|
8
|
-
:key="item.name"
|
|
9
|
-
@click="router.push(item.to || { name: item.routeName })"
|
|
10
|
-
class="flex pd-thin flex-v-center cursor-pointer">
|
|
11
|
-
<component
|
|
12
|
-
v-if="item.icon"
|
|
13
|
-
:is="item.icon"
|
|
14
|
-
class="i-medium mn-r-thin"
|
|
15
|
-
:icon="true"
|
|
16
|
-
:fill="'rgba(var(--black),0.25)'"
|
|
17
|
-
/>
|
|
18
|
-
<span class="fw-medium">{{ item.title }}</span>
|
|
19
|
-
</div>
|
|
20
|
-
|
|
21
|
-
<span class="pd-thin d-block mn-t-medium uppercase fw-medium t-transp">General</span>
|
|
22
|
-
<div
|
|
23
|
-
v-for="item in generalItems"
|
|
24
|
-
:key="item.name"
|
|
25
|
-
@click="router.push(item.to || { name: item.routeName })"
|
|
26
|
-
class="flex pd-thin flex-v-center cursor-pointer">
|
|
27
|
-
<component
|
|
28
|
-
v-if="item.icon"
|
|
29
|
-
:is="item.icon"
|
|
30
|
-
class="i-medium mn-r-thin"
|
|
31
|
-
:icon="true"
|
|
32
|
-
:fill="'rgba(var(--black),0.25)'"
|
|
33
|
-
/>
|
|
34
|
-
<span class="fw-medium">{{ item.title }}</span>
|
|
35
|
-
</div>
|
|
36
|
-
</div>
|
|
37
|
-
</div>
|
|
38
|
-
</template>
|
|
39
|
-
|
|
40
|
-
<script setup="props">
|
|
41
|
-
/////////////////////////////
|
|
42
|
-
// COMPONENT DEPENDENCIES
|
|
43
|
-
/////////////////////////////
|
|
44
|
-
import { ref, onMounted } from 'vue';
|
|
45
|
-
|
|
46
|
-
// Mobile Module
|
|
47
|
-
import SelectMulti from '@martyrs/src/components/SelectMulti/SelectMulti.vue'
|
|
48
|
-
|
|
49
|
-
import IconProducts from '@martyrs/src/modules/icons/entities/IconProducts.vue'
|
|
50
|
-
import IconPayments from '@martyrs/src/modules/icons/entities/IconPayments.vue'
|
|
51
|
-
import IconEvents from '@martyrs/src/modules/icons/entities/IconEvents.vue'
|
|
52
|
-
import IconGroups from '@martyrs/src/modules/icons/entities/IconGroups.vue'
|
|
53
|
-
import IconCommunity from '@martyrs/src/modules/icons/entities/IconCommunity.vue'
|
|
54
|
-
import IconGallery from '@martyrs/src/modules/icons/entities/IconGallery.vue'
|
|
55
|
-
import IconOrders from '@martyrs/src/modules/icons/entities/IconOrders.vue'
|
|
56
|
-
import IconLeftovers from '@martyrs/src/modules/icons/entities/IconLeftovers.vue'
|
|
57
|
-
/////////////////////////////
|
|
58
|
-
// HELPERS
|
|
59
|
-
/////////////////////////////
|
|
60
|
-
import { useRoute, useRouter } from 'vue-router'
|
|
61
|
-
|
|
62
|
-
import * as auth from '@martyrs/src/modules/auth/views/store/auth.js'
|
|
63
|
-
import * as organizations from '@martyrs/src/modules/organizations/store/organizations.js'
|
|
64
|
-
|
|
65
|
-
const route = useRoute()
|
|
66
|
-
const router = useRouter()
|
|
67
|
-
/////////////////////////////
|
|
68
|
-
// CREATED
|
|
69
|
-
/////////////////////////////
|
|
70
|
-
const props = defineProps({
|
|
71
|
-
favorites: Array,
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
const selectedOrganization = ref(null);
|
|
75
|
-
const publics = ref([]);
|
|
76
|
-
|
|
77
|
-
// Define menu items
|
|
78
|
-
const menuItems = [
|
|
79
|
-
{
|
|
80
|
-
name: 'organizations',
|
|
81
|
-
title: 'Organizations',
|
|
82
|
-
to: '/backoffice/organizations',
|
|
83
|
-
icon: IconGroups
|
|
84
|
-
},
|
|
85
|
-
{
|
|
86
|
-
name: 'community',
|
|
87
|
-
title: 'Community',
|
|
88
|
-
routeName: 'Backoffice Community',
|
|
89
|
-
icon: IconCommunity
|
|
90
|
-
},
|
|
91
|
-
{
|
|
92
|
-
name: 'products',
|
|
93
|
-
title: 'Products',
|
|
94
|
-
routeName: 'Products',
|
|
95
|
-
icon: IconProducts
|
|
96
|
-
},
|
|
97
|
-
{
|
|
98
|
-
name: 'inventory',
|
|
99
|
-
title: 'Inventory',
|
|
100
|
-
routeName: 'BackofficeInventoryList',
|
|
101
|
-
icon: IconLeftovers
|
|
102
|
-
},
|
|
103
|
-
{
|
|
104
|
-
name: 'orders',
|
|
105
|
-
title: 'Orders',
|
|
106
|
-
routeName: 'BackofficeOrdersList',
|
|
107
|
-
icon: IconOrders
|
|
108
|
-
},
|
|
109
|
-
{
|
|
110
|
-
name: 'gallery',
|
|
111
|
-
title: 'Gallery',
|
|
112
|
-
routeName: 'Backoffice Gallery',
|
|
113
|
-
icon: IconGallery
|
|
114
|
-
},
|
|
115
|
-
{
|
|
116
|
-
name: 'applications',
|
|
117
|
-
title: 'Applications',
|
|
118
|
-
routeName: 'BackofficeApplications',
|
|
119
|
-
icon: IconEvents
|
|
120
|
-
},
|
|
121
|
-
{
|
|
122
|
-
name: 'events',
|
|
123
|
-
title: 'Events',
|
|
124
|
-
routeName: 'BackofficeEvents Backoffice',
|
|
125
|
-
icon: IconEvents
|
|
126
|
-
}
|
|
127
|
-
];
|
|
128
|
-
|
|
129
|
-
// Define general items
|
|
130
|
-
const generalItems = [
|
|
131
|
-
{
|
|
132
|
-
name: 'payments',
|
|
133
|
-
title: 'Payments',
|
|
134
|
-
routeName: 'Payments',
|
|
135
|
-
icon: IconPayments
|
|
136
|
-
},
|
|
137
|
-
{
|
|
138
|
-
name: 'users',
|
|
139
|
-
title: 'Users',
|
|
140
|
-
routeName: 'Users',
|
|
141
|
-
icon: null
|
|
142
|
-
},
|
|
143
|
-
{
|
|
144
|
-
name: 'pages',
|
|
145
|
-
title: 'Pages',
|
|
146
|
-
routeName: 'Backoffice Pages',
|
|
147
|
-
icon: null
|
|
148
|
-
},
|
|
149
|
-
{
|
|
150
|
-
name: 'reports',
|
|
151
|
-
title: 'Reports',
|
|
152
|
-
routeName: 'Backoffice Reports',
|
|
153
|
-
icon: null
|
|
154
|
-
}
|
|
155
|
-
];
|
|
156
|
-
|
|
157
|
-
/////////////////////////////
|
|
158
|
-
// MOUNTED
|
|
159
|
-
/////////////////////////////
|
|
160
|
-
onMounted(async () => {
|
|
161
|
-
});
|
|
162
|
-
</script>
|
|
163
|
-
|
|
164
|
-
<style lang="scss">
|
|
165
|
-
</style>
|