Browse Source

UI: 2fa improvement settings

pull/6235/head
Vladyslav_Prykhodko 4 years ago
parent
commit
76de891890
  1. 6
      application/src/main/java/org/thingsboard/server/controller/TwoFaConfigController.java
  2. 2
      application/src/main/java/org/thingsboard/server/service/security/auth/mfa/DefaultTwoFactorAuthService.java
  3. 1
      common/data/src/main/java/org/thingsboard/server/common/data/security/model/mfa/PlatformTwoFaSettings.java
  4. 2
      common/data/src/main/java/org/thingsboard/server/common/data/security/model/mfa/provider/BackupCodeTwoFaProviderConfig.java
  5. 4
      ui-ngx/src/app/core/http/two-factor-authentication.service.ts
  6. 7
      ui-ngx/src/app/modules/home/pages/admin/two-factor-auth-settings.component.ts

6
application/src/main/java/org/thingsboard/server/controller/TwoFaConfigController.java

@ -218,10 +218,10 @@ public class TwoFaConfigController extends BaseController {
@ApiOperation(value = "Save platform 2FA settings (savePlatformTwoFaSettings)",
notes = "Save 2FA settings for platform. The settings have following properties:\n" +
"- `providers` - the list of 2FA providers' configs. Users will only be allowed to use 2FA providers from this list. \n\n" +
"- `minVerificationCodeSendPeriod` - minimal period in seconds to wait after verification code send request to send next request. " +
"The format is standard: 'amountOfRequests:periodInSeconds'. The value of '1:60' would limit verification " +
"code sending requests to one per minute.\n" +
"- `minVerificationCodeSendPeriod` - minimal period in seconds to wait after verification code send request to send next request. \n" +
"- `verificationCodeCheckRateLimit` - rate limit configuration for verification code checking.\n" +
"The format is standard: 'amountOfRequests:periodInSeconds'. The value of '1:60' would limit verification " +
"code checking requests to one per minute.\n" +
"- `maxVerificationFailuresBeforeUserLockout` - maximum number of verification failures before a user gets disabled.\n" +
"- `totalAllowedTimeForVerification` - total amount of time in seconds allotted for verification. " +
"Basically, this property sets a lifetime for pre-verification token. If not set, default value of 30 minutes is used.\n" + NEW_LINE +

2
application/src/main/java/org/thingsboard/server/service/security/auth/mfa/DefaultTwoFactorAuthService.java

@ -88,7 +88,7 @@ public class DefaultTwoFactorAuthService implements TwoFactorAuthService {
if (checkLimits) {
Integer minVerificationCodeSendPeriod = twoFaSettings.getMinVerificationCodeSendPeriod();
String rateLimit = null;
if (minVerificationCodeSendPeriod != null && minVerificationCodeSendPeriod > 0) {
if (minVerificationCodeSendPeriod != null && minVerificationCodeSendPeriod > 4) {
rateLimit = "1:" + minVerificationCodeSendPeriod;
}
checkRateLimits(user.getId(), accountConfig.getProviderType(), rateLimit, verificationCodeSendingRateLimits);

1
common/data/src/main/java/org/thingsboard/server/common/data/security/model/mfa/PlatformTwoFaSettings.java

@ -33,6 +33,7 @@ public class PlatformTwoFaSettings {
@Valid
private List<TwoFaProviderConfig> providers;
@Min(value = 5, message = "minimum verification code sent period must be greater than or equal 5")
private Integer minVerificationCodeSendPeriod;
@Pattern(regexp = "[1-9]\\d*:[1-9]\\d*", message = "verification code check rate limit configuration is invalid")
private String verificationCodeCheckRateLimit;

2
common/data/src/main/java/org/thingsboard/server/common/data/security/model/mfa/provider/BackupCodeTwoFaProviderConfig.java

@ -22,7 +22,7 @@ import javax.validation.constraints.Min;
@Data
public class BackupCodeTwoFaProviderConfig implements TwoFaProviderConfig {
@Min(1)
@Min(value = 1, message = "backup codes quantity must be greater than 0")
private int codesQuantity;
@Override

4
ui-ngx/src/app/core/http/two-factor-authentication.service.ts

@ -40,8 +40,8 @@ export class TwoFactorAuthenticationService {
return this.http.get<TwoFactorAuthSettings>(`/api/2fa/settings`, defaultHttpOptionsFromConfig(config));
}
saveTwoFaSettings(settings: TwoFactorAuthSettings, config?: RequestConfig): Observable<any> {
return this.http.post(`/api/2fa/settings`, settings, defaultHttpOptionsFromConfig(config));
saveTwoFaSettings(settings: TwoFactorAuthSettings, config?: RequestConfig): Observable<TwoFactorAuthSettings> {
return this.http.post<TwoFactorAuthSettings>(`/api/2fa/settings`, settings, defaultHttpOptionsFromConfig(config));
}
getAvailableTwoFaProviders(config?: RequestConfig): Observable<Array<TwoFactorAuthProviderType>> {

7
ui-ngx/src/app/modules/home/pages/admin/two-factor-auth-settings.component.ts

@ -79,7 +79,8 @@ export class TwoFactorAuthSettingsComponent extends PageComponent implements OnI
providers.forEach(provider => delete provider.enable);
const config = Object.assign(setting, {providers});
this.twoFaService.saveTwoFaSettings(config).subscribe(
() => {
(settings) => {
this.setAuthConfigFormValue(settings);
this.twoFaFormGroup.markAsUntouched();
this.twoFaFormGroup.markAsPristine();
}
@ -124,8 +125,8 @@ export class TwoFactorAuthSettingsComponent extends PageComponent implements OnI
Validators.pattern(/^\d*$/)
]],
verificationCodeCheckRateLimitEnable: [false],
verificationCodeCheckRateLimitNumber: ['3', this.posIntValidation],
verificationCodeCheckRateLimitTime: ['900', this.posIntValidation],
verificationCodeCheckRateLimitNumber: [{value: 3, disabled: true}, this.posIntValidation],
verificationCodeCheckRateLimitTime: [{value: 900, disabled: true}, this.posIntValidation],
minVerificationCodeSendPeriod: ['30', [Validators.required, Validators.min(5), Validators.pattern(/^\d*$/)]],
providers: this.fb.array([])
});

Loading…
Cancel
Save