Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorCarl Schwan <carl@carlschwan.eu>2022-08-02 03:03:19 +0300
committerCarl Schwan <carl@carlschwan.eu>2022-08-31 18:42:36 +0300
commit60c42914d8d4ef815b239cb3b83ee682e56c5c22 (patch)
tree9c59af0633281c8422947c58e8c71706a921b320 /apps
parentb617f3983a8152f2da018ddba6936dd8381a1f20 (diff)
Port password settings to vue
Signed-off-by: Carl Schwan <carl@carlschwan.eu>
Diffstat (limited to 'apps')
-rw-r--r--apps/settings/lib/Controller/ChangePasswordController.php26
-rw-r--r--apps/settings/src/components/PasswordSection.vue98
-rw-r--r--apps/settings/src/main-personal-password.js36
-rw-r--r--apps/settings/templates/settings/personal/security/password.php43
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>