fix(template): add name validation for template name EE-1806 (#5823)

* add name validation for tempalte name
pull/5855/head
Richard Wei 2021-10-07 13:02:56 +13:00 committed by GitHub
parent 84e57cebc9
commit 661931d8b0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 49 additions and 5 deletions

View File

@ -31,3 +31,4 @@ angular
export const PORTAINER_FADEOUT = 1500;
export const STACK_NAME_VALIDATION_REGEX = '^[-_a-z0-9]+$';
export const TEMPLATE_NAME_VALIDATION_REGEX = '^[-_a-z0-9]+$';

View File

@ -5,7 +5,27 @@
Title
</label>
<div class="col-sm-9 col-lg-10">
<input type="text" class="form-control" ng-model="$ctrl.formValues.Title" id="template_title" name="template_title" placeholder="e.g. mytemplate" auto-focus required />
<input
type="text"
class="form-control"
ng-model="$ctrl.formValues.Title"
ng-pattern="$ctrl.nameRegex"
id="template_title"
name="template_title"
placeholder="e.g. mytemplate"
auto-focus
required
/>
</div>
</div>
<div class="form-group" ng-show="commonCustomTemplateForm.template_title.$invalid">
<div class="col-sm-12 small text-warning">
<div ng-messages="commonCustomTemplateForm.template_title.$error">
<p ng-message="pattern">
<i class="fa fa-exclamation-triangle" aria-hidden="true"></i>
<span>This field must consist of lower case alphanumeric characters, '_' or '-' (e.g. 'my-name', or 'abc-123').</span>
</p>
</div>
</div>
</div>
<div class="form-group" ng-show="commonCustomTemplateForm.template_title.$invalid">

View File

@ -7,5 +7,6 @@ angular.module('portainer.app').component('customTemplateCommonFields', {
formValues: '=',
showPlatformField: '<',
showTypeField: '<',
nameRegex: '<',
},
});

View File

@ -8,6 +8,7 @@ angular.module('portainer.app').component('stackFromTemplateForm', {
state: '=',
createTemplate: '<',
unselectTemplate: '<',
nameRegex: '<',
},
transclude: {
advanced: '?advancedForm',

View File

@ -2,7 +2,7 @@
<rd-widget>
<rd-widget-custom-header icon="$ctrl.template.Logo" title-text="$ctrl.template.Title"></rd-widget-custom-header>
<rd-widget-body classes="padding">
<form class="form-horizontal">
<form class="form-horizontal" name="stackTemplateForm">
<!-- description -->
<div ng-if="$ctrl.template.Note">
<div class="col-sm-12 form-section-title">
@ -20,9 +20,19 @@
</div>
<!-- name-input -->
<div class="form-group">
<label for="container_name" class="col-sm-2 control-label text-left">Name</label>
<label for="template_name" class="col-sm-2 control-label text-left">Name</label>
<div class="col-sm-10">
<input type="text" name="container_name" class="form-control" ng-model="$ctrl.formValues.name" placeholder="e.g. myStack" required />
<input type="text" name="template_name" class="form-control" ng-model="$ctrl.formValues.name" ng-pattern="$ctrl.nameRegex" placeholder="e.g. myStack" required />
</div>
</div>
<div class="form-group" ng-show="stackTemplateForm.template_name.$invalid">
<div class="col-sm-12 small text-warning">
<div ng-messages="stackTemplateForm.template_name.$error">
<p ng-message="pattern">
<i class="fa fa-exclamation-triangle" aria-hidden="true"></i>
<span>This field must consist of lower case alphanumeric characters, '_' or '-' (e.g. 'my-name', or 'abc-123').</span>
</p>
</div>
</div>
</div>
<!-- !name-input -->

View File

@ -8,7 +8,12 @@
<rd-widget>
<rd-widget-body>
<form class="form-horizontal" name="customTemplateForm">
<custom-template-common-fields form-values="$ctrl.formValues" show-platform-field="true" show-type-field="true"></custom-template-common-fields>
<custom-template-common-fields
form-values="$ctrl.formValues"
show-platform-field="true"
show-type-field="true"
name-regex="$ctrl.state.templateNameRegex"
></custom-template-common-fields>
<!-- build-method -->
<div ng-if="!$ctrl.state.fromStack">

View File

@ -1,5 +1,6 @@
import _ from 'lodash';
import { AccessControlFormData } from 'Portainer/components/accessControlForm/porAccessControlFormModel';
import { TEMPLATE_NAME_VALIDATION_REGEX } from '@/constants';
class CreateCustomTemplateViewController {
/* @ngInject */
@ -43,7 +44,9 @@ class CreateCustomTemplateViewController {
fromStack: false,
loading: true,
isEditorDirty: false,
templateNameRegex: TEMPLATE_NAME_VALIDATION_REGEX,
};
this.templates = [];
this.createCustomTemplate = this.createCustomTemplate.bind(this);

View File

@ -11,6 +11,7 @@
ng-if="$ctrl.state.selectedTemplate"
template="$ctrl.state.selectedTemplate"
form-values="$ctrl.formValues"
name-regex="$ctrl.state.templateNameRegex"
state="$ctrl.state"
create-template="$ctrl.createStack"
unselect-template="$ctrl.unselectTemplate"

View File

@ -1,5 +1,6 @@
import _ from 'lodash-es';
import { AccessControlFormData } from 'Portainer/components/accessControlForm/porAccessControlFormModel';
import { TEMPLATE_NAME_VALIDATION_REGEX } from '@/constants';
class CustomTemplatesViewController {
/* @ngInject */
@ -44,6 +45,7 @@ class CustomTemplatesViewController {
actionInProgress: false,
isEditorVisible: false,
deployable: false,
templateNameRegex: TEMPLATE_NAME_VALIDATION_REGEX,
};
this.currentUser = {