From ef8d3a3782d98c794c4b35770f81f451722a0ae0 Mon Sep 17 00:00:00 2001 From: Natanael Rodriguez Ramos Date: Thu, 14 May 2026 12:09:49 +0100 Subject: [PATCH 1/3] task: Added uuid on resync link --- src/themes/ivpn-v3/assets/js/components/ServicesSection.vue | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/themes/ivpn-v3/assets/js/components/ServicesSection.vue b/src/themes/ivpn-v3/assets/js/components/ServicesSection.vue index 5bd8c6d0..08eb7f44 100644 --- a/src/themes/ivpn-v3/assets/js/components/ServicesSection.vue +++ b/src/themes/ivpn-v3/assets/js/components/ServicesSection.vue @@ -93,7 +93,7 @@ export default { description: this.$t('account.servicesArea.mailDescription'), setupUrl: () => `${this.mailXURL}/signup?sessionid=${this.preauth?.mail?.sessionid}&subid=${this.preauth?.mail?.uuid}`, accessUrl: () => `${this.mailXURL}/login`, - syncUrl: () => `${this.mailXURL}/account/profile?sessionid=${this.preauth?.mail?.sessionid}`, + syncUrl: () => `${this.mailXURL}/account/profile?sessionid=${this.preauth?.mail?.sessionid}&subid=${this.preauth?.mail?.uuid}`, upgradeRequired: ['IVPN Tier 1'] }, { @@ -102,7 +102,7 @@ export default { description: this.$t('account.servicesArea.dnsDescription'), setupUrl: () => `${this.modDNSURL}/signup?sessionid=${this.preauth?.dns?.sessionid}&subid=${this.preauth?.dns?.uuid}`, accessUrl: () => `${this.modDNSURL}/login`, - syncUrl: () => `${this.modDNSURL}/account-preferences?sessionid=${this.preauth?.dns?.sessionid}`, + syncUrl: () => `${this.modDNSURL}/account-preferences?sessionid=${this.preauth?.dns?.sessionid}&subid=${this.preauth?.dns?.uuid}`, upgradeRequired: ['IVPN Tier 1'] }, { @@ -111,7 +111,7 @@ export default { description: this.$t('account.servicesArea.portmasterDescription'), setupUrl: () => `${this.portmasterURL}/account/external_signup?sessionid=${this.preauth?.portmaster?.sessionid}&subid=${this.preauth?.portmaster?.uuid}`, accessUrl: () => `${this.portmasterURL}/account`, - syncUrl: () => `${this.portmasterURL}/account?sessionid=${this.preauth?.portmaster?.sessionid}`, + syncUrl: () => `${this.portmasterURL}/account?sessionid=${this.preauth?.portmaster?.sessionid}&subid=${this.preauth?.portmaster?.uuid}`, upgradeRequired: ['IVPN Tier 1', 'IVPN Tier 2'] } ]; From 75ec97d24b61db879ec466bb15625cd612fc9143 Mon Sep 17 00:00:00 2001 From: Natanael Rodriguez Ramos Date: Thu, 14 May 2026 12:19:42 +0100 Subject: [PATCH 2/3] task: Added resync redirect when logged out --- src/themes/ivpn-v3/assets/js/router/index.js | 4 ++-- src/themes/ivpn-v3/assets/js/views/Login.vue | 9 ++++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/themes/ivpn-v3/assets/js/router/index.js b/src/themes/ivpn-v3/assets/js/router/index.js index e328bfec..4e95b6be 100644 --- a/src/themes/ivpn-v3/assets/js/router/index.js +++ b/src/themes/ivpn-v3/assets/js/router/index.js @@ -874,7 +874,7 @@ router.beforeEach(async (to, from, next) => { if ( (to.path.startsWith('/en/account') && to.name !== 'login-en') || (to.path.startsWith('/es/account') && to.name !== 'login-es') ){ if (!store.state.auth.isAuthenticated) { - next({ name: 'login-' + suffix }) + next({ name: 'login-' + suffix, query: { redirect: to.fullPath } }) return } @@ -887,7 +887,7 @@ router.beforeEach(async (to, from, next) => { if (!store.state.auth.isAuthenticated) { // Go to login page in case account could not be loaded - next({ name: 'login-' + suffix }) + next({ name: 'login-' + suffix, query: { redirect: to.fullPath } }) return } diff --git a/src/themes/ivpn-v3/assets/js/views/Login.vue b/src/themes/ivpn-v3/assets/js/views/Login.vue index ae860f3c..627869eb 100644 --- a/src/themes/ivpn-v3/assets/js/views/Login.vue +++ b/src/themes/ivpn-v3/assets/js/views/Login.vue @@ -196,7 +196,14 @@ export default { return; } - this.$router.push({ name: "account-" + this.language }) + const redirect = this.$route.query.redirect + const isAllowedRedirect = typeof redirect === "string" && + (redirect.startsWith("/en/account") || redirect.startsWith("/es/account")) + if (isAllowedRedirect) { + this.$router.push(redirect) + } else { + this.$router.push({ name: "account-" + this.language }) + } }, processError(error) { this.totpRequired = From 172c042367f13c0d741ae5b547501df3176bfd3d Mon Sep 17 00:00:00 2001 From: Natanael Rodriguez Ramos Date: Thu, 14 May 2026 12:36:09 +0100 Subject: [PATCH 3/3] task: Add uuid on resync link based on service status --- .../assets/js/components/ServicesSection.vue | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/themes/ivpn-v3/assets/js/components/ServicesSection.vue b/src/themes/ivpn-v3/assets/js/components/ServicesSection.vue index 08eb7f44..95a2b082 100644 --- a/src/themes/ivpn-v3/assets/js/components/ServicesSection.vue +++ b/src/themes/ivpn-v3/assets/js/components/ServicesSection.vue @@ -93,7 +93,11 @@ export default { description: this.$t('account.servicesArea.mailDescription'), setupUrl: () => `${this.mailXURL}/signup?sessionid=${this.preauth?.mail?.sessionid}&subid=${this.preauth?.mail?.uuid}`, accessUrl: () => `${this.mailXURL}/login`, - syncUrl: () => `${this.mailXURL}/account/profile?sessionid=${this.preauth?.mail?.sessionid}&subid=${this.preauth?.mail?.uuid}`, + syncUrl: () => { + const sid = this.preauth?.mail?.sessionid; + const uuid = this.preauth?.mail?.uuid; + return `${this.mailXURL}/account/profile?sessionid=${sid}` + (uuid ? `&subid=${uuid}` : ''); + }, upgradeRequired: ['IVPN Tier 1'] }, { @@ -102,7 +106,11 @@ export default { description: this.$t('account.servicesArea.dnsDescription'), setupUrl: () => `${this.modDNSURL}/signup?sessionid=${this.preauth?.dns?.sessionid}&subid=${this.preauth?.dns?.uuid}`, accessUrl: () => `${this.modDNSURL}/login`, - syncUrl: () => `${this.modDNSURL}/account-preferences?sessionid=${this.preauth?.dns?.sessionid}&subid=${this.preauth?.dns?.uuid}`, + syncUrl: () => { + const sid = this.preauth?.dns?.sessionid; + const uuid = this.preauth?.dns?.uuid; + return `${this.modDNSURL}/account-preferences?sessionid=${sid}` + (uuid ? `&subid=${uuid}` : ''); + }, upgradeRequired: ['IVPN Tier 1'] }, { @@ -111,7 +119,11 @@ export default { description: this.$t('account.servicesArea.portmasterDescription'), setupUrl: () => `${this.portmasterURL}/account/external_signup?sessionid=${this.preauth?.portmaster?.sessionid}&subid=${this.preauth?.portmaster?.uuid}`, accessUrl: () => `${this.portmasterURL}/account`, - syncUrl: () => `${this.portmasterURL}/account?sessionid=${this.preauth?.portmaster?.sessionid}&subid=${this.preauth?.portmaster?.uuid}`, + syncUrl: () => { + const sid = this.preauth?.portmaster?.sessionid; + const uuid = this.preauth?.portmaster?.uuid; + return `${this.portmasterURL}/account?sessionid=${sid}` + (uuid ? `&subid=${uuid}` : ''); + }, upgradeRequired: ['IVPN Tier 1', 'IVPN Tier 2'] } ];