diff --git a/changelog.md b/changelog.md index 081c4032..f4e40317 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,11 @@ +## Version 2.2.4 +#### Release date: 8. August 2022 +- Account verification email is now sending in preferred app language + +## Version 2.2.3 +#### Release date: 6. August 2022 +- Subscription module is now available for Regular license type + ## Version 2.2.2 #### Release date: 16. July 2022 - Fixed issue when email wasn't sent in active app language diff --git a/config/language-translations.php b/config/language-translations.php index 97e41e7f..2f1344d9 100644 --- a/config/language-translations.php +++ b/config/language-translations.php @@ -971,5 +971,8 @@ return [ 'remote_upload_progress' => 'Uploading Remotely - {processed} / {total}', 'remote_upload_failed_count' => 'Failed: {count}', 'file_request_notify_center_description' => 'Please click on the link below and upload your files for :name.', + 'verify_email_subject' => 'Verify Email Address', + 'verify_email_line' => 'Click the button below to verify your email address.', + 'verify_email_action' => 'Verify Email Address', ], ]; diff --git a/public/mix-manifest.json b/public/mix-manifest.json index 99e5a9ef..de1e138c 100644 --- a/public/mix-manifest.json +++ b/public/mix-manifest.json @@ -1,76 +1,76 @@ { "/js/main.js": "/js/main.js", - "/chunks/request.js": "/chunks/request.js?id=24e5a5b2f135d39e", - "/chunks/request-upload.js": "/chunks/request-upload.js?id=1fececdb666b7499", - "/chunks/setup-wizard.js": "/chunks/setup-wizard.js?id=3d59c279540eccd7", - "/chunks/status-check.js": "/chunks/status-check.js?id=93f87d94efcedc18", - "/chunks/purchase-code.js": "/chunks/purchase-code.js?id=320e3fc4cf8b8c2a", - "/chunks/database.js": "/chunks/database.js?id=5b1a99ccb29936db", - "/chunks/environment.js": "/chunks/environment.js?id=301a287e694c95f0", - "/chunks/app-setup.js": "/chunks/app-setup.js?id=a1f145a78a991227", - "/chunks/admin-account.js": "/chunks/admin-account.js?id=27307041d4424315", - "/chunks/shared.js": "/chunks/shared.js?id=2a1ad4917d8455b6", - "/chunks/shared/browser.js": "/chunks/shared/browser.js?id=91073d6c2aaaf6fd", - "/chunks/shared/single-file.js": "/chunks/shared/single-file.js?id=b9ad0ca8d6cf9c85", - "/chunks/shared/authenticate.js": "/chunks/shared/authenticate.js?id=53b64cff4293869c", - "/chunks/not-found.js": "/chunks/not-found.js?id=6db7525f9a230ad7", - "/chunks/temporary-unavailable.js": "/chunks/temporary-unavailable.js?id=dac7c2c9f65f21b0", - "/chunks/admin.js": "/chunks/admin.js?id=017e4b1c9b437481", - "/chunks/dashboard.js": "/chunks/dashboard.js?id=2d4e3f496499dcff", - "/chunks/invoices.js": "/chunks/invoices.js?id=dea58c6e9688b491", - "/chunks/subscriptions.js": "/chunks/subscriptions.js?id=69f0375002134da8", - "/chunks/pages.js": "/chunks/pages.js?id=2915af7add4cc8a6", - "/chunks/page-edit.js": "/chunks/page-edit.js?id=a5f7b0e18cdf5718", - "/chunks/plans.js": "/chunks/plans.js?id=c606d61c1bef613e", - "/chunks/users.js": "/chunks/users.js?id=68bae8ec1347b90a", - "/chunks/user-create.js": "/chunks/user-create.js?id=4c44396a09188a12", - "/chunks/plan-create/fixed.js": "/chunks/plan-create/fixed.js?id=aadbfeace2fb8cbc", - "/chunks/plan-create/metered.js": "/chunks/plan-create/metered.js?id=2df58c1f8132a61b", - "/chunks/user.js": "/chunks/user.js?id=422f2f6e6ed491d6", - "/chunks/user-detail.js": "/chunks/user-detail.js?id=0b999f1d0687cf90", - "/chunks/user-storage.js": "/chunks/user-storage.js?id=654fc8848a6722e4", - "/chunks/user-subscription.js": "/chunks/user-subscription.js?id=644409c1ea6afc31", - "/chunks/user-password.js": "/chunks/user-password.js?id=dbdf5d4e6d7e00ed", - "/chunks/user-delete.js": "/chunks/user-delete.js?id=4e574b15b4b189d2", - "/chunks/plan.js": "/chunks/plan.js?id=11d645f8108bf939", - "/chunks/plan-subscribers.js": "/chunks/plan-subscribers.js?id=fd4c6b64b9c2ee22", - "/chunks/plan-settings.js": "/chunks/plan-settings.js?id=6d8aca51ded6db26", - "/chunks/plan-delete.js": "/chunks/plan-delete.js?id=b832b6913084c33a", - "/chunks/payments.js": "/chunks/payments.js?id=52dba061f588b570", - "/chunks/payments/billings.js": "/chunks/payments/billings.js?id=a0006524a7e2db1d", - "/chunks/payments/settings.js": "/chunks/payments/settings.js?id=a5484fd31a6245ce", - "/chunks/app-settings.js": "/chunks/app-settings.js?id=69801583df2560eb", - "/chunks/app-appearance.js": "/chunks/app-appearance.js?id=30f33477df9abc96", - "/chunks/app-index.js": "/chunks/app-index.js?id=57f19b6a5bdaad67", - "/chunks/app-environment.js": "/chunks/app-environment.js?id=f7adab2b261bae51", - "/chunks/app-others.js": "/chunks/app-others.js?id=0dacc12152cc024e", - "/chunks/app-sign-in-out.js": "/chunks/app-sign-in-out.js?id=90aa480bef0db73c", - "/chunks/app-adsense.js": "/chunks/app-adsense.js?id=9de9f8ddc4cdeca2", - "/chunks/app-server.js": "/chunks/app-server.js?id=c1ba7809b184cf55", - "/chunks/app-language.js": "/chunks/app-language.js?id=d7f0fbba18444513", - "/chunks/homepage.js": "/chunks/homepage.js?id=74591a549e496117", - "/chunks/dynamic-page.js": "/chunks/dynamic-page.js?id=fe7e9aa0bacd555a", - "/chunks/contact-us.js": "/chunks/contact-us.js?id=e28a0cc6bc290c91", - "/chunks/demo.js": "/chunks/demo.js?id=3194d943636a3291", - "/chunks/successfully-email-verified.js": "/chunks/successfully-email-verified.js?id=62261818a28dc954", - "/chunks/successfully-email-send.js": "/chunks/successfully-email-send.js?id=6e6eeb754b2885ba", - "/chunks/sign-in.js": "/chunks/sign-in.js?id=6d565e8acfc80d48", - "/chunks/sign-up.js": "/chunks/sign-up.js?id=afda8b77ab196bb5", - "/chunks/forgotten-password.js": "/chunks/forgotten-password.js?id=0af1e98e4815cbb6", - "/chunks/create-new-password.js": "/chunks/create-new-password.js?id=548b78f5a7ad566e", - "/chunks/settings.js": "/chunks/settings.js?id=56f2eeebb046b2b9", - "/chunks/profile.js": "/chunks/profile.js?id=effe2f332a91739f", - "/chunks/settings-password.js": "/chunks/settings-password.js?id=bd5cafee19eb3c2d", - "/chunks/settings-storage.js": "/chunks/settings-storage.js?id=2815b8f0a631832a", - "/chunks/billing.js": "/chunks/billing.js?id=6ecaaefbc9d90d59", - "/chunks/platform.js": "/chunks/platform.js?id=12fb39919a4f7649", - "/chunks/files.js": "/chunks/files.js?id=8baa177afd765ca3", - "/chunks/recent-uploads.js": "/chunks/recent-uploads.js?id=c87c76bad16c2931", - "/chunks/my-shared-items.js": "/chunks/my-shared-items.js?id=258109ed03ca7da3", - "/chunks/trash.js": "/chunks/trash.js?id=aaef6e404577cb44", - "/chunks/team-folders.js": "/chunks/team-folders.js?id=eadb12efc3403883", - "/chunks/shared-with-me.js": "/chunks/shared-with-me.js?id=ba53625baac5ae60", - "/chunks/invitation.js": "/chunks/invitation.js?id=ea477c80cb20b626", + "/chunks/request.js": "/chunks/request.js?id=20cf84189bccffb7", + "/chunks/request-upload.js": "/chunks/request-upload.js?id=664a08e4400f9c8e", + "/chunks/setup-wizard.js": "/chunks/setup-wizard.js?id=a65c21736eeb3892", + "/chunks/status-check.js": "/chunks/status-check.js?id=6f286b1184930fc1", + "/chunks/purchase-code.js": "/chunks/purchase-code.js?id=4752b3b9f03443ed", + "/chunks/database.js": "/chunks/database.js?id=30fc46f98af92f05", + "/chunks/environment.js": "/chunks/environment.js?id=54be70a0e9f86a1c", + "/chunks/app-setup.js": "/chunks/app-setup.js?id=0c551b93c81b7aac", + "/chunks/admin-account.js": "/chunks/admin-account.js?id=d0e5cd83e8dc4e20", + "/chunks/shared.js": "/chunks/shared.js?id=533cdc4f61e9aaa3", + "/chunks/shared/browser.js": "/chunks/shared/browser.js?id=48a60519795a25c4", + "/chunks/shared/single-file.js": "/chunks/shared/single-file.js?id=a161d9e9508725ca", + "/chunks/shared/authenticate.js": "/chunks/shared/authenticate.js?id=97b671d9ab74c65f", + "/chunks/not-found.js": "/chunks/not-found.js?id=49dfc17a580b1673", + "/chunks/temporary-unavailable.js": "/chunks/temporary-unavailable.js?id=ea5df04333f37580", + "/chunks/admin.js": "/chunks/admin.js?id=0d348cbde36d6264", + "/chunks/dashboard.js": "/chunks/dashboard.js?id=30db7426101debcd", + "/chunks/invoices.js": "/chunks/invoices.js?id=7543324d36034327", + "/chunks/subscriptions.js": "/chunks/subscriptions.js?id=e26276927362cccd", + "/chunks/pages.js": "/chunks/pages.js?id=50a4979b027c5066", + "/chunks/page-edit.js": "/chunks/page-edit.js?id=715f082ce65d3201", + "/chunks/plans.js": "/chunks/plans.js?id=5b7dc3bf41226615", + "/chunks/users.js": "/chunks/users.js?id=ff883aec532890df", + "/chunks/user-create.js": "/chunks/user-create.js?id=c056aa40d467473e", + "/chunks/plan-create/fixed.js": "/chunks/plan-create/fixed.js?id=065233390eee071f", + "/chunks/plan-create/metered.js": "/chunks/plan-create/metered.js?id=fe4ec4b133158e2a", + "/chunks/user.js": "/chunks/user.js?id=46a8818a2d417e99", + "/chunks/user-detail.js": "/chunks/user-detail.js?id=1a357a7ec3295ed1", + "/chunks/user-storage.js": "/chunks/user-storage.js?id=fca6301d2975c5ff", + "/chunks/user-subscription.js": "/chunks/user-subscription.js?id=c9d080a4daecad35", + "/chunks/user-password.js": "/chunks/user-password.js?id=9a89f79d6a59f23c", + "/chunks/user-delete.js": "/chunks/user-delete.js?id=bfa9722ee26cb0b0", + "/chunks/plan.js": "/chunks/plan.js?id=1db1e1fa14179721", + "/chunks/plan-subscribers.js": "/chunks/plan-subscribers.js?id=a1ecfabfc13b4e27", + "/chunks/plan-settings.js": "/chunks/plan-settings.js?id=7074836dabc9aeb7", + "/chunks/plan-delete.js": "/chunks/plan-delete.js?id=20ccb5f05eff003f", + "/chunks/payments.js": "/chunks/payments.js?id=d2f9397c1d11f48b", + "/chunks/payments/billings.js": "/chunks/payments/billings.js?id=f3748fb13bf75659", + "/chunks/payments/settings.js": "/chunks/payments/settings.js?id=dc540bb64dfc7e62", + "/chunks/app-settings.js": "/chunks/app-settings.js?id=926ca68dd6f03c35", + "/chunks/app-appearance.js": "/chunks/app-appearance.js?id=3cfaf15856ab8bef", + "/chunks/app-index.js": "/chunks/app-index.js?id=d7a1d10efdebce84", + "/chunks/app-environment.js": "/chunks/app-environment.js?id=ff87a762cbac3a68", + "/chunks/app-others.js": "/chunks/app-others.js?id=cd9bd5ffc795124d", + "/chunks/app-sign-in-out.js": "/chunks/app-sign-in-out.js?id=f0dd52d555f292ac", + "/chunks/app-adsense.js": "/chunks/app-adsense.js?id=8ecab69b4de459b6", + "/chunks/app-server.js": "/chunks/app-server.js?id=79490aac32eb76b5", + "/chunks/app-language.js": "/chunks/app-language.js?id=edbc5cc194c3105f", + "/chunks/homepage.js": "/chunks/homepage.js?id=be5cc12af74b5fa5", + "/chunks/dynamic-page.js": "/chunks/dynamic-page.js?id=16a07effb03aec7f", + "/chunks/contact-us.js": "/chunks/contact-us.js?id=90a502e9ad14c1f2", + "/chunks/demo.js": "/chunks/demo.js?id=e1bf5f888d0f9876", + "/chunks/successfully-email-verified.js": "/chunks/successfully-email-verified.js?id=c51ce0e7504cec80", + "/chunks/successfully-email-send.js": "/chunks/successfully-email-send.js?id=371202262d9eab07", + "/chunks/sign-in.js": "/chunks/sign-in.js?id=c989b5245e8abee2", + "/chunks/sign-up.js": "/chunks/sign-up.js?id=a53abc03402a41ef", + "/chunks/forgotten-password.js": "/chunks/forgotten-password.js?id=d5c32464c85f8a07", + "/chunks/create-new-password.js": "/chunks/create-new-password.js?id=bc05ba298daa0837", + "/chunks/settings.js": "/chunks/settings.js?id=93a89d051cef7948", + "/chunks/profile.js": "/chunks/profile.js?id=6d32048b2120a0a6", + "/chunks/settings-password.js": "/chunks/settings-password.js?id=bb3f8faa0027c6f9", + "/chunks/settings-storage.js": "/chunks/settings-storage.js?id=47c7539612597f3e", + "/chunks/billing.js": "/chunks/billing.js?id=22280887221420e7", + "/chunks/platform.js": "/chunks/platform.js?id=d30fcb9721c1e6c3", + "/chunks/files.js": "/chunks/files.js?id=eacc3ba19c1391be", + "/chunks/recent-uploads.js": "/chunks/recent-uploads.js?id=43323d3af3fc99da", + "/chunks/my-shared-items.js": "/chunks/my-shared-items.js?id=972917c59e64bea8", + "/chunks/trash.js": "/chunks/trash.js?id=b1b9e524584df8e2", + "/chunks/team-folders.js": "/chunks/team-folders.js?id=4e9ccc15e31f837e", + "/chunks/shared-with-me.js": "/chunks/shared-with-me.js?id=0ca840ede1053d54", + "/chunks/invitation.js": "/chunks/invitation.js?id=65fa8c36aa7940ea", "/css/tailwind.css": "/css/tailwind.css", "/css/app.css": "/css/app.css" } diff --git a/src/App/Providers/AuthServiceProvider.php b/src/App/Providers/AuthServiceProvider.php index ddbd29c7..a4998097 100644 --- a/src/App/Providers/AuthServiceProvider.php +++ b/src/App/Providers/AuthServiceProvider.php @@ -9,6 +9,8 @@ use Domain\Sharing\Models\Share; use Domain\Folders\Models\Folder; use Illuminate\Support\Facades\Gate; use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; +use Illuminate\Auth\Notifications\VerifyEmail; +use Illuminate\Notifications\Messages\MailMessage; class AuthServiceProvider extends ServiceProvider { @@ -27,35 +29,9 @@ class AuthServiceProvider extends ServiceProvider */ public function boot() { + $this->registerCustomVerificationEmail(); $this->registerPolicies(); - - // Define admin maintenance gate - Gate::define('maintenance', fn ($user) => $user->role === 'admin'); - - // Define user ability to edit file or folder - collect(['can-edit', 'can-view']) - ->each(function ($ability) { - Gate::define($ability, function (?User $user, File | Folder $item, ?Share $share) use ($ability) { - // If share link exist, then check share access - if ($share) { - return $this->shareGuard($share, $item); - } - - // Check user owner status - if ($user?->id === $item->user_id) { - return true; - } - - // Check team member ability to access into requested item - return $this->teamMemberGuard($item, $user, $ability); - }); - }); - - // Define owner of file or folder - Gate::define('owner', function (?User $user, File | Folder $item) { - // Check user owner status - return $user?->id === $item->user_id; - }); + $this->registerGates(); } private function shareGuard(Share $share, Folder | File $item): bool @@ -98,4 +74,45 @@ class AuthServiceProvider extends ServiceProvider // check existing members permission or check team folder owner privileges return $membership?->permission === $ability || $teamFolder->user_id === Auth::id(); } + + private function registerGates(): void + { + // Define admin maintenance gate + Gate::define('maintenance', fn($user) => $user->role === 'admin'); + + // Define user ability to edit file or folder + collect(['can-edit', 'can-view']) + ->each(function ($ability) { + Gate::define($ability, function (?User $user, File|Folder $item, ?Share $share) use ($ability) { + // If share link exist, then check share access + if ($share) { + return $this->shareGuard($share, $item); + } + + // Check user owner status + if ($user?->id === $item->user_id) { + return true; + } + + // Check team member ability to access into requested item + return $this->teamMemberGuard($item, $user, $ability); + }); + }); + + // Define owner of file or folder + Gate::define('owner', function (?User $user, File|Folder $item) { + // Check user owner status + return $user?->id === $item->user_id; + }); + } + + private function registerCustomVerificationEmail(): void + { + VerifyEmail::toMailUsing(function ($notifiable, $url) { + return (new MailMessage) + ->subject(__t('verify_email_subject')) + ->line(__t('verify_email_line')) + ->action(__t('verify_email_action'), $url); + }); + } }