107 lines
2.9 KiB
JavaScript
107 lines
2.9 KiB
JavaScript
|
import ProgressButton from '../../progress_button/progress_button.vue'
|
||
|
import Checkbox from '../../checkbox/checkbox.vue'
|
||
|
import Mfa from '../../user_settings/mfa.vue'
|
||
|
|
||
|
const Security = {
|
||
|
data () {
|
||
|
return {
|
||
|
newEmail: '',
|
||
|
changeEmailError: false,
|
||
|
changeEmailPassword: '',
|
||
|
changedEmail: false,
|
||
|
deletingAccount: false,
|
||
|
deleteAccountConfirmPasswordInput: '',
|
||
|
deleteAccountError: false,
|
||
|
changePasswordInputs: [ '', '', '' ],
|
||
|
changedPassword: false,
|
||
|
changePasswordError: false
|
||
|
}
|
||
|
},
|
||
|
created () {
|
||
|
this.$store.dispatch('fetchTokens')
|
||
|
},
|
||
|
components: {
|
||
|
ProgressButton,
|
||
|
Mfa,
|
||
|
Checkbox
|
||
|
},
|
||
|
computed: {
|
||
|
user () {
|
||
|
return this.$store.state.users.currentUser
|
||
|
},
|
||
|
pleromaBackend () {
|
||
|
return this.$store.state.instance.pleromaBackend
|
||
|
},
|
||
|
oauthTokens () {
|
||
|
return this.$store.state.oauthTokens.tokens.map(oauthToken => {
|
||
|
return {
|
||
|
id: oauthToken.id,
|
||
|
appName: oauthToken.app_name,
|
||
|
validUntil: new Date(oauthToken.valid_until).toLocaleDateString()
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
},
|
||
|
methods: {
|
||
|
confirmDelete () {
|
||
|
this.deletingAccount = true
|
||
|
},
|
||
|
deleteAccount () {
|
||
|
this.$store.state.api.backendInteractor.deleteAccount({ password: this.deleteAccountConfirmPasswordInput })
|
||
|
.then((res) => {
|
||
|
if (res.status === 'success') {
|
||
|
this.$store.dispatch('logout')
|
||
|
this.$router.push({ name: 'root' })
|
||
|
} else {
|
||
|
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
|
||
|
this.logout()
|
||
|
} else {
|
||
|
this.changedPassword = false
|
||
|
this.changePasswordError = res.error
|
||
|
}
|
||
|
})
|
||
|
},
|
||
|
changeEmail () {
|
||
|
const params = {
|
||
|
email: this.newEmail,
|
||
|
password: this.changeEmailPassword
|
||
|
}
|
||
|
this.$store.state.api.backendInteractor.changeEmail(params)
|
||
|
.then((res) => {
|
||
|
if (res.status === 'success') {
|
||
|
this.changedEmail = true
|
||
|
this.changeEmailError = false
|
||
|
} else {
|
||
|
this.changedEmail = false
|
||
|
this.changeEmailError = res.error
|
||
|
}
|
||
|
})
|
||
|
},
|
||
|
logout () {
|
||
|
this.$store.dispatch('logout')
|
||
|
this.$router.replace('/')
|
||
|
},
|
||
|
revokeToken (id) {
|
||
|
if (window.confirm(`${this.$i18n.t('settings.revoke_token')}?`)) {
|
||
|
this.$store.dispatch('revokeToken', id)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
export default Security
|