Added feature flag for basic auth stuff #440
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "web",
|
||||
"version": "1.2.dev410",
|
||||
"version": "1.2.dev440",
|
||||
"scripts": {
|
||||
"ng": "ng",
|
||||
"update-version": "ts-node update-version.ts",
|
||||
|
@@ -108,6 +108,15 @@ export class Queries {
|
||||
}
|
||||
`;
|
||||
|
||||
static hasFeatureFlag = `
|
||||
query HasFeatureFlag($flag: String) {
|
||||
hasFeatureFlag(flag: $flag) {
|
||||
key
|
||||
value
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
static hasServerFeatureFlag = `
|
||||
query HasServerFeatureFlag($filter: ServerFilter, $flag: String) {
|
||||
servers(filter: $filter) {
|
||||
|
@@ -4,7 +4,9 @@
|
||||
<form [formGroup]="loginForm">
|
||||
<h1>{{'auth.header' | translate}}</h1>
|
||||
<div class="input-field">
|
||||
<input type="email" pInputText formControlName="email" placeholder="{{'common.email' | translate}}" [ngClass]="{ 'invalid-feedback-input': submitted && (
|
||||
<input [disabled]="!basicLoginFeatureFlags" type="email" pInputText formControlName="email"
|
||||
placeholder="{{'common.email' | translate}}"
|
||||
[ngClass]="{ 'invalid-feedback-input': submitted && (
|
||||
(loginForm.controls.email.errors && loginForm.controls.email.errors['required'] || authUserAtrErrors.email.required) ||
|
||||
(authUserAtrErrors.email.wrongData) ||
|
||||
(authUserAtrErrors.email.notConfirmed)
|
||||
@@ -24,7 +26,8 @@
|
||||
styleClass="p-password p-component p-inputwrapper p-input-icon-right"
|
||||
Remove after update!
|
||||
-->
|
||||
<p-password formControlName="password" placeholder="{{'auth.login.password' | translate}}" [ngClass]="{ 'invalid-feedback-input': submitted && (
|
||||
<p-password [disabled]="!basicLoginFeatureFlags" formControlName="password"
|
||||
placeholder="{{'auth.login.password' | translate}}" [ngClass]="{ 'invalid-feedback-input': submitted && (
|
||||
(loginForm.controls.password.errors && loginForm.controls.password.errors['required'] || authUserAtrErrors.password.required) ||
|
||||
(authUserAtrErrors.password.wrongData)
|
||||
)}" [toggleMask]="true" [feedback]="false"
|
||||
@@ -39,17 +42,18 @@
|
||||
</div>
|
||||
<div class="login-form-submit">
|
||||
<button pButton label="{{'auth.login.login' | translate}}" class="btn login-form-submit-btn" (click)="login()"
|
||||
[disabled]="loginForm.invalid"></button>
|
||||
[disabled]="loginForm.invalid || !basicLoginFeatureFlags"></button>
|
||||
</div>
|
||||
<div class="login-form-sub-button-wrapper" *ngIf="!code && !state">
|
||||
<div class="login-form-sub-btn-wrapper">
|
||||
<button pButton label="{{'auth.login.login_with_discord' | translate}}" class="btn login-form-sub-btn" (click)="discordLogin()"></button>
|
||||
<button pButton label="{{'auth.login.login_with_discord' | translate}}" class="btn login-form-sub-btn"
|
||||
(click)="discordLogin()"></button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="login-form-sub-button-wrapper">
|
||||
<div class="login-form-sub-btn-wrapper">
|
||||
<button pButton label="{{'auth.login.register' | translate}}" class="btn login-form-sub-btn"
|
||||
(click)="register()"></button>
|
||||
(click)="register()" [disabled]="!basicRegistrationFeatureFlags"></button>
|
||||
</div>
|
||||
<div class="login-form-sub-btn-wrapper">
|
||||
<button pButton label="{{'auth.login.forgot_password' | translate}}"
|
||||
|
@@ -13,6 +13,7 @@ import { ThemeService } from "src/app/services/theme/theme.service";
|
||||
import { throwError } from "rxjs";
|
||||
import { TranslateService } from "@ngx-translate/core";
|
||||
import { ConfirmationDialogService } from "../../../../services/confirmation-dialog/confirmation-dialog.service";
|
||||
import { GuiService } from "../../../../services/gui/gui.service";
|
||||
|
||||
@Component({
|
||||
selector: "app-login",
|
||||
@@ -32,6 +33,8 @@ export class LoginComponent implements OnInit {
|
||||
state!: string;
|
||||
user!: AuthUserDTO;
|
||||
oAuthId!: string;
|
||||
public basicLoginFeatureFlags = false;
|
||||
public basicRegistrationFeatureFlags = false;
|
||||
|
||||
constructor(
|
||||
private authService: AuthService,
|
||||
@@ -41,11 +44,19 @@ export class LoginComponent implements OnInit {
|
||||
private themeService: ThemeService,
|
||||
private route: ActivatedRoute,
|
||||
private confirmDialog: ConfirmationDialogService,
|
||||
private translate: TranslateService
|
||||
private translate: TranslateService,
|
||||
private gui: GuiService
|
||||
) {
|
||||
}
|
||||
|
||||
ngOnInit(): void {
|
||||
this.gui.hasFeatureFlag("BasicLogin").subscribe(flag => {
|
||||
this.basicLoginFeatureFlags = flag.value;
|
||||
});
|
||||
this.gui.hasFeatureFlag("BasicRegistration").subscribe(flag => {
|
||||
this.basicRegistrationFeatureFlags = flag.value;
|
||||
});
|
||||
|
||||
this.initLoginForm();
|
||||
this.spinnerService.showSpinner();
|
||||
if (this.authService.isLoggedIn$.value) {
|
||||
@@ -107,8 +118,8 @@ export class LoginComponent implements OnInit {
|
||||
|
||||
initLoginForm(): void {
|
||||
this.loginForm = this.formBuilder.group({
|
||||
email: ["", [Validators.required, Validators.email]],
|
||||
password: ["", [Validators.required, Validators.minLength(8)]]
|
||||
email: [{ value: "", disabled: !this.basicLoginFeatureFlags }, [Validators.required, Validators.email]],
|
||||
password: [{ value: "", disabled: !this.basicLoginFeatureFlags }, [Validators.required, Validators.minLength(8)]]
|
||||
});
|
||||
}
|
||||
|
||||
|
@@ -2,9 +2,10 @@
|
||||
<div class="login-form-wrapper register-form-wrapper">
|
||||
<div class="login-form">
|
||||
<form [formGroup]="loginForm">
|
||||
<h1>sh-edraft.de</h1>
|
||||
<h1>{{'auth.header' | translate}}</h1>
|
||||
<div class="input-field">
|
||||
<input type="text" pInputText formControlName="firstName" placeholder="{{'auth.register.first_name' | translate}}"
|
||||
<input type="text" pInputText formControlName="firstName"
|
||||
placeholder="{{'auth.register.first_name' | translate}}"
|
||||
autocomplete="given-name">
|
||||
<div *ngIf="submitted" class="invalid-feedback">
|
||||
<div
|
||||
@@ -15,7 +16,8 @@
|
||||
</div>
|
||||
|
||||
<div class="input-field">
|
||||
<input type="text" pInputText formControlName="lastName" placeholder="{{'auth.register.last_name' | translate}}"
|
||||
<input type="text" pInputText formControlName="lastName"
|
||||
placeholder="{{'auth.register.last_name' | translate}}"
|
||||
autocomplete="family-name">
|
||||
<div *ngIf="submitted" class="invalid-feedback">
|
||||
<div
|
||||
@@ -74,12 +76,14 @@
|
||||
</div>
|
||||
|
||||
<div class="login-form-submit">
|
||||
<button pButton label="{{'auth.register.register' | translate}}" class="btn login-form-submit-btn" (click)="register()"
|
||||
<button pButton label="{{'auth.register.register' | translate}}" class="btn login-form-submit-btn"
|
||||
(click)="register()"
|
||||
[disabled]="loginForm.invalid"></button>
|
||||
</div>
|
||||
<div class="login-form-sub-button-wrapper">
|
||||
<div class="login-form-sub-btn-wrapper">
|
||||
<button pButton label="{{'auth.register.login' | translate}}" class="btn login-form-sub-btn" (click)="login()"></button>
|
||||
<button pButton label="{{'auth.register.login' | translate}}" class="btn login-form-sub-btn"
|
||||
(click)="login()"></button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
@@ -12,6 +12,7 @@ import { SpinnerService } from "src/app/services/spinner/spinner.service";
|
||||
import { Subject, throwError } from "rxjs";
|
||||
import { TranslateService } from "@ngx-translate/core";
|
||||
import { SettingsService } from "../../../../services/settings/settings.service";
|
||||
import { GuiService } from "../../../../services/gui/gui.service";
|
||||
|
||||
@Component({
|
||||
selector: "app-registration",
|
||||
@@ -46,7 +47,8 @@ export class RegistrationComponent implements OnInit, OnDestroy {
|
||||
private spinnerService: SpinnerService,
|
||||
private route: ActivatedRoute,
|
||||
private translate: TranslateService,
|
||||
private settings: SettingsService
|
||||
private settings: SettingsService,
|
||||
private gui: GuiService
|
||||
) {
|
||||
this.spinnerService.showSpinner();
|
||||
if (this.authService.isLoggedIn$.value) {
|
||||
@@ -56,6 +58,14 @@ export class RegistrationComponent implements OnInit, OnDestroy {
|
||||
}
|
||||
|
||||
ngOnInit(): void {
|
||||
this.gui.hasFeatureFlag("BasicRegistration").subscribe(flag => {
|
||||
if (flag.value) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.router.navigate(["/auth/login"]);
|
||||
});
|
||||
|
||||
this.translate.onLangChange.pipe(takeUntil(this.unsubscriber)).subscribe(lang => {
|
||||
this.confirmPrivacyString = this.translate.instant("auth.register.confirm_privacy", { url: this.settings.getPrivacyURL() });
|
||||
});
|
||||
|
@@ -1,24 +1,25 @@
|
||||
import { HttpClient, HttpHeaders } from '@angular/common/http';
|
||||
import { Injectable } from '@angular/core';
|
||||
import { Observable, Subscribable } from 'rxjs';
|
||||
import { SettingsDTO } from 'src/app/models/config/settings.dto';
|
||||
import { SoftwareVersionDTO } from 'src/app/models/config/software-version.dto';
|
||||
import { SettingsService } from '../settings/settings.service';
|
||||
import { HttpClient, HttpHeaders } from "@angular/common/http";
|
||||
import { Injectable } from "@angular/core";
|
||||
import { Observable } from "rxjs";
|
||||
import { SettingsDTO } from "src/app/models/config/settings.dto";
|
||||
import { SoftwareVersionDTO } from "src/app/models/config/software-version.dto";
|
||||
import { SettingsService } from "../settings/settings.service";
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
providedIn: "root"
|
||||
})
|
||||
export class GuiService {
|
||||
|
||||
constructor(
|
||||
private appsettings: SettingsService,
|
||||
private http: HttpClient,
|
||||
) { }
|
||||
private http: HttpClient
|
||||
) {
|
||||
}
|
||||
|
||||
getApiVersion(): Observable<SoftwareVersionDTO> {
|
||||
return this.http.get<SoftwareVersionDTO>(`${this.appsettings.getApiURL()}/api/gui/api-version`, {
|
||||
headers: new HttpHeaders({
|
||||
'Content-Type': 'application/json'
|
||||
"Content-Type": "application/json"
|
||||
})
|
||||
});
|
||||
}
|
||||
@@ -26,7 +27,7 @@ export class GuiService {
|
||||
getSettings(): Observable<SettingsDTO> {
|
||||
return this.http.get<SettingsDTO>(`${this.appsettings.getApiURL()}/api/gui/settings`, {
|
||||
headers: new HttpHeaders({
|
||||
'Content-Type': 'application/json'
|
||||
"Content-Type": "application/json"
|
||||
})
|
||||
});
|
||||
}
|
||||
@@ -34,7 +35,18 @@ export class GuiService {
|
||||
sendTestMail(mail: string): Observable<unknown> {
|
||||
return this.http.post(`${this.appsettings.getApiURL()}/api/gui/send-test-mail/${mail}`, {
|
||||
headers: new HttpHeaders({
|
||||
'Content-Type': 'application/json'
|
||||
"Content-Type": "application/json"
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
hasFeatureFlag(flag: string): Observable<{ key: string, value: boolean }> {
|
||||
return this.http.get<{
|
||||
key: string,
|
||||
value: boolean
|
||||
}>(`${this.appsettings.getApiURL()}/api/gui/has-feature-flag/${flag}`, {
|
||||
headers: new HttpHeaders({
|
||||
"Content-Type": "application/json"
|
||||
})
|
||||
});
|
||||
}
|
||||
|
@@ -2,6 +2,6 @@
|
||||
"WebVersion": {
|
||||
"Major": "1",
|
||||
"Minor": "2",
|
||||
"Micro": "dev410"
|
||||
"Micro": "dev440"
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user