redhat_access 2.0.0

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.
Files changed (218) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +24 -0
  3. data/LICENSE.txt +620 -0
  4. data/README.rdoc +7 -0
  5. data/Rakefile +131 -0
  6. data/app/assets/javascripts/insights/app.module.js +64 -0
  7. data/app/assets/javascripts/insights/application.js +18 -0
  8. data/app/assets/javascripts/insights/configuration.controller.js +66 -0
  9. data/app/assets/javascripts/insights/configuration.service.js +28 -0
  10. data/app/assets/javascripts/insights/views/configuration.html +85 -0
  11. data/app/assets/javascripts/insights/views/error.html +13 -0
  12. data/app/assets/javascripts/insights/views/help.html +16 -0
  13. data/app/assets/javascripts/redhat_access/analytics_dashboard.js +2 -0
  14. data/app/assets/javascripts/redhat_access/application.js +15 -0
  15. data/app/assets/javascripts/redhat_access/redhat_access.module.js +126 -0
  16. data/app/assets/stylesheets/insights/application.css +14 -0
  17. data/app/assets/stylesheets/insights/insights.css +21 -0
  18. data/app/assets/stylesheets/redhat_access/application.css +14 -0
  19. data/app/assets/stylesheets/redhat_access/telemetry_configuration.css +4 -0
  20. data/app/controllers/redhat_access/analytics_dashboard_controller.rb +12 -0
  21. data/app/controllers/redhat_access/api/api_controller.rb +24 -0
  22. data/app/controllers/redhat_access/api/attachments_controller.rb +40 -0
  23. data/app/controllers/redhat_access/api/logs_controller.rb +49 -0
  24. data/app/controllers/redhat_access/api/machine_telemetry_api_controller.rb +112 -0
  25. data/app/controllers/redhat_access/api/strata_proxy_controller.rb +81 -0
  26. data/app/controllers/redhat_access/api/telemetry_api_controller.rb +179 -0
  27. data/app/controllers/redhat_access/application_controller.rb +2 -0
  28. data/app/controllers/redhat_access/cases_controller.rb +14 -0
  29. data/app/controllers/redhat_access/configuration_controller.rb +21 -0
  30. data/app/controllers/redhat_access/log_viewer_controller.rb +9 -0
  31. data/app/controllers/redhat_access/redhat_access_controller.rb +8 -0
  32. data/app/controllers/redhat_access/search_controller.rb +9 -0
  33. data/app/controllers/redhat_access/strata_credentials_controller.rb +48 -0
  34. data/app/controllers/redhat_access/telemetry_configurations_controller.rb +38 -0
  35. data/app/controllers/redhat_access/telemetry_controller.rb +6 -0
  36. data/app/helpers/redhat_access/analytics_dashboard_helper.rb +13 -0
  37. data/app/helpers/redhat_access/application_helper.rb +4 -0
  38. data/app/helpers/redhat_access/attachments_helper.rb +4 -0
  39. data/app/helpers/redhat_access/cases_helper.rb +4 -0
  40. data/app/helpers/redhat_access/log_viewer_helper.rb +4 -0
  41. data/app/helpers/redhat_access/logs_helper.rb +4 -0
  42. data/app/helpers/redhat_access/redhat_access_helper.rb +4 -0
  43. data/app/helpers/redhat_access/search_helper.rb +4 -0
  44. data/app/helpers/redhat_access/telemetry_configuration_helper.rb +4 -0
  45. data/app/models/redhat_access/concerns/organization_extensions.rb +10 -0
  46. data/app/models/redhat_access/telemetry_configuration.rb +11 -0
  47. data/app/models/redhat_access/telemetry_proxy_credentials.rb +10 -0
  48. data/app/services/redhat_access/authentication/client_authentication.rb +80 -0
  49. data/app/services/redhat_access/telemetry/look_ups.rb +233 -0
  50. data/app/services/redhat_access/telemetry/portal_client.rb +39 -0
  51. data/app/views/redhat_access/analytics_dashboard/configuration.html.erb +85 -0
  52. data/app/views/redhat_access/analytics_dashboard/error.html.erb +13 -0
  53. data/app/views/redhat_access/analytics_dashboard/help.html.erb +16 -0
  54. data/app/views/redhat_access/analytics_dashboard/index.html.erb +69 -0
  55. data/app/views/redhat_access/analytics_dashboard/welcome.html.erb +8 -0
  56. data/app/views/redhat_access/redhat_access/index.html.erb +34 -0
  57. data/ca/rh_cert-api_chain.pem +74 -0
  58. data/config/config.yml.example +15 -0
  59. data/config/environments/development.rb +5 -0
  60. data/config/initializers/load_config.rb +5 -0
  61. data/config/mount_engine.rb +3 -0
  62. data/config/routes.rb +36 -0
  63. data/db/migrate/20141204161152_create_redhat_access_telemetry_proxy_credentials.rb +11 -0
  64. data/db/migrate/20150319153744_create_redhat_access_telemetry_configurations.rb +13 -0
  65. data/db/migrate/20160425175501_add_email_to_telemetry_configurations.rb +5 -0
  66. data/db/seeds.d/200-update-insights-roles.rb +11 -0
  67. data/lib/redhat_access/configuration.rb +8 -0
  68. data/lib/redhat_access/engine.rb +225 -0
  69. data/lib/redhat_access/sos_reports/generator.rb +58 -0
  70. data/lib/redhat_access/strata/client.rb +39 -0
  71. data/lib/redhat_access/version.rb +3 -0
  72. data/lib/redhat_access.rb +5 -0
  73. data/lib/tasks/redhat_access_tasks.rake +41 -0
  74. data/locale/Makefile +62 -0
  75. data/locale/de/LC_MESSAGES/redhat_access.mo +0 -0
  76. data/locale/de/redhat_access.po +589 -0
  77. data/locale/es/LC_MESSAGES/redhat_access.mo +0 -0
  78. data/locale/es/redhat_access.po +589 -0
  79. data/locale/fr/LC_MESSAGES/redhat_access.mo +0 -0
  80. data/locale/fr/redhat_access.po +593 -0
  81. data/locale/gemspec.rb +2 -0
  82. data/locale/it/LC_MESSAGES/redhat_access.mo +0 -0
  83. data/locale/it/redhat_access.po +589 -0
  84. data/locale/ja/LC_MESSAGES/redhat_access.mo +0 -0
  85. data/locale/ja/redhat_access.po +569 -0
  86. data/locale/ko/LC_MESSAGES/redhat_access.mo +0 -0
  87. data/locale/ko/redhat_access.po +570 -0
  88. data/locale/pt/LC_MESSAGES/redhat_access.mo +0 -0
  89. data/locale/pt/redhat_access.po +588 -0
  90. data/locale/redhat_access.pot +34 -0
  91. data/locale/ru/LC_MESSAGES/redhat_access.mo +0 -0
  92. data/locale/ru/redhat_access.po +580 -0
  93. data/locale/zh/LC_MESSAGES/redhat_access.mo +0 -0
  94. data/locale/zh/redhat_access.po +561 -0
  95. data/redhat_access.gemspec +30 -0
  96. data/script/rails +8 -0
  97. data/script/sos_reports/foreman_sosreport.pam +9 -0
  98. data/script/sos_reports/foreman_sosreport_console.apps +3 -0
  99. data/script/sos_reports/foreman_sosreport_wrapper.py +65 -0
  100. data/test/dummy/README.rdoc +261 -0
  101. data/test/dummy/Rakefile +7 -0
  102. data/test/dummy/app/assets/javascripts/application.js +15 -0
  103. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  104. data/test/dummy/app/controllers/application_controller.rb +3 -0
  105. data/test/dummy/app/helpers/application_helper.rb +2 -0
  106. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  107. data/test/dummy/config/application.rb +59 -0
  108. data/test/dummy/config/boot.rb +10 -0
  109. data/test/dummy/config/database.yml +25 -0
  110. data/test/dummy/config/environment.rb +5 -0
  111. data/test/dummy/config/environments/development.rb +37 -0
  112. data/test/dummy/config/environments/production.rb +67 -0
  113. data/test/dummy/config/environments/test.rb +37 -0
  114. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  115. data/test/dummy/config/initializers/inflections.rb +15 -0
  116. data/test/dummy/config/initializers/mime_types.rb +5 -0
  117. data/test/dummy/config/initializers/secret_token.rb +7 -0
  118. data/test/dummy/config/initializers/session_store.rb +8 -0
  119. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  120. data/test/dummy/config/locales/en.yml +5 -0
  121. data/test/dummy/config/routes.rb +4 -0
  122. data/test/dummy/config.ru +4 -0
  123. data/test/dummy/public/404.html +26 -0
  124. data/test/dummy/public/422.html +26 -0
  125. data/test/dummy/public/500.html +25 -0
  126. data/test/dummy/public/favicon.ico +0 -0
  127. data/test/dummy/script/rails +6 -0
  128. data/test/fixtures/redhat_access/telemetry_configurations.yml +11 -0
  129. data/test/fixtures/redhat_access/telemetry_proxy_credentials.yml +11 -0
  130. data/test/functional/redhat_access/analytics_dashboard_controller_test.rb +11 -0
  131. data/test/functional/redhat_access/attachments_controller_test.rb +11 -0
  132. data/test/functional/redhat_access/cases_controller_test.rb +16 -0
  133. data/test/functional/redhat_access/configuration_controller_test.rb +11 -0
  134. data/test/functional/redhat_access/log_viewer_controller_test.rb +11 -0
  135. data/test/functional/redhat_access/logs_controller_test.rb +9 -0
  136. data/test/functional/redhat_access/redhat_access_controller_test.rb +11 -0
  137. data/test/functional/redhat_access/search_controller_test.rb +11 -0
  138. data/test/functional/redhat_access/telemetry_configuration_controller_test.rb +26 -0
  139. data/test/integration/navigation_test.rb +10 -0
  140. data/test/models/redhat_access/telemetry_proxy_credentials_test.rb +9 -0
  141. data/test/redhat_access_test.rb +7 -0
  142. data/test/sos-report-test.rb +32 -0
  143. data/test/test_helper.rb +15 -0
  144. data/test/unit/helpers/redhat_access/analytics_dashboard_helper_test.rb +6 -0
  145. data/test/unit/helpers/redhat_access/attachments_helper_test.rb +6 -0
  146. data/test/unit/helpers/redhat_access/cases_helper_test.rb +6 -0
  147. data/test/unit/helpers/redhat_access/log_viewer_helper_test.rb +6 -0
  148. data/test/unit/helpers/redhat_access/logs_helper_test.rb +6 -0
  149. data/test/unit/helpers/redhat_access/redhat_access_helper_test.rb +6 -0
  150. data/test/unit/helpers/redhat_access/search_helper_test.rb +6 -0
  151. data/test/unit/helpers/redhat_access/telemetry_configuration_helper_test.rb +6 -0
  152. data/test/unit/redhat_access/telemetry_configuration_test.rb +9 -0
  153. data/vendor/assets/fonts/fonts/FontAwesome.otf +0 -0
  154. data/vendor/assets/fonts/fonts/fontawesome-webfont.eot +0 -0
  155. data/vendor/assets/fonts/fonts/fontawesome-webfont.svg +655 -0
  156. data/vendor/assets/fonts/fonts/fontawesome-webfont.ttf +0 -0
  157. data/vendor/assets/fonts/fonts/fontawesome-webfont.woff +0 -0
  158. data/vendor/assets/fonts/fonts/icomoon.eot +0 -0
  159. data/vendor/assets/fonts/fonts/icomoon.svg +22 -0
  160. data/vendor/assets/fonts/fonts/icomoon.ttf +0 -0
  161. data/vendor/assets/fonts/fonts/icomoon.woff +0 -0
  162. data/vendor/assets/fonts/fonts/overpass_bold-web.eot +0 -0
  163. data/vendor/assets/fonts/fonts/overpass_bold-web.svg +454 -0
  164. data/vendor/assets/fonts/fonts/overpass_bold-web.ttf +0 -0
  165. data/vendor/assets/fonts/fonts/overpass_bold-web.woff +0 -0
  166. data/vendor/assets/fonts/fonts/overpass_light-webfont.eot +0 -0
  167. data/vendor/assets/fonts/fonts/overpass_light-webfont.svg +2105 -0
  168. data/vendor/assets/fonts/fonts/overpass_light-webfont.ttf +0 -0
  169. data/vendor/assets/fonts/fonts/overpass_light-webfont.woff +0 -0
  170. data/vendor/assets/fonts/fonts/overpass_regular-web.eot +0 -0
  171. data/vendor/assets/fonts/fonts/overpass_regular-web.svg +454 -0
  172. data/vendor/assets/fonts/fonts/overpass_regular-web.ttf +0 -0
  173. data/vendor/assets/fonts/fonts/overpass_regular-web.woff +0 -0
  174. data/vendor/assets/fonts/fonts/portalicons.eot +0 -0
  175. data/vendor/assets/fonts/fonts/portalicons.svg +145 -0
  176. data/vendor/assets/fonts/fonts/portalicons.ttf +0 -0
  177. data/vendor/assets/fonts/fonts/portalicons.woff +0 -0
  178. data/vendor/assets/images/images/Icon_RH_Document_Blueprint_RGB_Button.png +0 -0
  179. data/vendor/assets/images/images/Icon_RH_Misc_Lifestyle_RGB_Button.png +0 -0
  180. data/vendor/assets/images/images/Icon_RH_Software_Data_CMYK_Button.png +0 -0
  181. data/vendor/assets/images/images/Icon_RH_Software_Transfer-Upload_CMYK_Button.png +0 -0
  182. data/vendor/assets/images/images/bg1.jpg +0 -0
  183. data/vendor/assets/images/images/bg_body.jpg +0 -0
  184. data/vendor/assets/images/images/bg_chart-shadow.png +0 -0
  185. data/vendor/assets/images/images/bg_dount-hole-na.png +0 -0
  186. data/vendor/assets/images/images/bg_glow.jpg +0 -0
  187. data/vendor/assets/images/images/bg_pattern.png +0 -0
  188. data/vendor/assets/images/images/i_chart.png +0 -0
  189. data/vendor/assets/images/images/img-insights-connection-sat.png +0 -0
  190. data/vendor/assets/images/images/img-insights-connection.png +0 -0
  191. data/vendor/assets/images/images/img-sat5-step2-admin.png +0 -0
  192. data/vendor/assets/images/images/img-sat5-step3-completed.png +0 -0
  193. data/vendor/assets/images/images/img-sat5-step3-pending.png +0 -0
  194. data/vendor/assets/images/images/img-sat5-step3-setup.png +0 -0
  195. data/vendor/assets/images/images/img-sat5-step5-overview.png +0 -0
  196. data/vendor/assets/images/images/img-sat5-step5-reports.png +0 -0
  197. data/vendor/assets/images/images/img-sat5-step5-systems.png +0 -0
  198. data/vendor/assets/images/images/img-sat6-step2.jpg +0 -0
  199. data/vendor/assets/images/images/img-sat6-step3.jpg +0 -0
  200. data/vendor/assets/images/images/img-sat6-step3.png +0 -0
  201. data/vendor/assets/images/images/img-sat6-step4.jpg +0 -0
  202. data/vendor/assets/images/images/img-sat6-step5a.jpg +0 -0
  203. data/vendor/assets/images/images/img-sat6-step5b.jpg +0 -0
  204. data/vendor/assets/images/images/img-sat6-step5c.jpg +0 -0
  205. data/vendor/assets/images/images/img-sat6-step5d.jpg +0 -0
  206. data/vendor/assets/images/images/keynote-snap.jpg +0 -0
  207. data/vendor/assets/images/images/keynote-snap.png +0 -0
  208. data/vendor/assets/images/images/splash-gettingstarted.jpg +0 -0
  209. data/vendor/assets/images/images/splash-learnmore.jpg +0 -0
  210. data/vendor/assets/images/images/splash-security.jpg +0 -0
  211. data/vendor/assets/javascripts/angular/angular.js +20131 -0
  212. data/vendor/assets/javascripts/redhat_access/redhat_access_angular_ui-deps.js +14103 -0
  213. data/vendor/assets/javascripts/redhat_access/redhat_access_angular_ui.js +7854 -0
  214. data/vendor/assets/javascripts/telemetry/insights.js +39 -0
  215. data/vendor/assets/stylesheets/redhat_access/redhat_access_angular_ui-deps.css +11 -0
  216. data/vendor/assets/stylesheets/redhat_access/redhat_access_angular_ui.css +1 -0
  217. data/vendor/assets/stylesheets/telemetry/sat6.css +18 -0
  218. metadata +341 -0
