bastion 3.3.1 → 3.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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:
|