From 74611d99c25a2486aeae77e3884d209a36f098bc Mon Sep 17 00:00:00 2001 From: Joseph Schorr Date: Fri, 16 Jun 2017 15:46:50 -0400 Subject: [PATCH 1/8] Add Changelog for v2.4.0 --- CHANGELOG.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index fd41424aa..943dc5779 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,26 @@ +### v2.4.0 + +- Added: Kubernetes Applications Support +- Added: Full-page search UI (#2529) +- Added: Always generate V2 manifests for tag operations in UI (#2608) +- Added: Option to enable public repositories in v2 catalog API (#2654) +- Added: Disable repository notifications after 3 failures (#2652) +- Added: Remove requirement for flash for copy button in UI (#2667) + +- Fixed: Upgrade support for Markdown (#2624) +- Fixed: Kubernetes secret generation with secrets with CAPITAL names (#2640) +- Fixed: Content-Length reporting on HEAD requests (#2616) +- Fixed: Use configured email address as the sender in email notifications (#2635) +- Fixed: Better peformance on permissions lookup (#2628) +- Fixed: Disable federated login for new users if user creation is disabled (#2623) +- Fixed: Show build logs timestamps by default (#2647) +- Fixed: Custom TLS certificates tooling in superuser panel under Kubernetes (#2646, #2663) +- Fixed: Disable debug logs in superuser panel when under multiple instances (#2663) +- Fixed: External Notification Modal UI bug (#2650) +- Fixed: Security worker thrashing when security scanner not available +- Fixed: Torrent validation in superuser config panel (#2694) +- Fixed: Expensive database call in build badges (#2688) + ### v2.3.4 - Added: Always show tag expiration options in superuser panel From 6ae81ae50b98b469a92fbed98c65c6a98ba20c3d Mon Sep 17 00:00:00 2001 From: Joseph Schorr Date: Thu, 22 Jun 2017 16:14:11 -0400 Subject: [PATCH 2/8] Fix URI lib import in setup tool Move to web pack broke this --- static/js/pages/setup.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/static/js/pages/setup.js b/static/js/pages/setup.js index ab1938fe1..8ee89d590 100644 --- a/static/js/pages/setup.js +++ b/static/js/pages/setup.js @@ -1,3 +1,5 @@ +import * as URI from 'urijs'; + (function() { /** * The Setup page provides a nice GUI walkthrough experience for setting up Quay Enterprise. @@ -236,11 +238,10 @@ $scope.serializeDbUri = function(fields) { if (!fields['server']) { return ''; } + var uri = URI(); try { if (!fields['server']) { return ''; } if (!fields['database']) { return ''; } - - var uri = URI(); uri = uri && uri.host(fields['server']); uri = uri && uri.protocol(fields['kind']); uri = uri && uri.username(fields['username']); From 675127e0dab1672318c01cea184cfef43cace041 Mon Sep 17 00:00:00 2001 From: alecmerdler Date: Thu, 22 Jun 2017 19:12:15 -0700 Subject: [PATCH 3/8] fixed background CSS in setup --- static/partials/setup.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/partials/setup.html b/static/partials/setup.html index a59c506e6..b7229e124 100644 --- a/static/partials/setup.html +++ b/static/partials/setup.html @@ -6,7 +6,7 @@ Quay Enterprise Setup -
+
From 74ebf2a94b729b9878c569e5cb8910319bc7e3cf Mon Sep 17 00:00:00 2001 From: alecmerdler Date: Fri, 23 Jun 2017 15:12:52 -0700 Subject: [PATCH 4/8] prevent invalid entity create form submission using enter key --- static/directives/create-entity-dialog.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/directives/create-entity-dialog.html b/static/directives/create-entity-dialog.html index a3ef2d966..5e8bec9bf 100644 --- a/static/directives/create-entity-dialog.html +++ b/static/directives/create-entity-dialog.html @@ -29,7 +29,7 @@ ng-if="entity">
-
+ Enter optional notes for additional human-readable information about why the keys were approved. @@ -268,7 +271,10 @@
Approve service key {{ getKeyTitle(approvalKeyInfo.key) }}?
-
+ Enter optional notes for additional human-readable information about why the key was approved. @@ -344,7 +350,10 @@ -
+ Optional notes for additional human-readable information about why the key was added. diff --git a/static/js/directives/ui/global-message-tab.js b/static/js/directives/ui/global-message-tab.js index e0534cd2f..8f4ac572b 100644 --- a/static/js/directives/ui/global-message-tab.js +++ b/static/js/directives/ui/global-message-tab.js @@ -38,15 +38,15 @@ angular.module('quay').directive('globalMessageTab', function () { ApiService.createGlobalMessage(data, null).then(function (resp) { $scope.creatingMessage = false; - $scope.newMessage = { - 'media_type': 'text/markdown', - 'severity': 'info' - }; $('#createMessageModal').modal('hide'); $scope.loadMessageInternal(); }, errorHandler) }; + + $scope.updateMessage = function(content) { + $scope.newMessage.content = content; + }; $scope.showDeleteMessage = function (uuid) { $scope.messageToDelete = uuid; diff --git a/static/js/directives/ui/request-service-key-dialog.js b/static/js/directives/ui/request-service-key-dialog.js index 9c0ed1320..bd3351567 100644 --- a/static/js/directives/ui/request-service-key-dialog.js +++ b/static/js/directives/ui/request-service-key-dialog.js @@ -108,6 +108,10 @@ angular.module('quay').directive('requestServiceKeyDialog', function () { $scope.keyCreated({'key': resp}); }, ApiService.errorDisplay('Could not create service key')); }; + + $scope.updateNotes = function(content) { + $scope.preshared.notes = content; + }; $scope.$watch('requestKeyInfo', function(info) { if (info && info.service) { diff --git a/static/js/directives/ui/search-box/search-box.component.html b/static/js/directives/ui/search-box/search-box.component.html index 69495614a..48d756197 100644 --- a/static/js/directives/ui/search-box/search-box.component.html +++ b/static/js/directives/ui/search-box/search-box.component.html @@ -31,8 +31,11 @@ {{ result.namespace.name }}/{{ result.name }}
-
+
+ +
diff --git a/static/js/directives/ui/service-keys-manager.js b/static/js/directives/ui/service-keys-manager.js index 97a265194..d6a4da38f 100644 --- a/static/js/directives/ui/service-keys-manager.js +++ b/static/js/directives/ui/service-keys-manager.js @@ -168,6 +168,10 @@ angular.module('quay').directive('serviceKeysManager', function () { loadServiceKeys(); }, ApiService.errorDisplay('Could not create service key')); }; + + $scope.updateNewKeyNotes = function(content) { + $scope.newKey.notes = content; + }; $scope.showApproveKey = function(key) { $scope.approvalKeyInfo = { @@ -195,6 +199,10 @@ angular.module('quay').directive('serviceKeysManager', function () { callback(true); }, errorHandler); }; + + $scope.updateApprovalKeyInfoNotes = function(content) { + $scope.approvalKeyInfo.notes = content; + }; $scope.showCreateKey = function() { $scope.newKey = { @@ -351,7 +359,11 @@ angular.module('quay').directive('serviceKeysManager', function () { forAllKeys(info.keys, 'Could not approve service key', performer, callback); }; - + + $scope.updateApproveKeysInfoNotes = function(content) { + $scope.approveKeysInfo.notes = content; + }; + $scope.changeKeysExpiration = function(info, callback) { var performer = function(key) { var data = { From d4ef594c13fdace032f6e49658ec920abbf4595f Mon Sep 17 00:00:00 2001 From: Evan Cordell Date: Wed, 5 Jul 2017 15:05:19 -0400 Subject: [PATCH 8/8] Mark fields as required on globalmessages API so that they are properly checked when the request comes in --- endpoints/api/globalmessages.py | 5 +++++ test/test_api_security.py | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/endpoints/api/globalmessages.py b/endpoints/api/globalmessages.py index b27683a17..d6b491d2f 100644 --- a/endpoints/api/globalmessages.py +++ b/endpoints/api/globalmessages.py @@ -58,6 +58,11 @@ class GlobalUserMessages(ApiResource): 'message': { 'type': 'object', 'description': 'A single message', + 'required': [ + 'content', + 'media_type', + 'severity', + ], 'properties': { 'content': { 'type': 'string', diff --git a/test/test_api_security.py b/test/test_api_security.py index 0df692b17..40638dd24 100644 --- a/test/test_api_security.py +++ b/test/test_api_security.py @@ -4318,7 +4318,7 @@ class TestSuperUserMessages(ApiTestCase): def setUp(self): ApiTestCase.setUp(self) self._set_url(GlobalUserMessages) - self.message = {'message': {'content': '', 'severity': 'info', 'media_type': 'text/plain'}} + self.message = {'message': {'content': 'msg', 'severity': 'info', 'media_type': 'text/plain'}} def test_post_anonymous(self): self._run_test('POST', 401, None, None)