Merge pull request #7088 from jwangyangls/proxyAuthenticator

add http auth proxy selection in system configuration
This commit is contained in:
jwangyangls 2019-03-07 17:26:59 +08:00 committed by GitHub
commit fc0654f028
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 159 additions and 54 deletions

View File

@ -87,6 +87,9 @@ export class Configuration {
cfg_expiration: NumberValueItem; cfg_expiration: NumberValueItem;
scan_all_policy: ComplexValueItem; scan_all_policy: ComplexValueItem;
read_only: BoolValueItem; read_only: BoolValueItem;
http_authproxy_endpoint?: StringValueItem;
http_authproxy_skip_cert_verify?: BoolValueItem;
http_authproxy_always_onboard?: BoolValueItem;
public constructor() { public constructor() {
this.auth_mode = new StringValueItem("db_auth", true); this.auth_mode = new StringValueItem("db_auth", true);
@ -128,5 +131,8 @@ export class Configuration {
} }
}, true); }, true);
this.read_only = new BoolValueItem(false, true); this.read_only = new BoolValueItem(false, true);
this.http_authproxy_endpoint = new StringValueItem("", true);
this.http_authproxy_skip_cert_verify = new BoolValueItem(false, true);
this.http_authproxy_always_onboard = new BoolValueItem(false, true);
} }
} }

View File

