diff --git a/src/components/user_settings/user_settings.js b/src/components/user_settings/user_settings.js index 1e7b9b1292..b6026e18a4 100644 --- a/src/components/user_settings/user_settings.js +++ b/src/components/user_settings/user_settings.js @@ -13,7 +13,10 @@ const UserSettings = { previews: [ null, null, null ], deletingAccount: false, deleteAccountConfirmPasswordInput: '', - deleteAccountError: false + deleteAccountError: false, + changePasswordInputs: [ '', '', '' ], + changedPassword: false, + changePasswordError: false } }, components: { @@ -195,6 +198,23 @@ const UserSettings = { this.deleteAccountError = res.error } }) + }, + changePassword () { + const params = { + password: this.changePasswordInputs[0], + newPassword: this.changePasswordInputs[1], + newPasswordConfirmation: this.changePasswordInputs[2] + } + this.$store.state.api.backendInteractor.changePassword(params) + .then((res) => { + if (res.status === 'success') { + this.changedPassword = true + this.changePasswordError = false + } else { + this.changedPassword = false + this.changePasswordError = res.error + } + }) } } } diff --git a/src/components/user_settings/user_settings.vue b/src/components/user_settings/user_settings.vue index ea9763f328..fbf3f651e7 100644 --- a/src/components/user_settings/user_settings.vue +++ b/src/components/user_settings/user_settings.vue @@ -49,6 +49,25 @@ +
+

{{$t('settings.change_password')}}

+
+

{{$t('settings.current_password')}}

+ +
+
+

{{$t('settings.new_password')}}

+ +
+
+

{{$t('settings.confirm_new_password')}}

+ +
+ +

{{$t('settings.changed_password')}}

+

{{$t('settings.change_password_error')}}

+

{{changePasswordError}}

+

{{$t('settings.follow_import')}}

{{$t('settings.import_followers_from_a_csv_file')}}

@@ -62,7 +81,7 @@

{{$t('settings.follows_imported')}}

- +

{{$t('settings.follow_import_error')}}

diff --git a/src/i18n/messages.js b/src/i18n/messages.js index 19b502720d..54a99b5ab4 100644 --- a/src/i18n/messages.js +++ b/src/i18n/messages.js @@ -291,12 +291,18 @@ const en = { follows_imported: 'Follows imported! Processing them will take a while.', follow_import_error: 'Error importing followers', delete_account: 'Delete Account', - delete_account_description: 'Permanantly delete your account and all your messages.', + delete_account_description: 'Permanently delete your account and all your messages.', delete_account_instructions: 'Type your password in the input below to confirm account deletion.', delete_account_error: 'There was an issue deleting your account. If this persists please contact your instance administrator.', follow_export: 'Follow export', follow_export_processing: 'Processing, you\'ll soon be asked to download your file', - follow_export_button: 'Export your follows to a csv file' + follow_export_button: 'Export your follows to a csv file', + change_password: 'Change Password', + current_password: 'Current password', + new_password: 'New password', + confirm_new_password: 'Confirm new password', + changed_password: 'Password changed successfully!', + change_password_error: 'There was an issue changing your password.' }, notifications: { notifications: 'Notifications', diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js index fd4010680f..65761aee97 100644 --- a/src/services/api/api.service.js +++ b/src/services/api/api.service.js @@ -31,6 +31,7 @@ const UNBLOCKING_URL = '/api/blocks/destroy.json' const USER_URL = '/api/users/show.json' const FOLLOW_IMPORT_URL = '/api/pleroma/follow_import' const DELETE_ACCOUNT_URL = '/api/pleroma/delete_account' +const CHANGE_PASSWORD_URL = '/api/pleroma/change_password' import { each, map } from 'lodash' import 'whatwg-fetch' @@ -387,6 +388,21 @@ const deleteAccount = ({credentials, password}) => { .then((response) => response.json()) } +const changePassword = ({credentials, password, newPassword, newPasswordConfirmation}) => { + const form = new FormData() + + form.append('password', password) + form.append('new_password', newPassword) + form.append('new_password_confirmation', newPasswordConfirmation) + + return fetch(CHANGE_PASSWORD_URL, { + body: form, + method: 'POST', + headers: authHeaders(credentials) + }) + .then((response) => response.json()) +} + const fetchMutes = ({credentials}) => { const url = '/api/qvitter/mutes.json' @@ -423,7 +439,8 @@ const apiService = { updateBanner, externalProfile, followImport, - deleteAccount + deleteAccount, + changePassword } export default apiService diff --git a/src/services/backend_interactor_service/backend_interactor_service.js b/src/services/backend_interactor_service/backend_interactor_service.js index c5807bed30..1417355805 100644 --- a/src/services/backend_interactor_service/backend_interactor_service.js +++ b/src/services/backend_interactor_service/backend_interactor_service.js @@ -62,6 +62,7 @@ const backendInteractorService = (credentials) => { const followImport = ({params}) => apiService.followImport({params, credentials}) const deleteAccount = ({password}) => apiService.deleteAccount({credentials, password}) + const changePassword = ({password, newPassword, newPasswordConfirmation}) => apiService.changePassword({credentials, password, newPassword, newPasswordConfirmation}) const backendInteractorServiceInstance = { fetchStatus, @@ -85,7 +86,8 @@ const backendInteractorService = (credentials) => { updateProfile, externalProfile, followImport, - deleteAccount + deleteAccount, + changePassword } return backendInteractorServiceInstance