From cf402a2a6888ade5c57165dc978a59d2330307a7 Mon Sep 17 00:00:00 2001 From: grakiss Date: Fri, 7 Jul 2017 15:06:29 +0800 Subject: role based access control and result upload 1. add role for user 2. user can upload test results Change-Id: I1c5370be7818edb0394f05e8b81f975deb98b286 Signed-off-by: grakiss --- .../testapi-ui/components/results/results.html | 20 +++++++- .../components/results/resultsController.js | 58 +++++++++++++++++++++- .../static/testapi-ui/shared/header/header.html | 2 + testapi/etc/config.ini | 2 +- testapi/opnfv_testapi/common/message.py | 4 ++ testapi/opnfv_testapi/resources/result_handlers.py | 52 ++++++++++++++++++- testapi/opnfv_testapi/resources/result_models.py | 8 ++- testapi/opnfv_testapi/router/url_mappings.py | 2 + testapi/opnfv_testapi/tests/unit/executor.py | 14 ++++++ testapi/opnfv_testapi/tests/unit/fake_pymongo.py | 3 +- .../tests/unit/resources/test_result.py | 48 ++++++++++++++++-- testapi/opnfv_testapi/ui/auth/constants.py | 2 + testapi/opnfv_testapi/ui/auth/sign.py | 29 ++++++++--- testapi/opnfv_testapi/ui/auth/user.py | 2 +- 14 files changed, 225 insertions(+), 21 deletions(-) (limited to 'testapi') diff --git a/testapi/3rd_party/static/testapi-ui/components/results/results.html b/testapi/3rd_party/static/testapi-ui/components/results/results.html index 3056e1d..2ae5339 100644 --- a/testapi/3rd_party/static/testapi-ui/components/results/results.html +++ b/testapi/3rd_party/static/testapi-ui/components/results/results.html @@ -1,6 +1,23 @@

{{ctrl.pageHeader}}

{{ctrl.pageParagraph}}

- +
+

Upload Results

+
+ +
+
+ +
+
+ +
+
+{{ctrl.uploadState}} +
+
+

Filters

@@ -41,7 +58,6 @@
-
diff --git a/testapi/3rd_party/static/testapi-ui/components/results/resultsController.js b/testapi/3rd_party/static/testapi-ui/components/results/resultsController.js index 9e3540d..cc6cc0b 100644 --- a/testapi/3rd_party/static/testapi-ui/components/results/resultsController.js +++ b/testapi/3rd_party/static/testapi-ui/components/results/resultsController.js @@ -19,6 +19,24 @@ .module('testapiApp') .controller('ResultsController', ResultsController); + angular + .module('testapiApp') + .directive('fileModel', ['$parse', function ($parse) { + return { + restrict: 'A', + link: function(scope, element, attrs) { + var model = $parse(attrs.fileModel); + var modelSetter = model.assign; + + element.bind('change', function(){ + scope.$apply(function(){ + modelSetter(scope, element[0].files[0]); + }); + }); + } + }; + }]); + ResultsController.$inject = [ '$scope', '$http', '$filter', '$state', 'testapiApiUrl','raiseAlert' ]; @@ -32,6 +50,7 @@ raiseAlert) { var ctrl = this; + ctrl.uploadFile=uploadFile; ctrl.update = update; ctrl.open = open; ctrl.clearFilters = clearFilters; @@ -76,6 +95,8 @@ ctrl.format = 'yyyy-MM-dd'; /** Check to see if this page should display user-specific results. */ + // ctrl.isUserResults = $state.current.name === 'userResults'; + // need auth to browse ctrl.isUserResults = $state.current.name === 'userResults'; // Should only be on user-results-page if authenticated. @@ -91,14 +112,49 @@ 'The most recently uploaded community test results are listed ' + 'here.'; + ctrl.uploadState = ''; + + ctrl.isPublic = false; + if (ctrl.isUserResults) { ctrl.authRequest = $scope.auth.doSignCheck() .then(ctrl.update); - ctrl.getUserProducts(); + // ctrl.getUserProducts(); } else { ctrl.update(); } + + function uploadFileToUrl(file, uploadUrl){ + var fd = new FormData(); + fd.append('file', file); + fd.append('public', ctrl.isPublic) + + $http.post(uploadUrl, fd, { + transformRequest: angular.identity, + headers: {'Content-Type': undefined} + }) + + .success(function(data){ + var id = data.href.substr(data.href.lastIndexOf('/')+1); + ctrl.uploadState = "Upload succeed. Result id is " + id; + ctrl.update(); + }) + + .error(function(data, status){ + ctrl.uploadState = "Upload failed. Error code is " + status; + }); + } + + function uploadFile(){ + var file = $scope.resultFile; + console.log('file is ' ); + console.dir(file); + + var uploadUrl = testapiApiUrl + "/results/upload"; + uploadFileToUrl(file, uploadUrl); + }; + /** * This will contact the TestAPI API to get a listing of test run * results. diff --git a/testapi/3rd_party/static/testapi-ui/shared/header/header.html b/testapi/3rd_party/static/testapi-ui/shared/header/header.html index f2c49e8..85c33b6 100644 --- a/testapi/3rd_party/static/testapi-ui/shared/header/header.html +++ b/testapi/3rd_party/static/testapi-ui/shared/header/header.html @@ -33,6 +33,7 @@ TestAPI