@ -3,14 +3,16 @@
<div class="form-group"> <div class="form-group">
<label for="authMode">{{'CONFIG.AUTH_MODE' | translate }}</label> <label for="authMode">{{'CONFIG.AUTH_MODE' | translate }}</label>
<div class="select"> <div class="select">
<select id="authMode" name="authMode" (change)="handleOnChange($event)" [disabled]="disabled(currentConfig.auth_mode)" <select id="authMode" name="authMode" (change)="handleOnChange($event)"
[(ngModel)]="currentConfig.auth_mode.value"> [disabled]="disabled(currentConfig.auth_mode)" [(ngModel)]="currentConfig.auth_mode.value">
<option value="db_auth">{{'CONFIG.AUTH_MODE_DB' | translate }}</option> <option value="db_auth">{{'CONFIG.AUTH_MODE_DB' | translate }}</option>
<option value="ldap_auth">{{'CONFIG.AUTH_MODE_LDAP' | translate }}</option> <option value="ldap_auth">{{'CONFIG.AUTH_MODE_LDAP' | translate }}</option>
<option value="uaa_auth">{{'CONFIG.AUTH_MODE_UAA' | translate }}</option> <option value="uaa_auth">{{'CONFIG.AUTH_MODE_UAA' | translate }}</option>
<option *ngIf="showHttpAuth" value="http_auth">{{'CONFIG.AUTH_MODE_HTTP' | translate }}</option>
</select> </select>
</div> </div>
<a href="javascript:void(0)" role="tooltip" aria-haspopup="true" class="tooltip tooltip-lg tooltip-top-right top-1"> <a href="javascript:void(0)" role="tooltip" aria-haspopup="true"
class="tooltip tooltip-lg tooltip-top-right top-1">
<clr-icon shape="info-circle" size="24" class="info-tips-icon"></clr-icon> <clr-icon shape="info-circle" size="24" class="info-tips-icon"></clr-icon>
<span class="tooltip-content">{{'CONFIG.TOOLTIP.AUTH_MODE' | translate}}</span> <span class="tooltip-content">{{'CONFIG.TOOLTIP.AUTH_MODE' | translate}}</span>
</a> </a>
@ -19,22 +21,24 @@
<section class="form-block" *ngIf="showUAA"> <section class="form-block" *ngIf="showUAA">
<div class="form-group"> <div class="form-group">
<label for="uaa-endpoint" class="required">{{'CONFIG.UAA.ENDPOINT' | translate}}</label> <label for="uaa-endpoint" class="required">{{'CONFIG.UAA.ENDPOINT' | translate}}</label>
<input type="text" id="uaa-endpoint" name="uaa-endpoint" size="35" [(ngModel)]="currentConfig.uaa_endpoint.value" <input type="text" id="uaa-endpoint" name="uaa-endpoint" size="35"
[disabled]="!currentConfig.uaa_verify_cert.editable"> [(ngModel)]="currentConfig.uaa_endpoint.value" [disabled]="!currentConfig.uaa_verify_cert.editable">
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="uaa-id" class="required">{{'CONFIG.UAA.CLIENT_ID' | translate}}</label> <label for="uaa-id" class="required">{{'CONFIG.UAA.CLIENT_ID' | translate}}</label>
<input type="text" id="uaa-cid" name="uaa-client-id" size="35" [(ngModel)]="currentConfig.uaa_client_id.value" <input type="text" id="uaa-cid" name="uaa-client-id" size="35"
[disabled]="!currentConfig.uaa_verify_cert.editable"> [(ngModel)]="currentConfig.uaa_client_id.value" [disabled]="!currentConfig.uaa_verify_cert.editable">
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="uaa-id" class="required">{{'CONFIG.UAA.CLIENT_SECRET' | translate}}</label> <label for="uaa-id" class="required">{{'CONFIG.UAA.CLIENT_SECRET' | translate}}</label>
<input type="text" id="uaa-secret" name="uaa-client-secret" type="password" size="35" [(ngModel)]="currentConfig.uaa_client_secret.value" <input id="uaa-secret" name="uaa-client-secret" type="password" size="35"
[(ngModel)]="currentConfig.uaa_client_secret.value"
[disabled]="!currentConfig.uaa_verify_cert.editable"> [disabled]="!currentConfig.uaa_verify_cert.editable">
</div> </div>
<div class="form-group"> <div class="form-group">
<clr-checkbox-wrapper> <clr-checkbox-wrapper>
<input type="checkbox" clrCheckbox name="uaa-cert" id="uaa-cert" required [(ngModel)]="currentConfig.uaa_verify_cert.value" <input type="checkbox" clrCheckbox name="uaa-cert" id="uaa-cert" required
[(ngModel)]="currentConfig.uaa_verify_cert.value"
[disabled]="!currentConfig.uaa_verify_cert.editable" /> [disabled]="!currentConfig.uaa_verify_cert.editable" />
<label for="uaa-cert" class="required">{{'CONFIG.UAA.VERIFY_CERT' | translate}}</label> <label for="uaa-cert" class="required">{{'CONFIG.UAA.VERIFY_CERT' | translate}}</label>
</clr-checkbox-wrapper> </clr-checkbox-wrapper>
@ -44,7 +48,8 @@
<section class="form-block" *ngIf="showLdap"> <section class="form-block" *ngIf="showLdap">
<div class="form-group"> <div class="form-group">
<label for="ldapUrl" class="required">{{'CONFIG.LDAP.URL' | translate}}</label> <label for="ldapUrl" class="required">{{'CONFIG.LDAP.URL' | translate}}</label>
<label for="ldapUrl" aria-haspopup="true" role="tooltip" class="tooltip tooltip-validation tooltip-lg tooltip-top-right" <label for="ldapUrl" aria-haspopup="true" role="tooltip"
class="tooltip tooltip-validation tooltip-lg tooltip-top-right"
[class.invalid]="ldapUrlInput.invalid && (ldapUrlInput.dirty || ldapUrlInput.touched)"> [class.invalid]="ldapUrlInput.invalid && (ldapUrlInput.dirty || ldapUrlInput.touched)">
<input name="ldapUrl" type="text" #ldapUrlInput="ngModel" [(ngModel)]="currentConfig.ldap_url.value" <input name="ldapUrl" type="text" #ldapUrlInput="ngModel" [(ngModel)]="currentConfig.ldap_url.value"
required id="ldapUrl" size="40" [disabled]="disabled(currentConfig.ldap_url)"> required id="ldapUrl" size="40" [disabled]="disabled(currentConfig.ldap_url)">
@ -55,23 +60,28 @@
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="ldapSearchDN">{{'CONFIG.LDAP.SEARCH_DN' | translate}}</label> <label for="ldapSearchDN">{{'CONFIG.LDAP.SEARCH_DN' | translate}}</label>
<label for="ldapSearchDN" aria-haspopup="true" role="tooltip" class="tooltip tooltip-validation tooltip-lg tooltip-top-right"> <label for="ldapSearchDN" aria-haspopup="true" role="tooltip"
<input name="ldapSearchDN" type="text" #ldapSearchDNInput="ngModel" [(ngModel)]="currentConfig.ldap_search_dn.value" class="tooltip tooltip-validation tooltip-lg tooltip-top-right">
id="ldapSearchDN" size="40" [disabled]="disabled(currentConfig.ldap_search_dn)"> <input name="ldapSearchDN" type="text" #ldapSearchDNInput="ngModel"
[(ngModel)]="currentConfig.ldap_search_dn.value" id="ldapSearchDN" size="40"
[disabled]="disabled(currentConfig.ldap_search_dn)">
<span class="tooltip-content"> <span class="tooltip-content">
{{'TOOLTIP.ITEM_REQUIRED' | translate}} {{'TOOLTIP.ITEM_REQUIRED' | translate}}
</span> </span>
</label> </label>
<a href="javascript:void(0)" role="tooltip" aria-haspopup="true" class="tooltip tooltip-lg tooltip-top-right top-1"> <a href="javascript:void(0)" role="tooltip" aria-haspopup="true"
class="tooltip tooltip-lg tooltip-top-right top-1">
<clr-icon shape="info-circle" class="info-tips-icon" size="24"></clr-icon> <clr-icon shape="info-circle" class="info-tips-icon" size="24"></clr-icon>
<span class="tooltip-content">{{'CONFIG.TOOLTIP.LDAP_SEARCH_DN' | translate}}</span> <span class="tooltip-content">{{'CONFIG.TOOLTIP.LDAP_SEARCH_DN' | translate}}</span>
</a> </a>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="ldapSearchPwd">{{'CONFIG.LDAP.SEARCH_PWD' | translate}}</label> <label for="ldapSearchPwd">{{'CONFIG.LDAP.SEARCH_PWD' | translate}}</label>
<label for="ldapSearchPwd" aria-haspopup="true" role="tooltip" class="tooltip tooltip-validation tooltip-lg tooltip-top-right"> <label for="ldapSearchPwd" aria-haspopup="true" role="tooltip"
<input name="ldapSearchPwd" type="password" #ldapSearchPwdInput="ngModel" [(ngModel)]="currentConfig.ldap_search_password.value" class="tooltip tooltip-validation tooltip-lg tooltip-top-right">
id="ldapSearchPwd" size="40" [disabled]="disabled(currentConfig.ldap_search_password)"> <input name="ldapSearchPwd" type="password" #ldapSearchPwdInput="ngModel"
[(ngModel)]="currentConfig.ldap_search_password.value" id="ldapSearchPwd" size="40"
[disabled]="disabled(currentConfig.ldap_search_password)">
<span class="tooltip-content"> <span class="tooltip-content">
{{'TOOLTIP.ITEM_REQUIRED' | translate}} {{'TOOLTIP.ITEM_REQUIRED' | translate}}
</span> </span>
@ -79,10 +89,12 @@
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="ldapBaseDN" class="required">{{'CONFIG.LDAP.BASE_DN' | translate}}</label> <label for="ldapBaseDN" class="required">{{'CONFIG.LDAP.BASE_DN' | translate}}</label>
<label for="ldapBaseDN" aria-haspopup="true" role="tooltip" class="tooltip tooltip-validation tooltip-lg tooltip-top-right" <label for="ldapBaseDN" aria-haspopup="true" role="tooltip"
class="tooltip tooltip-validation tooltip-lg tooltip-top-right"
[class.invalid]="ldapBaseDNInput.invalid && (ldapBaseDNInput.dirty || ldapBaseDNInput.touched)"> [class.invalid]="ldapBaseDNInput.invalid && (ldapBaseDNInput.dirty || ldapBaseDNInput.touched)">
<input name="ldapBaseDN" type="text" #ldapBaseDNInput="ngModel" [(ngModel)]="currentConfig.ldap_base_dn.value" <input name="ldapBaseDN" type="text" #ldapBaseDNInput="ngModel"
required id="ldapBaseDN" size="40" [disabled]="disabled(currentConfig.ldap_base_dn)"> [(ngModel)]="currentConfig.ldap_base_dn.value" required id="ldapBaseDN" size="40"
[disabled]="disabled(currentConfig.ldap_base_dn)">
<span class="tooltip-content"> <span class="tooltip-content">
{{'TOOLTIP.ITEM_REQUIRED' | translate}} {{'TOOLTIP.ITEM_REQUIRED' | translate}}
</span> </span>
@ -94,9 +106,11 @@
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="ldapFilter">{{'CONFIG.LDAP.FILTER' | translate}}</label> <label for="ldapFilter">{{'CONFIG.LDAP.FILTER' | translate}}</label>
<label for="ldapFilter" aria-haspopup="true" role="tooltip" class="tooltip tooltip-validation tooltip-lg tooltip-top-right"> <label for="ldapFilter" aria-haspopup="true" role="tooltip"
<input name="ldapFilter" type="text" #ldapFilterInput="ngModel" [(ngModel)]="currentConfig.ldap_filter.value" class="tooltip tooltip-validation tooltip-lg tooltip-top-right">
id="ldapFilter" size="40" [disabled]="disabled(currentConfig.ldap_filter)"> <input name="ldapFilter" type="text" #ldapFilterInput="ngModel"
[(ngModel)]="currentConfig.ldap_filter.value" id="ldapFilter" size="40"
[disabled]="disabled(currentConfig.ldap_filter)">
<span class="tooltip-content"> <span class="tooltip-content">
{{'TOOLTIP.ITEM_REQUIRED' | translate}} {{'TOOLTIP.ITEM_REQUIRED' | translate}}
</span> </span>
@ -104,7 +118,8 @@
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="ldapUid" class="required">{{'CONFIG.LDAP.UID' | translate}}</label> <label for="ldapUid" class="required">{{'CONFIG.LDAP.UID' | translate}}</label>
<label for="ldapUid" aria-haspopup="true" role="tooltip" class="tooltip tooltip-validation tooltip-lg tooltip-top-right" <label for="ldapUid" aria-haspopup="true" role="tooltip"
class="tooltip tooltip-validation tooltip-lg tooltip-top-right"
[class.invalid]="ldapUidInput.invalid && (ldapUidInput.dirty || ldapUidInput.touched)"> [class.invalid]="ldapUidInput.invalid && (ldapUidInput.dirty || ldapUidInput.touched)">
<input name="ldapUid" type="text" #ldapUidInput="ngModel" [(ngModel)]="currentConfig.ldap_uid.value" <input name="ldapUid" type="text" #ldapUidInput="ngModel" [(ngModel)]="currentConfig.ldap_uid.value"
required id="ldapUid" size="40" [disabled]="disabled(currentConfig.ldap_uid)"> required id="ldapUid" size="40" [disabled]="disabled(currentConfig.ldap_uid)">
@ -112,7 +127,8 @@
{{'TOOLTIP.ITEM_REQUIRED' | translate}} {{'TOOLTIP.ITEM_REQUIRED' | translate}}
</span> </span>
</label> </label>
<a href="javascript:void(0)" role="tooltip" aria-haspopup="true" class="tooltip tooltip-lg tooltip-top-right top-1"> <a href="javascript:void(0)" role="tooltip" aria-haspopup="true"
class="tooltip tooltip-lg tooltip-top-right top-1">
<clr-icon shape="info-circle" class="info-tips-icon" size="24"></clr-icon> <clr-icon shape="info-circle" class="info-tips-icon" size="24"></clr-icon>
<span class="tooltip-content">{{'CONFIG.TOOLTIP.LDAP_UID' | translate}}</span> <span class="tooltip-content">{{'CONFIG.TOOLTIP.LDAP_UID' | translate}}</span>
</a> </a>
@ -120,7 +136,8 @@
<div class="form-group"> <div class="form-group">
<label for="ldapScope">{{'CONFIG.LDAP.SCOPE' | translate}}</label> <label for="ldapScope">{{'CONFIG.LDAP.SCOPE' | translate}}</label>
<div class="select"> <div class="select">
<select id="ldapScope" name="ldapScope" [(ngModel)]="currentConfig.ldap_scope.value" [disabled]="disabled(currentConfig.ldap_scope)"> <select id="ldapScope" name="ldapScope" [(ngModel)]="currentConfig.ldap_scope.value"
[disabled]="disabled(currentConfig.ldap_scope)">
<option value="0">{{'CONFIG.SCOPE_BASE' | translate }}</option> <option value="0">{{'CONFIG.SCOPE_BASE' | translate }}</option>
<option value="1">{{'CONFIG.SCOPE_ONE_LEVEL' | translate }}</option> <option value="1">{{'CONFIG.SCOPE_ONE_LEVEL' | translate }}</option>
<option value="2">{{'CONFIG.SCOPE_SUBTREE' | translate }}</option> <option value="2">{{'CONFIG.SCOPE_SUBTREE' | translate }}</option>
@ -133,8 +150,9 @@
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="ldapGroupBaseDN">{{'CONFIG.LDAP.LDAP_GROUP_BASE_DN' | translate}}</label> <label for="ldapGroupBaseDN">{{'CONFIG.LDAP.LDAP_GROUP_BASE_DN' | translate}}</label>
<input name="ldapGroupBaseDN" class="padding-right-28" type="text" #ldapGroupDNInput="ngModel" [(ngModel)]="currentConfig.ldap_group_base_dn.value" <input name="ldapGroupBaseDN" class="padding-right-28" type="text" #ldapGroupDNInput="ngModel"
id="ldapGroupBaseDN" size="40" [disabled]="disabled(currentConfig.ldap_group_base_dn)"> [(ngModel)]="currentConfig.ldap_group_base_dn.value" id="ldapGroupBaseDN" size="40"
[disabled]="disabled(currentConfig.ldap_group_base_dn)">
<clr-tooltip> <clr-tooltip>
<clr-icon clrTooltipTrigger shape="info-circle" size="24"></clr-icon> <clr-icon clrTooltipTrigger shape="info-circle" size="24"></clr-icon>
<clr-tooltip-content clrPosition="top-right" clrSize="lg" *clrIfOpen> <clr-tooltip-content clrPosition="top-right" clrSize="lg" *clrIfOpen>
@ -145,7 +163,8 @@
<div class="form-group"> <div class="form-group">
<label for="ldapGroupFilter">{{'CONFIG.LDAP.LDAP_GROUP_FILTER' | translate}}</label> <label for="ldapGroupFilter">{{'CONFIG.LDAP.LDAP_GROUP_FILTER' | translate}}</label>
<input name="ldapGroupFilter" type="text" class="padding-right-28" #ldapGroupFilterInput="ngModel" <input name="ldapGroupFilter" type="text" class="padding-right-28" #ldapGroupFilterInput="ngModel"
[(ngModel)]="currentConfig.ldap_group_search_filter.value" id="ldapGroupFilter" size="40" [disabled]="disabled(currentConfig.ldap_group_search_filter)"> [(ngModel)]="currentConfig.ldap_group_search_filter.value" id="ldapGroupFilter" size="40"
[disabled]="disabled(currentConfig.ldap_group_search_filter)">
<clr-tooltip> <clr-tooltip>
<clr-icon clrTooltipTrigger shape="info-circle" size="24"></clr-icon> <clr-icon clrTooltipTrigger shape="info-circle" size="24"></clr-icon>
<clr-tooltip-content clrPosition="top-right" clrSize="lg" *clrIfOpen> <clr-tooltip-content clrPosition="top-right" clrSize="lg" *clrIfOpen>
@ -155,8 +174,9 @@
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="ldapGroupGID">{{'CONFIG.LDAP.LDAP_GROUP_GID' | translate}}</label> <label for="ldapGroupGID">{{'CONFIG.LDAP.LDAP_GROUP_GID' | translate}}</label>
<input name="ldapGroupGID" class="padding-right-28" type="text" #ldapGroupDNInput="ngModel" [(ngModel)]="currentConfig.ldap_group_attribute_name.value" <input name="ldapGroupGID" class="padding-right-28" type="text" #ldapGroupDNInput="ngModel"
id="ldapGroupGID" size="40" [disabled]="disabled(currentConfig.ldap_group_attribute_name)"> [(ngModel)]="currentConfig.ldap_group_attribute_name.value" id="ldapGroupGID" size="40"
[disabled]="disabled(currentConfig.ldap_group_attribute_name)">
<clr-tooltip> <clr-tooltip>
<clr-icon clrTooltipTrigger shape="info-circle" size="24"></clr-icon> <clr-icon clrTooltipTrigger shape="info-circle" size="24"></clr-icon>
<clr-tooltip-content clrPosition="top-right" clrSize="lg" *clrIfOpen> <clr-tooltip-content clrPosition="top-right" clrSize="lg" *clrIfOpen>
@ -168,7 +188,8 @@
<div class="form-group"> <div class="form-group">
<label>{{'CONFIG.LDAP.LDAP_GROUP_ADMIN_DN' | translate}}</label> <label>{{'CONFIG.LDAP.LDAP_GROUP_ADMIN_DN' | translate}}</label>
<input name="ldapGroupAdminDN" class="padding-right-28" type="text" #ldapGroupFilterInput="ngModel" <input name="ldapGroupAdminDN" class="padding-right-28" type="text" #ldapGroupFilterInput="ngModel"
[(ngModel)]="currentConfig.ldap_group_admin_dn.value" id="ldapGroupAdminDN" size="40" [disabled]="disabled(currentConfig.ldap_group_admin_dn)"> [(ngModel)]="currentConfig.ldap_group_admin_dn.value" id="ldapGroupAdminDN" size="40"
[disabled]="disabled(currentConfig.ldap_group_admin_dn)">
<clr-tooltip> <clr-tooltip>
<clr-icon clrTooltipTrigger shape="info-circle" size="24"></clr-icon> <clr-icon clrTooltipTrigger shape="info-circle" size="24"></clr-icon>
<clr-tooltip-content clrPosition="top-right" clrSize="lg" *clrIfOpen> <clr-tooltip-content clrPosition="top-right" clrSize="lg" *clrIfOpen>
@ -180,7 +201,8 @@
<div class="form-group"> <div class="form-group">
<label for="ldapGroupScope">{{'CONFIG.LDAP.GROUP_SCOPE' | translate}}</label> <label for="ldapGroupScope">{{'CONFIG.LDAP.GROUP_SCOPE' | translate}}</label>
<div class="select"> <div class="select">
<select id="ldapGroupScope" name="ldapGroupScope" [(ngModel)]="currentConfig.ldap_group_search_scope.value" <select id="ldapGroupScope" name="ldapGroupScope"
[(ngModel)]="currentConfig.ldap_group_search_scope.value"
[disabled]="disabled(currentConfig.ldap_group_search_scope)"> [disabled]="disabled(currentConfig.ldap_group_search_scope)">
<option value="0">{{'CONFIG.SCOPE_BASE' | translate }}</option> <option value="0">{{'CONFIG.SCOPE_BASE' | translate }}</option>
<option value="1">{{'CONFIG.SCOPE_ONE_LEVEL' | translate }}</option> <option value="1">{{'CONFIG.SCOPE_ONE_LEVEL' | translate }}</option>
@ -199,15 +221,18 @@
<div class="form-group" *ngIf="showSelfReg"> <div class="form-group" *ngIf="showSelfReg">
<label for="selfReg">{{'CONFIG.SELF_REGISTRATION' | translate}}</label> <label for="selfReg">{{'CONFIG.SELF_REGISTRATION' | translate}}</label>
<clr-checkbox-wrapper> <clr-checkbox-wrapper>
<input type="checkbox" clrCheckbox name="selfReg" id="selfReg" [(ngModel)]="currentConfig.self_registration.value" <input type="checkbox" clrCheckbox name="selfReg" id="selfReg"
[(ngModel)]="currentConfig.self_registration.value"
[disabled]="disabled(currentConfig.self_registration)" /> [disabled]="disabled(currentConfig.self_registration)" />
<label> <label>
<a href="javascript:void(0)" role="tooltip" aria-haspopup="true" class="tooltip tooltip-top-right top-7"> <a href="javascript:void(0)" role="tooltip" aria-haspopup="true"
class="tooltip tooltip-top-right top-7">
<clr-icon shape="info-circle" class="info-tips-icon" size="24"></clr-icon> <clr-icon shape="info-circle" class="info-tips-icon" size="24"></clr-icon>
<span *ngIf="checkable; else elseBlock" class="tooltip-content">{{'CONFIG.TOOLTIP.SELF_REGISTRATION_ENABLE' <span *ngIf="checkable; else elseBlock" class="tooltip-content">{{'CONFIG.TOOLTIP.SELF_REGISTRATION_ENABLE'
| translate}}</span> | translate}}</span>
<ng-template #elseBlock> <ng-template #elseBlock>
<span class="tooltip-content">{{'CONFIG.TOOLTIP.SELF_REGISTRATION_DISABLE' | translate}}</span> <span
class="tooltip-content">{{'CONFIG.TOOLTIP.SELF_REGISTRATION_DISABLE' | translate}}</span>
</ng-template> </ng-template>
</a> </a>
</label> </label>
@ -218,10 +243,12 @@
<div class="form-group"> <div class="form-group">
<label for="ldapVerifyCert">{{'CONFIG.LDAP.VERIFY_CERT' | translate}}</label> <label for="ldapVerifyCert">{{'CONFIG.LDAP.VERIFY_CERT' | translate}}</label>
<clr-checkbox-wrapper> <clr-checkbox-wrapper>
<input type="checkbox" clrCheckbox name="ldapVerifyCert" id="ldapVerifyCert" [ngModel]="currentConfig.ldap_verify_cert.value" <input type="checkbox" clrCheckbox name="ldapVerifyCert" id="ldapVerifyCert"
[disabled]="disabled(currentConfig.ldap_scope)" (ngModelChange)="setVerifyCertValue($event)" /> [ngModel]="currentConfig.ldap_verify_cert.value" [disabled]="disabled(currentConfig.ldap_scope)"
(ngModelChange)="setVerifyCertValue($event)" />
<label> <label>
<a href="javascript:void(0)" role="tooltip" aria-haspopup="true" class="tooltip tooltip-top-right top-7"> <a href="javascript:void(0)" role="tooltip" aria-haspopup="true"
class="tooltip tooltip-top-right top-7">
<clr-icon shape="info-circle" class="info-tips-icon" size="24"></clr-icon> <clr-icon shape="info-circle" class="info-tips-icon" size="24"></clr-icon>
<span class="tooltip-content">{{'CONFIG.TOOLTIP.VERIFY_CERT' | translate}}</span> <span class="tooltip-content">{{'CONFIG.TOOLTIP.VERIFY_CERT' | translate}}</span>
</a> </a>
@ -229,13 +256,43 @@
</clr-checkbox-wrapper> </clr-checkbox-wrapper>
</div> </div>
</section> </section>
<section class="form-block" *ngIf="showHttpAuth">
<div class="form-group">
<label for="http_authproxy_endpoint" class="required">{{'CONFIG.HTTP_AUTH.ENDPOINT' | translate}}</label>
<label for="http_authproxy_endpoint" aria-haspopup="true" role="tooltip" class="tooltip tooltip-validation tooltip-md tooltip-top-right"
[class.invalid]="httpAuthproxyEndpointInput.invalid && (httpAuthproxyEndpointInput.dirty || httpAuthproxyEndpointInput.touched)">
<input type="text" pattern="^([hH][tT]{2}[pP]:\/\/|[hH][tT]{2}[pP][sS]:\/\/)(.*?)*$" #httpAuthproxyEndpointInput="ngModel" required id="http_authproxy_endpoint" name="http_authproxy_endpoint" size="35"
[(ngModel)]="currentConfig.http_authproxy_endpoint.value" [disabled]="!currentConfig.http_authproxy_endpoint.editable" >
<span class="tooltip-content">
{{'TOOLTIP.ENDPOINT_FORMAT' | translate}}
</span>
</label>
</div>
<div class="form-group">
<label for="http_authproxy_skip_cert_verify"
class="required">{{'CONFIG.HTTP_AUTH.VERIFY_CERT' | translate}}</label>
<clr-checkbox-wrapper>
<input type="checkbox" clrCheckbox name="http_authproxy_skip_cert_verify" id="http_authproxy_skip_cert_verify"
[(ngModel)]="currentConfig.http_authproxy_skip_cert_verify.value" [disabled]="!currentConfig.http_authproxy_skip_cert_verify.editable" />
</clr-checkbox-wrapper>
</div>
<div class="form-group">
<label for="http_authproxy_always_onboard"
class="required">{{'CONFIG.HTTP_AUTH.ALWAYS_ONBOARD' | translate}}</label>
<clr-checkbox-wrapper>
<input type="checkbox" clrCheckbox name="http_authproxy_always_onboard"
id="http_authproxy_always_onboard" [disabled]="!currentConfig.http_authproxy_always_onboard.editable"
[(ngModel)]="currentConfig.http_authproxy_always_onboard.value" />
</clr-checkbox-wrapper>
</div>
</section>
</form> </form>
<div> <div>
<button type="button" id="config_auth_save" class="btn btn-primary" (click)="save()" [disabled]="!isValid() || !hasChanges()">{{'BUTTON.SAVE' <button type="button" id="config_auth_save" class="btn btn-primary" (click)="save()"
| translate}}</button> [disabled]="!isValid() || !hasChanges()">{{'BUTTON.SAVE' | translate}}</button>
<button type="button" class="btn btn-outline" (click)="cancel()" [disabled]="!isValid() || !hasChanges()">{{'BUTTON.CANCEL' <button type="button" class="btn btn-outline" (click)="cancel()"
| translate}}</button> [disabled]="!isValid() || !hasChanges()">{{'BUTTON.CANCEL' | translate}}</button>
<button type="button" class="btn btn-outline" (click)="testLDAPServer()" *ngIf="showLdapServerBtn" [disabled]="!isLDAPConfigValid()">{{'BUTTON.TEST_LDAP' <button type="button" class="btn btn-outline" (click)="testLDAPServer()" *ngIf="showLdapServerBtn"
| translate}}</button> [disabled]="!isLDAPConfigValid()">{{'BUTTON.TEST_LDAP' | translate}}</button>
<span id="forTestingLDAP" class="spinner spinner-inline" [hidden]="hideLDAPTestingSpinner"></span> <span id="forTestingLDAP" class="spinner spinner-inline" [hidden]="hideLDAPTestingSpinner"></span>
</div> </div>

