insights-api-common 3.4.2 → 3.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ad258a742daa759f81a9742e6a291ffdf8bca15172e8a763cb52948bf7253faf
4
- data.tar.gz: f755ea957e54bdad59182ea343718f499e7e277bf478286ffcf6658cb59ec0d2
3
+ metadata.gz: f7c6702af3cef107f81d349b3995a33cb1fb29b1384bfa9c76ea18e997e9c418
4
+ data.tar.gz: 42a9b71481b07c97bbb8d327c98b21d9008786e5ebd8886cfc88dc498ec34f98
5
5
  SHA512:
6
- metadata.gz: 9d9a280507a0298454ccbac04c07b19c4134cd6c5715196f5d6827ebeecdc7a09fe2bc02306615b3f4ad8fba2752c81eeb51c9cbba962d637d13842c66665656
7
- data.tar.gz: ca2748daae7519f0e6b8d7ee82f215b4c3acbeda3c2727d30a85cef72c1d2fbe990e251e80db635200e1d40596cbed8d066fbd9c8d3e873f9416494e16973ef1
6
+ metadata.gz: 327d4de25378b3fc553af5989d8e922f07a8085dc9f0f73793154648bd93312144f10ccbe7c0b3ed9544febc14d3643c9e2dbd0a873abf085576299c71af7138
7
+ data.tar.gz: 3b79d627f4848aa40010e341fd77c3a828b2ca0d23c624f31a01fe6359cbdf6b46b0a1b96600da80df07a6518862102437e84fa1bde389b17ecb0525f2f933e5
@@ -0,0 +1,66 @@
1
+ module Insights
2
+ module API
3
+ module Common
4
+ module ActAsTaggableOn
5
+ def acts_as_taggable_on
6
+ class_eval do
7
+ def self.tagging_relation_name
8
+ "#{name.underscore}_tags".to_sym
9
+ end
10
+
11
+ has_many tagging_relation_name
12
+ has_many :tags, :through => tagging_relation_name
13
+
14
+ def self.taggable?
15
+ true
16
+ end
17
+
18
+ def tag_list
19
+ tags.pluck(:name)
20
+ end
21
+
22
+ def tag_add(tag_list, options = {})
23
+ Tag.transaction do
24
+ model_tag_class.transaction do
25
+ Array(tag_list).each do |tag_name|
26
+ next if tagged_with?(tag_name, options)
27
+ tag_params = {:name => tag_name, :tenant_id => tenant.id}
28
+ tag_params.merge!(options)
29
+ tag = Tag.find_or_create_by(tag_params)
30
+ tagging_params = {self.class.name.underscore.to_sym => self, :tag_id => tag.id}
31
+ public_send(self.class.tagging_relation_name).create(tagging_params)
32
+ end
33
+ end
34
+ end
35
+ end
36
+
37
+ def tagged_with?(tag_name, options = {})
38
+ options[:value] ||= ""
39
+ options[:namespace] ||= ""
40
+ model_tag_class.joins(:tag)
41
+ .exists?(:tags => {:name => tag_name, :namespace => options[:namespace], :value => options[:value]}, self.class.name.underscore.to_sym => self)
42
+ end
43
+
44
+ def tag_remove(tag_list, options = {})
45
+ options[:value] ||= ""
46
+ options[:namespace] ||= ""
47
+ Tag.joins(self.class.tagging_relation_name)
48
+ .where(:name => Array(tag_list), :namespace => options[:namespace], :value => options[:value], self.class.tagging_relation_name => {self.class.name.underscore.to_sym => self})
49
+ .destroy_all
50
+ end
51
+
52
+ def model_tag_class
53
+ self.class.tagging_relation_name.to_s.classify.constantize
54
+ end
55
+ end
56
+ end
57
+
58
+ def tagged_with(tag_name, options = {})
59
+ options[:value] ||= ""
60
+ options[:namespace] ||= ""
61
+ joins(tagging_relation_name => :tag).where(:tags => {:name => tag_name, :namespace => options[:namespace], :value => options[:value]})
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -5,6 +5,7 @@ module Insights
5
5
  isolate_namespace Insights::API::Common
6
6
 
7
7
  config.autoload_paths << root.join("lib").to_s
8
+ config.autoload_paths << root.join("app/models/concerns").to_s
8
9
 
9
10
  initializer :load_inflections do
10
11
  Insights::API::Common::Inflections.load_inflections
