From 8abf4374742ecb872738feebffeca5aa8d37e7cb Mon Sep 17 00:00:00 2001 From: ildyria Date: Mon, 16 Jan 2023 22:00:02 +0100 Subject: [PATCH] start hacking on the settings --- app/Actions/User/TokenDisable.php | 25 +++ app/Actions/User/TokenReset.php | 26 +++ app/Contracts/Http/RuleSet.php | 20 +++ .../Administration/UserController.php | 19 +-- app/Http/Livewire/Components/Header.php | 32 ++++ .../Forms/Settings/BooleanSetting.php | 47 ++++++ .../Livewire/Forms/Settings/GetApiToken.php | 71 +++++++++ app/Http/Livewire/Forms/Settings/SetLogin.php | 73 +++++++++ app/Http/Livewire/Index.php | 13 +- app/Http/Livewire/Pages/Gallery.php | 12 +- app/Http/Requests/User/ChangeLoginRequest.php | 9 +- app/Http/RuleSets/ChangeLoginRuleSet.php | 20 +++ resources/views/layouts/livewire.blade.php | 8 +- .../livewire/components/header.blade.php | 68 ++++---- .../form/form-get-api-token.blade.php | 56 +++++++ .../views/livewire/form/form-login.blade.php | 66 ++++---- .../livewire/form/form-set-login.blade.php | 18 +++ .../views/livewire/form/form-toggle.blade.php | 14 ++ resources/views/livewire/form/form.blade.php | 2 +- resources/views/livewire/index.blade.php | 3 +- .../views/livewire/pages/gallery.blade.php | 10 +- .../views/livewire/pages/settings.blade.php | 150 +++++------------- 22 files changed, 529 insertions(+), 233 deletions(-) create mode 100644 app/Actions/User/TokenDisable.php create mode 100644 app/Actions/User/TokenReset.php create mode 100644 app/Contracts/Http/RuleSet.php create mode 100644 app/Http/Livewire/Forms/Settings/BooleanSetting.php create mode 100644 app/Http/Livewire/Forms/Settings/GetApiToken.php create mode 100644 app/Http/Livewire/Forms/Settings/SetLogin.php create mode 100644 app/Http/RuleSets/ChangeLoginRuleSet.php create mode 100644 resources/views/livewire/form/form-get-api-token.blade.php create mode 100644 resources/views/livewire/form/form-set-login.blade.php create mode 100644 resources/views/livewire/form/form-toggle.blade.php diff --git a/app/Actions/User/TokenDisable.php b/app/Actions/User/TokenDisable.php new file mode 100644 index 0000000000..74daba3e61 --- /dev/null +++ b/app/Actions/User/TokenDisable.php @@ -0,0 +1,25 @@ +token = null; + $user->save(); + + return $user; + } +} diff --git a/app/Actions/User/TokenReset.php b/app/Actions/User/TokenReset.php new file mode 100644 index 0000000000..c84e86a444 --- /dev/null +++ b/app/Actions/User/TokenReset.php @@ -0,0 +1,26 @@ +token = hash('SHA512', $token); + $user->save(); + + return $user; + } +} diff --git a/app/Contracts/Http/RuleSet.php b/app/Contracts/Http/RuleSet.php new file mode 100644 index 0000000000..bfddb03298 --- /dev/null +++ b/app/Contracts/Http/RuleSet.php @@ -0,0 +1,20 @@ +token = hash('SHA512', $token); - $user->save(); + $user = $tokenReset->do(); - return ['token' => $token]; + return ['token' => $user->token]; } /** @@ -112,11 +110,8 @@ public function resetToken(ChangeTokenRequest $request): array * @throws UnauthenticatedException * @throws ModelDBException */ - public function unsetToken(ChangeTokenRequest $request): void + public function unsetToken(ChangeTokenRequest $request, TokenDisable $tokenDisable): void { - /** @var User $user */ - $user = Auth::user(); - $user->token = null; - $user->save(); + $tokenDisable->do(); } } diff --git a/app/Http/Livewire/Components/Header.php b/app/Http/Livewire/Components/Header.php index 08279266a4..37a4c0a0bc 100644 --- a/app/Http/Livewire/Components/Header.php +++ b/app/Http/Livewire/Components/Header.php @@ -49,4 +49,36 @@ public function openLoginModal(): void { $this->openModal('forms.login'); } + + /** + * Go back one step + * + * @return void + */ + public function back(): void + { + $this->emitTo('pages.gallery', 'back'); + } + + /** + * Open the Left menu. + * + * @return void + */ + public function openLeftMenu(): void + { + $this->emitTo('components.left-menu', 'open'); + } + + /** + * Toggle the side bar. + * + * @return void + */ + public function toggleSideBar(): void + { + $this->emitTo('components.sidebar', 'toggle'); + } + + } \ No newline at end of file diff --git a/app/Http/Livewire/Forms/Settings/BooleanSetting.php b/app/Http/Livewire/Forms/Settings/BooleanSetting.php new file mode 100644 index 0000000000..e10b84a15e --- /dev/null +++ b/app/Http/Livewire/Forms/Settings/BooleanSetting.php @@ -0,0 +1,47 @@ +description = Lang::get($description); + $this->footer = $footer !== '' ? Lang::get($footer) : ''; + $this->config = Configs::where('key', '=', $name)->firstOrFail(); + } + + public function render() + { + $this->flag = $this->config->value === '1'; + return view('livewire.form.form-toggle'); + } + + /** + * This runs before a wired property is updated. + * + * @param mixed $field + * @param mixed $value + * @return void + * @throws InvalidCastException + * @throws JsonEncodingException + * @throws RuntimeException + */ + public function updating($field, $value) + { + $this->config->value = $value === true ? '1' : '0'; + $this->config->save(); + } + +} \ No newline at end of file diff --git a/app/Http/Livewire/Forms/Settings/GetApiToken.php b/app/Http/Livewire/Forms/Settings/GetApiToken.php new file mode 100644 index 0000000000..80ca05a615 --- /dev/null +++ b/app/Http/Livewire/Forms/Settings/GetApiToken.php @@ -0,0 +1,71 @@ +isDisabled = !$user->has_token; + $this->isHidden = true; + } + + public function render() + { + return view('livewire.form.form-get-api-token'); + } + + /** + * Add an handle to close the modal form from a user-land call. + * + * @return void + */ + public function close(): void + { + $this->closeModal(); + } + + public function resetToken(TokenReset $tokenReset) { + /** + * Authorize the request + */ + $this->authorize(UserPolicy::CAN_EDIT, [User::class]); + + $this->token = $tokenReset->do()->token; + $this->isDisabled = false; + $this->isHidden = false; + } + + public function disableToken(TokenDisable $tokenDisable) { + /** + * Authorize the request + */ + $this->authorize(UserPolicy::CAN_EDIT, [User::class]); + + $tokenDisable->do(); + $this->token = ''; + $this->isDisabled = true; + } +} \ No newline at end of file diff --git a/app/Http/Livewire/Forms/Settings/SetLogin.php b/app/Http/Livewire/Forms/Settings/SetLogin.php new file mode 100644 index 0000000000..5fca6d9553 --- /dev/null +++ b/app/Http/Livewire/Forms/Settings/SetLogin.php @@ -0,0 +1,73 @@ +validate(ChangeLoginRuleSet::rules()); + + /** + * Authorize the request + */ + $this->authorize(UserPolicy::CAN_EDIT, [User::class]); + + $currentUser = $updateLogin->do( + $this->username, + $this->password, + $this->oldPassword, + request()->ip() + ); + + // Update the session with the new credentials of the user. + // Otherwise, the session is out-of-sync and falsely assumes the user + // to be unauthenticated upon the next request. + Auth::login($currentUser); + } + + + /** + * Open a login modal box. + * + * @return void + */ + public function openApiTokenModal(): void + { + $this->openModal('forms.settings.get-api-token'); + } + +} \ No newline at end of file diff --git a/app/Http/Livewire/Index.php b/app/Http/Livewire/Index.php index c253809e95..101d34a7b4 100644 --- a/app/Http/Livewire/Index.php +++ b/app/Http/Livewire/Index.php @@ -22,7 +22,6 @@ class Index extends Component // listeners of click events protected $listeners = [ - 'openLeftMenu', 'openPage', 'reloadPage', ]; @@ -81,16 +80,6 @@ private function getLayout(): array ]; } - /** - * Open the Left menu. - * - * @return void - */ - public function openLeftMenu(): void - { - $this->emitTo('components.left-menu', 'open'); - } - /** * Open page. * @@ -104,7 +93,7 @@ public function openPage(string $page): void // update URL $this->emitUrlChange($this->mode, $this->albumId ?? '', $this->photoId ?? ''); - + // $this->render(); } /* diff --git a/app/Http/Livewire/Pages/Gallery.php b/app/Http/Livewire/Pages/Gallery.php index d055e081d7..64ac12264d 100644 --- a/app/Http/Livewire/Pages/Gallery.php +++ b/app/Http/Livewire/Pages/Gallery.php @@ -172,7 +172,7 @@ public function openAlbum(string $albumId) { $this->albumId = $albumId; $this->load(); - $this->emitUrlChange(PageMode::GALLERY, $this->albumId, $this->photoId); + $this->emitUrlChange(PageMode::GALLERY, $this->albumId, $this->photoId ?? ''); } /** @@ -209,14 +209,4 @@ public function back() // This ensures that the history has been updated $this->emitUrlChange(PageMode::GALLERY, $this->albumId ?? '', $this->photoId ?? ''); } - - /** - * Toggle the side bar. - * - * @return void - */ - public function toggleSideBar(): void - { - $this->emitTo('components.sidebar', 'toggle'); - } } diff --git a/app/Http/Requests/User/ChangeLoginRequest.php b/app/Http/Requests/User/ChangeLoginRequest.php index 6b77029187..7c9df5d2c2 100644 --- a/app/Http/Requests/User/ChangeLoginRequest.php +++ b/app/Http/Requests/User/ChangeLoginRequest.php @@ -6,10 +6,9 @@ use App\Contracts\Http\Requests\RequestAttribute; use App\Http\Requests\BaseApiRequest; use App\Http\Requests\Traits\HasPasswordTrait; +use App\Http\RuleSets\ChangeLoginRuleSet; use App\Models\User; use App\Policies\UserPolicy; -use App\Rules\PasswordRule; -use App\Rules\UsernameRule; use Illuminate\Support\Facades\Gate; class ChangeLoginRequest extends BaseApiRequest implements HasPassword @@ -32,11 +31,7 @@ public function authorize(): bool */ public function rules(): array { - return [ - RequestAttribute::USERNAME_ATTRIBUTE => ['sometimes', new UsernameRule(true)], - RequestAttribute::PASSWORD_ATTRIBUTE => ['required', new PasswordRule(false)], - RequestAttribute::OLD_PASSWORD_ATTRIBUTE => ['required', new PasswordRule(false)], - ]; + return ChangeLoginRuleSet::rules(); } /** diff --git a/app/Http/RuleSets/ChangeLoginRuleSet.php b/app/Http/RuleSets/ChangeLoginRuleSet.php new file mode 100644 index 0000000000..d624bdc959 --- /dev/null +++ b/app/Http/RuleSets/ChangeLoginRuleSet.php @@ -0,0 +1,20 @@ + ['sometimes', new UsernameRule(true)], + RequestAttribute::PASSWORD_ATTRIBUTE => ['required', new PasswordRule(false)], + RequestAttribute::OLD_PASSWORD_ATTRIBUTE => ['required', new PasswordRule(false)], + ]; + } +} diff --git a/resources/views/layouts/livewire.blade.php b/resources/views/layouts/livewire.blade.php index 50404e89d1..396bde0a85 100644 --- a/resources/views/layouts/livewire.blade.php +++ b/resources/views/layouts/livewire.blade.php @@ -2,10 +2,10 @@ - - - - + + + + diff --git a/resources/views/livewire/components/header.blade.php b/resources/views/livewire/components/header.blade.php index 21399e3546..16694383ff 100644 --- a/resources/views/livewire/components/header.blade.php +++ b/resources/views/livewire/components/header.blade.php @@ -5,83 +5,81 @@ @if ($gallery_mode === App\Enum\Livewire\GalleryMode::ALBUMS) @if (Auth::user() === null)
- - {{-- --}} - + {{ $title }}
×
- +
@else
- + {{ $title }}
×
- {{-- --}} + {{-- --}} @can(App\Policies\AlbumPolicy::CAN_UPLOAD, [App\Contracts\Models\AbstractAlbum::class, null]) - + @endcan
@endif @elseif ($gallery_mode === App\Enum\Livewire\GalleryMode::ALBUM)
- + {{ $title }} - + @can(App\Policies\AlbumPolicy::CAN_SHARE_WITH_USERS, [App\Contracts\Models\AbstractAlbum::class, $this->album]) - + @endcan @can(App\Policies\AlbumPolicy::CAN_EDIT, [App\Contracts\Models\AbstractAlbum::class, $this->album]) - + @endcan - + @can(App\Policies\AlbumPolicy::CAN_DOWNLOAD, [App\Contracts\Models\AbstractAlbum::class, $this->album]) - + @endcan - - + + @can(App\Policies\AlbumPolicy::CAN_EDIT, [App\Contracts\Models\AbstractAlbum::class, $this->album]) - - + + @endcan - - + + - +
@elseif ($gallery_mode === App\Enum\Livewire\GalleryMode::PHOTO)
- + - - - - - - - - - - - + + + + + + + + + + + - +
@elseif ($gallery_mode === App\Enum\Livewire\GalleryMode::MAP)
- +
@elseif ($page_mode === App\Enum\Livewire\PageMode::SETTINGS)
- + {{ $title }}
@endif diff --git a/resources/views/livewire/form/form-get-api-token.blade.php b/resources/views/livewire/form/form-get-api-token.blade.php new file mode 100644 index 0000000000..0acd88d52a --- /dev/null +++ b/resources/views/livewire/form/form-get-api-token.blade.php @@ -0,0 +1,56 @@ +
+
+
+
+ + + + +
+
+
+ +
\ No newline at end of file diff --git a/resources/views/livewire/form/form-login.blade.php b/resources/views/livewire/form/form-login.blade.php index f2ab96b622..4723325ced 100644 --- a/resources/views/livewire/form/form-login.blade.php +++ b/resources/views/livewire/form/form-login.blade.php @@ -1,36 +1,34 @@ -
- diff --git a/resources/views/livewire/form/form-set-login.blade.php b/resources/views/livewire/form/form-set-login.blade.php new file mode 100644 index 0000000000..cfed51ab22 --- /dev/null +++ b/resources/views/livewire/form/form-set-login.blade.php @@ -0,0 +1,18 @@ +
+
+

