From d39de3022108c4a42d20fe2a38265179ae0062f9 Mon Sep 17 00:00:00 2001 From: Tusooa Zhu Date: Sat, 26 Mar 2022 12:39:26 -0400 Subject: Add config opts for email language --- src/services/api/api.service.js | 1 + 1 file changed, 1 insertion(+) (limited to 'src/services/api/api.service.js') diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js index 436b8b0a..1b1722ab 100644 --- a/src/services/api/api.service.js +++ b/src/services/api/api.service.js @@ -191,6 +191,7 @@ const updateProfile = ({ credentials, params }) => { // homepage // location // token +// language const register = ({ params, credentials }) => { const { nickname, ...rest } = params return fetch(MASTODON_REGISTRATION_URL, { -- cgit v1.2.3-70-g09d2 From 176da2bbe53e540239c9781776968d8ce59127ed Mon Sep 17 00:00:00 2001 From: Tusooa Zhu Date: Sun, 12 Sep 2021 13:50:16 -0400 Subject: Add frontend ui for aliases and migration Ref: migrate-ui --- .../tabs/security_tab/security_tab.js | 51 +++++++++++- .../tabs/security_tab/security_tab.vue | 96 ++++++++++++++++++++++ src/services/api/api.service.js | 49 +++++++++++ 3 files changed, 195 insertions(+), 1 deletion(-) (limited to 'src/services/api/api.service.js') diff --git a/src/components/settings_modal/tabs/security_tab/security_tab.js b/src/components/settings_modal/tabs/security_tab/security_tab.js index 65d20fc0..3f326f74 100644 --- a/src/components/settings_modal/tabs/security_tab/security_tab.js +++ b/src/components/settings_modal/tabs/security_tab/security_tab.js @@ -15,11 +15,20 @@ const SecurityTab = { deleteAccountError: false, changePasswordInputs: [ '', '', '' ], changedPassword: false, - changePasswordError: false + changePasswordError: false, + moveAccountTarget: '', + moveAccountPassword: '', + movedAccount: false, + moveAccountError: false, + aliases: [], + addAliasTarget: '', + addedAlias: false, + addAliasError: false } }, created () { this.$store.dispatch('fetchTokens') + this.fetchAliases() }, components: { ProgressButton, @@ -92,6 +101,46 @@ const SecurityTab = { } }) }, + moveAccount () { + const params = { + targetAccount: this.moveAccountTarget, + password: this.moveAccountPassword + } + this.$store.state.api.backendInteractor.moveAccount(params) + .then((res) => { + if (res.status === 'success') { + this.movedAccount = true + this.moveAccountError = false + } else { + this.movedAccount = false + this.moveAccountError = res.error + } + }) + }, + removeAlias (alias) { + this.$store.state.api.backendInteractor.deleteAlias({ alias }) + .then(() => this.fetchAliases()) + }, + addAlias () { + this.$store.state.api.backendInteractor.addAlias({ alias: this.addAliasTarget }) + .then((res) => { + this.addedAlias = true + this.addAliasError = false + this.addAliasTarget = '' + }) + .catch((error) => { + this.addedAlias = false + this.addAliasError = error + }) + .then(() => this.fetchAliases()) + }, + fetchAliases () { + this.$store.state.api.backendInteractor.listAliases() + .catch(() => {}) + .then((res) => { + this.aliases = res.aliases + }) + }, logout () { this.$store.dispatch('logout') this.$router.replace('/') diff --git a/src/components/settings_modal/tabs/security_tab/security_tab.vue b/src/components/settings_modal/tabs/security_tab/security_tab.vue index 275d4616..c6c4fa1a 100644 --- a/src/components/settings_modal/tabs/security_tab/security_tab.vue +++ b/src/components/settings_modal/tabs/security_tab/security_tab.vue @@ -103,6 +103,102 @@ + +
+

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

+ + + + + + + + + + + + +
{{ $t('settings.account_alias_table_head') }} +
{{ alias }} + +
+
+ + + foo@example.org + + + +
+ +

+ {{ $t('settings.added_alias') }} +

+ +
+ +
+

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

+

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

+
+ + + foo@example.org + + + +
+
+

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

+ +
+ +

+ {{ $t('settings.moved_account') }} +

+ +
+

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

diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js index 436b8b0a..efdd8461 100644 --- a/src/services/api/api.service.js +++ b/src/services/api/api.service.js @@ -9,6 +9,8 @@ const FOLLOW_IMPORT_URL = '/api/pleroma/follow_import' const DELETE_ACCOUNT_URL = '/api/pleroma/delete_account' const CHANGE_EMAIL_URL = '/api/pleroma/change_email' const CHANGE_PASSWORD_URL = '/api/pleroma/change_password' +const MOVE_ACCOUNT_URL = '/api/pleroma/move_account' +const ALIASES_URL = '/api/pleroma/aliases' const TAG_USER_URL = '/api/pleroma/admin/users/tag' const PERMISSION_GROUP_URL = (screenName, right) => `/api/pleroma/admin/users/${screenName}/permission_group/${right}` const ACTIVATE_USER_URL = '/api/pleroma/admin/users/activate' @@ -782,6 +784,49 @@ const changeEmail = ({ credentials, email, password }) => { .then((response) => response.json()) } +const moveAccount = ({ credentials, password, targetAccount }) => { + const form = new FormData() + + form.append('password', password) + form.append('target_account', targetAccount) + + return fetch(MOVE_ACCOUNT_URL, { + body: form, + method: 'POST', + headers: authHeaders(credentials) + }) + .then((response) => response.json()) +} + +const addAlias = ({ credentials, alias }) => { + return promisedRequest({ + url: ALIASES_URL, + method: 'PUT', + credentials, + payload: { alias } + }) +} + +const deleteAlias = ({ credentials, alias }) => { + return promisedRequest({ + url: ALIASES_URL, + method: 'DELETE', + credentials, + payload: { alias } + }) +} + +const listAliases = ({ credentials }) => { + return promisedRequest({ + url: ALIASES_URL, + method: 'GET', + credentials, + params: { + _cacheBooster: (new Date()).getTime() + } + }) +} + const changePassword = ({ credentials, password, newPassword, newPasswordConfirmation }) => { const form = new FormData() @@ -1319,6 +1364,10 @@ const apiService = { importFollows, deleteAccount, changeEmail, + moveAccount, + addAlias, + deleteAlias, + listAliases, changePassword, settingsMFA, mfaDisableOTP, -- cgit v1.2.3-70-g09d2 From f3ce76ddbfb49b574b37019ed0c1062d509de916 Mon Sep 17 00:00:00 2001 From: Tusooa Zhu Date: Mon, 9 May 2022 00:38:25 -0400 Subject: Add backup UI --- .../settings_modal/tabs/data_import_export_tab.js | 29 +++++++++- .../settings_modal/tabs/data_import_export_tab.vue | 61 ++++++++++++++++++++++ src/services/api/api.service.js | 22 ++++++++ 3 files changed, 111 insertions(+), 1 deletion(-) (limited to 'src/services/api/api.service.js') diff --git a/src/components/settings_modal/tabs/data_import_export_tab.js b/src/components/settings_modal/tabs/data_import_export_tab.js index f4b736d2..4895733c 100644 --- a/src/components/settings_modal/tabs/data_import_export_tab.js +++ b/src/components/settings_modal/tabs/data_import_export_tab.js @@ -7,11 +7,16 @@ const DataImportExportTab = { data () { return { activeTab: 'profile', - newDomainToMute: '' + newDomainToMute: '', + listBackupsError: false, + addBackupError: false, + addedBackup: false, + backups: [] } }, created () { this.$store.dispatch('fetchTokens') + this.fetchBackups() }, components: { Importer, @@ -72,6 +77,28 @@ const DataImportExportTab = { } return user.screen_name }).join('\n') + }, + addBackup () { + this.$store.state.api.backendInteractor.addBackup() + .then((res) => { + this.addedBackup = true + this.addBackupError = false + }) + .catch((error) => { + this.addedBackup = false + this.addBackupError = error + }) + .then(() => this.fetchBackups()) + }, + fetchBackups () { + this.$store.state.api.backendInteractor.listBackups() + .then((res) => { + this.backups = res + this.listBackupsError = false + }) + .catch((error) => { + this.listBackupsError = error.error + }) } } } diff --git a/src/components/settings_modal/tabs/data_import_export_tab.vue b/src/components/settings_modal/tabs/data_import_export_tab.vue index a406077d..06548390 100644 --- a/src/components/settings_modal/tabs/data_import_export_tab.vue +++ b/src/components/settings_modal/tabs/data_import_export_tab.vue @@ -53,6 +53,67 @@ :export-button-label="$t('settings.mute_export_button')" />