@@ -66,8 +66,8 @@ module Insights
66
66
  end
67
67
  end
68
68
 
69
- def base_path
70
- @base_path ||= @content.fetch_path("servers", 0, "variables", "basePath", "default")
69
+ def server_base_path
70
+ @server_base_path ||= @content.fetch_path("servers", 0, "variables", "basePath", "default")
71
71
  end
72
72
 
73
73
  def paths
@@ -82,7 +82,7 @@ module Insights
82
82
  @routes ||= begin
83
83
  paths.flat_map do |path, hash|
84
84
  hash.collect do |verb, _details|
85
- p = File.join(base_path, path).gsub(/{\w*}/, ":id")
85
+ p = File.join(server_base_path, path).gsub(/{\w*}/, ":id")
86
86
  {:path => p, :verb => verb.upcase}
87
87
  end
88
88
  end
@@ -44,18 +44,18 @@ module Insights
44
44
  end
45
45
 
46
46
  def initialize
47
- app_prefix, app_name = base_path.match(/\A(.*)\/(.*)\/v\d+.\d+\z/).captures
47
+ app_prefix, app_name = server_base_path.match(/\A(.*)\/(.*)\/v\d+.\d+\z/).captures
48
48
  ENV['APP_NAME'] = app_name
49
49
  ENV['PATH_PREFIX'] = app_prefix
50
50
  Rails.application.reload_routes!
51
51
  end
52
52
 
53
- def base_path
53
+ def server_base_path
54
54
  openapi_contents["servers"].first["variables"]["basePath"]["default"]
55
55
  end
56
56
 
57
57
  def applicable_rails_routes
58
- rails_routes.select { |i| i.path.start_with?(base_path) }
58
+ rails_routes.select { |i| i.path.start_with?(server_base_path) }
59
59
  end
60
60
 
61
61
  def schemas
@@ -520,7 +520,7 @@ module Insights
520
520
  def build_paths
521
521
  applicable_rails_routes.each_with_object({}) do |route, expected_paths|
522
522
  without_format = route.path.split("(.:format)").first
523
- sub_path = without_format.split(base_path).last.sub(/:[_a-z]*id/, "{id}")
523
+ sub_path = without_format.split(server_base_path).last.sub(/:[_a-z]*id/, "{id}")
524
524
  route_destination = route.controller.split("/").last.camelize
525
525
  controller = "Api::V#{api_version.sub(".", "x")}::#{route_destination}Controller".safe_constantize
526
526
  klass_name = controller.try(:presentation_name) || route_destination.singularize
@@ -72,10 +72,22 @@ module Insights
72
72
  raise IdentityError, "x-rh-identity not found"
73
73
  end
74
74
 
75
+ def tenant
76
+ @tenant ||= Insights::API::Common::Tenant.new(identity).tenant
77
+ end
78
+
75
79
  def user
76
80
  @user ||= User.new(identity)
77
81
  end
78
82
 
83
+ def system
84
+ @system ||= System.new(identity) if identity.dig("identity", "system").present?
85
+ end
86
+
87
+ def auth_type
88
+ identity.dig("identity", "auth_type")
89
+ end
90
+
79
91
  def entitlement
80
92
  @entitlement ||= Entitlement.new(identity)
81
93
  end
@@ -0,0 +1,19 @@
1
+ module Insights
2
+ module API
3
+ module Common
4
+ class System
5
+ def initialize(identity)
6
+ @system = identity.dig("identity", "system")
7
+ end
8
+
9
+ def cn
10
+ system["cn"]
11
+ end
12
+
13
+ private
14
+
15
+ attr_reader :system
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,21 @@
1
+ module Insights
2
+ module API
3
+ module Common
4
+ class Tenant
5
+ def initialize(identity)
6
+ @identity = identity["identity"]
7
+ end
8
+
9
+ def tenant
10
+ result = identity&.dig("account_number")
11
+ raise IdentityError, "Tenant key doesn't exist" if result.nil?
12
+ result
13
+ end
14
+
15
+ private
16
+
17
+ attr_reader :identity
18
+ end
19
+ end
20
+ end
21
+ end
@@ -24,6 +24,7 @@ module Insights
24
24
  end
25
25
 
26
26
  def tenant
27
+ ActiveSupport::Deprecation.warn("Please switch to request.tenant, request.user.tenant will be removed in a future release.")
27
28
  find_tenant_key