@@ -0,0 +1,24 @@
1
+ require_dependency "redhat_access/application_controller"
2
+ module RedhatAccess
3
+ module Api
4
+ class ApiController < ApplicationController
5
+ #skip_before_filter :verify_authenticity_token, :unless => :protect_api_from_forgery?
6
+ #before_filter :set_default_response_format, :authorize, :add_version_header, :set_gettext_locale
7
+ before_filter :session_expiry, :update_activity_time
8
+ #around_filter :set_timezone
9
+
10
+ cache_sweeper :topbar_sweeper
11
+
12
+ respond_to :json
13
+
14
+ def http_error_response(msg,status)
15
+ render json: { :message => msg }, :status => status
16
+ end
17
+
18
+ def api_request?
19
+ true
20
+ end
21
+
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,40 @@
1
+ require_dependency "redhat_access/application_controller"
2
+ require_dependency "redhat_access/strata/client"
3
+ require_dependency "redhat_access/sos_reports/generator"
4
+
5
+ module RedhatAccess
6
+ module Api
7
+ class AttachmentsController < RedhatAccess::Api::ApiController
8
+ wrap_parameters :attach_payload, format: :json
9
+ def index
10
+ render :text => "SOS Report?checked=true",
11
+ :layout => false
12
+ end
13
+
14
+ def create
15
+ data = params[:attach_payload]
16
+ begin
17
+ case_number = data[:caseNum]
18
+ sos_file = RedhatAccess::SosReports::Generator.create_report case_number
19
+ strata = RedhatAccess::Strata::Client.new(data[:authToken])
20
+ strata.api.attachment_broker.add(case_number,
21
+ false,
22
+ sos_file,
23
+ "Attachment for case #{case_number}")
24
+ render :nothing => true,
25
+ :status => 201
26
+ rescue => e
27
+ logger.error e.backtrace
28
+ #logger.error "Failed to import facts for Host::Discovered: #{e}"
29
+ render :text => "Error attaching sos file " + e.message,
30
+ :layout => false ,
31
+ :status => 500
32
+ end
33
+ end
34
+
35
+ def api_version
36
+ 'v1'
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,49 @@
1
+ require_dependency "redhat_access/application_controller"
2
+
3
+ module RedhatAccess
4
+ module Api
5
+ class LogsController < RedhatAccess::Api::ApiController
6
+ # Use temporary implementation to show proof of ooncept in beta release
7
+ # In GA a more robust implementation will be used
8
+ #@@log_files = ['/var/log/foreman/production.log','/var/log/foreman/delayed_job.log','/var/log/foreman/jobs-startup.log']
9
+ @@log_files = REDHAT_ACCESS_CONFIG[:diagnostic_logs]
10
+
11
+ def index
12
+ #
13
+ # This REST hack of using index for both list and specific resource get
14
+ # is being forced by the current UI design
15
+ #
16
+ path = params[:path]
17
+ if path.nil?
18
+ render :plain => get_available_logs, :layout => false
19
+ else
20
+ if is_valid_file? path
21
+ render :file => path, :layout => false
22
+ else
23
+ render :text => ''
24
+ end
25
+ end
26
+ end
27
+
28
+ def get_available_logs
29
+ files = @@log_files.select do |file|
30
+ File.exist?(file) && File.readable?(file) && File.size(file) > 0
31
+ end
32
+ files.join("\n")
33
+ end
34
+
35
+ def is_valid_file? file
36
+ @@log_files.include?(file) && File.exist?(file) && File.readable?(file) && File.size(file) > 0
37
+ end
38
+
39
+
40
+ def permission_denied
41
+ render :template => "katello/common/403"
42
+ end
43
+
44
+ def api_version
45
+ 'v1'
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,112 @@
1
+ require_dependency "redhat_access/application_controller"
2
+ require 'rest_client'
3
+ require 'redhat_access_lib'
4
+ require 'uri'
5
+
6
+ module RedhatAccess
7
+ module Api
8
+ class MachineTelemetryApiController < TelemetryApiController
9
+
10
+ skip_before_filter :authorize
11
+ skip_before_filter :require_login
12
+ skip_before_filter :session_expiry
13
+ skip_before_filter :verify_authenticity_token
14
+ skip_before_filter :check_telemetry_enabled
15
+ before_filter :telemetry_auth
16
+ before_filter :ensure_telemetry_enabled, :only => [:proxy, :proxy_upload]
17
+
18
+ def telemetry_auth
19
+ authenticate_client
20
+ unless valid_machine_user?
21
+ deny_access
22
+ end
23
+ end
24
+
25
+ def ensure_telemetry_enabled
26
+ render_telemetry_off unless telemetry_enabled_for_uuid?(User.current.login)
27
+ end
28
+
29
+ def get_auth_opts()
30
+ if valid_machine_user?
31
+ get_ssl_options_for_uuid(User.current.login, nil)
32
+ else
33
+ raise(RedhatAccess::Telemetry::LookUps::RecordNotFound,'Invalid User')
34
+ end
35
+ end
36
+
37
+ def api_connection_test
38
+ client = get_api_client
39
+ res = client.call_tapi('GET', '/', nil, nil, nil)
40
+ Rails.logger.debug(res[:data])
41
+ render status: res[:code], json: {}
42
+ end
43
+
44
+ def proxy_upload
45
+ original_method = request.method
46
+ original_params = add_branch_to_params(request.query_parameters)
47
+ original_payload = request.request_parameters[controller_name]
48
+ if not params[:id] and params[:test]
49
+ resource = "uploads/"
50
+ original_payload = {:test => params[:test]}
51
+ else
52
+ resource = "uploads/#{params[:id]}"
53
+ end
54
+ if params[:file]
55
+ original_payload = get_file_data(params)
56
+ end
57
+ client = get_api_client
58
+ Rails.logger.debug("Proxy upload original_payload : #{original_payload}")
59
+ res = client.call_tapi(original_method, URI.escape(resource), original_params, original_payload, nil, use_subsets)
60
+ render status: res[:code] , json: res[:data]
61
+ end
62
+
63
+ def get_branch_info
64
+ uuid = User.current.login
65
+ begin
66
+ org = get_organization(uuid)
67
+ major,minor,build = get_plugin_parent_version.scan(/\d+/)
68
+ client_id = {:remote_leaf => uuid ,
69
+ :remote_branch => get_branch_id_for_uuid(uuid),
70
+ :display_name => org.name,
71
+ :hostname => request.host,
72
+ :product => {:type => get_plugin_parent_name,
73
+ :major_version => major,
74
+ :minor_version => minor
75
+ }
76
+ }
77
+ render :json => client_id.to_json
78
+ rescue RedhatAccess::Telemetry::LookUps::RecordNotFound => e
79
+ http_error_response(e.message, 400)
80
+ end
81
+ end
82
+
83
+
84
+
85
+ protected
86
+
87
+ def use_subsets
88
+ false
89
+ end
90
+
91
+ def valid_machine_user?
92
+ if User.current && User.current.is_a?(RedhatAccess::Authentication::CertUser)
93
+ return true unless get_content_host(User.current.login).nil?
94
+ return false
95
+ else
96
+ return false
97
+ end
98
+ end
99
+
100
+ def get_http_user_agent
101
+ base_user_agent = super
102
+ client_user_agent = request.env['HTTP_USER_AGENT']
103
+ "#{base_user_agent};#{client_user_agent}"
104
+ end
105
+
106
+
107
+ def get_branch_id
108
+ get_branch_id_for_uuid(User.current.login)
109
+ end
110
+ end
111
+ end
112
+ end
@@ -0,0 +1,81 @@
1
+ require_dependency "redhat_access/application_controller"
2
+ require 'rest_client'
3
+ require 'redhat_access_lib'
4
+ require 'uri'
5
+
6
+ module RedhatAccess
7
+ module Api
8
+ class StrataProxyController < TelemetryApiController
9
+
10
+ def action_permission
11
+ case params[:action]
12
+ when 'call'
13
+ :call
14
+ else
15
+ super
16
+ end
17
+ end
18
+
19
+ def get_auth_opts()
20
+ #We only support pass through basic auth @see get_api_client method
21
+ return {}
22
+ end
23
+
24
+ def index
25
+ render :text => "Strata Telemetry API"
26
+ end
27
+
28
+
29
+ # The method that "proxies" tapi requests over to Strata
30
+ def call
31
+ original_method = request.method
32
+ original_params = request.query_parameters
33
+ original_payload = request.request_parameters[controller_name]
34
+ if request.post? && request.raw_post
35
+ original_payload = request.raw_post.clone
36
+ end
37
+
38
+ if request.put?
39
+ original_payload = request.body.read
40
+ end
41
+ resource = params[:path] == nil ? "/" : params[:path]
42
+ if params[:file]
43
+ original_payload = get_file_data(params)
44
+ end
45
+ client = get_api_client
46
+ res = client.call_strata(original_method, URI.escape(resource), original_params, original_payload, nil)
47
+ #401 erros means our proxy is not configured right.
48
+ #Change it to 502 to distinguish with local applications 401 errors
49
+ resp_data = res[:data]
50
+ if res[:code] == 401
51
+ res[:code] = 502
52
+ resp_data = {
53
+ :message => 'Authentication to the Strata Service failed.'
54
+ }
55
+ end
56
+ render status: res[:code] , json: resp_data #.gsub('https://api.access.redhat.com','https://192.168.121.13/redhat_access/strata/')
57
+ end
58
+
59
+ def get_api_client
60
+ accept_hdr = request.headers['Accept']
61
+ content_hdr = request.headers['Content-Type']
62
+ headers = { 'accept' => accept_hdr}
63
+ unless content_hdr.nil?
64
+ headers['content-type'] = content_hdr
65
+ end
66
+ headers['Authorization'] = env['HTTP_AUTHORIZATION'] if env['HTTP_AUTHORIZATION']
67
+ Rails.logger.debug("User agent for telemetry is #{get_http_user_agent}")
68
+ strata_host = 'https://api.' + REDHAT_ACCESS_CONFIG[:strata_host]
69
+ return RedhatAccess::Telemetry::PortalClient.new(strata_host,
70
+ strata_host,
71
+ nil,
72
+ self,
73
+ {:logger => Rails.logger,
74
+ :http_proxy => get_portal_http_proxy,
75
+ :user_agent => get_http_user_agent,
76
+ :headers => headers
77
+ })
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,179 @@
1
+ require_dependency "redhat_access/application_controller"
2
+ require 'rest_client'
3
+ require 'redhat_access_lib'
4
+ require 'uri'
5
+
6
+ module RedhatAccess
7
+ module Api
8
+ class TelemetryApiController < RedhatAccess::Api::ApiController
9
+ include RedhatAccess::Authentication::ClientAuthentication
10
+ include RedhatAccess::Telemetry::LookUps
11
+
12
+ before_filter :check_telemetry_enabled, :only => [:proxy]
13
+
14
+ UPLOAD_HOST = REDHAT_ACCESS_CONFIG[:telemetry_upload_host]
15
+ API_HOST = REDHAT_ACCESS_CONFIG[:telemetry_api_host]
16
+ UPLOAD_URL = "#{UPLOAD_HOST}/r/insights/uploads"
17
+ STRATA_URL = "#{API_HOST}/r/insights"
18
+
19
+
20
+ def action_permission
21
+ case params[:action]
22
+ when 'proxy'
23
+ :proxy
24
+ when 'connection_status'
25
+ :connection_status
26
+ else
27
+ super
28
+ end
29
+ end
30
+
31
+ def check_telemetry_enabled
32
+ render_telemetry_off unless telemetry_enabled?(Organization.current)
33
+ end
34
+
35
+ def render_telemetry_off
36
+ http_error_response("Telemetry is not enabled for your organization",403)
37
+ end
38
+
39
+ def get_creds
40
+ # enable this once cert auth is fixed:
41
+ # return User
42
+ #return TelemetryProxyCredentials.limit(1)[0]
43
+ end
44
+
45
+ def get_auth_opts()
46
+ return get_ssl_options_for_org(Organization.current ,nil)
47
+ end
48
+
49
+ def index
50
+ render :text => "Telemetry API"
51
+ end
52
+
53
+
54
+ # # Returns an array of the machine IDs that this user has access to
55
+ def get_machines
56
+ #TODO err out if org is not selected
57
+ machines = get_content_hosts(Organization.current)
58
+ if machines.empty?
59
+ machines = ['NULL_SET']
60
+ end
61
+ Rails.logger.debug("Machines : #{machines}")
62
+ machines
63
+ end
64
+
65
+ def connection_status
66
+ client = get_api_client
67
+ res = client.call_tapi('GET', 'me', nil, nil, nil)
68
+ Rails.logger.debug(res[:data])
69
+ case res[:code]
70
+ when 200
71
+ resp = JSON.parse(res[:data])
72
+ data = {
73
+ :connectionStatus => 'Connected',
74
+ :account => resp["account_number"],
75
+ :company => resp["company"],
76
+ :orgId => resp["ord_id"]
77
+ }
78
+ render status: res[:code] , json: data
79
+ when 401
80
+ data = {
81
+ :connectionStatus => 'Authentication Failure',
82
+ :account => 'Unknown',
83
+ :company => 'Unknown',
84
+ }
85
+ render status: 200 , json: data
86
+ else
87
+ data = {
88
+ :connectionStatus => 'Connection Failed',
89
+ :account => 'Unknown',
90
+ :company => 'Unknown',
91
+ }
92
+ render status: 200 , json: data
93
+ end
94
+ end
95
+
96
+ # The method that "proxies" tapi requests over to Strata
97
+ def proxy
98
+ original_method = request.method
99
+ original_params = request.query_parameters
100
+ if request.user_agent and not request.user_agent.include?('redhat_access_cfme')
101
+ original_params = add_branch_to_params(request.query_parameters)
102
+ end
103
+ original_payload = request.request_parameters[controller_name]
104
+ if request.post? && request.raw_post
105
+ original_payload = request.raw_post.clone
106
+ end
107
+ resource = params[:path] == nil ? "/" : params[:path]
108
+ if params[:file]
109
+ original_payload = get_file_data(params)
110
+ end
111
+ client = get_api_client
112
+ res = client.call_tapi(original_method, URI.escape(resource), original_params, original_payload, nil, use_subsets)
113
+ #401 erros means our proxy is not configured right.
114
+ #Change it to 502 to distinguish with local applications 401 errors
115
+ resp_data = res[:data]
116
+ if res[:code] == 401
117
+ res[:code] = 502
118
+ resp_data = {
119
+ :message => 'Authentication to the Insights Service failed.',
120
+ :headers => {}
121
+ }
122
+ end
123
+ if original_params && original_params["accept"] && original_params["accept"] = "csv"
124
+ send_data resp_data, type: 'text/csv; charset=utf-8', :filename => "insights_report.csv"
125
+ else
126
+ if resp_data.headers && resp_data.headers[:x_resource_count]
127
+ response.headers['X-Resource-Count'] = resp_data.headers[:x_resource_count]
128
+ end
129
+ render status: res[:code] , json: resp_data
130
+ end
131
+ end
132
+
133
+ protected
134
+
135
+ def use_subsets
136
+ true
137
+ end
138
+
139
+ def get_file_data params
140
+ return {
141
+ :file => params[:file],
142
+ :filename => params[:file].original_filename
143
+ }
144
+ end
145
+
146
+ def add_branch_to_params(params)
147
+ if params.nil?
148
+ params = {}
149
+ end
150
+ params[:branch_id] = get_branch_id
151
+ Rails.logger.debug{"Request parameters for telemetry request #{params}"}
152
+ params
153
+ end
154
+
155
+ def get_http_user_agent
156
+ "#{get_plugin_parent_name}/#{get_plugin_parent_version};#{get_rha_plugin_name}/#{get_rha_plugin_version}"
157
+ end
158
+
159
+ def get_branch_id
160
+ get_branch_id_for_org(Organization.current)
161
+ end
162
+
163
+ def get_api_client
164
+ Rails.logger.debug("User agent for telemetry is #{get_http_user_agent}")
165
+ return RedhatAccess::Telemetry::PortalClient.new(UPLOAD_URL,STRATA_URL,
166
+ get_creds,
167
+ self,
168
+ {:logger => Rails.logger,
169
+ :http_proxy => get_portal_http_proxy,
170
+ :user_agent => get_http_user_agent})
171
+ end
172
+
173
+ def api_version
174
+ 'v1'
175
+ end
176
+
177
+ end
178
+ end
179
+ end
@@ -0,0 +1,2 @@
1
+ class RedhatAccess::ApplicationController < ApplicationController
2
+ end
@@ -0,0 +1,14 @@
1
+ require_dependency "redhat_access/application_controller"
2
+
3
+ module RedhatAccess
4
+ class CasesController < ApplicationController
5
+ def create
6
+ redirect_to '/redhat_access/#/case/new'
7
+ end
8
+
9
+ def index
10
+ redirect_to '/redhat_access/#/case/list'
11
+ end
12
+
13
+ end
14
+ end
@@ -0,0 +1,21 @@
1
+ require_dependency "redhat_access/application_controller"
2
+ require_dependency "redhat_access/version"
3
+
4
+ module RedhatAccess
5
+ class ConfigurationController < ApplicationController
6
+ def index
7
+ strata_host = REDHAT_ACCESS_CONFIG[:strata_host]
8
+ if strata_host.nil?
9
+ strata_host = 'access.redhat.com'
10
+ end
11
+ client_id = "foreman_plugin_#{REDHAT_ACCESS_CONFIG[:deployment]}_#{RedhatAccess::VERSION}"
12
+ render :json => { :strataHostName => strata_host,:strataClientId => client_id }.to_json,
13
+ :layout => false
14
+ end
15
+
16
+ def api_request?
17
+ true
18
+ end
19
+
20
+ end
21
+ end
@@ -0,0 +1,9 @@
1
+ require_dependency "redhat_access/application_controller"
2
+
3
+ module RedhatAccess
4
+ class LogViewerController < ApplicationController
5
+ def index
6
+ redirect_to '/redhat_access/#/logviewer'
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,8 @@
1
+ require_dependency "redhat_access/application_controller"
2
+
3
+ module RedhatAccess
4
+ class RedhatAccessController < RedhatAccess::ApplicationController
5
+ def index
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,9 @@
1
+ require_dependency "redhat_access/application_controller"
2
+
3
+ module RedhatAccess
4
+ class SearchController < ApplicationController
5
+ def index
6
+ redirect_to '/redhat_access/#/search'
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,48 @@
1
+ require_dependency "redhat_access/application_controller"
2
+
3
+ module RedhatAccess
4
+ class StrataCredentialsController < ApplicationController
5
+
6
+ def index
7
+ if TelemetryProxyCredentials.count == 0
8
+ render json: { :status => 'not_found' }, status: 404
9
+ return
10
+ end
11
+
12
+ creds = TelemetryProxyCredentials.limit(1)[0]
13
+ render json: { :status => 'success', :username => creds.username }
14
+ end
15
+
16
+ def destroy
17
+ TelemetryProxyCredentials.delete_all
18
+ render json: { :status => 'success' }
19
+ end
20
+
21
+ def create
22
+ if TelemetryProxyCredentials.count != 0
23
+ TelemetryProxyCredentials.delete_all
24
+ end
25
+
26
+ creds = TelemetryProxyCredentials.new
27
+
28
+ data = params[:strata_credential]
29
+ username = data[:username]
30
+ password = data[:password]
31
+
32
+ if not username.present? && username.length > 1
33
+ render json: { :status => 'error', :message => 'username missing or too short' }, status: 400
34
+ return
35
+ end
36
+
37
+ if not password.present? && password.length > 4
38
+ render json: { :status => 'error', :message => 'password missing or too short' }, status: 400
39
+ return
40
+ end
41
+
42
+ creds.attributes = { username: username, password: password }
43
+ creds.save
44
+
45
+ render json: { :status => 'success', :message => 'credentials saved' }
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,38 @@
1
+ require_dependency "redhat_access/application_controller"
2
+
3
+ module RedhatAccess
4
+ class TelemetryConfigurationsController < ApplicationController
5
+ include RedhatAccess::Telemetry::LookUps
6
+ def show
7
+ #TODO require current ORG
8
+ conf = get_telemetry_config(Organization.current)
9
+ render json: conf.to_json(:except => [ :id, :created_at, :portal_password ,:updated_at])
10
+ end
11
+
12
+ def update
13
+ #TODO require current ORG
14
+ conf = get_telemetry_config(Organization.current)
15
+ if conf
16
+ begin
17
+ if conf.update_attributes(telemetry_configuration_params)
18
+ render json: {:message => "config updated"}
19
+ else
20
+ render json: {:error=>"Invalid parameters"}.to_json, status: 400
21
+ end
22
+ rescue=>e
23
+ Rails.logger.info(e)
24
+ render json: {:error=>"Error processing update"}.to_json, status: 500
25
+ end
26
+ else
27
+ render json: {:error=>"Configurationnotfound"}.to_json, status: 404
28
+ end
29
+ end
30
+
31
+ private
32
+
33
+ def telemetry_configuration_params
34
+ params.require(:telemetry_configuration).permit(:enable_telemetry, :portal_password, :portal_user, :organization_id, :email)
35
+ end
36
+
37
+ end
38
+ end
@@ -0,0 +1,6 @@
1
+ require_dependency "redhat_access/application_controller"
2
+
3
+ module RedhatAccess
4
+ class TelemetryController < ApplicationController
5
+ end
6
+ end
@@ -0,0 +1,13 @@
1
+ module RedhatAccess
2
+ module AnalyticsDashboardHelper
3
+ include RedhatAccess::Telemetry::LookUps
4
+
5
+ def help_path?
6
+ request.path == '/redhat_access/insights/help'
7
+ end
8
+
9
+ def manage_path?
10
+ request.path == '/redhat_access/insights/manage'
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,4 @@
1
+ module RedhatAccess
2
+ module ApplicationHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module RedhatAccess
2
+ module AttachmentsHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module RedhatAccess
2
+ module CasesHelper
3
+ end
4
+ end