Better handling of namespace validation to fix a number of issues

- Fixes a bug which allows for underscores at the beginning of namespaces: Fixes #1849
- Allows dots and dashes for newer Docker clients: Fixes #1188
- Has the UI display better messaging associated with namespace entry
This commit is contained in:
Joseph Schorr 2016-09-20 15:21:26 -04:00
parent efbbeeb07f
commit 3a68740ff7
11 changed files with 126 additions and 21 deletions

View file

@ -1,6 +1,6 @@
var TEAM_PATTERN = '^[a-z][a-z0-9]+$';
var ROBOT_PATTERN = '^[a-z][a-z0-9_]{3,29}$';
var USER_PATTERN = '^[a-z0-9_]{4,30}$';
var USERNAME_PATTERN = '^([a-z0-9]+(?:[._-][a-z0-9]+)*){4,30}$';
// Define the pages module.
quayPages = angular.module('quayPages', [], function(){});

View file

@ -0,0 +1,32 @@
/**
* An element which displays an input box for creating a namespace.
*/
angular.module('quay').directive('namespaceInput', function () {
var directiveDefinitionObject = {
priority: 0,
templateUrl: '/static/directives/namespace-input.html',
replace: false,
transclude: true,
restrict: 'C',
scope: {
'binding': '=binding',
'isBackIncompat': '=isBackIncompat',
'namespaceTitle': '@namespaceTitle',
},
controller: function($scope, $element) {
$scope.USERNAME_PATTERN = USERNAME_PATTERN;
$scope.usernamePattern = new RegExp(USERNAME_PATTERN);
$scope.$watch('binding', function(binding) {
if (!binding) {
$scope.isBackIncompat = false;
return;
}
$scope.isBackIncompat = (binding.indexOf('-') > 0 || binding.indexOf('.') > 0);
})
}
};
return directiveDefinitionObject;
});

View file

@ -54,9 +54,9 @@
};
$scope.createNewOrg = function() {
$('#orgName').popover('hide');
$scope.createError = null;
$scope.creating = true;
var org = $scope.org;
var data = {
'name': org.name,
@ -96,9 +96,6 @@
}, function(resp) {
$scope.creating = false;
$scope.createError = ApiService.getErrorMessage(resp);
$timeout(function() {
$('#orgName').popover('show');
});
});
};
}