Skip to content

Commit

Permalink
Port password settings to vue
Browse files Browse the repository at this point in the history
Signed-off-by: Carl Schwan <carl@carlschwan.eu>
  • Loading branch information
CarlSchwan committed Aug 31, 2022
1 parent b617f39 commit 60c4291
Show file tree
Hide file tree
Showing 15 changed files with 186 additions and 73 deletions.
26 changes: 7 additions & 19 deletions apps/settings/lib/Controller/ChangePasswordController.php
Original file line number Diff line number Diff line change
Expand Up @@ -49,28 +49,16 @@
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,
Expand Down
98 changes: 98 additions & 0 deletions apps/settings/src/components/PasswordSection.vue
Original file line number Diff line number Diff line change
@@ -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 changes: 36 additions & 0 deletions apps/settings/src/main-personal-password.js
Original file line number Diff line number Diff line change
@@ -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),
})
43 changes: 3 additions & 40 deletions apps/settings/templates/settings/personal/security/password.php
Original file line number Diff line number Diff line change
@@ -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>
*
Expand All @@ -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>
4 changes: 2 additions & 2 deletions dist/core-common.js

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions dist/core-common.js.LICENSE.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down
2 changes: 1 addition & 1 deletion dist/core-common.js.map

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions dist/core-login.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/core-login.js.map

Large diffs are not rendered by default.

3 changes: 3 additions & 0 deletions dist/settings-vue-settings-personal-password.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

19 changes: 19 additions & 0 deletions dist/settings-vue-settings-personal-password.js.LICENSE.txt
Original file line number Diff line number Diff line change
@@ -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 change: 1 addition & 0 deletions dist/settings-vue-settings-personal-password.js.map

Large diffs are not rendered by default.

16 changes: 9 additions & 7 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
1 change: 1 addition & 0 deletions webpack.modules.js
Original file line number Diff line number Diff line change
Expand Up @@ -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'),
},
Expand Down

0 comments on commit 60c4291

Please sign in to comment.