diff options
author | Carl Schwan <carl@carlschwan.eu> | 2022-08-02 02:03:19 +0200 |
---|---|---|
committer | Carl Schwan <carl@carlschwan.eu> | 2022-08-31 17:42:36 +0200 |
commit | 60c42914d8d4ef815b239cb3b83ee682e56c5c22 (patch) | |
tree | 9c59af0633281c8422947c58e8c71706a921b320 /apps | |
parent | b617f3983a8152f2da018ddba6936dd8381a1f20 (diff) | |
download | nextcloud-server-60c42914d8d4ef815b239cb3b83ee682e56c5c22.tar.gz nextcloud-server-60c42914d8d4ef815b239cb3b83ee682e56c5c22.zip |
Port password settings to vue
Signed-off-by: Carl Schwan <carl@carlschwan.eu>
Diffstat (limited to 'apps')
4 files changed, 144 insertions, 59 deletions
diff --git a/apps/settings/lib/Controller/ChangePasswordController.php b/apps/settings/lib/Controller/ChangePasswordController.php index 41f2584721c..a25f0b0e59b 100644 --- a/apps/settings/lib/Controller/ChangePasswordController.php +++ b/apps/settings/lib/Controller/ChangePasswordController.php @@ -49,28 +49,16 @@ use OCP\IUserManager; use OCP\IUserSession; class ChangePasswordController extends Controller { - - /** @var string */ - private $userId; - - /** @var IUserManager */ - private $userManager; - - /** @var IL10N */ - private $l; - - /** @var GroupManager */ - private $groupManager; - - /** @var Session */ - private $userSession; - - /** @var IAppManager */ - private $appManager; + private ?string $userId; + private IUserManager $userManager; + private IL10N $l; + private GroupManager $groupManager; + private Session $userSession; + private IAppManager $appManager; public function __construct(string $appName, IRequest $request, - string $userId, + ?string $userId, IUserManager $userManager, IUserSession $userSession, IGroupManager $groupManager, diff --git a/apps/settings/src/components/PasswordSection.vue b/apps/settings/src/components/PasswordSection.vue new file mode 100644 index 00000000000..b68de0365e0 --- /dev/null +++ b/apps/settings/src/components/PasswordSection.vue @@ -0,0 +1,98 @@ +<!-- + - @copyright 2022 Carl Schwan <carl@carlschwan.eu> + - + - @license GNU AGPL version 3 or any later version + - + - This program is free software: you can redistribute it and/or modify + - it under the terms of the GNU Affero General Public License as + - published by the Free Software Foundation, either version 3 of the + - License, or (at your option) any later version. + - + - This program is distributed in the hope that it will be useful, + - but WITHOUT ANY WARRANTY; without even the implied warranty of + - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + - GNU Affero General Public License for more details. + - + - You should have received a copy of the GNU Affero General Public License + - along with this program. If not, see <http://www.gnu.org/licenses/>. + --> +<template> + <NcSettingsSection :title="t('settings', 'Password')"> + <form id="passwordform" method="POST" @submit.prevent="changePassword"> + <NcPasswordField id="old-pass" + :label="t('settings', 'Current password')" + :label-visible="true" + name="oldpassword" + :value.sync="oldPass" + autocomplete="current-password" + autocapitalize="none" + autocorrect="off" /> + + <NcPasswordField id="new-pass" + :label="t('settings', 'New password')" + :label-visible="true" + :value.sync="newPass" + :maxlength="469" + autocomplete="new-password" + autocapitalize="none" + autocorrect="off" + :check-password-strength="true" /> + + <NcButton type="primary" + native-type="submit" + :disabled="newPass.length === 0 || oldPass.length === 0"> + {{ t('settings', 'Change password') }} + </NcButton> + </form> + </NcSettingsSection> +</template> + +<script> +import NcSettingsSection from '@nextcloud/vue/dist/Components/NcSettingsSection.js' +import NcButton from '@nextcloud/vue/dist/Components/NcButton.js' +import NcPasswordField from '@nextcloud/vue/dist/Components/NcPasswordField.js' +import axios from '@nextcloud/axios' +import { generateUrl } from '@nextcloud/router' +import { showSuccess, showError } from '@nextcloud/dialogs' + +export default { + name: 'PasswordSection', + components: { + NcSettingsSection, + NcButton, + NcPasswordField, + }, + data() { + return { + oldPass: '', + newPass: '', + } + }, + methods: { + changePassword() { + axios.post(generateUrl('/settings/personal/changepassword'), { + oldpassword: this.oldPass, + newpassword: this.newPass, + }) + .then(res => res.data) + .then(data => { + if (data.status === 'error') { + this.errorMessage = data.data.message + showError(data.data.message) + } else { + showSuccess(data.data.message) + } + }) + }, + }, +} +</script> + +<style> + #passwordform { + display: flex; + flex-direction: column; + gap: 1rem; + max-width: 400px; + } +</style> diff --git a/apps/settings/src/main-personal-password.js b/apps/settings/src/main-personal-password.js new file mode 100644 index 00000000000..cd27832a7df --- /dev/null +++ b/apps/settings/src/main-personal-password.js @@ -0,0 +1,36 @@ +/** + * @copyright 2022 Carl Schwan <carl@carlschwan.eu> + * + * @license AGPL-3.0-or-later + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +import Vue from 'vue' + +import PasswordSection from './components/PasswordSection.vue' +import { translate as t, translatePlural as n } from '@nextcloud/l10n' + +// eslint-disable-next-line camelcase +__webpack_nonce__ = btoa(OC.requestToken) + +Vue.prototype.t = t +Vue.prototype.n = n + +export default new Vue({ + el: '#security-password', + name: 'main-personal-password', + render: h => h(PasswordSection), +}) diff --git a/apps/settings/templates/settings/personal/security/password.php b/apps/settings/templates/settings/personal/security/password.php index f44d95c0997..bc363b15aa7 100644 --- a/apps/settings/templates/settings/personal/security/password.php +++ b/apps/settings/templates/settings/personal/security/password.php @@ -1,6 +1,7 @@ <?php /** * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de> + * @copyright Copyright (c) 2022 Carl Schwan <carl@carlschwan.eu> * * @author Arthur Schiwon <blizzz@arthur-schiwon.de> * @@ -21,46 +22,8 @@ * */ -script('settings', [ - 'settings', - 'templates', - 'vue-settings-personal-security', -]); - if ($_['passwordChangeSupported']) { - script('settings', 'security_password'); + \OCP\Util::addScript('settings', 'vue-settings-personal-password'); } - ?> -<?php if ($_['passwordChangeSupported']) { ?> -<div id="security-password" class="section"> - <h2 class="inlineblock"><?php p($l->t('Password'));?></h2> - <span id="password-error-msg" class="msg success hidden">Saved</span> - <div class="personal-settings-setting-box personal-settings-password-box"> - <form id="passwordform" method="POST"> - <div class="input-control"> - <label for="pass1"><?php p($l->t('Current password')); ?>: </label> - <input type="password" id="pass1" name="oldpassword" - placeholder="<?php p($l->t('Your current password'));?>" - autocomplete="current-password" autocapitalize="none" autocorrect="off" /> - </div> - - <div class="personal-show-container"> - <label for="pass2" ><?php p($l->t('New password'));?>: </label> - <input type="password" id="pass2" name="newpassword" - maxlength="469" - placeholder="<?php p($l->t('Your new password')); ?>" - data-typetoggle="#personal-show" - autocomplete="new-password" autocapitalize="none" autocorrect="off" /> - <input type="checkbox" id="personal-show" class="hidden-visually" name="show" /> - <label for="personal-show" class="personal-show-label"></label> - </div> - - <div> - <input id="passwordbutton" class="primary" type="submit" value="<?php p($l->t('Change password')); ?>" /> - </div> - </form> - </div> - <span class="msg"></span> -</div> -<?php } ?> +<div id="security-password"></div> |