aboutsummaryrefslogtreecommitdiffstats
path: root/archiva-modules
diff options
context:
space:
mode:
authorMartin Stockhammer <martin_s@apache.org>2021-01-11 19:16:47 +0100
committerMartin Stockhammer <martin_s@apache.org>2021-01-11 19:16:47 +0100
commit255fc64b520e1d2c3a925e53c515301676ae03ed (patch)
treeb06367e4415049d367f3cdd9225ba524388e7fe5 /archiva-modules
parent0dc2e8fff6e21178b62d10982e34067655ff6524 (diff)
downloadarchiva-255fc64b520e1d2c3a925e53c515301676ae03ed.tar.gz
archiva-255fc64b520e1d2c3a925e53c515301676ae03ed.zip
Adding tooltips and properties
Diffstat (limited to 'archiva-modules')
-rw-r--r--archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/model/property-entry.spec.ts25
-rw-r--r--archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/model/property-entry.ts22
-rw-r--r--archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/modules/security/security-configuration-routing.module.ts22
-rw-r--r--archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/modules/security/security-configuration.module.ts4
-rw-r--r--archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/modules/security/security-configuration/ldap-security/ldap-security.component.html23
-rw-r--r--archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/modules/security/security-configuration/security-configuration.component.html3
-rw-r--r--archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/modules/security/security-configuration/security-properties/security-properties.component.html39
-rw-r--r--archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/modules/security/security-configuration/security-properties/security-properties.component.scss0
-rw-r--r--archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/modules/security/security-configuration/security-properties/security-properties.component.spec.ts25
-rw-r--r--archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/modules/security/security-configuration/security-properties/security-properties.component.ts27
-rw-r--r--archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/services/security.service.ts21
-rw-r--r--archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/assets/i18n/en.json23
12 files changed, 217 insertions, 17 deletions
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/model/property-entry.spec.ts b/archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/model/property-entry.spec.ts
new file mode 100644
index 000000000..1c7555c0a
--- /dev/null
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/model/property-entry.spec.ts
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import { PropertyEntry } from './property-entry';
+
+describe('PropertyEntry', () => {
+ it('should create an instance', () => {
+ expect(new PropertyEntry()).toBeTruthy();
+ });
+});
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/model/property-entry.ts b/archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/model/property-entry.ts
new file mode 100644
index 000000000..3390dcf1a
--- /dev/null
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/model/property-entry.ts
@@ -0,0 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+export class PropertyEntry {
+ key: string;
+ value: string;
+}
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/modules/security/security-configuration-routing.module.ts b/archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/modules/security/security-configuration-routing.module.ts
index 4b40ce41e..edb681d61 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/modules/security/security-configuration-routing.module.ts
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/modules/security/security-configuration-routing.module.ts
@@ -21,6 +21,7 @@ import {RoutingGuardService as Guard} from "@app/services/routing-guard.service"
import {SecurityConfigurationComponent} from "./security-configuration/security-configuration.component";
import {BaseSecurityComponent} from "./security-configuration/base-security/base-security.component";
import {LdapSecurityComponent} from "./security-configuration/ldap-security/ldap-security.component";
+import {SecurityPropertiesComponent} from "@app/modules/security/security-configuration/security-properties/security-properties.component";
/**
@@ -29,20 +30,23 @@ import {LdapSecurityComponent} from "./security-configuration/ldap-security/ldap
*/
const routes: Routes = [
- { path: '', component: SecurityConfigurationComponent,canActivate:[Guard],
- data: { perm: 'menu.security.config' },
+ {
+ path: '', component: SecurityConfigurationComponent, canActivate: [Guard],
+ data: {perm: 'menu.security.config'},
children: [
- {path: 'base', component: BaseSecurityComponent},
+ {path: 'base', component: BaseSecurityComponent},
+ {path: 'properties', component: SecurityPropertiesComponent},
{path: 'ldap', component: LdapSecurityComponent},
- {path: '', redirectTo:'base',pathMatch:'full'}
+ {path: '', redirectTo: 'base', pathMatch: 'full'}
]
- }
+ }
];
@NgModule({
- imports: [RouterModule.forChild(routes)],
- exports: [],
- declarations: []
+ imports: [RouterModule.forChild(routes)],
+ exports: [],
+ declarations: []
})
-export class SecurityConfigurationRoutingModule { }
+export class SecurityConfigurationRoutingModule {
+}
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/modules/security/security-configuration.module.ts b/archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/modules/security/security-configuration.module.ts
index e5ee11504..a36d79693 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/modules/security/security-configuration.module.ts
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/modules/security/security-configuration.module.ts
@@ -24,13 +24,15 @@ import {SecurityConfigurationComponent} from "./security-configuration/security-
import {SecurityConfigurationRoutingModule} from "@app/modules/security/security-configuration-routing.module";
import { BaseSecurityComponent } from './security-configuration/base-security/base-security.component';
import { LdapSecurityComponent } from './security-configuration/ldap-security/ldap-security.component';
+import { SecurityPropertiesComponent } from './security-configuration/security-properties/security-properties.component';
@NgModule({
declarations: [
SecurityConfigurationComponent,
BaseSecurityComponent,
- LdapSecurityComponent
+ LdapSecurityComponent,
+ SecurityPropertiesComponent
],
exports: [
SecurityConfigurationComponent
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/modules/security/security-configuration/ldap-security/ldap-security.component.html b/archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/modules/security/security-configuration/ldap-security/ldap-security.component.html
index f7940741f..aa2d70615 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/modules/security/security-configuration/ldap-security/ldap-security.component.html
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/modules/security/security-configuration/ldap-security/ldap-security.component.html
@@ -21,7 +21,10 @@
<div class="form-group row col-md-10"
*ngFor="let attName of ['host_name','port','base_dn','groups_base_dn','bind_dn','bind_password']">
<label class="col-md-3 col-form-label"
- for="{{attName}}">{{'security.config.ldap.attributes.' + attName |translate}}</label>
+ for="{{attName}}"
+ [openDelay]="500"
+ [ngbTooltip]="'security.config.ldap.attdesc.'+attName|translate" placement="top"
+ >{{'security.config.ldap.attributes.' + attName |translate}}</label>
<div [attr.class]="attName=='port'?'col-md-3':'col-md-7'">
<input [attr.type]="attName=='bind_password'?'password':'text'" formControlName="{{attName}}"
id="{{attName}}"
@@ -31,17 +34,21 @@
</div>
<div class="form-group row col-md-10">
<label class="col-md-3 col-form-label"
- for="context_factory">{{'security.config.ldap.attributes.context_factory' |translate}}</label>
+ for="context_factory"
+ [openDelay]="500" [ngbTooltip]="'security.config.ldap.attdesc.context_factory'|translate" placement="top"
+ >{{'security.config.ldap.attributes.context_factory' |translate}}</label>
<div class="col-md-7">
<input type="text" formControlName="context_factory" id="context_factory"
[ngClass]="getInputClasses('context_factory')" [ngbTypeahead]="searchContextFactory"
- [placement]="top"
+ [placement]="'top'"
>
</div>
</div>
<div class="form-group row col-md-10">
<label class="col-md-3 col-form-label"
- for="authentication_method">{{'security.config.ldap.attributes.authentication_method' |translate}}</label>
+ for="authentication_method"
+ [openDelay]="500" [ngbTooltip]="'security.config.ldap.attdesc.authentication_method'|translate" placement="top"
+ >{{'security.config.ldap.attributes.authentication_method' |translate}}</label>
<div class="col-md-2">
<select formControlName="authentication_method" id="authentication_method" class="form-control">
<option *ngFor="let method of authenticationMethods">{{method}}</option>
@@ -55,14 +62,18 @@
*ngFor="let flagName of ['writable','ssl_enabled','bind_authenticator_enabled','use_role_name_as_group']">
<input class="form-check-input" type="checkbox" formControlName="{{flagName}}"
id="{{flagName}}">
- <label class="form-check-label " for="{{flagName}}">
+ <label class="form-check-label " for="{{flagName}}"
+ [openDelay]="500" [ngbTooltip]="'security.config.ldap.attdesc.'+flagName|translate" placement="top"
+ >
{{'security.config.ldap.attributes.' + flagName|translate}}
</label>
</div>
</div>
</div>
<div class="form-group row col-md-10" >
- <div class="col-md-3">{{'security.config.ldap.attributes.properties'|translate}}</div>
+ <div class="col-md-3"
+ [openDelay]="500" [ngbTooltip]="'security.config.ldap.attdesc.properties'|translate" placement="top"
+ >{{'security.config.ldap.attributes.properties'|translate}}</div>
<div class="col-md-7 form-row">
<input type="text" id="prop_key" formControlName="prop_key" class="form-control col" placeholder="{{'form.button.key'|translate}}"
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/modules/security/security-configuration/security-configuration.component.html b/archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/modules/security/security-configuration/security-configuration.component.html
index 340af0734..bcbe2c9b9 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/modules/security/security-configuration/security-configuration.component.html
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/modules/security/security-configuration/security-configuration.component.html
@@ -21,6 +21,9 @@
<a class="nav-link" routerLink="/security/config/base" routerLinkActive="active" href="#">{{'security.config.base.head' | translate}}</a>
</li>
<li class="nav-item">
+ <a class="nav-link" routerLink="/security/config/properties" routerLinkActive="active" href="#">{{'security.config.properties.head' |translate }}</a>
+ </li>
+ <li class="nav-item">
<a class="nav-link" routerLink="/security/config/ldap" routerLinkActive="active" href="#">{{'security.config.ldap.head' |translate }}</a>
</li>
</ul>
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/modules/security/security-configuration/security-properties/security-properties.component.html b/archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/modules/security/security-configuration/security-properties/security-properties.component.html
new file mode 100644
index 000000000..59bcdefaf
--- /dev/null
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/modules/security/security-configuration/security-properties/security-properties.component.html
@@ -0,0 +1,39 @@
+<app-paginated-entities [service]="service" pageSize="10" [(sortField)]="sortField" [(sortOrder)]="sortOrder"
+ #parent>
+ <ng-container *ngIf="parent.items$ |async as roleItemLoader" >
+ <ng-template [ngIf]="roleItemLoader.loading" #spinner let-modal>
+ <div class="fixed-top d-flex justify-content-center mt-5 pt-5">
+ <div class="spinner-border text-info mt-5" role="status">
+ <span class="sr-only">Loading...</span>
+ </div>
+ </div>
+ </ng-template>
+ </ng-container>
+ <ng-container *ngIf="parent.items$ |stripLoading|async as propertyItem" >
+ <table class="table table-striped table-bordered">
+ <thead class="thead-light">
+ <tr sorted [sortFieldEmitter]="parent.sortFieldChange" [sortOrderEmitter]="parent.sortOrderChange"
+ [toggleObserver]="parent">
+ <app-th-sorted [fieldArray]="['key']" contentText="security.config.properties.attributes.key"></app-th-sorted>
+ <app-th-sorted [fieldArray]="['value']" contentText="security.config.properties.attributes.value"></app-th-sorted>
+ <th>{{'headers.action' |translate}}</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr *ngFor="let propertyEntry of propertyItem.data" >
+ <td>{{propertyEntry.key}}</td>
+ <td>{{propertyEntry.value}}</td>
+ <td>
+ <a [routerLink]="['..','edit', propertyEntry.key]"
+ [attr.title]="'security.config.properties.edit' |translate"><span class="fas fa-edit"></span></a>
+ <a class="ml-2" [routerLink]="['..','delete', propertyEntry.key]"
+ [attr.title]="'security.config.properties.delete' |translate"><span class="fas fa-trash-alt"></span></a>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </ng-container>
+
+</app-paginated-entities>
+
+
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/modules/security/security-configuration/security-properties/security-properties.component.scss b/archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/modules/security/security-configuration/security-properties/security-properties.component.scss
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/modules/security/security-configuration/security-properties/security-properties.component.scss
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/modules/security/security-configuration/security-properties/security-properties.component.spec.ts b/archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/modules/security/security-configuration/security-properties/security-properties.component.spec.ts
new file mode 100644
index 000000000..d1228303e
--- /dev/null
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/modules/security/security-configuration/security-properties/security-properties.component.spec.ts
@@ -0,0 +1,25 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { SecurityPropertiesComponent } from './security-properties.component';
+
+describe('SecurityPropertiesComponent', () => {
+ let component: SecurityPropertiesComponent;
+ let fixture: ComponentFixture<SecurityPropertiesComponent>;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ declarations: [ SecurityPropertiesComponent ]
+ })
+ .compileComponents();
+ });
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(SecurityPropertiesComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/modules/security/security-configuration/security-properties/security-properties.component.ts b/archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/modules/security/security-configuration/security-properties/security-properties.component.ts
new file mode 100644
index 000000000..961866a18
--- /dev/null
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/modules/security/security-configuration/security-properties/security-properties.component.ts
@@ -0,0 +1,27 @@
+import {Component, OnInit} from '@angular/core';
+import {SortedTableComponent} from "@app/modules/shared/sorted-table-component";
+import {PropertyEntry} from '@app/model/property-entry';
+import {TranslateService} from "@ngx-translate/core";
+import {Observable} from "rxjs";
+import {PagedResult} from "@app/model/paged-result";
+import {SecurityService} from "@app/services/security.service";
+
+@Component({
+ selector: 'app-security-properties',
+ templateUrl: './security-properties.component.html',
+ styleUrls: ['./security-properties.component.scss']
+})
+export class SecurityPropertiesComponent extends SortedTableComponent<PropertyEntry> implements OnInit {
+
+ constructor(translator: TranslateService, securityService: SecurityService) {
+ super(translator, function (searchTerm: string, offset: number, limit: number, orderBy: string[], order: string): Observable<PagedResult<PropertyEntry>> {
+ // console.log("Retrieving data " + searchTerm + "," + offset + "," + limit + "," + orderBy + "," + order);
+ return securityService.queryProperties(searchTerm, offset, limit, orderBy, order);
+ });
+ super.sortField=['key']
+ }
+
+ ngOnInit(): void {
+ }
+
+}
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/services/security.service.ts b/archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/services/security.service.ts
index 244257ab1..8902341b1 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/services/security.service.ts
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/app/services/security.service.ts
@@ -24,6 +24,9 @@ import {catchError, map} from "rxjs/operators";
import {HttpErrorResponse, HttpResponse} from "@angular/common/http";
import {BeanInformation} from "@app/model/bean-information";
import {LdapConfiguration} from "@app/model/ldap-configuration";
+import {PagedResult} from "@app/model/paged-result";
+import {Role} from "@app/model/role";
+import {PropertyEntry} from "@app/model/property-entry";
@Injectable({
providedIn: 'root'
@@ -94,5 +97,23 @@ export class SecurityService {
);
}
+ queryProperties(searchTerm: string, offset: number = 0, limit: number = 10, orderBy: string[] = ['key'], order: string = 'asc'): Observable<PagedResult<PropertyEntry>> {
+ if (searchTerm == null) {
+ searchTerm = ""
+ }
+ if (orderBy == null || orderBy.length == 0) {
+ orderBy = ['key'];
+ }
+ return this.rest.executeRestCall<PagedResult<PropertyEntry>>("get", "archiva", "security/config/properties", {
+ 'q': searchTerm,
+ 'offset': offset,
+ 'limit': limit,
+ 'orderBy': orderBy,
+ 'order': order
+ }).pipe(
+ catchError((error: HttpErrorResponse) => {
+ return throwError(this.rest.getTranslatedErrorResult(error));
+ }));
+ }
}
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/assets/i18n/en.json b/archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/assets/i18n/en.json
index dff49c78e..18074b7d4 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/assets/i18n/en.json
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/archiva-web/src/assets/i18n/en.json
@@ -226,9 +226,30 @@
"ssl_enabled": "Enable SSL",
"context_factory": "Context Factory",
"properties": "Properties"
-
+ },
+ "attdesc": {
+ "host_name": "Fully qualified LDAP Server Name",
+ "port": "Port, on which the LDAP server is listening (389, 636, ...)",
+ "base_dn": "The Base DN used during bind and ldap queries",
+ "groups_base_dn": "The full DN used as base for searching groups",
+ "bind_dn": "The name or DN of the bind user, which is used to query the LDAP server",
+ "bind_password": "The password to use for binding to the LDAP server",
+ "authentication_method": "The method used to bind to the LDAP server. If strong is used, you may have to set additional properties.",
+ "bind_authenticator_enabled": "If true, LDAP query and bind is used for Archiva Login.",
+ "use_role_name_as_group": "If true, each role as a LDAP group with the same name",
+ "writable": "If true, attributes in the LDAP server can be modified",
+ "ssl_enabled": "If true, SSL/TLS is used for connecting to the LDAP server. You may have to add certificates to the keystore.",
+ "context_factory": "The LDAP JNDI Context Factory to use",
+ "properties": "Add additional environment properties for creating the initial directory context"
},
"flags": "Flags"
+ },
+ "properties": {
+ "head": "Properties",
+ "attributes": {
+ "key": "Key",
+ "value": "Value"
+ }
}
}
},