View File

@ -65,12 +65,15 @@ export class ConfigurationAuthComponent implements OnChanges {
public get showUAA(): boolean { public get showUAA(): boolean {
return this.currentConfig && this.currentConfig.auth_mode && this.currentConfig.auth_mode.value === 'uaa_auth'; return this.currentConfig && this.currentConfig.auth_mode && this.currentConfig.auth_mode.value === 'uaa_auth';
} }
public get showHttpAuth(): boolean {
return this.currentConfig && this.currentConfig.auth_mode && this.currentConfig.auth_mode.value === 'http_auth';
}
public get showSelfReg(): boolean { public get showSelfReg(): boolean {
if (!this.currentConfig || !this.currentConfig.auth_mode) { if (!this.currentConfig || !this.currentConfig.auth_mode) {
return true; return true;
} else { } else {
return this.currentConfig.auth_mode.value !== 'ldap_auth' && this.currentConfig.auth_mode.value !== 'uaa_auth'; return this.currentConfig.auth_mode.value !== 'ldap_auth' && this.currentConfig.auth_mode.value !== 'uaa_auth'
&& this.currentConfig.auth_mode.value !== 'http_auth' ;
} }
} }
@ -143,7 +146,11 @@ export class ConfigurationAuthComponent implements OnChanges {
|| prop.startsWith('uaa_') || prop.startsWith('uaa_')
|| prop === 'auth_mode' || prop === 'auth_mode'
|| prop === 'project_creattion_restriction' || prop === 'project_creattion_restriction'
|| prop === 'self_registration') { || prop === 'self_registration'
|| prop === 'http_authproxy_endpoint'
|| prop === 'http_authproxy_skip_cert_verify'
|| prop === 'http_authproxy_always_onboard'
) {
changes[prop] = allChanges[prop]; changes[prop] = allChanges[prop];
} }
} }
@ -161,7 +168,7 @@ export class ConfigurationAuthComponent implements OnChanges {
handleOnChange($event: any): void { handleOnChange($event: any): void {
if ($event && $event.target && $event.target["value"]) { if ($event && $event.target && $event.target["value"]) {
let authMode = $event.target["value"]; let authMode = $event.target["value"];
if (authMode === 'ldap_auth' || authMode === 'uaa_auth') { if (authMode === 'ldap_auth' || authMode === 'uaa_auth' || authMode === 'http_auth') {
if (this.currentConfig.self_registration.value) { if (this.currentConfig.self_registration.value) {
this.currentConfig.self_registration.value = false; // unselect this.currentConfig.self_registration.value = false; // unselect
} }

View File

@ -71,7 +71,8 @@
"RULE_USER_EXISTING": "Name is already in use.", "RULE_USER_EXISTING": "Name is already in use.",
"EMPTY": "Name is required", "EMPTY": "Name is required",
"NONEMPTY": "Can't be empty", "NONEMPTY": "Can't be empty",
"REPO_TOOLTIP": "Users can not do any operations to the images in this mode." "REPO_TOOLTIP": "Users can not do any operations to the images in this mode.",
"ENDPOINT_FORMAT": "Endpoint must start with HTTP or HTTPS."
}, },
"PLACEHOLDER": { "PLACEHOLDER": {
"CURRENT_PWD": "Enter current password", "CURRENT_PWD": "Enter current password",
@ -619,6 +620,7 @@
"AUTH_MODE_DB": "Database", "AUTH_MODE_DB": "Database",
"AUTH_MODE_LDAP": "LDAP", "AUTH_MODE_LDAP": "LDAP",
"AUTH_MODE_UAA": "UAA", "AUTH_MODE_UAA": "UAA",
"AUTH_MODE_HTTP": "http_auth",
"SCOPE_BASE": "Base", "SCOPE_BASE": "Base",
"SCOPE_ONE_LEVEL": "OneLevel", "SCOPE_ONE_LEVEL": "OneLevel",
"SCOPE_SUBTREE": "Subtree", "SCOPE_SUBTREE": "Subtree",
@ -675,6 +677,11 @@
"CLIENT_SECRET": "UAA Client Secret", "CLIENT_SECRET": "UAA Client Secret",
"VERIFY_CERT": "UAA Verify Cert" "VERIFY_CERT": "UAA Verify Cert"
}, },
"HTTP_AUTH": {
"ENDPOINT": "Server Endpoint",
"ALWAYS_ONBOARD": "Always Onboard",
"VERIFY_CERT": "Authentication Verify Cert"
},
"SCANNING": { "SCANNING": {
"TRIGGER_SCAN_ALL_SUCCESS": "Trigger scan all successfully!", "TRIGGER_SCAN_ALL_SUCCESS": "Trigger scan all successfully!",
"TRIGGER_SCAN_ALL_FAIL": "Failed to trigger scan all with error: {{error}", "TRIGGER_SCAN_ALL_FAIL": "Failed to trigger scan all with error: {{error}",

View File

@ -71,7 +71,8 @@
"RULE_USER_EXISTING": "Name is already in use.", "RULE_USER_EXISTING": "Name is already in use.",
"EMPTY": "Name is required", "EMPTY": "Name is required",
"NONEMPTY": "Can't be empty", "NONEMPTY": "Can't be empty",
"REPO_TOOLTIP": "Users can not do any operations to the images in this mode." "REPO_TOOLTIP": "Users can not do any operations to the images in this mode.",
"ENDPOINT_FORMAT": "Endpoint must start with HTTP or HTTPS."
}, },
"PLACEHOLDER": { "PLACEHOLDER": {
"CURRENT_PWD": "Introduzca la contraseña actual", "CURRENT_PWD": "Introduzca la contraseña actual",
@ -618,6 +619,7 @@
"AUTH_MODE_DB": "Base de datos", "AUTH_MODE_DB": "Base de datos",
"AUTH_MODE_LDAP": "LDAP", "AUTH_MODE_LDAP": "LDAP",
"AUTH_MODE_UAA": "UAA", "AUTH_MODE_UAA": "UAA",
"AUTH_MODE_HTTP": "http_auth",
"SCOPE_BASE": "Base", "SCOPE_BASE": "Base",
"SCOPE_ONE_LEVEL": "UnNivel", "SCOPE_ONE_LEVEL": "UnNivel",
"SCOPE_SUBTREE": "Subárbol", "SCOPE_SUBTREE": "Subárbol",
@ -674,6 +676,11 @@
"CLIENT_SECRET": "UAA Client Secret", "CLIENT_SECRET": "UAA Client Secret",
"VERIFY_CERT": "UAA Verify Cert" "VERIFY_CERT": "UAA Verify Cert"
}, },
"HTTP_AUTH": {
"ENDPOINT": "Server Endpoint",
"ALWAYS_ONBOARD": "Always Onboard",
"VERIFY_CERT": "Authentication Verify Cert"
},
"SCANNING": { "SCANNING": {
"TRIGGER_SCAN_ALL_SUCCESS": "Trigger scan all successfully!", "TRIGGER_SCAN_ALL_SUCCESS": "Trigger scan all successfully!",
"TRIGGER_SCAN_ALL_FAIL": "Failed to trigger scan all with error: {{error}", "TRIGGER_SCAN_ALL_FAIL": "Failed to trigger scan all with error: {{error}",

View File

@ -58,7 +58,8 @@
"EMAIL_EXISTING": "L'adresse e-mail existe déjà.", "EMAIL_EXISTING": "L'adresse e-mail existe déjà.",
"USER_EXISTING": "Le nom d'utilisateur est déjà utilisé.", "USER_EXISTING": "Le nom d'utilisateur est déjà utilisé.",
"NONEMPTY": "Can't be empty", "NONEMPTY": "Can't be empty",
"REPO_TOOLTIP": "Users can not do any operations to the images in this mode." "REPO_TOOLTIP": "Users can not do any operations to the images in this mode.",
"ENDPOINT_FORMAT": "Endpoint must start with HTTP or HTTPS."
}, },
"PLACEHOLDER": { "PLACEHOLDER": {
"CURRENT_PWD": "Entrez le mot de passe actuel", "CURRENT_PWD": "Entrez le mot de passe actuel",
@ -590,6 +591,7 @@
"SELF_REGISTRATION": "Autoriser l'Auto-Inscription", "SELF_REGISTRATION": "Autoriser l'Auto-Inscription",
"AUTH_MODE_DB": "Base de données", "AUTH_MODE_DB": "Base de données",
"AUTH_MODE_LDAP": "LDAP", "AUTH_MODE_LDAP": "LDAP",
"AUTH_MODE_HTTP": "http_auth",
"SCOPE_BASE": "Base", "SCOPE_BASE": "Base",
"SCOPE_ONE_LEVEL": "Premier Niveau", "SCOPE_ONE_LEVEL": "Premier Niveau",
"SCOPE_SUBTREE": "Sous-arbre", "SCOPE_SUBTREE": "Sous-arbre",
@ -639,6 +641,11 @@
"GROUP_SCOPE": "LDAP Group Scope", "GROUP_SCOPE": "LDAP Group Scope",
"GROUP_SCOPE_INFO": "The scope to search for groups, select Subtree by default." "GROUP_SCOPE_INFO": "The scope to search for groups, select Subtree by default."
}, },
"HTTP_AUTH": {
"ENDPOINT": "serveur paramètre",
"ALWAYS_ONBOARD": "Always Onboard",
"VERIFY_CERT": "authentification vérifier cert"
},
"SCANNING": { "SCANNING": {
"TRIGGER_SCAN_ALL_SUCCESS": "Déclenchement d'analyse globale avec succès !", "TRIGGER_SCAN_ALL_SUCCESS": "Déclenchement d'analyse globale avec succès !",
"TRIGGER_SCAN_ALL_FAIL": "Echec du déclenchement d'analyse globale avec des erreurs : {{error}", "TRIGGER_SCAN_ALL_FAIL": "Echec du déclenchement d'analyse globale avec des erreurs : {{error}",

View File

@ -69,7 +69,8 @@
"EMAIL_EXISTING": "Email já existe.", "EMAIL_EXISTING": "Email já existe.",
"USER_EXISTING": "Nome de usuário já está em uso.", "USER_EXISTING": "Nome de usuário já está em uso.",
"RULE_USER_EXISTING": "Nome já em uso.", "RULE_USER_EXISTING": "Nome já em uso.",
"EMPTY": "Nome é obrigatório" "EMPTY": "Nome é obrigatório",
"ENDPOINT_FORMAT": "Avaliação deve começar por HTTP Ou HTTPS."
}, },
"PLACEHOLDER": { "PLACEHOLDER": {
"CURRENT_PWD": "Insira a senha atual", "CURRENT_PWD": "Insira a senha atual",
@ -613,6 +614,7 @@
"AUTH_MODE_DB": "Banco de Dados", "AUTH_MODE_DB": "Banco de Dados",
"AUTH_MODE_LDAP": "LDAP", "AUTH_MODE_LDAP": "LDAP",
"AUTH_MODE_UAA": "UAA", "AUTH_MODE_UAA": "UAA",
"AUTH_MODE_HTTP": "http_auth",
"SCOPE_BASE": "Base", "SCOPE_BASE": "Base",
"SCOPE_ONE_LEVEL": "OneLevel", "SCOPE_ONE_LEVEL": "OneLevel",
"SCOPE_SUBTREE": "Subtree", "SCOPE_SUBTREE": "Subtree",
@ -668,6 +670,11 @@
"CLIENT_SECRET": "Secret de Cliente UAA", "CLIENT_SECRET": "Secret de Cliente UAA",
"VERIFY_CERT": "Verificar certificado UAA" "VERIFY_CERT": "Verificar certificado UAA"
}, },
"HTTP_AUTH": {
"ENDPOINT": "server endpoint",
"ALWAYS_ONBOARD": "Sempre Onboard",
"VERIFY_CERT": "Verificar certificado de Authentication"
},
"SCANNING": { "SCANNING": {
"TRIGGER_SCAN_ALL_SUCCESS": "Disparo de análise geral efetuado com sucesso!", "TRIGGER_SCAN_ALL_SUCCESS": "Disparo de análise geral efetuado com sucesso!",
"TRIGGER_SCAN_ALL_FAIL": "Falha ao disparar análise geral com erro: {{error}", "TRIGGER_SCAN_ALL_FAIL": "Falha ao disparar análise geral com erro: {{error}",

View File

@ -70,7 +70,8 @@
"USER_EXISTING": "用户名已经存在。", "USER_EXISTING": "用户名已经存在。",
"RULE_USER_EXISTING": "名称已经存在。", "RULE_USER_EXISTING": "名称已经存在。",
"EMPTY": "名称为必填项", "EMPTY": "名称为必填项",
"NONEMPTY": "不能为空" "NONEMPTY": "不能为空",
"ENDPOINT_FORMAT": "Endpoint必须以http或https开头。"
}, },
"PLACEHOLDER": { "PLACEHOLDER": {
"CURRENT_PWD": "输入当前密码", "CURRENT_PWD": "输入当前密码",
@ -618,6 +619,7 @@
"AUTH_MODE_DB": "数据库", "AUTH_MODE_DB": "数据库",
"AUTH_MODE_LDAP": "LDAP", "AUTH_MODE_LDAP": "LDAP",
"AUTH_MODE_UAA": "UAA", "AUTH_MODE_UAA": "UAA",
"AUTH_MODE_HTTP": "http_auth",
"SCOPE_BASE": "本层", "SCOPE_BASE": "本层",
"SCOPE_ONE_LEVEL": "下一层", "SCOPE_ONE_LEVEL": "下一层",
"SCOPE_SUBTREE": "子树", "SCOPE_SUBTREE": "子树",
@ -673,6 +675,11 @@
"CLIENT_SECRET": "UAA Client Secret", "CLIENT_SECRET": "UAA Client Secret",
"VERIFY_CERT": "UAA 检查证书" "VERIFY_CERT": "UAA 检查证书"
}, },
"HTTP_AUTH": {
"ENDPOINT": "Server Endpoint",
"ALWAYS_ONBOARD": "Always Onboard",
"VERIFY_CERT": "Authentication验证证书"
},
"SCANNING": { "SCANNING": {
"TRIGGER_SCAN_ALL_SUCCESS": "启动扫描所有镜像任务成功!", "TRIGGER_SCAN_ALL_SUCCESS": "启动扫描所有镜像任务成功!",
"TRIGGER_SCAN_ALL_FAIL": "启动扫描所有镜像任务失败:{{error}", "TRIGGER_SCAN_ALL_FAIL": "启动扫描所有镜像任务失败:{{error}",