You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dlab.apache.org by dg...@apache.org on 2020/01/20 07:58:27 UTC
[incubator-dlab] branch develop updated: [DLAB-1451]: Added
endpoint url and endpoint name validation (#533)
This is an automated email from the ASF dual-hosted git repository.
dgnatyshyn pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git
The following commit(s) were added to refs/heads/develop by this push:
new 51f3d37 [DLAB-1451]: Added endpoint url and endpoint name validation (#533)
51f3d37 is described below
commit 51f3d37fa3284a6ca78356dc4e94a78dafa9d6ae
Author: Dmytro Gnatyshyn <42...@users.noreply.github.com>
AuthorDate: Mon Jan 20 09:58:22 2020 +0200
[DLAB-1451]: Added endpoint url and endpoint name validation (#533)
[DLAB-1451]: Added endpoint url and endpoint name validation
---
.../management/endpoints/endpoints.component.html | 13 ++-
.../management/endpoints/endpoints.component.scss | 112 +++++++++++----------
.../management/endpoints/endpoints.component.ts | 18 +++-
.../resources/webapp/src/app/core/util/patterns.ts | 5 +-
.../resources-grid/resources-grid.component.ts | 2 +-
5 files changed, 86 insertions(+), 64 deletions(-)
diff --git a/services/self-service/src/main/resources/webapp/src/app/administration/management/endpoints/endpoints.component.html b/services/self-service/src/main/resources/webapp/src/app/administration/management/endpoints/endpoints.component.html
index c1171dd..08b030f 100644
--- a/services/self-service/src/main/resources/webapp/src/app/administration/management/endpoints/endpoints.component.html
+++ b/services/self-service/src/main/resources/webapp/src/app/administration/management/endpoints/endpoints.component.html
@@ -35,19 +35,24 @@
<input type="text" formControlName="name" placeholder="Enter endpoint name"
(blur)="generateEndpointTag($event)">
<span class="error"
- *ngIf="!createEndpointForm?.controls.name.valid && createEndpointForm?.controls.name.touched">
+ *ngIf="!createEndpointForm?.controls.name.valid && createEndpointForm?.controls.name.touched && !createEndpointForm?.controls['name'].hasError('isDuplicate')">
Endpoint name can only contain letters, numbers, hyphens and '_' but can not end with special
characters
</span>
+ <span class="error"
+ *ngIf="createEndpointForm?.controls['name'].hasError('isDuplicate')">
+ This endpoint name already exists.
+ </span>
</div>
</div>
<div class="control-group">
<label class="label">Endpoint url</label>
<div class="control">
<input type="text" formControlName="url" placeholder="Enter endpoint url">
+ <span class="error" *ngIf="createEndpointForm?.controls['url'].hasError('isDuplicate')">This endpoint url already exists.</span>
<span class="error"
- *ngIf="!createEndpointForm?.controls.url.valid && createEndpointForm.controls.url.touched">
- Endpoint url should end with slash
+ *ngIf="!createEndpointForm?.controls.url.valid && createEndpointForm.controls.url.touched && !createEndpointForm?.controls['url'].hasError('isDuplicate')">
+ Please provide a valid endpoint url with slash in the end.
</span>
</div>
</div>
@@ -58,7 +63,7 @@
<span class="error"
*ngIf="!createEndpointForm?.controls.account.valid && createEndpointForm.controls.account.touched">
Endpoint account can only contain letters, numbers, hyphens and '_' but can not end with special
- characters
+ characters.
</span>
</div>
</div>
diff --git a/services/self-service/src/main/resources/webapp/src/app/administration/management/endpoints/endpoints.component.scss b/services/self-service/src/main/resources/webapp/src/app/administration/management/endpoints/endpoints.component.scss
index 5714552..78665ea 100644
--- a/services/self-service/src/main/resources/webapp/src/app/administration/management/endpoints/endpoints.component.scss
+++ b/services/self-service/src/main/resources/webapp/src/app/administration/management/endpoints/endpoints.component.scss
@@ -16,79 +16,81 @@
* specific language governing permissions and limitations
* under the License.
*/
+.endpoints-dialog {
+ .content-box {
+ padding: 10px 30px 30px;
+ height: 400px;
-.content-box {
- padding: 10px 30px 30px;
- height: 400px;
+ .split {
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ height: 100%;
- .split {
- display: flex;
- flex-direction: column;
- justify-content: space-between;
- height: 100%;
+ form {
+ padding: 20px 10px;
- form {
- padding: 20px 10px;
-
- .control-group {
- .error {
- position: absolute;
- right: 0;
- bottom: 5px;
- font-family: 'Open Sans', sans-serif;
- font-weight: 300;
+ .control-group {
+ .error {
+ position: absolute;
+ right: 0;
+ bottom: 5px;
+ font-family: 'Open Sans', sans-serif;
+ font-weight: 300;
+ top: 34px;
+ }
}
}
}
- }
- .action-group {
- display: flex;
- justify-content: space-between;
- padding: 0 10px;
- }
+ .action-group {
+ display: flex;
+ justify-content: space-between;
+ padding: 0 10px;
+ }
- .endpoints {
- height: 265px;
+ .endpoints {
+ height: 265px;
- table.mat-table {
- width: 100%;
- thead{
- background: transparent;
- }
- tr {
- td {
- vertical-align: middle;
- max-width: 150px;
- overflow: hidden;
- text-overflow: ellipsis;
+ table.mat-table {
+ width: 100%;
+ thead{
+ background: transparent;
+ }
+ tr {
+ td {
+ vertical-align: middle;
+ max-width: 150px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
}
- }
- .actions {
- color: #607d8b;
- text-align: center;
- width: 14%;
+ .actions {
+ color: #607d8b;
+ text-align: center;
+ width: 14%;
- span {
- transition: all .5s ease-in-out;
- cursor: pointer;
+ span {
+ transition: all .5s ease-in-out;
+ cursor: pointer;
- .mat-icon {
- font-size: 18px;
- padding-top: 5px;
- }
+ .mat-icon {
+ font-size: 18px;
+ padding-top: 5px;
+ }
- &:hover {
- color: darken(#607d8b, 10%);
+ &:hover {
+ color: darken(#607d8b, 10%);
+ }
}
}
}
- }
- .content {
- p {
- margin-bottom: 30px;
+ .content {
+ p {
+ margin-bottom: 30px;
+ }
}
}
}
diff --git a/services/self-service/src/main/resources/webapp/src/app/administration/management/endpoints/endpoints.component.ts b/services/self-service/src/main/resources/webapp/src/app/administration/management/endpoints/endpoints.component.ts
index e263edc..d29a5d0 100644
--- a/services/self-service/src/main/resources/webapp/src/app/administration/management/endpoints/endpoints.component.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/administration/management/endpoints/endpoints.component.ts
@@ -97,8 +97,8 @@ export class EndpointsComponent implements OnInit {
private initFormModel(): void {
this.createEndpointForm = this._fb.group({
- name: ['', Validators.compose([Validators.required, Validators.pattern(PATTERNS.namePattern)])],
- url: ['', Validators.compose([Validators.required, Validators.pattern(PATTERNS.url)])],
+ name: ['', Validators.compose([Validators.required, Validators.pattern(PATTERNS.namePattern), this.validateName.bind(this)])],
+ url: ['', Validators.compose([Validators.required, Validators.pattern(PATTERNS.fullUrl), this.validateUrl.bind(this)])],
account: ['', Validators.compose([Validators.required, Validators.pattern(PATTERNS.namePattern)])],
endpoint_tag: ['', Validators.compose([Validators.required, Validators.pattern(PATTERNS.namePattern)])]
});
@@ -114,6 +114,20 @@ export class EndpointsComponent implements OnInit {
private getEndpointList() : void{
this.endpointService.getEndpointsData().subscribe((endpoints: any) => this.endpoints = endpoints);
}
+
+ private validateUrl(control) {
+ if (control && control.value){
+ const isDublicat = this.endpoints.some(endpoint => endpoint['url'].toLocaleLowerCase() === control.value.toLowerCase());
+ return isDublicat ? { isDuplicate: true } : null;
+ }
+ }
+
+ private validateName(control) {
+ if (control && control.value){
+ const isDublicat = this.endpoints.some(endpoint => endpoint['name'].toLocaleLowerCase() === control.value.toLowerCase());
+ return isDublicat ? { isDuplicate: true } : null;
+ }
+ }
}
@Component({
diff --git a/services/self-service/src/main/resources/webapp/src/app/core/util/patterns.ts b/services/self-service/src/main/resources/webapp/src/app/core/util/patterns.ts
index 52e2670..ac9137f 100644
--- a/services/self-service/src/main/resources/webapp/src/app/core/util/patterns.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/core/util/patterns.ts
@@ -23,5 +23,6 @@ export const PATTERNS = {
delimitersRegex: '[-_]?',
url: '[a-zA-Z0-9.://%#&\\.@:%-_\+~#=]*\.[^\s]*[a-zA-Z0-9]/+',
nodeCountPattern: '^[1-9]\\d*$',
- integerRegex: '^[0-9]*$'
-}
+ integerRegex: '^[0-9]*$',
+ fullUrl: /^(http?|ftp|https):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+([.:])(\d{4}|com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*\/$/
+};
diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.component.ts b/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.component.ts
index d5fd324..347483b 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.component.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.component.ts
@@ -127,7 +127,7 @@ export class ResourcesGridComponent implements OnInit {
}
public containsNotebook(notebook_name: string): boolean {
- if (notebook_name)
+ if (notebook_name && this.environments.length)
return this.environments
.filter(project => project.exploratory
.some(item => CheckUtils.delimitersFiltering(notebook_name) === CheckUtils.delimitersFiltering(item.name))).length > 0;
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@dlab.apache.org
For additional commands, e-mail: commits-help@dlab.apache.org