Browse Source

Port password settings to vue

Signed-off-by: Carl Schwan <carl@carlschwan.eu>
tags/v25.0.0beta4
Carl Schwan 1 year ago
parent
commit
60c42914d8
No account linked to committer's email address

+ 7
- 19
apps/settings/lib/Controller/ChangePasswordController.php View File

@@ -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,

+ 98
- 0
apps/settings/src/components/PasswordSection.vue View File

@@ -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>

+ 36
- 0
apps/settings/src/main-personal-password.js View File

@@ -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),
})

+ 3
- 40
apps/settings/templates/settings/personal/security/password.php View File

@@ -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>

+ 2
- 2
dist/core-common.js
File diff suppressed because it is too large
View File


+ 2
- 0
dist/core-common.js.LICENSE.txt View File

@@ -378,6 +378,8 @@

/*! For license information please see NcMultiselect.js.LICENSE.txt */

/*! For license information please see NcPasswordField.js.LICENSE.txt */

/*! For license information please see NcRichContenteditable.js.LICENSE.txt */

/*! For license information please see NcTimezonePicker.js.LICENSE.txt */

+ 1
- 1
dist/core-common.js.map
File diff suppressed because it is too large
View File


+ 2
- 2
dist/core-login.js
File diff suppressed because it is too large
View File


+ 1
- 1
dist/core-login.js.map
File diff suppressed because it is too large
View File


+ 3
- 0
dist/settings-vue-settings-personal-password.js
File diff suppressed because it is too large
View File


+ 19
- 0
dist/settings-vue-settings-personal-password.js.LICENSE.txt View File

@@ -0,0 +1,19 @@
/**
* @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/>.
*
*/

+ 1
- 0
dist/settings-vue-settings-personal-password.js.map
File diff suppressed because it is too large
View File


+ 9
- 7
package-lock.json View File

@@ -26,7 +26,7 @@
"@nextcloud/paths": "^2.1.0",
"@nextcloud/router": "^2.0.0",
"@nextcloud/sharing": "^0.1.0",
"@nextcloud/vue": "^6.0.0-beta.4",
"@nextcloud/vue": "^6.0.0-beta.5",
"@nextcloud/vue-dashboard": "^2.0.1",
"@vue/cli-plugin-unit-jest": "^4.5.15",
"autosize": "^5.0.1",
@@ -3251,9 +3251,9 @@
}
},
"node_modules/@nextcloud/vue": {
"version": "6.0.0-beta.4",
"resolved": "https://registry.npmjs.org/@nextcloud/vue/-/vue-6.0.0-beta.4.tgz",
"integrity": "sha512-1TdzH0++/gIcBzot8iNT3AnweR/1EykpCfBwkJNhMgoiY4HlMLxBj7bpe2D4ul24XTCoXVEdGMYyB32GNVc9WA==",
"version": "6.0.0-beta.5",
"resolved": "https://registry.npmjs.org/@nextcloud/vue/-/vue-6.0.0-beta.5.tgz",
"integrity": "sha512-23vdV3Z9iyUXs5mGi++uGShpL1+lhNPLfjbnCjf9rIytG6XQV/46vzdBSttbBA91CnuEYufEsTu3grjwW9JiRg==",
"dependencies": {
"@nextcloud/auth": "^2.0.0",
"@nextcloud/axios": "^2.0.0",
@@ -3262,6 +3262,7 @@
"@nextcloud/capabilities": "^1.0.4",
"@nextcloud/dialogs": "^3.1.4",
"@nextcloud/event-bus": "^3.0.0",
"@nextcloud/initial-state": "^1.2.1",
"@nextcloud/l10n": "^1.6.0",
"@nextcloud/logger": "^2.2.1",
"@nextcloud/router": "^2.0.0",
@@ -34467,9 +34468,9 @@
}
},
"@nextcloud/vue": {
"version": "6.0.0-beta.4",
"resolved": "https://registry.npmjs.org/@nextcloud/vue/-/vue-6.0.0-beta.4.tgz",
"integrity": "sha512-1TdzH0++/gIcBzot8iNT3AnweR/1EykpCfBwkJNhMgoiY4HlMLxBj7bpe2D4ul24XTCoXVEdGMYyB32GNVc9WA==",
"version": "6.0.0-beta.5",
"resolved": "https://registry.npmjs.org/@nextcloud/vue/-/vue-6.0.0-beta.5.tgz",
"integrity": "sha512-23vdV3Z9iyUXs5mGi++uGShpL1+lhNPLfjbnCjf9rIytG6XQV/46vzdBSttbBA91CnuEYufEsTu3grjwW9JiRg==",
"requires": {
"@nextcloud/auth": "^2.0.0",
"@nextcloud/axios": "^2.0.0",
@@ -34478,6 +34479,7 @@
"@nextcloud/capabilities": "^1.0.4",
"@nextcloud/dialogs": "^3.1.4",
"@nextcloud/event-bus": "^3.0.0",
"@nextcloud/initial-state": "^1.2.1",
"@nextcloud/l10n": "^1.6.0",
"@nextcloud/logger": "^2.2.1",
"@nextcloud/router": "^2.0.0",

+ 1
- 1
package.json View File

@@ -46,7 +46,7 @@
"@nextcloud/paths": "^2.1.0",
"@nextcloud/router": "^2.0.0",
"@nextcloud/sharing": "^0.1.0",
"@nextcloud/vue": "^6.0.0-beta.4",
"@nextcloud/vue": "^6.0.0-beta.5",
"@nextcloud/vue-dashboard": "^2.0.1",
"@vue/cli-plugin-unit-jest": "^4.5.15",
"autosize": "^5.0.1",

+ 1
- 0
webpack.modules.js View File

@@ -81,6 +81,7 @@ module.exports = {
'vue-settings-personal-info': path.join(__dirname, 'apps/settings/src', 'main-personal-info.js'),
'vue-settings-personal-security': path.join(__dirname, 'apps/settings/src', 'main-personal-security.js'),
'vue-settings-personal-webauthn': path.join(__dirname, 'apps/settings/src', 'main-personal-webauth.js'),
'vue-settings-personal-password': path.join(__dirname, 'apps/settings/src', 'main-personal-password.js'),
'legacy-admin': path.join(__dirname, 'apps/settings/src', 'admin.js'),
'apps': path.join(__dirname, 'apps/settings/src', 'apps.js'),
},

Loading…
Cancel
Save