Skip to content

Commit

Permalink
fix(auth): checking permissions to update setting only when directly …
Browse files Browse the repository at this point in the history
…performed by user (#892)
  • Loading branch information
karolsojko authored Oct 30, 2023
1 parent 647aeda commit 9bd4fb2
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ describe('SetSettingValue', () => {
userUuid: '00000000-0000-0000-0000-000000000000',
settingName: SettingName.NAMES.ListedAuthorSecrets,
value: 'value',
checkUserPermissions: true,
})

expect(result.isFailed()).toBe(true)
Expand All @@ -108,6 +109,7 @@ describe('SetSettingValue', () => {
userUuid: '00000000-0000-0000-0000-000000000000',
settingName: SettingName.NAMES.MfaSecret,
value: 'value',
checkUserPermissions: true,
})

expect(result.isFailed()).toBe(true)
Expand Down Expand Up @@ -140,6 +142,20 @@ describe('SetSettingValue', () => {
expect(settingRepository.update).toHaveBeenCalled()
})

it('should create a setting with checking user permissions', async () => {
const useCase = createUseCase()

const result = await useCase.execute({
userUuid: '00000000-0000-0000-0000-000000000000',
settingName: SettingName.NAMES.MfaSecret,
value: 'value',
checkUserPermissions: true,
})

expect(result.isFailed()).toBe(false)
expect(settingRepository.insert).toHaveBeenCalled()
})

it('should insert a new setting if one does not exist', async () => {
getSetting.execute = jest.fn().mockReturnValue(Result.fail('not found'))

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ export class SetSettingValue implements UseCaseInterface<Setting> {
return Result.fail(`Setting ${settingName.value} is a subscription setting!`)
}

if (!(await this.userHasPermissionToUpdateSetting(userUuid, settingName))) {
if (dto.checkUserPermissions && !(await this.userHasPermissionToUpdateSetting(userUuid, settingName))) {
return Result.fail(`User ${userUuid.value} does not have permission to update setting ${settingName.value}.`)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@ export interface SetSettingValueDTO {
settingName: string
userUuid: string
value: string | null
checkUserPermissions?: boolean
}
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,7 @@ export class BaseSettingsController extends BaseHttpController {
settingName: name,
value,
userUuid: response.locals.user.uuid,
checkUserPermissions: true,
})

if (result.isFailed()) {
Expand Down

0 comments on commit 9bd4fb2

Please sign in to comment.