bastion 3.3.1 → 3.3.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/bastion/auth/auth.module.js +1 -1
- data/app/assets/javascripts/bastion/auth/authorization.service.js +4 -0
- data/app/assets/javascripts/bastion/bastion-bootstrap.js +2 -1
- data/app/assets/javascripts/bastion/bastion.js +1 -1
- data/app/assets/javascripts/bastion/bastion.module.js +3 -54
- data/app/assets/javascripts/bastion/components/components.module.js +1 -1
- data/app/assets/javascripts/bastion/components/current-tasks.directive.js +6 -5
- data/app/assets/javascripts/bastion/i18n/i18n.module.js +1 -2
- data/app/assets/javascripts/bastion/menu/menu.module.js +0 -1
- data/app/assets/javascripts/bastion/routing.module.js +81 -0
- data/app/assets/javascripts/bastion/{bastion-resource.factory.js → utils/bastion-resource.factory.js} +3 -4
- data/app/assets/javascripts/bastion/utils/utils.module.js +1 -1
- data/app/views/bastion/layouts/application.html.erb +4 -0
- data/app/views/bastion/layouts/assets.html.erb +5 -5
- data/grunt/karma.js +1 -1
- data/lib/bastion/version.rb +1 -1
- data/test/auth/authorization.service.test.js +4 -0
- data/test/bastion/test-constants.js +2 -2
- data/test/components/bst-bookmark.factory.test.js +1 -1
- data/test/routing.module.test.js +70 -0
- data/test/{bastion → utils}/bastion-resource.factory.test.js +1 -1
- metadata +8 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 934c64b4816522e752daec9c8b7c72ef01d45bd3
|
4
|
+
data.tar.gz: 04aaeabc596dcf24f88a387e93db7f7baf401236
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eff2f889f6f0c1fc3edcbcae5ef61c9742511d5e455eb67cd76c8452f0e36762392ab292d4a1a6cfc58ba3bda1d2bac481f0a514dc6dbd275f965ccb5d48c436
|
7
|
+
data.tar.gz: eddef0aa5ec9034aa877e933b15e44e4faba35dafc2baf2bc1b925e420ad6cfad71d2fc4e52b52ab28974f431d4cd4c4bdd7a60cd4c1f4d68b7fa0277dabdad8
|
@@ -32,4 +32,8 @@ angular.module('Bastion.auth').service('Authorization', ['CurrentUser', 'Permiss
|
|
32
32
|
this.denied = function (permissionName, model) {
|
33
33
|
return !this.permitted(permissionName, model);
|
34
34
|
};
|
35
|
+
|
36
|
+
this.getCurrentUser = function () {
|
37
|
+
return CurrentUser;
|
38
|
+
};
|
35
39
|
}]);
|
@@ -14,7 +14,7 @@
|
|
14
14
|
//= require "angular-rails-templates"
|
15
15
|
|
16
16
|
//= require "bastion/bastion.module"
|
17
|
-
//= require "bastion/
|
17
|
+
//= require "bastion/routing.module.js"
|
18
18
|
|
19
19
|
//= require "bastion/i18n/i18n.module"
|
20
20
|
//= require "bastion/i18n/translate.service.js"
|
@@ -6,20 +6,13 @@
|
|
6
6
|
* Base module that defines the Katello module namespace and includes any thirdparty
|
7
7
|
* modules used by the application.
|
8
8
|
*/
|
9
|
-
angular.module('Bastion', [
|
10
|
-
'ui.router',
|
11
|
-
'ngResource',
|
12
|
-
'Bastion.i18n',
|
13
|
-
'Bastion.components'
|
14
|
-
]);
|
9
|
+
angular.module('Bastion', []);
|
15
10
|
|
16
11
|
/**
|
17
12
|
* @ngdoc config
|
18
13
|
* @name Bastion.config
|
19
14
|
*
|
20
15
|
* @requires $httpProvider
|
21
|
-
* @requires $urlRouterProvider
|
22
|
-
* @requires $locationProvider
|
23
16
|
* @requires $provide
|
24
17
|
* @requires BastionConfig
|
25
18
|
*
|
@@ -28,57 +21,13 @@ angular.module('Bastion', [
|
|
28
21
|
* to every request and adding Xs to translated strings.
|
29
22
|
*/
|
30
23
|
angular.module('Bastion').config(
|
31
|
-
['$httpProvider', '$
|
32
|
-
function ($httpProvider, $
|
33
|
-
var oldBrowserBastionPath = '/bastion#';
|
34
|
-
|
24
|
+
['$httpProvider', '$provide', 'BastionConfig',
|
25
|
+
function ($httpProvider, $provide, BastionConfig) {
|
35
26
|
$httpProvider.defaults.headers.common = {
|
36
27
|
Accept: 'application/json, text/plain, version=2; */*',
|
37
28
|
'X-CSRF-TOKEN': angular.element('meta[name=csrf-token]').attr('content')
|
38
29
|
};
|
39
30
|
|
40
|
-
$urlRouterProvider.rule(function ($injector, $location) {
|
41
|
-
var $sniffer = $injector.get('$sniffer'),
|
42
|
-
$window = $injector.get('$window'),
|
43
|
-
path = $location.path();
|
44
|
-
|
45
|
-
if (!$sniffer.history) {
|
46
|
-
$window.location.href = oldBrowserBastionPath + $location.path();
|
47
|
-
}
|
48
|
-
|
49
|
-
if (/^\/katello($|\/)/.test(path)) {
|
50
|
-
$window.location.href = $location.url();
|
51
|
-
$window.location.reload();
|
52
|
-
}
|
53
|
-
|
54
|
-
// removing trailing slash to prevent endless redirect
|
55
|
-
if (path[path.length - 1] === '/') {
|
56
|
-
return path.slice(0, -1);
|
57
|
-
}
|
58
|
-
});
|
59
|
-
|
60
|
-
$urlRouterProvider.otherwise(function ($injector, $location) {
|
61
|
-
var $window = $injector.get('$window'),
|
62
|
-
$state = $injector.get('$state'),
|
63
|
-
parentState = $location.path().split('/')[1].replace('_', '-'),
|
64
|
-
url = $location.absUrl();
|
65
|
-
|
66
|
-
// ensure we don't double encode +s
|
67
|
-
url = url.replace(/%2B/g, "+");
|
68
|
-
|
69
|
-
// Remove the old browser path if present
|
70
|
-
url = url.replace(oldBrowserBastionPath, '');
|
71
|
-
|
72
|
-
if ($state.get(parentState)) {
|
73
|
-
$window.location.href = '/404';
|
74
|
-
} else {
|
75
|
-
$window.location.href = url;
|
76
|
-
}
|
77
|
-
return $location.path();
|
78
|
-
});
|
79
|
-
|
80
|
-
$locationProvider.html5Mode({enabled: true, requireBase: false});
|
81
|
-
|
82
31
|
$provide.factory('PrefixInterceptor', ['$q', '$templateCache', function ($q, $templateCache) {
|
83
32
|
return {
|
84
33
|
request: function (config) {
|
@@ -3,7 +3,7 @@
|
|
3
3
|
* @name Bastion.components.directive:currentTasks
|
4
4
|
*
|
5
5
|
* @requires $document
|
6
|
-
* @requires
|
6
|
+
* @requires authorizationService
|
7
7
|
* @requires Task
|
8
8
|
*
|
9
9
|
* @description
|
@@ -14,8 +14,8 @@
|
|
14
14
|
<span current-tasks></span>
|
15
15
|
*/
|
16
16
|
angular.module('Bastion.components').directive('currentTasks',
|
17
|
-
['$document', '
|
18
|
-
function ($document,
|
17
|
+
['$document', 'authorizationService', 'Task',
|
18
|
+
function ($document, authorizationService, Task) {
|
19
19
|
|
20
20
|
return {
|
21
21
|
restrict: 'A',
|
@@ -26,7 +26,7 @@ angular.module('Bastion.components').directive('currentTasks',
|
|
26
26
|
// Hide the current tasks list if the user clicks outside of it
|
27
27
|
var currentTasksMenu = angular.element('#currentTasks');
|
28
28
|
$scope.visible = false;
|
29
|
-
$scope.currentUser =
|
29
|
+
$scope.currentUser = authorizationService.getCurrentUser();
|
30
30
|
$scope.count = 0;
|
31
31
|
|
32
32
|
$scope.toggleVisibility = function () {
|
@@ -48,7 +48,8 @@ angular.module('Bastion.components').directive('currentTasks',
|
|
48
48
|
});
|
49
49
|
}],
|
50
50
|
link: function (scope) {
|
51
|
-
|
51
|
+
var searchParams = {'active_only': true, 'type': 'user', 'user_id': authorizationService.getCurrentUser().id};
|
52
|
+
Task.registerSearch(searchParams, scope.updateTasks);
|
52
53
|
}
|
53
54
|
};
|
54
55
|
}]);
|
@@ -0,0 +1,81 @@
|
|
1
|
+
angular.module('Bastion.routing', ['ui.router']);
|
2
|
+
|
3
|
+
(function () {
|
4
|
+
'use strict';
|
5
|
+
|
6
|
+
/**
|
7
|
+
* @ngdoc config
|
8
|
+
* @name Bastion.routing.config
|
9
|
+
*
|
10
|
+
* @requires $urlRouterProvider
|
11
|
+
* @requires $locationProvider
|
12
|
+
*
|
13
|
+
* @description
|
14
|
+
* Routing configuration for Bastion.
|
15
|
+
*/
|
16
|
+
function bastionRouting($urlRouterProvider, $locationProvider) {
|
17
|
+
var oldBrowserBastionPath = '/bastion#', getRootPath;
|
18
|
+
|
19
|
+
getRootPath = function (path) {
|
20
|
+
var rootPath = null;
|
21
|
+
|
22
|
+
if (path && angular.isString(path)) {
|
23
|
+
rootPath = path.replace('_', '-').split('/')[1];
|
24
|
+
}
|
25
|
+
return rootPath;
|
26
|
+
};
|
27
|
+
|
28
|
+
$urlRouterProvider.rule(function ($injector, $location) {
|
29
|
+
var $sniffer = $injector.get('$sniffer'),
|
30
|
+
$window = $injector.get('$window'),
|
31
|
+
path = $location.path();
|
32
|
+
|
33
|
+
if (!$sniffer.history) {
|
34
|
+
$window.location.href = oldBrowserBastionPath + $location.path();
|
35
|
+
}
|
36
|
+
|
37
|
+
// removing trailing slash to prevent endless redirect
|
38
|
+
if (path[path.length - 1] === '/') {
|
39
|
+
return path.slice(0, -1);
|
40
|
+
}
|
41
|
+
});
|
42
|
+
|
43
|
+
$urlRouterProvider.otherwise(function ($injector, $location) {
|
44
|
+
var $window = $injector.get('$window'),
|
45
|
+
$state = $injector.get('$state'),
|
46
|
+
rootPath = getRootPath($location.path()),
|
47
|
+
url = $location.absUrl(),
|
48
|
+
foundParentState;
|
49
|
+
|
50
|
+
// ensure we don't double encode +s
|
51
|
+
url = url.replace(/%2B/g, "+");
|
52
|
+
|
53
|
+
// Remove the old browser path if present
|
54
|
+
url = url.replace(oldBrowserBastionPath, '');
|
55
|
+
|
56
|
+
if (rootPath) {
|
57
|
+
foundParentState = _.find($state.get(), function (state) {
|
58
|
+
var found = false;
|
59
|
+
if (state.url) {
|
60
|
+
found = getRootPath(state.url) === rootPath;
|
61
|
+
}
|
62
|
+
|
63
|
+
return found;
|
64
|
+
});
|
65
|
+
}
|
66
|
+
|
67
|
+
if (foundParentState) {
|
68
|
+
$window.location.href = '/404';
|
69
|
+
} else {
|
70
|
+
$window.location.href = url;
|
71
|
+
}
|
72
|
+
return $location.path();
|
73
|
+
});
|
74
|
+
|
75
|
+
$locationProvider.html5Mode(true);
|
76
|
+
|
77
|
+
}
|
78
|
+
|
79
|
+
angular.module('Bastion.routing').config(bastionRouting);
|
80
|
+
bastionRouting.$inject = ['$urlRouterProvider', '$locationProvider'];
|
81
|
+
})();
|
@@ -1,18 +1,17 @@
|
|
1
1
|
/**
|
2
2
|
* @ngdoc factory
|
3
|
-
* @name Bastion.factory:BastionResource
|
3
|
+
* @name Bastion.utils.factory:BastionResource
|
4
4
|
*
|
5
|
-
* @requires
|
5
|
+
* @requires $resource
|
6
6
|
*
|
7
7
|
* @description
|
8
8
|
* Base module that defines the Katello module namespace and includes any thirdparty
|
9
9
|
* modules used by the application.
|
10
10
|
*/
|
11
|
-
angular.module('Bastion').factory('BastionResource', ['$resource', function ($resource) {
|
11
|
+
angular.module('Bastion.utils').factory('BastionResource', ['$resource', function ($resource) {
|
12
12
|
|
13
13
|
return function (url, paramDefaults, actions) {
|
14
14
|
var defaultActions;
|
15
|
-
|
16
15
|
defaultActions = {
|
17
16
|
queryPaged: {method: 'GET', isArray: false},
|
18
17
|
queryUnpaged: {method: 'GET', isArray: false, params: {'full_result': true}}
|
@@ -16,13 +16,13 @@
|
|
16
16
|
angular.module('Bastion.features').value('FeatureSettings', angular.fromJson(<%= SETTINGS[:features].nil? ? {} : SETTINGS[:features].to_json.html_safe %>));
|
17
17
|
angular.module('Bastion').value('currentLocale', '<%= I18n.locale %>');
|
18
18
|
angular.module('Bastion').value('CurrentOrganization', "<%= Organization.current.id if Organization.current %>");
|
19
|
-
angular.module('Bastion').value('Permissions', angular.fromJson('<%= User.current.cached_roles.collect { |role| role.permissions }.flatten.to_json.html_safe %>'));
|
20
|
-
angular.module('Bastion').value('CurrentUser', {
|
21
|
-
id: <%= User.current.id %>,
|
22
|
-
admin: <%= User.current.admin || User.current.usergroups.any? { |group| group.admin } %>
|
23
|
-
});
|
24
19
|
angular.module('Bastion').value('markActiveMenu', mark_active_menu);
|
25
20
|
angular.module('Bastion').constant('BastionConfig', angular.fromJson('<%= Bastion.config.to_json.html_safe %>'));
|
21
|
+
angular.module('Bastion.auth').value('CurrentUser', {
|
22
|
+
id: <%= User.current.id %>,
|
23
|
+
admin: <%= User.current.admin || User.current.usergroups.any? { |group| group.admin } %>
|
24
|
+
});
|
25
|
+
angular.module('Bastion.auth').value('Permissions', angular.fromJson('<%= User.current.cached_roles.collect { |role| role.permissions }.flatten.to_json.html_safe %>'));
|
26
26
|
</script>
|
27
27
|
<% Bastion.plugins.each do |name, plugin| %>
|
28
28
|
<%= javascript_include_tag(plugin[:javascript]) %>
|
data/grunt/karma.js
CHANGED
@@ -33,7 +33,7 @@ module.exports = {
|
|
33
33
|
|
34
34
|
basePath + 'app/assets/javascripts/bastion/bastion-bootstrap.js',
|
35
35
|
basePath + 'app/assets/javascripts/bastion/bastion.module.js',
|
36
|
-
basePath + 'app/assets/javascripts/bastion/
|
36
|
+
basePath + 'app/assets/javascripts/bastion/routing.module.js',
|
37
37
|
basePath + 'app/assets/javascripts/bastion/i18n/i18n.module.js',
|
38
38
|
basePath + 'app/assets/javascripts/bastion/i18n/*.js',
|
39
39
|
basePath + 'app/assets/javascripts/bastion/auth/auth.module.js',
|
data/lib/bastion/version.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
angular.module('Bastion').value('currentLocale', 'Here');
|
2
2
|
angular.module('Bastion').value('CurrentOrganization', "ACME");
|
3
|
-
angular.module('Bastion').value('CurrentUser', {id: "User"});
|
4
|
-
angular.module('Bastion').value('Permissions', []);
|
5
3
|
angular.module('Bastion').value('Authorization', {});
|
6
4
|
angular.module('Bastion').value('markActiveMenu', function () {});
|
7
5
|
angular.module('Bastion').constant('BastionConfig', {
|
8
6
|
consumerCertRPM: "consumer_cert_rpm",
|
9
7
|
markTranslated: false
|
10
8
|
});
|
9
|
+
angular.module('Bastion.auth').value('CurrentUser', {id: "User"});
|
10
|
+
angular.module('Bastion.auth').value('Permissions', []);
|
11
11
|
|
12
12
|
angular.module('templates', []);
|
13
13
|
|
@@ -0,0 +1,70 @@
|
|
1
|
+
describe('config: Bastion.routing', function () {
|
2
|
+
var $rootScope, $location, $sniffer, $window, $state;
|
3
|
+
|
4
|
+
function goTo(url) {
|
5
|
+
$location.url(url);
|
6
|
+
$rootScope.$digest();
|
7
|
+
}
|
8
|
+
|
9
|
+
beforeEach(module('Bastion.routing'));
|
10
|
+
|
11
|
+
beforeEach(module(function ($provide) {
|
12
|
+
$sniffer = {
|
13
|
+
history: true
|
14
|
+
};
|
15
|
+
|
16
|
+
$window = {
|
17
|
+
location: {
|
18
|
+
href: '',
|
19
|
+
reload: function () {}
|
20
|
+
}
|
21
|
+
};
|
22
|
+
|
23
|
+
$provide.value('$sniffer', $sniffer);
|
24
|
+
$provide.value('$window', $window);
|
25
|
+
}));
|
26
|
+
|
27
|
+
beforeEach(inject(function (_$rootScope_, _$state_, _$location_) {
|
28
|
+
$rootScope = _$rootScope_;
|
29
|
+
$state = _$state_;
|
30
|
+
$location = _$location_;
|
31
|
+
}));
|
32
|
+
|
33
|
+
describe("provides a rule that", function () {
|
34
|
+
it("removes any trailing slashes from the url", function () {
|
35
|
+
goTo('/state///');
|
36
|
+
expect($window.location.href).toBe('http://server/state');
|
37
|
+
});
|
38
|
+
});
|
39
|
+
|
40
|
+
describe("provides an otherwise method that", function () {
|
41
|
+
it('replaces encoded + characters with their decoded counterpart', function () {
|
42
|
+
goTo('/some-state%2B%2B');
|
43
|
+
expect($window.location.href).toBe('http://server/some-state++');
|
44
|
+
});
|
45
|
+
|
46
|
+
it('removes the old browser compatibility path', function () {
|
47
|
+
spyOn($location, 'absUrl').and.returnValue('http://server/bastion#/some-state');
|
48
|
+
goTo('/some-state');
|
49
|
+
expect($window.location.href).toBe('http://server/some-state');
|
50
|
+
});
|
51
|
+
|
52
|
+
describe("handles undefined states by", function () {
|
53
|
+
beforeEach(function () {
|
54
|
+
|
55
|
+
});
|
56
|
+
|
57
|
+
it("redirecting to a 404 page if the parent state is found", function () {
|
58
|
+
spyOn($state, 'get').and.returnValue([{url: '/found-state'}]);
|
59
|
+
goTo('/found_state/does_not_exist');
|
60
|
+
expect($window.location.href).toBe('/404');
|
61
|
+
});
|
62
|
+
|
63
|
+
it("redirecting to the url if no parent state is found", function () {
|
64
|
+
goTo('/non-parent');
|
65
|
+
expect($window.location.href).toBe('http://server/non-parent');
|
66
|
+
});
|
67
|
+
|
68
|
+
});
|
69
|
+
});
|
70
|
+
});
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bastion
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.3.
|
4
|
+
version: 3.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eric D Helms
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-08-
|
12
|
+
date: 2016-08-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: angular-rails-templates
|
@@ -57,7 +57,6 @@ files:
|
|
57
57
|
- app/assets/javascripts/bastion/auth/auth.module.js
|
58
58
|
- app/assets/javascripts/bastion/auth/authorization.service.js
|
59
59
|
- app/assets/javascripts/bastion/bastion-bootstrap.js
|
60
|
-
- app/assets/javascripts/bastion/bastion-resource.factory.js
|
61
60
|
- app/assets/javascripts/bastion/bastion.js
|
62
61
|
- app/assets/javascripts/bastion/bastion.module.js
|
63
62
|
- app/assets/javascripts/bastion/components/bst-alert.directive.js
|
@@ -144,6 +143,8 @@ files:
|
|
144
143
|
- app/assets/javascripts/bastion/layouts/select-all-results.html
|
145
144
|
- app/assets/javascripts/bastion/menu/menu-expander.service.js
|
146
145
|
- app/assets/javascripts/bastion/menu/menu.module.js
|
146
|
+
- app/assets/javascripts/bastion/routing.module.js
|
147
|
+
- app/assets/javascripts/bastion/utils/bastion-resource.factory.js
|
147
148
|
- app/assets/javascripts/bastion/utils/form-utils.service.js
|
148
149
|
- app/assets/javascripts/bastion/utils/urlencode.filter.js
|
149
150
|
- app/assets/javascripts/bastion/utils/utils.module.js
|
@@ -178,7 +179,6 @@ files:
|
|
178
179
|
- lib/bastion/version.rb
|
179
180
|
- package.json
|
180
181
|
- test/auth/authorization.service.test.js
|
181
|
-
- test/bastion/bastion-resource.factory.test.js
|
182
182
|
- test/bastion/test-constants.js
|
183
183
|
- test/components/bst-alert.directive.test.js
|
184
184
|
- test/components/bst-alerts.directive.test.js
|
@@ -210,7 +210,9 @@ files:
|
|
210
210
|
- test/features/feature-flag.service.test.js
|
211
211
|
- test/i18n/translate.service.test.js
|
212
212
|
- test/menu/menu-expander.service.test.js
|
213
|
+
- test/routing.module.test.js
|
213
214
|
- test/test-mocks.module.js
|
215
|
+
- test/utils/bastion-resource.factory.test.js
|
214
216
|
- test/utils/form-utils.service.test.js
|
215
217
|
- test/utils/urlencode.filter.test.js
|
216
218
|
- vendor/assets/javascripts/bastion/angular-animate/angular-animate.js
|
@@ -1031,11 +1033,12 @@ test_files:
|
|
1031
1033
|
- test/components/global-notification.service.test.js
|
1032
1034
|
- test/components/bst-edit.directive.test.js
|
1033
1035
|
- test/components/bst-modal.directive.test.js
|
1036
|
+
- test/routing.module.test.js
|
1034
1037
|
- test/test-mocks.module.js
|
1035
1038
|
- test/menu/menu-expander.service.test.js
|
1036
1039
|
- test/i18n/translate.service.test.js
|
1037
1040
|
- test/bastion/test-constants.js
|
1038
|
-
- test/bastion/bastion-resource.factory.test.js
|
1039
1041
|
- test/utils/form-utils.service.test.js
|
1042
|
+
- test/utils/bastion-resource.factory.test.js
|
1040
1043
|
- test/utils/urlencode.filter.test.js
|
1041
1044
|
has_rdoc:
|