+
+

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

+

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

+ + + + + + + + + + + + + +
{{ $t('settings.account_backup_table_head') }}
{{ backup.inserted_at }} + + {{ $t('settings.download_backup') }} + + + {{ $t('settings.backup_not_ready') }} + +
+
+ {{ $t('settings.list_backups_error', { error }) }} + +
+ +

+ {{ $t('settings.added_backup') }} +

+ +
diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js index 436b8b0a..d2df353a 100644 --- a/src/services/api/api.service.js +++ b/src/services/api/api.service.js @@ -87,6 +87,7 @@ const PLEROMA_CHAT_URL = id => `/api/v1/pleroma/chats/by-account-id/${id}` const PLEROMA_CHAT_MESSAGES_URL = id => `/api/v1/pleroma/chats/${id}/messages` const PLEROMA_CHAT_READ_URL = id => `/api/v1/pleroma/chats/${id}/read` const PLEROMA_DELETE_CHAT_MESSAGE_URL = (chatId, messageId) => `/api/v1/pleroma/chats/${chatId}/messages/${messageId}` +const PLEROMA_BACKUP_URL = '/api/v1/pleroma/backups' const oldfetch = window.fetch @@ -868,6 +869,25 @@ const fetchBlocks = ({ credentials }) => { .then((users) => users.map(parseUser)) } +const addBackup = ({ credentials }) => { + return promisedRequest({ + url: PLEROMA_BACKUP_URL, + method: 'POST', + credentials + }) +} + +const listBackups = ({ credentials }) => { + return promisedRequest({ + url: PLEROMA_BACKUP_URL, + method: 'GET', + credentials, + params: { + _cacheBooster: (new Date()).getTime() + } + }) +} + const fetchOAuthTokens = ({ credentials }) => { const url = '/api/oauth_tokens.json' @@ -1325,6 +1345,8 @@ const apiService = { generateMfaBackupCodes, mfaSetupOTP, mfaConfirmOTP, + addBackup, + listBackups, fetchFollowRequests, approveUser, denyUser, -- cgit v1.2.3-70-g09d2 From 29b084b4b85c84ef1a780a48f79e940405a127d9 Mon Sep 17 00:00:00 2001 From: Alexander Tumin Date: Fri, 20 May 2022 02:36:55 +0300 Subject: Pass file name of cropped avatar to form data --- src/components/settings_modal/tabs/profile_tab.js | 8 ++++---- src/services/api/api.service.js | 10 ++++++++-- 2 files changed, 12 insertions(+), 6 deletions(-) (limited to 'src/services/api/api.service.js') diff --git a/src/components/settings_modal/tabs/profile_tab.js b/src/components/settings_modal/tabs/profile_tab.js index bee8a7bb..f2b48b4b 100644 --- a/src/components/settings_modal/tabs/profile_tab.js +++ b/src/components/settings_modal/tabs/profile_tab.js @@ -193,8 +193,8 @@ const ProfileTab = { submitAvatar (cropper, file) { const that = this return new Promise((resolve, reject) => { - function updateAvatar (avatar) { - that.$store.state.api.backendInteractor.updateProfileImages({ avatar }) + function updateAvatar (avatar, avatarName) { + that.$store.state.api.backendInteractor.updateProfileImages({ avatar, avatarName }) .then((user) => { that.$store.commit('addNewUsers', [user]) that.$store.commit('setCurrentUser', user) @@ -207,9 +207,9 @@ const ProfileTab = { } if (cropper) { - cropper.getCroppedCanvas().toBlob(updateAvatar, file.type) + cropper.getCroppedCanvas().toBlob((data) => updateAvatar(data, file.name), file.type) } else { - updateAvatar(file) + updateAvatar(file, file.name) } }) }, diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js index 436b8b0a..50fa3d50 100644 --- a/src/services/api/api.service.js +++ b/src/services/api/api.service.js @@ -151,9 +151,15 @@ const updateNotificationSettings = ({ credentials, settings }) => { }).then((data) => data.json()) } -const updateProfileImages = ({ credentials, avatar = null, banner = null, background = null }) => { +const updateProfileImages = ({ credentials, avatar = null, avatarName = null, banner = null, background = null }) => { const form = new FormData() - if (avatar !== null) form.append('avatar', avatar) + if (avatar !== null) { + if (avatarName !== null) { + form.append('avatar', avatar, avatarName) + } else { + form.append('avatar', avatar) + } + } if (banner !== null) form.append('header', banner) if (background !== null) form.append('pleroma_background_image', background) return fetch(MASTODON_PROFILE_UPDATE_URL, { -- cgit v1.2.3-70-g09d2 From 069cf3fa87c0d29803275fe66864d5e439cad309 Mon Sep 17 00:00:00 2001 From: HJ <30-hj@users.noreply.git.pleroma.social> Date: Sun, 22 May 2022 16:38:09 +0000 Subject: Revert "Merge branch 'from/develop/tusooa/lang-opts' into 'develop'" This reverts merge request !1494 --- package.json | 1 - .../interface_language_switcher.vue | 38 ++++++++++------------ src/components/registration/registration.js | 14 ++------ src/components/registration/registration.vue | 12 ------- src/components/settings_modal/tabs/general_tab.js | 6 ---- src/components/settings_modal/tabs/general_tab.vue | 6 +--- src/components/settings_modal/tabs/profile_tab.js | 38 ++++++++-------------- src/components/settings_modal/tabs/profile_tab.vue | 7 ---- src/i18n/en.json | 4 +-- src/modules/config.js | 5 --- src/services/api/api.service.js | 1 - src/services/locale/locale.service.js | 27 ++------------- yarn.lock | 5 --- 13 files changed, 37 insertions(+), 127 deletions(-) (limited to 'src/services/api/api.service.js') diff --git a/package.json b/package.json index 58aeb363..b5ece450 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,6 @@ "cropperjs": "1.5.12", "diff": "3.5.0", "escape-html": "1.0.3", - "js-cookie": "^3.0.1", "localforage": "1.10.0", "parse-link-header": "1.0.1", "phoenix": "1.6.2", diff --git a/src/components/interface_language_switcher/interface_language_switcher.vue b/src/components/interface_language_switcher/interface_language_switcher.vue index 7ad1fe2e..6d1f83c4 100644 --- a/src/components/interface_language_switcher/interface_language_switcher.vue +++ b/src/components/interface_language_switcher/interface_language_switcher.vue @@ -1,12 +1,12 @@