28
29
  end
29
30
 
@@ -1,7 +1,7 @@
1
1
  module Insights
2
2
  module API
3
3
  module Common
4
- VERSION = "3.4.2".freeze
4
+ VERSION = "3.5.0".freeze
5
5
  end
6
6
  end
7
7
  end
@@ -23,7 +23,8 @@ module UserHeaderSpecHelper
23
23
  "identity" => {
24
24
  "account_number" => "0369233",
25
25
  "type" => "User",
26
- "user" => {
26
+ "auth_type" => "basic-auth",
27
+ "user" => {
27
28
  "username" => "jdoe",
28
29
  "email" => "jdoe@acme.com",
29
30
  "first_name" => "John",
@@ -33,9 +34,43 @@ module UserHeaderSpecHelper
33
34
  "is_internal" => false,
34
35
  "locale" => "en_US"
35
36
  },
36
- "internal" => {
37
+ "internal" => {
38
+ "org_id" => "3340851",
39
+ "auth_time" => 6300
40
+ }
41
+ }
42
+ }.freeze
43
+
44
+ DEFAULT_SYSTEM = {
45
+ "entitlements" => {
46
+ "ansible" => {
47
+ "is_entitled" => true
48
+ },
49
+ "hybrid_cloud" => {
50
+ "is_entitled" => true
51
+ },
52
+ "insights" => {
53
+ "is_entitled" => true
54
+ },
55
+ "migrations" => {
56
+ "is_entitled" => true
57
+ },
58
+ "openshift" => {
59
+ "is_entitled" => true
60
+ },
61
+ "smart_management" => {
62
+ "is_entitled" => true
63
+ }
64
+ },
65
+ "identity" => {
66
+ "account_number" => "0369233",
67
+ "type" => "System",
68
+ "auth_type" => "cert-auth",
69
+ "system" => {
70
+ "cn" => "certificate"
71
+ },
72
+ "internal" => {
37
73
  "org_id" => "3340851",
38
- "auth_type" => "basic-auth",
39
74
  "auth_time" => 6300
40
75
  }
41
76
  }
@@ -49,6 +84,14 @@ module UserHeaderSpecHelper
49
84
  default_user_hash["identity"]["user"]["username"]
50
85
  end
51
86
 
87
+ def default_auth_type
88
+ default_user_hash["identity"]["auth_type"]
89
+ end
90
+
91
+ def default_system_cn
92
+ default_system_hash["identity"]["system"]["cn"]
93
+ end
94
+
52
95
  def encode(val)
53
96
  if val.kind_of?(Hash)
54
97
  hashed = val.stringify_keys
@@ -62,7 +105,15 @@ module UserHeaderSpecHelper
62
105
  encode(hash || DEFAULT_USER)
63
106
  end
64
107
 
108
+ def encoded_system_hash(hash = nil)
109
+ encode(hash || DEFAULT_SYSTEM)
110
+ end
111
+
65
112
  def default_user_hash
66
113
  Marshal.load(Marshal.dump(DEFAULT_USER))
67
114
  end
115
+
116
+ def default_system_hash
117
+ Marshal.load(Marshal.dump(DEFAULT_SYSTEM))
118
+ end
68
119
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: insights-api-common
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.4.2
4
+ version: 3.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Insights Authors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-02-13 00:00:00.000000000 Z
11
+ date: 2020-02-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: acts_as_tenant
@@ -315,6 +315,7 @@ files:
315
315
  - app/controllers/concerns/insights/api/common/tagging_methods.rb
316
316
  - app/models/authentication.rb
317
317
  - app/models/concerns/encryption_concern.rb
318
+ - app/models/concerns/insights/api/common/act_as_taggable_on.rb
318
319
  - app/models/encryption.rb
319
320
  - lib/generators/shared_utilities/migration_generator.rb
320
321
  - lib/generators/shared_utilities/orm_helper.rb
@@ -367,6 +368,8 @@ files:
367
368
  - lib/insights/api/common/request.rb
368
369
  - lib/insights/api/common/routing.rb
369
370
  - lib/insights/api/common/status.rb
371
+ - lib/insights/api/common/system.rb
372
+ - lib/insights/api/common/tenant.rb
370
373
  - lib/insights/api/common/user.rb
371
374
  - lib/insights/api/common/version.rb
372
375
  - lib/tasks/insights/api/common_tasks.rake