+ {{ Lang::get('PASSWORD_TITLE') }} + +

+

+ {{ Lang::get('PASSWORD_TEXT') }} + + + +

+ +
+
diff --git a/resources/views/livewire/form/form-toggle.blade.php b/resources/views/livewire/form/form-toggle.blade.php new file mode 100644 index 0000000000..d79ff2888e --- /dev/null +++ b/resources/views/livewire/form/form-toggle.blade.php @@ -0,0 +1,14 @@ +
+

+ {{ $description }} + +

+ @if($footer !== '') +

+ {{ $footer }} +

+ @endif +
diff --git a/resources/views/livewire/form/form.blade.php b/resources/views/livewire/form/form.blade.php index a436eb1bde..0edf30873c 100644 --- a/resources/views/livewire/form/form.blade.php +++ b/resources/views/livewire/form/form.blade.php @@ -10,7 +10,7 @@
@if (is_string($f)) {{-- Work in Progess, will probably evolve --}} - + @else {{ $f }} not supported yet. @endif diff --git a/resources/views/livewire/index.blade.php b/resources/views/livewire/index.blade.php index b3b4c78dc6..239f7899c2 100644 --- a/resources/views/livewire/index.blade.php +++ b/resources/views/livewire/index.blade.php @@ -4,11 +4,10 @@ @if($mode === App\Enum\Livewire\PageMode::GALLERY) - + @elseif($mode === App\Enum\Livewire\PageMode::SETTINGS) @else DO NOTHING FOR NOW; @endif - {{-- @include('includes.footer') --}}
diff --git a/resources/views/livewire/pages/gallery.blade.php b/resources/views/livewire/pages/gallery.blade.php index f8b7abdf8c..57c00f6c0e 100644 --- a/resources/views/livewire/pages/gallery.blade.php +++ b/resources/views/livewire/pages/gallery.blade.php @@ -1,6 +1,6 @@
- + - + @elseif($mode === App\Enum\Livewire\GalleryMode::MAP) - + @endif
@@ -53,14 +53,14 @@ Do not that those need to not colide with other components, as a result we use prefix-id-time strings to avoid such problems. --> - + @elseif($mode === App\Enum\Livewire\GalleryMode::PHOTO) - + @endif
diff --git a/resources/views/livewire/pages/settings.blade.php b/resources/views/livewire/pages/settings.blade.php index 010c4c3326..3ecb328c24 100644 --- a/resources/views/livewire/pages/settings.blade.php +++ b/resources/views/livewire/pages/settings.blade.php @@ -27,25 +27,7 @@ -->
-
-
-

- Enter your current password: - -

-

- Your credentials will be changed to the following: - - - -

- -
-
+

@@ -191,16 +173,7 @@ Change layout

- -
-

- Public search allowed: - -

-
+

@@ -248,25 +221,14 @@

-
-

- Enable maps (provided by OpenStreetMap): - -

-
- -
-

- Enable maps for public albums (provided by OpenStreetMap): - -

-
+ +

@@ -286,68 +248,35 @@

-
-

- Include photos of subalbums on map: - -

-
- -
-

- Decode GPS data into location name - -

-
- -
-

- Show location name - -

-
- -
-

- Show location name for public mode - -

-
- -
-

- Make Sensitive albums visible by default. - -

-

- If the album is public, it is still accessible, just hidden from the view and can be revealed by pressing H. -

-
- -
-

- Send new photos notification emails. - -

-
+ + + + + + +

@@ -370,4 +299,5 @@

+ \ No newline at end of file