redhat_access 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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