fix(auth): prevent replacing files bytes used subscription setting upon renewal

This commit is contained in:
Karol Sójko
2022-09-28 15:34:43 +02:00
parent 6ce9a4e834
commit 40e673379b
6 changed files with 62 additions and 2 deletions
@@ -4,4 +4,5 @@ export type SettingDescription = {
value: string
sensitive: boolean
serverEncryptionVersion: EncryptionVersion
replaceable: boolean
}
@@ -52,6 +52,7 @@ export class SettingsAssociationService implements SettingsAssociationServiceInt
sensitive: false,
serverEncryptionVersion: EncryptionVersion.Unencrypted,
value: MuteSignInEmailsOption.NotMuted,
replaceable: false,
},
],
[
@@ -60,6 +61,7 @@ export class SettingsAssociationService implements SettingsAssociationServiceInt
sensitive: false,
serverEncryptionVersion: EncryptionVersion.Unencrypted,
value: MuteMarketingEmailsOption.NotMuted,
replaceable: false,
},
],
[
@@ -68,6 +70,7 @@ export class SettingsAssociationService implements SettingsAssociationServiceInt
sensitive: false,
serverEncryptionVersion: EncryptionVersion.Unencrypted,
value: LogSessionUserAgentOption.Enabled,
replaceable: false,
},
],
])
@@ -79,6 +82,7 @@ export class SettingsAssociationService implements SettingsAssociationServiceInt
sensitive: false,
serverEncryptionVersion: EncryptionVersion.Unencrypted,
value: LogSessionUserAgentOption.Disabled,
replaceable: false,
},
],
])
@@ -60,6 +60,7 @@ describe('SubscriptionSettingService', () => {
value: '0',
sensitive: 0,
serverEncryptionVersion: EncryptionVersion.Unencrypted,
replaceable: true,
},
],
]),
@@ -80,6 +81,48 @@ describe('SubscriptionSettingService', () => {
expect(subscriptionSettingRepository.save).toHaveBeenCalledWith(setting)
})
it('should not replace existing default settings for a subscription if it is not replaceable', async () => {
subscriptionSettingsAssociationService.getDefaultSettingsAndValuesForSubscriptionName = jest.fn().mockReturnValue(
new Map([
[
SubscriptionSettingName.FileUploadBytesUsed,
{
value: '0',
sensitive: 0,
serverEncryptionVersion: EncryptionVersion.Unencrypted,
replaceable: false,
},
],
]),
)
subscriptionSettingRepository.findLastByNameAndUserSubscriptionUuid = jest.fn().mockReturnValue(setting)
await createService().applyDefaultSubscriptionSettingsForSubscription(userSubscription, SubscriptionName.PlusPlan)
expect(subscriptionSettingRepository.save).not.toHaveBeenCalled()
})
it('should create default settings for a subscription if it is not replaceable and not existing', async () => {
subscriptionSettingsAssociationService.getDefaultSettingsAndValuesForSubscriptionName = jest.fn().mockReturnValue(
new Map([
[
SubscriptionSettingName.FileUploadBytesUsed,
{
value: '0',
sensitive: 0,
serverEncryptionVersion: EncryptionVersion.Unencrypted,
replaceable: false,
},
],
]),
)
subscriptionSettingRepository.findLastByNameAndUserSubscriptionUuid = jest.fn().mockReturnValue(null)
await createService().applyDefaultSubscriptionSettingsForSubscription(userSubscription, SubscriptionName.PlusPlan)
expect(subscriptionSettingRepository.save).toHaveBeenCalledWith(setting)
})
it('should not create default settings for a subscription if subscription has no defaults', async () => {
subscriptionSettingsAssociationService.getDefaultSettingsAndValuesForSubscriptionName = jest
.fn()
@@ -43,6 +43,15 @@ export class SubscriptionSettingService implements SubscriptionSettingServiceInt
for (const settingName of defaultSettingsWithValues.keys()) {
const setting = defaultSettingsWithValues.get(settingName) as SettingDescription
if (!setting.replaceable) {
const existingSetting = await this.subscriptionSettingRepository.findLastByNameAndUserSubscriptionUuid(
settingName,
userSubscription.uuid,
)
if (existingSetting !== null) {
continue
}
}
await this.createOrReplace({
userSubscription,
@@ -61,6 +61,7 @@ describe('SubscriptionSettingsAssociationService', () => {
sensitive: false,
serverEncryptionVersion: 0,
value: '107374182400',
replaceable: true,
})
})
@@ -88,6 +89,7 @@ describe('SubscriptionSettingsAssociationService', () => {
sensitive: false,
serverEncryptionVersion: 0,
value: '104857600',
replaceable: true,
})
})
@@ -28,7 +28,7 @@ export class SubscriptionSettingsAssociationService implements SubscriptionSetti
new Map([
[
SubscriptionSettingName.FileUploadBytesUsed,
{ sensitive: false, serverEncryptionVersion: EncryptionVersion.Unencrypted, value: '0' },
{ sensitive: false, serverEncryptionVersion: EncryptionVersion.Unencrypted, value: '0', replaceable: false },
],
]),
],
@@ -37,7 +37,7 @@ export class SubscriptionSettingsAssociationService implements SubscriptionSetti
new Map([
[
SubscriptionSettingName.FileUploadBytesUsed,
{ sensitive: false, serverEncryptionVersion: EncryptionVersion.Unencrypted, value: '0' },
{ sensitive: false, serverEncryptionVersion: EncryptionVersion.Unencrypted, value: '0', replaceable: false },
],
]),
],
@@ -56,6 +56,7 @@ export class SubscriptionSettingsAssociationService implements SubscriptionSetti
sensitive: false,
serverEncryptionVersion: EncryptionVersion.Unencrypted,
value: (await this.getFileUploadLimit(subscriptionName)).toString(),
replaceable: true,
})
return defaultSettings