mirror of
https://github.com/Wei-Shaw/sub2api.git
synced 2026-10-31 00:24:38 +00:00
fix: preserve promo codes for OAuth signup
This commit is contained in:
@@ -40,6 +40,7 @@ const EMAIL_OAUTH_PENDING_PROVIDER_KEY = 'email_oauth_pending_provider'
|
|||||||
const props = withDefaults(defineProps<{
|
const props = withDefaults(defineProps<{
|
||||||
disabled?: boolean
|
disabled?: boolean
|
||||||
affCode?: string
|
affCode?: string
|
||||||
|
promoCode?: string
|
||||||
githubEnabled?: boolean
|
githubEnabled?: boolean
|
||||||
googleEnabled?: boolean
|
googleEnabled?: boolean
|
||||||
showDivider?: boolean
|
showDivider?: boolean
|
||||||
@@ -83,6 +84,10 @@ function startLogin(provider: EmailOAuthProvider): void {
|
|||||||
if (affiliateCode) {
|
if (affiliateCode) {
|
||||||
params.aff_code = affiliateCode
|
params.aff_code = affiliateCode
|
||||||
}
|
}
|
||||||
|
const promoCode = props.promoCode?.trim()
|
||||||
|
if (promoCode) {
|
||||||
|
params.promo_code = promoCode
|
||||||
|
}
|
||||||
emit('start', { provider, params })
|
emit('start', { provider, params })
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ import { resolveAffiliateReferralCode, storeOAuthAffiliateCode } from '@/utils/o
|
|||||||
const props = withDefaults(defineProps<{
|
const props = withDefaults(defineProps<{
|
||||||
disabled?: boolean
|
disabled?: boolean
|
||||||
affCode?: string
|
affCode?: string
|
||||||
|
promoCode?: string
|
||||||
showDivider?: boolean
|
showDivider?: boolean
|
||||||
}>(), {
|
}>(), {
|
||||||
showDivider: true
|
showDivider: true
|
||||||
@@ -62,6 +63,11 @@ const { t } = useI18n()
|
|||||||
function startLogin(): void {
|
function startLogin(): void {
|
||||||
const redirectTo = (route.query.redirect as string) || '/dashboard'
|
const redirectTo = (route.query.redirect as string) || '/dashboard'
|
||||||
storeOAuthAffiliateCode(resolveAffiliateReferralCode(props.affCode, route.query.aff, route.query.aff_code))
|
storeOAuthAffiliateCode(resolveAffiliateReferralCode(props.affCode, route.query.aff, route.query.aff_code))
|
||||||
emit('start', { provider: 'linuxdo', params: { redirect: redirectTo } })
|
const params: Record<string, string> = { redirect: redirectTo }
|
||||||
|
const promoCode = props.promoCode?.trim()
|
||||||
|
if (promoCode) {
|
||||||
|
params.promo_code = promoCode
|
||||||
|
}
|
||||||
|
emit('start', { provider: 'linuxdo', params })
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ describe('EmailOAuthButtons', () => {
|
|||||||
props: {
|
props: {
|
||||||
githubEnabled: true,
|
githubEnabled: true,
|
||||||
googleEnabled: false,
|
googleEnabled: false,
|
||||||
|
promoCode: ' PROMO123 ',
|
||||||
},
|
},
|
||||||
global: {
|
global: {
|
||||||
stubs: {
|
stubs: {
|
||||||
@@ -47,7 +48,7 @@ describe('EmailOAuthButtons', () => {
|
|||||||
expect(wrapper.emitted('start')).toEqual([[
|
expect(wrapper.emitted('start')).toEqual([[
|
||||||
{
|
{
|
||||||
provider: 'github',
|
provider: 'github',
|
||||||
params: { redirect: '/billing?plan=pro', aff_code: 'AFF123' }
|
params: { redirect: '/billing?plan=pro', aff_code: 'AFF123', promo_code: 'PROMO123' }
|
||||||
}
|
}
|
||||||
]])
|
]])
|
||||||
expect(window.sessionStorage.getItem('oauth_aff_code')).toBe('AFF123')
|
expect(window.sessionStorage.getItem('oauth_aff_code')).toBe('AFF123')
|
||||||
@@ -60,6 +61,7 @@ describe('EmailOAuthButtons', () => {
|
|||||||
props: {
|
props: {
|
||||||
githubEnabled: false,
|
githubEnabled: false,
|
||||||
googleEnabled: true,
|
googleEnabled: true,
|
||||||
|
promoCode: 'PROMO456',
|
||||||
},
|
},
|
||||||
global: {
|
global: {
|
||||||
stubs: {
|
stubs: {
|
||||||
@@ -73,7 +75,7 @@ describe('EmailOAuthButtons', () => {
|
|||||||
|
|
||||||
expect(wrapper.emitted('start')?.[0]?.[0]).toEqual({
|
expect(wrapper.emitted('start')?.[0]?.[0]).toEqual({
|
||||||
provider: 'google',
|
provider: 'google',
|
||||||
params: { redirect: '/billing?plan=pro', aff_code: 'AFF123' }
|
params: { redirect: '/billing?plan=pro', aff_code: 'AFF123', promo_code: 'PROMO456' }
|
||||||
})
|
})
|
||||||
expect(window.location.href).toBe(originalHref)
|
expect(window.location.href).toBe(originalHref)
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -41,4 +41,23 @@ describe('OAuth login sections', () => {
|
|||||||
expect(window.sessionStorage.getItem('oauth_aff_code')).toBe('AFF456')
|
expect(window.sessionStorage.getItem('oauth_aff_code')).toBe('AFF456')
|
||||||
expect(window.location.href).toBe(originalHref)
|
expect(window.location.href).toBe(originalHref)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('includes a trimmed promo code in the LinuxDo OAuth request', async () => {
|
||||||
|
const wrapper = mount(LinuxDoOAuthSection, {
|
||||||
|
props: {
|
||||||
|
affCode: 'AFF456',
|
||||||
|
promoCode: ' PROMO789 '
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
await wrapper.get('button').trigger('click')
|
||||||
|
|
||||||
|
expect(wrapper.emitted('start')?.[0]?.[0]).toEqual({
|
||||||
|
provider: 'linuxdo',
|
||||||
|
params: {
|
||||||
|
redirect: '/billing?plan=pro',
|
||||||
|
promo_code: 'PROMO789'
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -284,6 +284,7 @@
|
|||||||
<EmailOAuthButtons
|
<EmailOAuthButtons
|
||||||
:disabled="registrationActionDisabled"
|
:disabled="registrationActionDisabled"
|
||||||
:aff-code="formData.aff_code"
|
:aff-code="formData.aff_code"
|
||||||
|
:promo-code="formData.promo_code"
|
||||||
:github-enabled="githubOAuthEnabled"
|
:github-enabled="githubOAuthEnabled"
|
||||||
:google-enabled="googleOAuthEnabled"
|
:google-enabled="googleOAuthEnabled"
|
||||||
:show-divider="false"
|
:show-divider="false"
|
||||||
@@ -294,6 +295,7 @@
|
|||||||
v-if="linuxdoOAuthEnabled"
|
v-if="linuxdoOAuthEnabled"
|
||||||
:disabled="registrationActionDisabled"
|
:disabled="registrationActionDisabled"
|
||||||
:aff-code="formData.aff_code"
|
:aff-code="formData.aff_code"
|
||||||
|
:promo-code="formData.promo_code"
|
||||||
:show-divider="false"
|
:show-divider="false"
|
||||||
@start="handleOAuthStart"
|
@start="handleOAuthStart"
|
||||||
/>
|
/>
|
||||||
|
|||||||
Reference in New Issue
Block a user