onelogin 1.6.0 → 3.0.0.pre.alpha.1

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 (443) hide show
  1. checksums.yaml +5 -5
  2. data/Gemfile +7 -4
  3. data/README.md +245 -484
  4. data/Rakefile +7 -3
  5. data/docs/Action.md +26 -0
  6. data/docs/ActivateFactorRequest.md +24 -0
  7. data/docs/AddAccessTokenClaimRequest.md +22 -0
  8. data/docs/AddClientAppRequest.md +20 -0
  9. data/docs/AddRoleUsers200ResponseInner.md +18 -0
  10. data/docs/AddScopeRequest.md +20 -0
  11. data/docs/AuthMethod.md +15 -0
  12. data/docs/AuthServerConfiguration.md +24 -0
  13. data/docs/ClientApp.md +20 -0
  14. data/docs/Condition.md +22 -0
  15. data/docs/Connector.md +26 -0
  16. data/docs/CreateAuthorizationServerRequest.md +22 -0
  17. data/docs/CreateEnvironmentVariableRequest.md +20 -0
  18. data/docs/CreateRoles201ResponseInner.md +18 -0
  19. data/docs/DefaultApi.md +6812 -0
  20. data/docs/Device.md +26 -0
  21. data/docs/EnrollFactorRequest.md +28 -0
  22. data/docs/Envvar.md +24 -0
  23. data/docs/ErrorStatus.md +22 -0
  24. data/docs/ErrorStatusErrorsInner.md +20 -0
  25. data/docs/FactorInner.md +32 -0
  26. data/docs/FactorInnerFactorData.md +20 -0
  27. data/docs/GenerateMfaToken200Response.md +24 -0
  28. data/docs/GenerateMfaToken422Response.md +24 -0
  29. data/docs/GenerateMfaToken422ResponseDetails.md +18 -0
  30. data/docs/GenerateMfaTokenRequest.md +20 -0
  31. data/docs/GenerateSamlAssertionRequest.md +26 -0
  32. data/docs/GenerateToken200Response.md +28 -0
  33. data/docs/GenerateToken400Response.md +18 -0
  34. data/docs/GenerateTokenRequest.md +18 -0
  35. data/docs/GetAuthorizationServer200Response.md +24 -0
  36. data/docs/GetAvailableFactors200ResponseInner.md +22 -0
  37. data/docs/GetClientApps200ResponseInner.md +24 -0
  38. data/docs/GetClientApps200ResponseInnerScopesInner.md +22 -0
  39. data/docs/GetRateLimit200Response.md +20 -0
  40. data/docs/GetRateLimit200ResponseData.md +22 -0
  41. data/docs/GetRiskScore200Response.md +20 -0
  42. data/docs/GetRiskScore400Response.md +18 -0
  43. data/docs/GetRiskScoreRequest.md +30 -0
  44. data/docs/GetScoreInsights200Response.md +20 -0
  45. data/docs/GetScoreInsights200ResponseScores.md +26 -0
  46. data/docs/GetUserApps200ResponseInner.md +32 -0
  47. data/docs/Hook.md +46 -0
  48. data/docs/HookConditionsInner.md +22 -0
  49. data/docs/HookOptions.md +22 -0
  50. data/docs/HookStatus.md +20 -0
  51. data/docs/Id.md +18 -0
  52. data/docs/ListAccessTokenClaims200ResponseInner.md +34 -0
  53. data/docs/ListActions200ResponseInner.md +20 -0
  54. data/docs/ListAppUsers200ResponseInner.md +26 -0
  55. data/docs/ListAuthorizationServers200ResponseInner.md +24 -0
  56. data/docs/ListAuthorizationServers200ResponseInnerConfiguration.md +20 -0
  57. data/docs/ListConditionOperators200ResponseInner.md +20 -0
  58. data/docs/ListConditionValues200ResponseInner.md +20 -0
  59. data/docs/ListConditions200ResponseInner.md +20 -0
  60. data/docs/ListMappingConditionOperators200ResponseInner.md +20 -0
  61. data/docs/ListMappingConditions200ResponseInner.md +20 -0
  62. data/docs/ListScopes200ResponseInner.md +22 -0
  63. data/docs/Log.md +24 -0
  64. data/docs/Mapping.md +30 -0
  65. data/docs/Registration.md +22 -0
  66. data/docs/RemoveRoleUsersRequest.md +18 -0
  67. data/docs/RevokeTokenRequest.md +18 -0
  68. data/docs/RiskDevice.md +18 -0
  69. data/docs/RiskRule.md +30 -0
  70. data/docs/RiskUser.md +22 -0
  71. data/docs/Role.md +26 -0
  72. data/docs/Rule.md +30 -0
  73. data/docs/RuleId.md +18 -0
  74. data/docs/Schema.md +56 -0
  75. data/docs/Schema1.md +28 -0
  76. data/docs/Schema1AddedBy.md +20 -0
  77. data/docs/SchemaProvisioning.md +18 -0
  78. data/docs/Session.md +18 -0
  79. data/docs/SetRoleApps200ResponseInner.md +18 -0
  80. data/docs/Source.md +20 -0
  81. data/docs/Status.md +24 -0
  82. data/docs/Status1.md +22 -0
  83. data/docs/Status2.md +18 -0
  84. data/docs/Status2Status.md +24 -0
  85. data/docs/TrackEventRequest.md +34 -0
  86. data/docs/UpdateAuthorizationServer400Response.md +24 -0
  87. data/docs/UpdateClientAppRequest.md +18 -0
  88. data/docs/UpdateEnvironmentVariableRequest.md +18 -0
  89. data/docs/UpdateRole200Response.md +18 -0
  90. data/docs/User.md +90 -0
  91. data/docs/VerifyEnrollmentRequest.md +18 -0
  92. data/docs/VerifyFactorRequest.md +20 -0
  93. data/docs/VerifyFactorSaml200Response.md +20 -0
  94. data/docs/VerifyFactorSamlRequest.md +26 -0
  95. data/docs/VerifyFactorVoice200ResponseInner.md +22 -0
  96. data/git_push.sh +57 -0
  97. data/lib/onelogin/api/default_api.rb +7334 -0
  98. data/lib/onelogin/api_client.rb +391 -0
  99. data/lib/onelogin/api_error.rb +57 -0
  100. data/lib/onelogin/configuration.rb +282 -0
  101. data/lib/onelogin/models/action.rb +262 -0
  102. data/lib/onelogin/models/activate_factor_request.rb +250 -0
  103. data/lib/onelogin/models/add_access_token_claim_request.rb +237 -0
  104. data/lib/onelogin/models/add_client_app_request.rb +230 -0
  105. data/lib/onelogin/models/add_role_users200_response_inner.rb +219 -0
  106. data/lib/onelogin/models/add_scope_request.rb +228 -0
  107. data/lib/onelogin/models/auth_method.rb +43 -0
  108. data/lib/onelogin/models/auth_server_configuration.rb +248 -0
  109. data/lib/onelogin/models/client_app.rb +228 -0
  110. data/lib/onelogin/models/condition.rb +240 -0
  111. data/lib/onelogin/models/connector.rb +259 -0
  112. data/lib/onelogin/models/create_authorization_server_request.rb +237 -0
  113. data/lib/onelogin/models/create_environment_variable_request.rb +240 -0
  114. data/lib/onelogin/models/create_roles201_response_inner.rb +219 -0
  115. data/lib/onelogin/models/device.rb +255 -0
  116. data/lib/onelogin/models/enroll_factor_request.rb +280 -0
  117. data/lib/onelogin/models/envvar.rb +250 -0
  118. data/lib/onelogin/models/error_status.rb +239 -0
  119. data/lib/onelogin/models/error_status_errors_inner.rb +230 -0
  120. data/lib/onelogin/models/factor_inner.rb +323 -0
  121. data/lib/onelogin/models/factor_inner_factor_data.rb +231 -0
  122. data/lib/onelogin/models/generate_mfa_token200_response.rb +250 -0
  123. data/lib/onelogin/models/generate_mfa_token422_response.rb +246 -0
  124. data/lib/onelogin/models/generate_mfa_token422_response_details.rb +221 -0
  125. data/lib/onelogin/models/generate_mfa_token_request.rb +230 -0
  126. data/lib/onelogin/models/generate_saml_assertion_request.rb +280 -0
  127. data/lib/onelogin/models/generate_token200_response.rb +264 -0
  128. data/lib/onelogin/models/generate_token400_response.rb +219 -0
  129. data/lib/onelogin/models/generate_token_request.rb +253 -0
  130. data/lib/onelogin/models/get_authorization_server200_response.rb +246 -0
  131. data/lib/onelogin/models/get_available_factors200_response_inner.rb +240 -0
  132. data/lib/onelogin/models/get_client_apps200_response_inner.rb +248 -0
  133. data/lib/onelogin/models/get_client_apps200_response_inner_scopes_inner.rb +237 -0
  134. data/lib/onelogin/models/get_rate_limit200_response.rb +228 -0
  135. data/lib/onelogin/models/get_rate_limit200_response_data.rb +237 -0
  136. data/lib/onelogin/models/get_risk_score200_response.rb +256 -0
  137. data/lib/onelogin/models/get_risk_score400_response.rb +221 -0
  138. data/lib/onelogin/models/get_risk_score_request.rb +291 -0
  139. data/lib/onelogin/models/get_score_insights200_response.rb +228 -0
  140. data/lib/onelogin/models/get_score_insights200_response_scores.rb +255 -0
  141. data/lib/onelogin/models/get_user_apps200_response_inner.rb +335 -0
  142. data/lib/onelogin/models/hook.rb +462 -0
  143. data/lib/onelogin/models/hook_conditions_inner.rb +237 -0
  144. data/lib/onelogin/models/hook_options.rb +238 -0
  145. data/lib/onelogin/models/hook_status.rb +228 -0
  146. data/lib/onelogin/models/id.rb +219 -0
  147. data/lib/onelogin/models/list_access_token_claims200_response_inner.rb +293 -0
  148. data/lib/onelogin/models/list_actions200_response_inner.rb +230 -0
  149. data/lib/onelogin/models/list_app_users200_response_inner.rb +255 -0
  150. data/lib/onelogin/models/list_authorization_servers200_response_inner.rb +246 -0
  151. data/lib/onelogin/models/list_authorization_servers200_response_inner_configuration.rb +230 -0
  152. data/lib/onelogin/models/list_condition_operators200_response_inner.rb +230 -0
  153. data/lib/onelogin/models/list_condition_values200_response_inner.rb +228 -0
  154. data/lib/onelogin/models/list_conditions200_response_inner.rb +230 -0
  155. data/lib/onelogin/models/list_mapping_condition_operators200_response_inner.rb +230 -0
  156. data/lib/onelogin/models/list_mapping_conditions200_response_inner.rb +230 -0
  157. data/lib/onelogin/models/list_scopes200_response_inner.rb +237 -0
  158. data/lib/onelogin/models/log.rb +248 -0
  159. data/lib/onelogin/models/mapping.rb +342 -0
  160. data/lib/onelogin/models/registration.rb +274 -0
  161. data/lib/onelogin/models/remove_role_users_request.rb +221 -0
  162. data/lib/onelogin/models/revoke_token_request.rb +219 -0
  163. data/lib/onelogin/models/risk_device.rb +221 -0
  164. data/lib/onelogin/models/risk_rule.rb +325 -0
  165. data/lib/onelogin/models/risk_user.rb +248 -0
  166. data/lib/onelogin/models/role.rb +266 -0
  167. data/lib/onelogin/models/rule.rb +317 -0
  168. data/lib/onelogin/models/rule_id.rb +219 -0
  169. data/lib/onelogin/models/schema.rb +441 -0
  170. data/lib/onelogin/models/schema1.rb +265 -0
  171. data/lib/onelogin/models/schema1_added_by.rb +228 -0
  172. data/lib/onelogin/models/schema_provisioning.rb +220 -0
  173. data/lib/onelogin/models/session.rb +221 -0
  174. data/lib/onelogin/models/set_role_apps200_response_inner.rb +220 -0
  175. data/lib/onelogin/models/source.rb +230 -0
  176. data/lib/onelogin/models/status.rb +246 -0
  177. data/lib/onelogin/models/status1.rb +237 -0
  178. data/lib/onelogin/models/status2.rb +219 -0
  179. data/lib/onelogin/models/status2_status.rb +246 -0
  180. data/lib/onelogin/models/track_event_request.rb +316 -0
  181. data/lib/onelogin/models/update_authorization_server400_response.rb +246 -0
  182. data/lib/onelogin/models/update_client_app_request.rb +221 -0
  183. data/lib/onelogin/models/update_environment_variable_request.rb +225 -0
  184. data/lib/onelogin/models/update_role200_response.rb +219 -0
  185. data/lib/onelogin/models/user.rb +615 -0
  186. data/lib/onelogin/models/verify_enrollment_request.rb +219 -0
  187. data/lib/onelogin/models/verify_factor_request.rb +230 -0
  188. data/lib/onelogin/models/verify_factor_saml200_response.rb +230 -0
  189. data/lib/onelogin/models/verify_factor_saml_request.rb +275 -0
  190. data/lib/onelogin/models/verify_factor_voice200_response_inner.rb +271 -0
  191. data/lib/onelogin/version.rb +13 -1
  192. data/lib/onelogin.rb +130 -1
  193. data/onelogin.gemspec +35 -42
  194. data/spec/api/default_api_spec.rb +1259 -0
  195. data/spec/api_client_spec.rb +226 -0
  196. data/spec/configuration_spec.rb +42 -0
  197. data/spec/models/action_spec.rb +58 -0
  198. data/spec/models/activate_factor_request_spec.rb +52 -0
  199. data/spec/models/add_access_token_claim_request_spec.rb +46 -0
  200. data/spec/models/add_client_app_request_spec.rb +40 -0
  201. data/spec/models/add_role_users200_response_inner_spec.rb +34 -0
  202. data/spec/models/add_scope_request_spec.rb +40 -0
  203. data/spec/models/auth_method_spec.rb +28 -0
  204. data/spec/models/auth_server_configuration_spec.rb +52 -0
  205. data/spec/models/client_app_spec.rb +40 -0
  206. data/spec/models/condition_spec.rb +46 -0
  207. data/spec/models/connector_spec.rb +58 -0
  208. data/spec/models/create_authorization_server_request_spec.rb +46 -0
  209. data/spec/models/create_environment_variable_request_spec.rb +40 -0
  210. data/spec/models/create_roles201_response_inner_spec.rb +34 -0
  211. data/spec/models/device_spec.rb +58 -0
  212. data/spec/models/enroll_factor_request_spec.rb +64 -0
  213. data/spec/models/envvar_spec.rb +52 -0
  214. data/spec/models/error_status_errors_inner_spec.rb +40 -0
  215. data/spec/models/error_status_spec.rb +46 -0
  216. data/spec/models/factor_inner_factor_data_spec.rb +40 -0
  217. data/spec/models/factor_inner_spec.rb +80 -0
  218. data/spec/models/generate_mfa_token200_response_spec.rb +52 -0
  219. data/spec/models/generate_mfa_token422_response_details_spec.rb +34 -0
  220. data/spec/models/generate_mfa_token422_response_spec.rb +52 -0
  221. data/spec/models/generate_mfa_token_request_spec.rb +40 -0
  222. data/spec/models/generate_saml_assertion_request_spec.rb +58 -0
  223. data/spec/models/generate_token200_response_spec.rb +64 -0
  224. data/spec/models/generate_token400_response_spec.rb +34 -0
  225. data/spec/models/generate_token_request_spec.rb +38 -0
  226. data/spec/models/get_authorization_server200_response_spec.rb +52 -0
  227. data/spec/models/get_available_factors200_response_inner_spec.rb +46 -0
  228. data/spec/models/get_client_apps200_response_inner_scopes_inner_spec.rb +46 -0
  229. data/spec/models/get_client_apps200_response_inner_spec.rb +52 -0
  230. data/spec/models/get_rate_limit200_response_data_spec.rb +46 -0
  231. data/spec/models/get_rate_limit200_response_spec.rb +40 -0
  232. data/spec/models/get_risk_score200_response_spec.rb +40 -0
  233. data/spec/models/get_risk_score400_response_spec.rb +34 -0
  234. data/spec/models/get_risk_score_request_spec.rb +70 -0
  235. data/spec/models/get_score_insights200_response_scores_spec.rb +58 -0
  236. data/spec/models/get_score_insights200_response_spec.rb +40 -0
  237. data/spec/models/get_user_apps200_response_inner_spec.rb +84 -0
  238. data/spec/models/hook_conditions_inner_spec.rb +46 -0
  239. data/spec/models/hook_options_spec.rb +46 -0
  240. data/spec/models/hook_spec.rb +122 -0
  241. data/spec/models/hook_status_spec.rb +40 -0
  242. data/spec/models/id_spec.rb +34 -0
  243. data/spec/models/list_access_token_claims200_response_inner_spec.rb +82 -0
  244. data/spec/models/list_actions200_response_inner_spec.rb +40 -0
  245. data/spec/models/list_app_users200_response_inner_spec.rb +58 -0
  246. data/spec/models/list_authorization_servers200_response_inner_configuration_spec.rb +40 -0
  247. data/spec/models/list_authorization_servers200_response_inner_spec.rb +52 -0
  248. data/spec/models/list_condition_operators200_response_inner_spec.rb +40 -0
  249. data/spec/models/list_condition_values200_response_inner_spec.rb +40 -0
  250. data/spec/models/list_conditions200_response_inner_spec.rb +40 -0
  251. data/spec/models/list_mapping_condition_operators200_response_inner_spec.rb +40 -0
  252. data/spec/models/list_mapping_conditions200_response_inner_spec.rb +40 -0
  253. data/spec/models/list_scopes200_response_inner_spec.rb +46 -0
  254. data/spec/models/log_spec.rb +52 -0
  255. data/spec/models/mapping_spec.rb +74 -0
  256. data/spec/models/registration_spec.rb +50 -0
  257. data/spec/models/remove_role_users_request_spec.rb +34 -0
  258. data/spec/models/revoke_token_request_spec.rb +34 -0
  259. data/spec/models/risk_device_spec.rb +34 -0
  260. data/spec/models/risk_rule_spec.rb +78 -0
  261. data/spec/models/risk_user_spec.rb +46 -0
  262. data/spec/models/role_spec.rb +58 -0
  263. data/spec/models/rule_id_spec.rb +34 -0
  264. data/spec/models/rule_spec.rb +74 -0
  265. data/spec/models/schema1_added_by_spec.rb +40 -0
  266. data/spec/models/schema1_spec.rb +64 -0
  267. data/spec/models/schema_provisioning_spec.rb +34 -0
  268. data/spec/models/schema_spec.rb +152 -0
  269. data/spec/models/session_spec.rb +34 -0
  270. data/spec/models/set_role_apps200_response_inner_spec.rb +34 -0
  271. data/spec/models/source_spec.rb +40 -0
  272. data/spec/models/status1_spec.rb +46 -0
  273. data/spec/models/status2_spec.rb +34 -0
  274. data/spec/models/status2_status_spec.rb +52 -0
  275. data/spec/models/status_spec.rb +52 -0
  276. data/spec/models/track_event_request_spec.rb +82 -0
  277. data/spec/models/update_authorization_server400_response_spec.rb +52 -0
  278. data/spec/models/update_client_app_request_spec.rb +34 -0
  279. data/spec/models/update_environment_variable_request_spec.rb +34 -0
  280. data/spec/models/update_role200_response_spec.rb +34 -0
  281. data/spec/models/user_spec.rb +258 -0
  282. data/spec/models/verify_enrollment_request_spec.rb +34 -0
  283. data/spec/models/verify_factor_request_spec.rb +40 -0
  284. data/spec/models/verify_factor_saml200_response_spec.rb +40 -0
  285. data/spec/models/verify_factor_saml_request_spec.rb +58 -0
  286. data/spec/models/verify_factor_voice200_response_inner_spec.rb +50 -0
  287. data/spec/spec_helper.rb +111 -0
  288. metadata +401 -216
  289. data/.github/workflows/git-secrets-public.yml +0 -55
  290. data/.gitignore +0 -12
  291. data/.travis.yml +0 -6
  292. data/bin/console +0 -14
  293. data/bin/setup +0 -6
  294. data/examples/Gemfile +0 -3
  295. data/examples/Gemfile.lock +0 -25
  296. data/examples/README.md +0 -19
  297. data/examples/all-users-to-csv.rb +0 -48
  298. data/examples/another-get-all-login-events-of-last-day-to-csv.rb +0 -141
  299. data/examples/create-user.rb +0 -16
  300. data/examples/events-to-csv.rb +0 -93
  301. data/examples/get-all-login-events-of-last-day-to-csv.rb +0 -88
  302. data/examples/last-app-user-login-to-csv.rb +0 -72
  303. data/examples/list-users.rb +0 -15
  304. data/examples/rails-custom-login-page/.gitignore +0 -45
  305. data/examples/rails-custom-login-page/.ruby-version +0 -1
  306. data/examples/rails-custom-login-page/Gemfile +0 -57
  307. data/examples/rails-custom-login-page/Gemfile.lock +0 -212
  308. data/examples/rails-custom-login-page/README.md +0 -137
  309. data/examples/rails-custom-login-page/Rakefile +0 -6
  310. data/examples/rails-custom-login-page/app/assets/config/manifest.js +0 -3
  311. data/examples/rails-custom-login-page/app/assets/images/.keep +0 -0
  312. data/examples/rails-custom-login-page/app/assets/javascripts/application.js +0 -18
  313. data/examples/rails-custom-login-page/app/assets/javascripts/cable.js +0 -13
  314. data/examples/rails-custom-login-page/app/assets/javascripts/channels/.keep +0 -0
  315. data/examples/rails-custom-login-page/app/assets/javascripts/dashboard.coffee +0 -3
  316. data/examples/rails-custom-login-page/app/assets/javascripts/home.coffee +0 -3
  317. data/examples/rails-custom-login-page/app/assets/javascripts/sessions.coffee +0 -3
  318. data/examples/rails-custom-login-page/app/assets/stylesheets/application.css +0 -15
  319. data/examples/rails-custom-login-page/app/assets/stylesheets/dashboard.scss +0 -3
  320. data/examples/rails-custom-login-page/app/assets/stylesheets/home.scss +0 -3
  321. data/examples/rails-custom-login-page/app/assets/stylesheets/sessions.scss +0 -3
  322. data/examples/rails-custom-login-page/app/channels/application_cable/channel.rb +0 -4
  323. data/examples/rails-custom-login-page/app/channels/application_cable/connection.rb +0 -4
  324. data/examples/rails-custom-login-page/app/controllers/application_controller.rb +0 -23
  325. data/examples/rails-custom-login-page/app/controllers/concerns/.keep +0 -0
  326. data/examples/rails-custom-login-page/app/controllers/dashboard_controller.rb +0 -10
  327. data/examples/rails-custom-login-page/app/controllers/home_controller.rb +0 -5
  328. data/examples/rails-custom-login-page/app/controllers/sessions_controller.rb +0 -46
  329. data/examples/rails-custom-login-page/app/controllers/users_controller.rb +0 -120
  330. data/examples/rails-custom-login-page/app/helpers/application_helper.rb +0 -2
  331. data/examples/rails-custom-login-page/app/helpers/dashboard_helper.rb +0 -28
  332. data/examples/rails-custom-login-page/app/helpers/home_helper.rb +0 -2
  333. data/examples/rails-custom-login-page/app/helpers/sessions_helper.rb +0 -87
  334. data/examples/rails-custom-login-page/app/helpers/users_helper.rb +0 -3
  335. data/examples/rails-custom-login-page/app/jobs/application_job.rb +0 -2
  336. data/examples/rails-custom-login-page/app/mailers/application_mailer.rb +0 -4
  337. data/examples/rails-custom-login-page/app/models/application_record.rb +0 -3
  338. data/examples/rails-custom-login-page/app/models/concerns/.keep +0 -0
  339. data/examples/rails-custom-login-page/app/views/dashboard/index.html.erb +0 -43
  340. data/examples/rails-custom-login-page/app/views/home/index.html.erb +0 -272
  341. data/examples/rails-custom-login-page/app/views/layouts/application.html.erb +0 -31
  342. data/examples/rails-custom-login-page/app/views/layouts/mailer.html.erb +0 -13
  343. data/examples/rails-custom-login-page/app/views/layouts/mailer.text.erb +0 -1
  344. data/examples/rails-custom-login-page/app/views/users/_form.html.erb +0 -1
  345. data/examples/rails-custom-login-page/app/views/users/_user.json.jbuilder +0 -2
  346. data/examples/rails-custom-login-page/app/views/users/edit.html.erb +0 -33
  347. data/examples/rails-custom-login-page/app/views/users/index.html.erb +0 -33
  348. data/examples/rails-custom-login-page/app/views/users/index.json.jbuilder +0 -1
  349. data/examples/rails-custom-login-page/app/views/users/new.html.erb +0 -60
  350. data/examples/rails-custom-login-page/app/views/users/onboard.html.erb +0 -54
  351. data/examples/rails-custom-login-page/app/views/users/show.html.erb +0 -17
  352. data/examples/rails-custom-login-page/app/views/users/show.json.jbuilder +0 -1
  353. data/examples/rails-custom-login-page/bin/bundle +0 -3
  354. data/examples/rails-custom-login-page/bin/rails +0 -9
  355. data/examples/rails-custom-login-page/bin/rake +0 -9
  356. data/examples/rails-custom-login-page/bin/setup +0 -38
  357. data/examples/rails-custom-login-page/bin/spring +0 -17
  358. data/examples/rails-custom-login-page/bin/update +0 -29
  359. data/examples/rails-custom-login-page/bin/yarn +0 -11
  360. data/examples/rails-custom-login-page/config/application.rb +0 -18
  361. data/examples/rails-custom-login-page/config/boot.rb +0 -3
  362. data/examples/rails-custom-login-page/config/cable.yml +0 -10
  363. data/examples/rails-custom-login-page/config/database.yml +0 -25
  364. data/examples/rails-custom-login-page/config/environment.rb +0 -5
  365. data/examples/rails-custom-login-page/config/environments/development.rb +0 -54
  366. data/examples/rails-custom-login-page/config/environments/production.rb +0 -91
  367. data/examples/rails-custom-login-page/config/environments/test.rb +0 -42
  368. data/examples/rails-custom-login-page/config/initializers/application_controller_renderer.rb +0 -8
  369. data/examples/rails-custom-login-page/config/initializers/assets.rb +0 -14
  370. data/examples/rails-custom-login-page/config/initializers/backtrace_silencers.rb +0 -7
  371. data/examples/rails-custom-login-page/config/initializers/cookies_serializer.rb +0 -5
  372. data/examples/rails-custom-login-page/config/initializers/filter_parameter_logging.rb +0 -4
  373. data/examples/rails-custom-login-page/config/initializers/inflections.rb +0 -16
  374. data/examples/rails-custom-login-page/config/initializers/mime_types.rb +0 -4
  375. data/examples/rails-custom-login-page/config/initializers/onelogin.rb +0 -6
  376. data/examples/rails-custom-login-page/config/initializers/wrap_parameters.rb +0 -14
  377. data/examples/rails-custom-login-page/config/locales/en.yml +0 -33
  378. data/examples/rails-custom-login-page/config/puma.rb +0 -56
  379. data/examples/rails-custom-login-page/config/routes.rb +0 -23
  380. data/examples/rails-custom-login-page/config/secrets.yml.sample +0 -38
  381. data/examples/rails-custom-login-page/config/spring.rb +0 -6
  382. data/examples/rails-custom-login-page/config.ru +0 -5
  383. data/examples/rails-custom-login-page/db/seeds.rb +0 -7
  384. data/examples/rails-custom-login-page/lib/assets/.keep +0 -0
  385. data/examples/rails-custom-login-page/lib/tasks/.keep +0 -0
  386. data/examples/rails-custom-login-page/package.json +0 -5
  387. data/examples/rails-custom-login-page/public/404.html +0 -67
  388. data/examples/rails-custom-login-page/public/422.html +0 -67
  389. data/examples/rails-custom-login-page/public/500.html +0 -66
  390. data/examples/rails-custom-login-page/public/apple-touch-icon-precomposed.png +0 -0
  391. data/examples/rails-custom-login-page/public/apple-touch-icon.png +0 -0
  392. data/examples/rails-custom-login-page/public/favicon.ico +0 -0
  393. data/examples/rails-custom-login-page/public/robots.txt +0 -1
  394. data/examples/rails-custom-login-page/test/application_system_test_case.rb +0 -5
  395. data/examples/rails-custom-login-page/test/controllers/.keep +0 -0
  396. data/examples/rails-custom-login-page/test/controllers/dashboard_controller_test.rb +0 -9
  397. data/examples/rails-custom-login-page/test/controllers/home_controller_test.rb +0 -9
  398. data/examples/rails-custom-login-page/test/controllers/sessions_controller_test.rb +0 -7
  399. data/examples/rails-custom-login-page/test/controllers/users_controller_test.rb +0 -48
  400. data/examples/rails-custom-login-page/test/fixtures/.keep +0 -0
  401. data/examples/rails-custom-login-page/test/fixtures/files/.keep +0 -0
  402. data/examples/rails-custom-login-page/test/helpers/.keep +0 -0
  403. data/examples/rails-custom-login-page/test/integration/.keep +0 -0
  404. data/examples/rails-custom-login-page/test/mailers/.keep +0 -0
  405. data/examples/rails-custom-login-page/test/models/.keep +0 -0
  406. data/examples/rails-custom-login-page/test/system/.keep +0 -0
  407. data/examples/rails-custom-login-page/test/test_helper.rb +0 -9
  408. data/examples/rails-custom-login-page/vendor/.keep +0 -0
  409. data/lib/onelogin/api/apiexception.rb +0 -10
  410. data/lib/onelogin/api/client.rb +0 -2954
  411. data/lib/onelogin/api/cursor.rb +0 -114
  412. data/lib/onelogin/api/models/app.rb +0 -22
  413. data/lib/onelogin/api/models/auth_factor.rb +0 -16
  414. data/lib/onelogin/api/models/connector_basic.rb +0 -20
  415. data/lib/onelogin/api/models/device.rb +0 -18
  416. data/lib/onelogin/api/models/embed_app.rb +0 -31
  417. data/lib/onelogin/api/models/event.rb +0 -54
  418. data/lib/onelogin/api/models/event_type.rb +0 -17
  419. data/lib/onelogin/api/models/factor_enrollment_response.rb +0 -22
  420. data/lib/onelogin/api/models/group.rb +0 -17
  421. data/lib/onelogin/api/models/mfa.rb +0 -26
  422. data/lib/onelogin/api/models/mfa_token.rb +0 -18
  423. data/lib/onelogin/api/models/onelogin_app.rb +0 -62
  424. data/lib/onelogin/api/models/onelogin_app_basic.rb +0 -51
  425. data/lib/onelogin/api/models/onelogin_app_v1.rb +0 -22
  426. data/lib/onelogin/api/models/onelogin_token.rb +0 -20
  427. data/lib/onelogin/api/models/otp_device.rb +0 -25
  428. data/lib/onelogin/api/models/privilege.rb +0 -51
  429. data/lib/onelogin/api/models/rate_limit.rb +0 -17
  430. data/lib/onelogin/api/models/role.rb +0 -16
  431. data/lib/onelogin/api/models/saml_endpoint_response.rb +0 -18
  432. data/lib/onelogin/api/models/session_token_info.rb +0 -21
  433. data/lib/onelogin/api/models/session_token_mfa_info.rb +0 -26
  434. data/lib/onelogin/api/models/statement.rb +0 -36
  435. data/lib/onelogin/api/models/user.rb +0 -135
  436. data/lib/onelogin/api/models/user_data.rb +0 -13
  437. data/lib/onelogin/api/models/user_metadata.rb +0 -13
  438. data/lib/onelogin/api/models.rb +0 -26
  439. data/lib/onelogin/api/util/constants.rb +0 -177
  440. data/lib/onelogin/api/util/parser.rb +0 -56
  441. data/lib/onelogin/api/util/url_builder.rb +0 -24
  442. data/lib/onelogin/api/util.rb +0 -13
  443. data/lib/onelogin/api.rb +0 -2
@@ -1,2954 +0,0 @@
1
- require 'onelogin/version'
2
- require 'onelogin/api/apiexception'
3
- require 'onelogin/api/cursor'
4
- require 'onelogin/api/util'
5
- require 'json'
6
- require 'httparty'
7
- require 'nokogiri'
8
- require 'time'
9
-
10
- module OneLogin
11
- module Api
12
- # Client class
13
- #
14
- # Client class of the OneLogin's Ruby SDK.
15
- # It makes the API calls to the Onelogin's platform described
16
- # at https://developers.onelogin.com/api-docs/1/getting-started/dev-overview.
17
- #
18
- class Client
19
- include OneLogin::Api::Util
20
- include HTTParty
21
-
22
- attr_accessor :client_id, :client_secret, :region
23
- attr_accessor :user_agent, :error, :error_description, :error_attribute
24
-
25
- NOKOGIRI_OPTIONS = Nokogiri::XML::ParseOptions::STRICT |
26
- Nokogiri::XML::ParseOptions::NONET
27
-
28
- DEFAULT_USER_AGENT = "onelogin-ruby-sdk v#{OneLogin::VERSION}".freeze
29
-
30
- # Create a new instance of the Client.
31
- #
32
- # @param config [Hash] Client Id, Client Secret and Region
33
- #
34
- def initialize(config)
35
- options = Hash[config.map { |(k, v)| [k.to_sym, v] }]
36
-
37
- @client_id = options[:client_id]
38
- @client_secret = options[:client_secret]
39
- @region = options[:region] || 'us'
40
- @max_results = options[:max_results] || 1000
41
-
42
- if options[:timeout] and defined? self.class.default_timeout
43
- self.class.default_timeout options[:timeout]
44
- end
45
-
46
- if options[:proxy_host]
47
- self.class.http_proxy options[:proxy_host], options[:proxy_port], options[:proxy_user], options[:proxy_pass]
48
- end
49
-
50
- self.class.default_options.update(verify: false)
51
-
52
- validate_config
53
-
54
- @user_agent = DEFAULT_USER_AGENT
55
- end
56
-
57
- def validate_config
58
- raise ArgumentError, 'client_id & client_secret are required' unless @client_id && @client_secret
59
- end
60
-
61
- # Clean any previous error registered at the client.
62
- #
63
- def clean_error
64
- @error = nil
65
- @error_description = nil
66
- @error_attribute = nil
67
- end
68
-
69
- def expired?
70
- Time.now.utc > @expiration
71
- end
72
-
73
- def prepare_token
74
- if @access_token.nil?
75
- access_token
76
- elsif expired?
77
- regenerate_token
78
- end
79
- end
80
-
81
- def handle_operation_response(response)
82
- result = false
83
- begin
84
- content = JSON.parse(response.body)
85
- if content
86
- if content.has_key?('status') && content['status'].has_key?('type') && content['status']['type'] == "success"
87
- result = true
88
- elsif content.has_key?('success') && content['success']
89
- result = true
90
- end
91
- end
92
- rescue Exception => e
93
- result = false
94
- end
95
-
96
- result
97
- end
98
-
99
- def handle_session_token_response(response)
100
- content = JSON.parse(response.body)
101
- if content && content.has_key?('status') && content['status'].has_key?('message') && content.has_key?('data')
102
- if content['status']['message'] == "Success"
103
- return OneLogin::Api::Models::SessionTokenInfo.new(content['data'][0])
104
- elsif content['status']['message'] == "MFA is required for this user"
105
- return OneLogin::Api::Models::SessionTokenMFAInfo.new(content['data'][0])
106
- else
107
- raise "Status Message type not reognized: %s" % content['status']['message']
108
- end
109
- end
110
-
111
- nil
112
- end
113
-
114
- def handle_saml_endpoint_response(response)
115
- content = JSON.parse(response.body)
116
- if content && content.has_key?('status') && content['status'].has_key?('message') && content['status'].has_key?('type')
117
- status_type = content['status']['type']
118
- status_message = content['status']['message']
119
- saml_endpoint_response = OneLogin::Api::Models::SAMLEndpointResponse.new(status_type, status_message)
120
- if content.has_key?('data')
121
- if status_message == 'Success'
122
- saml_endpoint_response.saml_response = content['data']
123
- else
124
- mfa = OneLogin::Api::Models::MFA.new(content['data'][0])
125
- saml_endpoint_response.mfa = mfa
126
- end
127
- end
128
-
129
- return saml_endpoint_response
130
- end
131
-
132
- nil
133
- end
134
-
135
- def headers
136
- {
137
- 'Content-Type' => 'application/json',
138
- 'User-Agent' => @user_agent
139
- }
140
- end
141
-
142
- def authorized_headers(bearer = true)
143
- # Removed the ":"
144
- authorization = if bearer
145
- "bearer #{@access_token}"
146
- else
147
- "client_id:#{@client_id},client_secret:#{@client_secret}"
148
- end
149
-
150
- headers.merge({
151
- 'Authorization' => authorization
152
- })
153
- end
154
-
155
- ############################
156
- # OAuth 2.0 Tokens Methods #
157
- ############################
158
-
159
- # Generates an access token and refresh token that you may use to
160
- # call Onelogin's API methods.
161
- #
162
- # @return [OneLoginToken] Returns the generated OAuth Token info
163
- #
164
- # @see {https://developers.onelogin.com/api-docs/1/oauth20-tokens/generate-tokens Generate Tokens documentation}
165
- def access_token
166
- clean_error
167
-
168
- begin
169
- url = url_for(TOKEN_REQUEST_URL)
170
-
171
- data = {
172
- 'grant_type' => 'client_credentials'
173
- }
174
-
175
- response = self.class.post(
176
- url,
177
- headers: authorized_headers(false),
178
- body: data.to_json
179
- )
180
-
181
- if response.code == 200
182
- json_data = JSON.parse(response.body)
183
- if json_data.has_key?('status')
184
- @error = json_data['status']['code'].to_s
185
- @error_description = extract_error_message_from_response(response)
186
- else
187
- token = OneLogin::Api::Models::OneLoginToken.new(json_data)
188
- @access_token = token.access_token
189
- @refresh_token = token.refresh_token
190
- @expiration = token.created_at + token.expires_in
191
- return token
192
- end
193
- else
194
- @error = response.code.to_s
195
- @error_description = extract_error_message_from_response(response)
196
- end
197
- rescue Exception => e
198
- @error = '500'
199
- @error_description = e.message
200
- end
201
-
202
- nil
203
- end
204
-
205
- # Refreshing tokens provides a new set of access and refresh tokens.
206
- #
207
- # @return [OneLoginToken] Returns the refreshed OAuth Token info
208
- #
209
- # @see {https://developers.onelogin.com/api-docs/1/oauth20-tokens/refresh-tokens Refresh Tokens documentation}
210
- def regenerate_token
211
- clean_error
212
-
213
- begin
214
- url = url_for(TOKEN_REQUEST_URL)
215
-
216
- data = {
217
- 'grant_type' => 'refresh_token',
218
- 'access_token' => @access_token,
219
- 'refresh_token' => @refresh_token
220
- }
221
-
222
- response = self.class.post(
223
- url,
224
- headers: headers,
225
- body: data.to_json
226
- )
227
-
228
- if response.code == 200
229
- json_data = JSON.parse(response.body)
230
- if json_data.has_key?('status')
231
- @error = json_data['status']['code'].to_s
232
- @error_description = extract_error_message_from_response(response)
233
- else
234
- token = OneLogin::Api::Models::OneLoginToken.new(json_data)
235
- @access_token = token.access_token
236
- @refresh_token = token.refresh_token
237
- @expiration = token.created_at + token.expires_in
238
- return token
239
- end
240
- else
241
- @error = response.code.to_s
242
- @error_description = extract_error_message_from_response(response)
243
- end
244
- rescue Exception => e
245
- @error = '500'
246
- @error_description = e.message
247
- end
248
-
249
- nil
250
- end
251
-
252
- # Revokes an access token and refresh token pair.
253
- #
254
- # @return [Boolean] If the opeation succeded
255
- #
256
- # @see {https://developers.onelogin.com/api-docs/1/oauth20-tokens/revoke-tokens Revoke Tokens documentation}
257
- def revoke_token
258
- clean_error
259
-
260
- begin
261
- url = url_for(TOKEN_REVOKE_URL)
262
-
263
- data = {
264
- access_token: @access_token
265
- }
266
-
267
- response = self.class.post(
268
- url,
269
- headers: authorized_headers(false),
270
- body: data.to_json
271
- )
272
-
273
- if response.code == 200
274
- @access_token = nil
275
- @refresh_token = nil
276
- @expiration = nil
277
- return true
278
- else
279
- @error = response.code.to_s
280
- @error_description = extract_error_message_from_response(response)
281
- end
282
- rescue Exception => e
283
- @error = '500'
284
- @error_description = e.message
285
- end
286
-
287
- false
288
- end
289
-
290
- # Gets current rate limit details about an access token.
291
- #
292
- # @return [RateLimit] Returns the rate limit info
293
- #
294
- # @see {https://developers.onelogin.com/api-docs/1/oauth20-tokens/get-rate-limit Get Rate Limit documentation}
295
- def get_rate_limits
296
- clean_error
297
- prepare_token
298
-
299
- begin
300
- url = url_for(GET_RATE_URL)
301
-
302
- response = self.class.get(
303
- url,
304
- headers: authorized_headers
305
- )
306
-
307
- if response.code == 200
308
- json_data = JSON.parse(response.body)
309
- if json_data && json_data['data']
310
- return OneLogin::Api::Models::RateLimit.new(json_data['data'])
311
- end
312
- else
313
- @error = response.code.to_s
314
- @error_description = extract_error_message_from_response(response)
315
- end
316
- rescue Exception => e
317
- @error = '500'
318
- @error_description = e.message
319
- end
320
-
321
- nil
322
- end
323
-
324
- ################
325
- # User Methods #
326
- ################
327
-
328
- # Gets a list of User resources. (if no limit provided, by default gt 50 elements)
329
- #
330
- # @param params [Hash] Parameters to filter the result of the list
331
- #
332
- # @return [Array] list of User objects
333
- #
334
- # @see {https://developers.onelogin.com/api-docs/1/users/get-users Get Users documentation}
335
- def get_users(params = {})
336
- clean_error
337
- prepare_token
338
-
339
- begin
340
- options = {
341
- model: OneLogin::Api::Models::User,
342
- headers: authorized_headers,
343
- max_results: @max_results,
344
- params: params
345
- }
346
-
347
- return Cursor.new(self, url_for(GET_USERS_URL), options)
348
-
349
- rescue Exception => e
350
- @error = '500'
351
- @error_description = e.message
352
- end
353
-
354
- nil
355
- end
356
-
357
- # Gets User by ID.
358
- #
359
- # @param user_id [Integer] Id of the user
360
- #
361
- # @return [User] the user identified by the id
362
- #
363
- # @see {https://developers.onelogin.com/api-docs/1/users/get-user-by-id Get User by ID documentation}
364
- def get_user(user_id)
365
- clean_error
366
- prepare_token
367
-
368
- begin
369
- if user_id.nil? || user_id.to_s.empty?
370
- @error = '400'
371
- @error_description = "user_id is required"
372
- @error_attribute = "user_id"
373
- return
374
- end
375
-
376
- url = url_for(GET_USER_URL, user_id)
377
-
378
- response = self.class.get(
379
- url,
380
- headers: authorized_headers
381
- )
382
-
383
- if response.code == 200
384
- json_data = JSON.parse(response.body)
385
- if json_data && json_data['data']
386
- return OneLogin::Api::Models::User.new(json_data['data'][0])
387
- end
388
- else
389
- @error = response.code.to_s
390
- @error_description = extract_error_message_from_response(response)
391
- end
392
- rescue Exception => e
393
- @error = '500'
394
- @error_description = e.message
395
- end
396
-
397
- nil
398
- end
399
-
400
- # Gets a list of apps accessible by a user, not including personal apps.
401
- #
402
- # @param user_id [Integer] Id of the user
403
- #
404
- # @return [Array] the apps of the user identified by the id
405
- #
406
- # @see {https://developers.onelogin.com/api-docs/1/users/get-apps-for-user Get Apps for a User documentation}
407
- def get_user_apps(user_id)
408
- clean_error
409
- prepare_token
410
-
411
- begin
412
- if user_id.nil? || user_id.to_s.empty?
413
- @error = '400'
414
- @error_description = "user_id is required"
415
- @error_attribute = "user_id"
416
- return
417
- end
418
-
419
- options = {
420
- model: OneLogin::Api::Models::App,
421
- headers: authorized_headers,
422
- max_results: @max_results
423
- }
424
-
425
- return Cursor.new(self, url_for(GET_APPS_FOR_USER_URL, user_id), options)
426
-
427
- rescue Exception => e
428
- @error = '500'
429
- @error_description = e.message
430
- end
431
-
432
- nil
433
- end
434
-
435
- # Gets a list of role IDs that have been assigned to a user.
436
- #
437
- # @param user_id [Integer] Id of the user
438
- #
439
- # @return [Array] the role ids of the user identified by the id
440
- #
441
- # @see {https://developers.onelogin.com/api-docs/1/users/get-roles-for-user Get Roles for a User documentation}
442
- def get_user_roles(user_id)
443
- clean_error
444
- prepare_token
445
-
446
- begin
447
- if user_id.nil? || user_id.to_s.empty?
448
- @error = '400'
449
- @error_description = "user_id is required"
450
- @error_attribute = "user_id"
451
- return
452
- end
453
-
454
- url = url_for(GET_ROLES_FOR_USER_URL, user_id)
455
-
456
- response = self.class.get(
457
- url,
458
- headers: authorized_headers
459
- )
460
-
461
- role_ids = []
462
- if response.code == 200
463
- json_data = JSON.parse(response.body)
464
- role_ids = json_data['data'][0] if json_data && json_data['data']
465
- else
466
- @error = response.code.to_s
467
- @error_description = extract_error_message_from_response(response)
468
- end
469
-
470
- return role_ids
471
- rescue Exception => e
472
- @error = '500'
473
- @error_description = e.message
474
- end
475
-
476
- nil
477
- end
478
-
479
- # Gets a list of all custom attribute fields (also known as custom user fields) that have been defined for OL account.
480
- #
481
- # @return [Array] the custom attributes of the account
482
- #
483
- # @see {https://developers.onelogin.com/api-docs/1/users/get-custom-attributes Get Custom Attributes documentation}
484
- def get_custom_attributes
485
- clean_error
486
- prepare_token
487
-
488
- begin
489
- url = url_for(GET_CUSTOM_ATTRIBUTES_URL)
490
-
491
- response = self.class.get(
492
- url,
493
- headers: authorized_headers
494
- )
495
-
496
- custom_attributes = []
497
- if response.code == 200
498
- json_data = JSON.parse(response.body)
499
- if json_data && json_data['data']
500
- custom_attributes = json_data['data'][0]
501
- end
502
- else
503
- @error = response.code.to_s
504
- @error_description = extract_error_message_from_response(response)
505
- end
506
-
507
- return custom_attributes
508
- rescue Exception => e
509
- @error = '500'
510
- @error_description = e.message
511
- end
512
-
513
- nil
514
- end
515
-
516
- # Creates an user
517
- #
518
- # @param user_params [Hash] User data (firstname, lastname, email, username, company,
519
- # department, directory_id, distinguished_name,
520
- # external_id, group_id, invalid_login_attempts,
521
- # locale_code, manager_ad_id, member_of,
522
- # openid_name, phone, samaccountname, title,
523
- # userprincipalname)
524
- #
525
- # @return [User] the created user
526
- #
527
- # @see {https://developers.onelogin.com/api-docs/1/users/create-user Create User documentation}
528
- def create_user(user_params)
529
- clean_error
530
- prepare_token
531
-
532
- begin
533
- url = url_for(CREATE_USER_URL)
534
-
535
- response = self.class.post(
536
- url,
537
- headers: authorized_headers,
538
- body: user_params.to_json
539
- )
540
-
541
- if response.code == 200
542
- json_data = JSON.parse(response.body)
543
- if json_data && json_data['data']
544
- return OneLogin::Api::Models::User.new(json_data['data'][0])
545
- end
546
- else
547
- @error = response.code.to_s
548
- @error_description = extract_error_message_from_response(response)
549
- @error_attribute = extract_error_attribute_from_response(response)
550
- end
551
- rescue Exception => e
552
- @error = '500'
553
- @error_description = e.message
554
- end
555
-
556
- nil
557
- end
558
-
559
- # Updates an user
560
- #
561
- # @param user_id [Integer] Id of the user
562
- # @param user_params [Hash] User data (firstname, lastname, email, username, company,
563
- # department, directory_id, distinguished_name,
564
- # external_id, group_id, invalid_login_attempts,
565
- # locale_code, manager_ad_id, member_of,
566
- # openid_name, phone, samaccountname, title,
567
- # userprincipalname)
568
- #
569
- # @return [User] the modified user
570
- #
571
- # @see {https://developers.onelogin.com/api-docs/1/users/update-user Update User by ID documentation}
572
- def update_user(user_id, user_params)
573
- clean_error
574
- prepare_token
575
-
576
- begin
577
- if user_id.nil? || user_id.to_s.empty?
578
- @error = '400'
579
- @error_description = "user_id is required"
580
- @error_attribute = "user_id"
581
- return
582
- end
583
-
584
- url = url_for(UPDATE_USER_URL, user_id)
585
-
586
- response = self.class.put(
587
- url,
588
- headers: authorized_headers,
589
- body: user_params.to_json
590
- )
591
-
592
- if response.code == 200
593
- json_data = JSON.parse(response.body)
594
- if json_data && json_data['data']
595
- return OneLogin::Api::Models::User.new(json_data['data'][0])
596
- end
597
- else
598
- @error = response.code.to_s
599
- @error_description = extract_error_message_from_response(response)
600
- @error_attribute = extract_error_attribute_from_response(response)
601
- end
602
- rescue Exception => e
603
- @error = '500'
604
- @error_description = e.message
605
- end
606
-
607
- nil
608
- end
609
-
610
- # Assigns Roles to User
611
- #
612
- # @param user_id [Integer] Id of the user
613
- # @param role_ids [Array] List of role ids to be added
614
- #
615
- # @return [Boolean] if the action succeed
616
- #
617
- # @see {https://developers.onelogin.com/api-docs/1/users/assign-role-to-user Assign Role to User documentation}
618
- def assign_role_to_user(user_id, role_ids)
619
- clean_error
620
- prepare_token
621
-
622
- begin
623
- if user_id.nil? || user_id.to_s.empty?
624
- @error = '400'
625
- @error_description = "user_id is required"
626
- @error_attribute = "user_id"
627
- return
628
- end
629
-
630
- url = url_for(ADD_ROLE_TO_USER_URL, user_id)
631
-
632
- data = {
633
- 'role_id_array' => role_ids
634
- }
635
-
636
- response = self.class.put(
637
- url,
638
- headers: authorized_headers,
639
- body: data.to_json
640
- )
641
-
642
- if response.code == 200
643
- return handle_operation_response(response)
644
- else
645
- @error = response.code.to_s
646
- @error_description = extract_error_message_from_response(response)
647
- @error_attribute = extract_error_attribute_from_response(response)
648
- end
649
- rescue Exception => e
650
- @error = '500'
651
- @error_description = e.message
652
- end
653
-
654
- false
655
- end
656
-
657
- # Removes Role from User
658
- #
659
- # @param user_id [Integer] Id of the user
660
- # @param role_ids [Array] List of role ids to be removed
661
- #
662
- # @return [Boolean] if the action succeed
663
- #
664
- # @see {https://developers.onelogin.com/api-docs/1/users/remove-role-from-user Remove Role from User documentation}
665
- def remove_role_from_user(user_id, role_ids)
666
- clean_error
667
- prepare_token
668
-
669
- begin
670
- if user_id.nil? || user_id.to_s.empty?
671
- @error = '400'
672
- @error_description = "user_id is required"
673
- @error_attribute = "user_id"
674
- return
675
- end
676
-
677
- url = url_for(DELETE_ROLE_TO_USER_URL, user_id)
678
-
679
- data = {
680
- 'role_id_array' => role_ids
681
- }
682
-
683
- response = self.class.put(
684
- url,
685
- headers: authorized_headers,
686
- body: data.to_json
687
- )
688
-
689
- if response.code == 200
690
- return handle_operation_response(response)
691
- else
692
- @error = response.code.to_s
693
- @error_description = extract_error_message_from_response(response)
694
- @error_attribute = extract_error_attribute_from_response(response)
695
- end
696
- rescue Exception => e
697
- @error = '500'
698
- @error_description = e.message
699
- end
700
-
701
- false
702
- end
703
-
704
- # Sets Password by ID Using Cleartext
705
- #
706
- # @param user_id [Integer] Id of the user
707
- # @param password [String] Set to the password value using cleartext.
708
- # @param password_confirmation [String] Ensure that this value matches the password value exactly.
709
- # @validate_policy [Boolean] Force validation against assigned OneLogin user password policy
710
- #
711
- # @return [Boolean] if the action succeed
712
- #
713
- # @see {https://developers.onelogin.com/api-docs/1/users/set-password-in-cleartext Set Password by ID Using Cleartext documentation}
714
- def set_password_using_clear_text(user_id, password, password_confirmation, validate_policy=false)
715
- clean_error
716
- prepare_token
717
-
718
- begin
719
- if user_id.nil? || user_id.to_s.empty?
720
- @error = '400'
721
- @error_description = "user_id is required"
722
- @error_attribute = "user_id"
723
- return
724
- end
725
-
726
- url = url_for(SET_PW_CLEARTEXT, user_id)
727
-
728
- data = {
729
- 'password' => password,
730
- 'password_confirmation' => password_confirmation,
731
- 'validate_policy' => validate_policy
732
- }
733
-
734
- response = self.class.put(
735
- url,
736
- headers: authorized_headers,
737
- body: data.to_json
738
- )
739
-
740
- if response.code == 200
741
- return handle_operation_response(response)
742
- else
743
- @error = response.code.to_s
744
- @error_description = extract_error_message_from_response(response)
745
- @error_attribute = extract_error_attribute_from_response(response)
746
- end
747
- rescue Exception => e
748
- @error = '500'
749
- @error_description = e.message
750
- end
751
-
752
- false
753
- end
754
-
755
- # Set Password by ID Using Salt and SHA-256
756
- #
757
- # @param user_id [Integer] Id of the user
758
- # @param password [String] Set to the password value using cleartext.
759
- # @param password_confirmation [String] Ensure that this value matches the password value exactly.
760
- # @param password_algorithm [String] Set to salt+sha256.
761
- # @param password_salt [String] (Optional) To provide your own salt value.
762
- #
763
- # @return [Boolean] if the action succeed
764
- #
765
- # @see {https://developers.onelogin.com/api-docs/1/users/set-password-using-sha-256 Set Password by ID Using Salt and SHA-256 documentation}
766
- def set_password_using_hash_salt(user_id, password, password_confirmation, password_algorithm, password_salt=nil)
767
- clean_error
768
- prepare_token
769
-
770
- begin
771
- if user_id.nil? || user_id.to_s.empty?
772
- @error = '400'
773
- @error_description = "user_id is required"
774
- @error_attribute = "user_id"
775
- return
776
- end
777
-
778
- url = url_for(SET_PW_SALT, user_id)
779
-
780
- data = {
781
- 'password' => password,
782
- 'password_confirmation' => password_confirmation,
783
- 'password_algorithm' => password_algorithm
784
- }
785
-
786
- unless password_salt.nil?
787
- data['password_salt'] = password_salt
788
- end
789
-
790
- response = self.class.put(
791
- url,
792
- headers: authorized_headers,
793
- body: data.to_json
794
- )
795
-
796
- if response.code == 200
797
- return handle_operation_response(response)
798
- else
799
- @error = response.code.to_s
800
- @error_description = extract_error_message_from_response(response)
801
- @error_attribute = extract_error_attribute_from_response(response)
802
- end
803
- rescue Exception => e
804
- @error = '500'
805
- @error_description = e.message
806
- end
807
-
808
- false
809
- end
810
-
811
- # Set User State
812
- #
813
- # @param id [Integer] Id of the user to be modified
814
- # @param state [Integer] Set to the state value. [Unapproved: 0, Approved (licensed): 1, Rejected: 2, Unlicensed: 3]
815
- #
816
- # @return [Boolean] if the action succeed
817
- #
818
- # @see {https://developers.onelogin.com/api-docs/1/users/set-state Set User State documentation}
819
- def set_state_to_user(user_id, state)
820
- clean_error
821
- prepare_token
822
-
823
- begin
824
- if user_id.nil? || user_id.to_s.empty?
825
- @error = '400'
826
- @error_description = "user_id is required"
827
- @error_attribute = "user_id"
828
- return
829
- end
830
-
831
- url = url_for(SET_USER_STATE_URL, user_id)
832
-
833
- data = {
834
- 'state' => state
835
- }
836
-
837
- response = self.class.put(
838
- url,
839
- headers: authorized_headers,
840
- body: data.to_json
841
- )
842
-
843
- if response.code == 200
844
- return handle_operation_response(response)
845
- else
846
- @error = response.code.to_s
847
- @error_description = extract_error_message_from_response(response)
848
- @error_attribute = extract_error_attribute_from_response(response)
849
- end
850
- rescue Exception => e
851
- @error = '500'
852
- @error_description = e.message
853
- end
854
-
855
- false
856
- end
857
-
858
- # Set Custom Attribute Value
859
- #
860
- # @param user_id [Integer] Id of the user
861
- # @param custom_attributes [Hash] Provide one or more key value pairs composed of the custom attribute field shortname and the value that you want to set the field to.
862
- #
863
- # @return [Boolean] if the action succeed
864
- #
865
- # @see {https://developers.onelogin.com/api-docs/1/users/set-custom-attribute Set Custom Attribute Value documentation}
866
- def set_custom_attribute_to_user(user_id, custom_attributes)
867
- clean_error
868
- prepare_token
869
-
870
- begin
871
- if user_id.nil? || user_id.to_s.empty?
872
- @error = '400'
873
- @error_description = "user_id is required"
874
- @error_attribute = "user_id"
875
- return
876
- end
877
-
878
- url = url_for(SET_CUSTOM_ATTRIBUTE_TO_USER_URL, user_id)
879
-
880
- data = {
881
- 'custom_attributes' => custom_attributes
882
- }
883
-
884
- response = self.class.put(
885
- url,
886
- headers: authorized_headers,
887
- body: data.to_json
888
- )
889
-
890
- if response.code == 200
891
- return handle_operation_response(response)
892
- else
893
- @error = response.code.to_s
894
- @error_description = extract_error_message_from_response(response)
895
- @error_attribute = extract_error_attribute_from_response(response)
896
- end
897
- rescue Exception => e
898
- @error = '500'
899
- @error_description = e.message
900
- end
901
-
902
- false
903
- end
904
-
905
- # Log a user out of any and all sessions.
906
- #
907
- # @param user_id [Integer] Id of the user to be logged out
908
- #
909
- # @return [Boolean] if the action succeed
910
- #
911
- # @see {https://developers.onelogin.com/api-docs/1/users/log-user-out Log User Out documentation}
912
- def log_user_out(user_id)
913
- clean_error
914
- prepare_token
915
-
916
- begin
917
- if user_id.nil? || user_id.to_s.empty?
918
- @error = '400'
919
- @error_description = "user_id is required"
920
- @error_attribute = "user_id"
921
- return
922
- end
923
-
924
- url = url_for(LOG_USER_OUT_URL, user_id)
925
-
926
- response = self.class.put(
927
- url,
928
- headers: authorized_headers
929
- )
930
-
931
- if response.code == 200
932
- return handle_operation_response(response)
933
- else
934
- @error = response.code.to_s
935
- @error_description = extract_error_message_from_response(response)
936
- @error_attribute = extract_error_attribute_from_response(response)
937
- end
938
- rescue Exception => e
939
- @error = '500'
940
- @error_description = e.message
941
- end
942
-
943
- false
944
- end
945
-
946
- # Use this call to lock a user's account based on the policy assigned to
947
- # the user, for a specific time you define in the request, or until you
948
- # unlock it.
949
- #
950
- # @param user_id [Integer] Id of the user to be locked
951
- # @param minutes [Integer] Set to the number of minutes for which you want to lock the user account. (0 to delegate on policy)
952
- #
953
- # @return [Boolean] if the action succeed
954
- #
955
- # @see {https://developers.onelogin.com/api-docs/1/users/lock-user-account Lock User Account documentation}
956
- def lock_user(user_id, minutes)
957
- clean_error
958
- prepare_token
959
-
960
- begin
961
- if user_id.nil? || user_id.to_s.empty?
962
- @error = '400'
963
- @error_description = "user_id is required"
964
- @error_attribute = "user_id"
965
- return
966
- end
967
-
968
- url = url_for(LOCK_USER_URL, user_id)
969
-
970
- data = {
971
- 'locked_until' => minutes
972
- }
973
-
974
- response = self.class.put(
975
- url,
976
- headers: authorized_headers,
977
- body: data.to_json
978
- )
979
-
980
- if response.code == 200
981
- return handle_operation_response(response)
982
- else
983
- @error = response.code.to_s
984
- @error_description = extract_error_message_from_response(response)
985
- @error_attribute = extract_error_attribute_from_response(response)
986
- end
987
- rescue Exception => e
988
- @error = '500'
989
- @error_description = e.message
990
- end
991
-
992
- false
993
- end
994
-
995
- # Deletes an user
996
- #
997
- # @param user_id [Integer] Id of the user to be removed
998
- #
999
- # @return [Boolean] if the action succeed
1000
- #
1001
- # @see {https://developers.onelogin.com/api-docs/1/users/delete-user Delete User by ID documentation}
1002
- def delete_user(user_id)
1003
- clean_error
1004
- prepare_token
1005
-
1006
- begin
1007
- if user_id.nil? || user_id.to_s.empty?
1008
- @error = '400'
1009
- @error_description = "user_id is required"
1010
- @error_attribute = "user_id"
1011
- return
1012
- end
1013
-
1014
- url = url_for(DELETE_USER_URL, user_id)
1015
-
1016
- response = self.class.delete(
1017
- url,
1018
- headers: authorized_headers
1019
- )
1020
-
1021
- if response.code == 200
1022
- return handle_operation_response(response)
1023
- else
1024
- @error = response.code.to_s
1025
- @error_description = extract_error_message_from_response(response)
1026
- @error_attribute = extract_error_attribute_from_response(response)
1027
- end
1028
- rescue Exception => e
1029
- @error = '500'
1030
- @error_description = e.message
1031
- end
1032
-
1033
- false
1034
- end
1035
-
1036
- # Use to generate a temporary MFA token that can be used in place of other MFA tokens for a set time period.
1037
- # For example, use this token for account recovery.
1038
- #
1039
- # @param user_id [Integer] Id of the user
1040
- # @param expires_in [Integer] Set the duration of the token in seconds.
1041
- # (default: 259200 seconds = 72h) 72 hours is the max value.
1042
- # @param reusable [Boolean] Defines if the token reusable. (default: false) If set to true, token can be used for multiple apps, until it expires.
1043
- #
1044
- # @return [MFAToken] if the action succeed
1045
- #
1046
- # @see {https://developers.onelogin.com/api-docs/1/multi-factor-authentication/generate-mfa-token Generate MFA Token documentation}
1047
- def generate_mfa_token(user_id, expires_in=259200, reusable=false)
1048
- clean_error
1049
- prepare_token
1050
-
1051
- begin
1052
- if user_id.nil? || user_id.to_s.empty?
1053
- @error = '400'
1054
- @error_description = "user_id is required"
1055
- @error_attribute = "user_id"
1056
- return
1057
- end
1058
-
1059
- url = url_for(GENERATE_MFA_TOKEN_URL, user_id)
1060
-
1061
- data = {
1062
- 'expires_in' => expires_in,
1063
- 'reusable' => reusable
1064
- }
1065
-
1066
- response = self.class.post(
1067
- url,
1068
- headers: authorized_headers,
1069
- body: data.to_json
1070
- )
1071
-
1072
- if response.code == 201
1073
- json_data = JSON.parse(response.body)
1074
- if !json_data.empty?
1075
- return OneLogin::Api::Models::MFAToken.new(json_data)
1076
- end
1077
- else
1078
- @error = extract_status_code_from_response(response)
1079
- @error_description = extract_error_message_from_response(response)
1080
- end
1081
- rescue Exception => e
1082
- @error = '500'
1083
- @error_description = e.message
1084
- end
1085
-
1086
- nil
1087
- end
1088
-
1089
- # Generates a session login token in scenarios in which MFA may or may not be required.
1090
- # A session login token expires two minutes after creation.
1091
- #
1092
- # @param query_params [Hash] Query Parameters (username_or_email, password, subdomain, return_to_url,
1093
- # ip_address, browser_id)
1094
- # @param allowed_origin [String] Custom-Allowed-Origin-Header. Required for CORS requests only.
1095
- # Set to the Origin URI from which you are allowed to send a request
1096
- # using CORS.
1097
- #
1098
- # @return [SessionTokenInfo|SessionTokenMFAInfo] if the action succeed
1099
- #
1100
- # @see {https://developers.onelogin.com/api-docs/1/users/create-session-login-token Create Session Login Token documentation}
1101
- def create_session_login_token(query_params, allowed_origin='')
1102
- clean_error
1103
- prepare_token
1104
-
1105
- begin
1106
- url = url_for(SESSION_LOGIN_TOKEN_URL)
1107
-
1108
- if query_params.nil? || !query_params.has_key?('username_or_email') || !query_params.has_key?('password') || !query_params.has_key?('subdomain')
1109
- raise "username_or_email, password and subdomain are required parameters"
1110
- end
1111
-
1112
- headers = authorized_headers
1113
- if allowed_origin
1114
- headers = headers.merge({ 'Custom-Allowed-Origin-Header-1' => allowed_origin })
1115
- end
1116
-
1117
- response = self.class.post(
1118
- url,
1119
- headers: headers,
1120
- body: query_params.to_json
1121
- )
1122
-
1123
- if response.code == 200
1124
- return handle_session_token_response(response)
1125
- else
1126
- @error = response.code.to_s
1127
- @error_description = extract_error_message_from_response(response)
1128
- end
1129
- rescue Exception => e
1130
- @error = '500'
1131
- @error_description = e.message
1132
- end
1133
-
1134
- nil
1135
- end
1136
-
1137
- # Verify a one-time password (OTP) value provided for multi-factor authentication (MFA).
1138
- #
1139
- # @param device_id [String] Provide the MFA device_id you are submitting for verification.
1140
- # @param state_token [String] Provide the state_token associated with the MFA device_id you are submitting for verification.
1141
- # @param otp_token [String] (Optional) Provide the OTP value for the MFA factor you are submitting for verification.
1142
- # @param allowed_origin [String] (Optional) Required for CORS requests only. Set to the Origin URI from which you are allowed to send a request using CORS.
1143
- # @param do_not_notify [String] (Optional) When verifying MFA via Protect Push, set this to true to stop additional push notifications being sent to the OneLogin Protect device.
1144
- #
1145
- # @return [SessionTokenInfo] if the action succeed
1146
- #
1147
- # @see {https://developers.onelogin.com/api-docs/1/users/verify-factor Verify Factor documentation}
1148
- def get_session_token_verified(device_id, state_token, otp_token=nil, allowed_origin='', do_not_notify=false)
1149
- clean_error
1150
- prepare_token
1151
-
1152
- begin
1153
- if device_id.nil? || device_id.to_s.empty?
1154
- @error = '400'
1155
- @error_description = "device_id is required"
1156
- @error_attribute = "device_id"
1157
- return
1158
- end
1159
-
1160
- url = url_for(GET_TOKEN_VERIFY_FACTOR)
1161
-
1162
- data = {
1163
- 'device_id'=> device_id.to_s,
1164
- 'state_token'=> state_token,
1165
- 'do_not_notify'=> do_not_notify
1166
- }
1167
-
1168
- unless otp_token.nil? || otp_token.empty?
1169
- data['otp_token'] = otp_token
1170
- end
1171
-
1172
- headers = authorized_headers
1173
- if allowed_origin
1174
- headers = headers.merge({ 'Custom-Allowed-Origin-Header-1' => allowed_origin })
1175
- end
1176
-
1177
- response = self.class.post(
1178
- url,
1179
- headers: headers,
1180
- body: data.to_json
1181
- )
1182
-
1183
- if response.code == 200
1184
- return handle_session_token_response(response)
1185
- else
1186
- @error = response.code.to_s
1187
- @error_description = extract_error_message_from_response(response)
1188
- end
1189
- rescue Exception => e
1190
- @error = '500'
1191
- @error_description = e.message
1192
- end
1193
-
1194
- nil
1195
- end
1196
-
1197
- ###############################
1198
- # Onelogin Connectors Methods #
1199
- ###############################
1200
-
1201
- # Gets a list of Connector resources.
1202
- #
1203
- # @param params [Hash] Parameters to filter the result of the list
1204
- #
1205
- # @return [Array] list of Connector objects
1206
- #
1207
- # @see {https://developers.onelogin.com/api-docs/1/connectors/list-connectors List Connectors documentation}
1208
- def get_connectors(params = {})
1209
- clean_error
1210
- prepare_token
1211
-
1212
- begin
1213
- url = url_for(GET_CONNECTORS_URL)
1214
-
1215
- connectors = []
1216
- response = self.class.get(
1217
- url,
1218
- headers: authorized_headers,
1219
- query: params
1220
- )
1221
-
1222
- if response.code == 200
1223
- json_data = JSON.parse(response.body)
1224
- if !json_data.empty?
1225
- json_data.each do |data|
1226
- pp data
1227
- connectors << OneLogin::Api::Models::ConnectorBasic.new(data)
1228
- end
1229
- end
1230
- return connectors
1231
- else
1232
- @error = extract_status_code_from_response(response)
1233
- @error_description = extract_error_message_from_response(response)
1234
- end
1235
- rescue Exception => e
1236
- @error = '500'
1237
- @error_description = e.message
1238
- end
1239
-
1240
- nil
1241
- end
1242
-
1243
- #########################
1244
- # Onelogin Apps Methods #
1245
- #########################
1246
-
1247
- # Gets a list of OneLoginAppV1 resources. (if no limit provided, by default get 50 elements)
1248
- #
1249
- # @param params [Hash] Parameters to filter the result of the list
1250
- #
1251
- # @return [Array] list of OneLoginAppV1 objects
1252
- #
1253
- # @see {https://developers.onelogin.com/api-docs/1/apps/get-apps Get Apps documentation}
1254
- def get_apps_v1(params = {})
1255
- clean_error
1256
- prepare_token
1257
-
1258
- begin
1259
- options = {
1260
- model: OneLogin::Api::Models::OneLoginAppV1,
1261
- headers: authorized_headers,
1262
- max_results: @max_results,
1263
- params: params
1264
- }
1265
-
1266
- return Cursor.new(self, url_for(GET_APPS_URL_V1), options)
1267
-
1268
- rescue Exception => e
1269
- @error = '500'
1270
- @error_description = e.message
1271
- end
1272
-
1273
- nil
1274
- end
1275
-
1276
- # Gets a list of OneLoginAppBasic resources.
1277
- #
1278
- # @param params [Hash] Parameters to filter the result of the list
1279
- #
1280
- # @return [Array] list of OneLoginAppBasic objects
1281
- #
1282
- # @see {https://developers.onelogin.com/api-docs/1/apps/list-apps Get Apps documentation}
1283
- def get_apps(params = {})
1284
- clean_error
1285
- prepare_token
1286
-
1287
- begin
1288
- url = url_for(GET_APPS_URL)
1289
-
1290
- apps = []
1291
- response = self.class.get(
1292
- url,
1293
- headers: authorized_headers,
1294
- query: params
1295
- )
1296
-
1297
- if response.code == 200
1298
- json_data = JSON.parse(response.body)
1299
- if !json_data.empty?
1300
- json_data.each do |data|
1301
- apps << OneLogin::Api::Models::OneLoginAppBasic.new(data)
1302
- end
1303
- end
1304
- return apps
1305
- else
1306
- @error = extract_status_code_from_response(response)
1307
- @error_description = extract_error_message_from_response(response)
1308
- end
1309
- rescue Exception => e
1310
- @error = '500'
1311
- @error_description = e.message
1312
- end
1313
-
1314
- nil
1315
- end
1316
-
1317
- # Creates an app
1318
- #
1319
- # @param app_params [Hash] App data (name, visible, policy_id, is_available, parameters, allow_assumed_signin,
1320
- # configuration, notes, description, provisioning,
1321
- # connector_id, auth_method, tab_id)
1322
- #
1323
- # @return [OneLoginApp] the created app
1324
- #
1325
- # @see {https://developers.onelogin.com/api-docs/1/apps/create-app Create App documentation}
1326
- def create_app(app_params)
1327
- clean_error
1328
- prepare_token
1329
-
1330
- begin
1331
- url = url_for(CREATE_APP_URL)
1332
-
1333
- unless app_params.has_key?('connector_id') || app_params['connector_id'].to_s.empty?
1334
- @error = '400'
1335
- @error_description = "connector_id is required"
1336
- @error_attribute = "connector_id"
1337
- return
1338
- end
1339
-
1340
- response = self.class.post(
1341
- url,
1342
- headers: authorized_headers,
1343
- body: app_params.to_json
1344
- )
1345
-
1346
- if response.code == 201
1347
- json_data = JSON.parse(response.body)
1348
- if json_data && json_data.has_key?('id')
1349
- return OneLogin::Api::Models::OneLoginApp.new(json_data)
1350
- end
1351
- else
1352
- @error = extract_status_code_from_response(response)
1353
- @error_description = extract_error_message_from_response(response)
1354
- @error_attribute = extract_error_attribute_from_response(response)
1355
- end
1356
- rescue Exception => e
1357
- @error = '500'
1358
- @error_description = e.message
1359
- end
1360
-
1361
- nil
1362
- end
1363
-
1364
- # Gets a OneLoginApp resource.
1365
- #
1366
- # @return [OneLoginApp] OneLoginApp object
1367
- #
1368
- # @see {https://developers.onelogin.com/api-docs/1/apps/get-app Get App documentation}
1369
- def get_app(app_id)
1370
- clean_error
1371
- prepare_token
1372
-
1373
- begin
1374
- if app_id.nil? || app_id.to_s.empty?
1375
- @error = '400'
1376
- @error_description = "app_id is required"
1377
- @error_attribute = "app_id"
1378
- return
1379
- end
1380
-
1381
- url = url_for(GET_APP_URL, app_id)
1382
-
1383
- response = self.class.get(
1384
- url,
1385
- headers: authorized_headers
1386
- )
1387
-
1388
- if response.code == 200
1389
- json_data = JSON.parse(response.body)
1390
- if json_data && json_data.has_key?('id')
1391
- return OneLogin::Api::Models::OneLoginApp.new(json_data)
1392
- end
1393
- else
1394
- @error = extract_status_code_from_response(response)
1395
- @error_description = extract_error_message_from_response(response)
1396
- end
1397
- rescue Exception => e
1398
- @error = '500'
1399
- @error_description = e.message
1400
- end
1401
-
1402
- nil
1403
- end
1404
-
1405
- # Updates an app
1406
- #
1407
- # @param app_id [Integer] Id of the app
1408
- # @param app_params [Hash] App data (name, visible, policy_id, is_available, parameters, allow_assumed_signin,
1409
- # configuration, notes, description, provisioning,
1410
- # connector_id, auth_method, tab_id)
1411
- #
1412
- # @return [User] the modified user
1413
- #
1414
- # @see {https://developers.onelogin.com/api-docs/1/apps/update-app Update App by ID documentation}
1415
- def update_app(app_id, app_params)
1416
- clean_error
1417
- prepare_token
1418
-
1419
- begin
1420
- if app_id.nil? || app_id.to_s.empty?
1421
- @error = '400'
1422
- @error_description = "app_id is required"
1423
- @error_attribute = "app_id"
1424
- return
1425
- end
1426
-
1427
- url = url_for(UPDATE_APP_URL, app_id)
1428
-
1429
- response = self.class.put(
1430
- url,
1431
- headers: authorized_headers,
1432
- body: app_params.to_json
1433
- )
1434
-
1435
- if response.code == 200
1436
- json_data = JSON.parse(response.body)
1437
- if json_data && json_data.has_key?('id')
1438
- return OneLogin::Api::Models::OneLoginApp.new(json_data)
1439
- end
1440
- else
1441
- @error = response.code.to_s
1442
- @error_description = extract_error_message_from_response(response)
1443
- @error_attribute = extract_error_attribute_from_response(response)
1444
- end
1445
- rescue Exception => e
1446
- @error = '500'
1447
- @error_description = e.message
1448
- end
1449
-
1450
- nil
1451
- end
1452
-
1453
- # Deletes an app
1454
- #
1455
- # @param app_id [Integer] Id of the app to be removed
1456
- #
1457
- # @return [Boolean] if the action succeed
1458
- #
1459
- # @see {https://developers.onelogin.com/api-docs/1/apps/delete-app Delete App by ID documentation}
1460
- def delete_app(app_id)
1461
- clean_error
1462
- prepare_token
1463
-
1464
- begin
1465
- if app_id.nil? || app_id.to_s.empty?
1466
- @error = '400'
1467
- @error_description = "app_id is required"
1468
- @error_attribute = "app_id"
1469
- return
1470
- end
1471
-
1472
- url = url_for(DELETE_APP_URL, app_id)
1473
-
1474
- response = self.class.delete(
1475
- url,
1476
- headers: authorized_headers
1477
- )
1478
-
1479
- if response.code == 204
1480
- return true
1481
- else
1482
- @error = response.code.to_s
1483
- @error_description = extract_error_message_from_response(response)
1484
- @error_attribute = extract_error_attribute_from_response(response)
1485
- end
1486
- rescue Exception => e
1487
- @error = '500'
1488
- @error_description = e.message
1489
- end
1490
-
1491
- false
1492
- end
1493
-
1494
- # Deletes an App Parameter
1495
- #
1496
- # @param app_id [Integer] Id of the app
1497
- # @param parameter_id [Integer] Id of the parameter to be removed
1498
- #
1499
- # @return [Boolean] if the action succeed
1500
- #
1501
- # @see {https://developers.onelogin.com/api-docs/1/apps/delete-parameter Delete an App Parameter documentation}
1502
- def delete_parameter_from_app(app_id, parameter_id)
1503
- clean_error
1504
- prepare_token
1505
-
1506
- begin
1507
- if app_id.nil? || app_id.to_s.empty?
1508
- @error = '400'
1509
- @error_description = "app_id is required"
1510
- @error_attribute = "app_id"
1511
- return
1512
- end
1513
-
1514
- if parameter_id.nil? || parameter_id.to_s.empty?
1515
- @error = '400'
1516
- @error_description = "parameter_id is required"
1517
- @error_attribute = "parameter_id"
1518
- return
1519
- end
1520
-
1521
- url = url_for(DELETE_APP_PARAMETER_URL, app_id, parameter_id)
1522
-
1523
- response = self.class.delete(
1524
- url,
1525
- headers: authorized_headers
1526
- )
1527
-
1528
- if response.code == 204
1529
- return true
1530
- else
1531
- @error = response.code.to_s
1532
- @error_description = extract_error_message_from_response(response)
1533
- @error_attribute = extract_error_attribute_from_response(response)
1534
- end
1535
- rescue Exception => e
1536
- @error = '500'
1537
- @error_description = e.message
1538
- end
1539
-
1540
- false
1541
- end
1542
-
1543
- ################
1544
- # Role Methods #
1545
- ################
1546
-
1547
- # Gets a list of Role resources. (if no limit provided, by default get 50 elements)
1548
- #
1549
- # @param params [Hash] Parameters to filter the result of the list
1550
- #
1551
- # @return [Array] list of Role objects
1552
- #
1553
- # @see {https://developers.onelogin.com/api-docs/1/roles/get-roles Get Roles documentation}
1554
- def get_roles(params = {})
1555
- clean_error
1556
- prepare_token
1557
-
1558
- begin
1559
- options = {
1560
- model: OneLogin::Api::Models::Role,
1561
- headers: authorized_headers,
1562
- max_results: @max_results,
1563
- params: params
1564
- }
1565
-
1566
- return Cursor.new(self, url_for(GET_ROLES_URL), options)
1567
-
1568
- rescue Exception => e
1569
- @error = '500'
1570
- @error_description = e.message
1571
- end
1572
-
1573
- nil
1574
- end
1575
-
1576
- # Gets Role by ID.
1577
- #
1578
- # @param role_id [Integer] Id of the Role
1579
- #
1580
- # @return [Role] the role identified by the id
1581
- #
1582
- # @see {https://developers.onelogin.com/api-docs/1/roles/get-role-by-id Get Role by ID documentation}
1583
- def get_role(role_id)
1584
- clean_error
1585
- prepare_token
1586
-
1587
- begin
1588
- if role_id.nil? || role_id.to_s.empty?
1589
- @error = '400'
1590
- @error_description = "role_id is required"
1591
- @error_attribute = "role_id"
1592
- return
1593
- end
1594
-
1595
- url = url_for(GET_ROLE_URL, role_id)
1596
-
1597
- response = self.class.get(
1598
- url,
1599
- headers: authorized_headers
1600
- )
1601
-
1602
- if response.code == 200
1603
- json_data = JSON.parse(response.body)
1604
- if json_data && json_data['data']
1605
- return OneLogin::Api::Models::Role.new(json_data['data'][0])
1606
- end
1607
- else
1608
- @error = response.code.to_s
1609
- @error_description = extract_error_message_from_response(response)
1610
- end
1611
- rescue Exception => e
1612
- @error = '500'
1613
- @error_description = e.message
1614
- end
1615
-
1616
- nil
1617
- end
1618
-
1619
- #################
1620
- # Event Methods #
1621
- #################
1622
-
1623
- # List of all OneLogin event types available to the Events API.
1624
- #
1625
- # @return [Array] the list of event type
1626
- #
1627
- # @see {https://developers.onelogin.com/api-docs/1/events/event-types Get Event Types documentation}
1628
- def get_event_types
1629
- clean_error
1630
- prepare_token
1631
-
1632
- begin
1633
- options = {
1634
- model: OneLogin::Api::Models::EventType,
1635
- headers: authorized_headers,
1636
- max_results: @max_results
1637
- }
1638
-
1639
- return Cursor.new(self, url_for(GET_EVENT_TYPES_URL), options)
1640
-
1641
- rescue Exception => e
1642
- @error = '500'
1643
- @error_description = e.message
1644
- end
1645
-
1646
- nil
1647
- end
1648
-
1649
- # Gets a list of Event resources. (if no limit provided, by default get 50 elements)
1650
- #
1651
- # @param params [Hash] Parameters to filter the result of the list
1652
- #
1653
- # @return [Array] list of Event objects
1654
- #
1655
- # @see {https://developers.onelogin.com/api-docs/1/events/get-events Get Events documentation}
1656
- def get_events(params={})
1657
- clean_error
1658
- prepare_token
1659
-
1660
- begin
1661
- options = {
1662
- model: OneLogin::Api::Models::Event,
1663
- headers: authorized_headers,
1664
- max_results: @max_results,
1665
- params: params
1666
- }
1667
-
1668
- return Cursor.new(self, url_for(GET_EVENTS_URL), options)
1669
-
1670
- rescue Exception => e
1671
- @error = '500'
1672
- @error_description = e.message
1673
- end
1674
-
1675
- nil
1676
- end
1677
-
1678
- # Gets Event by ID.
1679
- #
1680
- # @param event_id [Integer] Id of the Event
1681
- #
1682
- # @return [Event] the event identified by the id
1683
- #
1684
- # @see {https://developers.onelogin.com/api-docs/1/events/get-event-by-id Get Event by ID documentation}
1685
- def get_event(event_id)
1686
- clean_error
1687
- prepare_token
1688
-
1689
- begin
1690
- if event_id.nil? || event_id.to_s.empty?
1691
- @error = '400'
1692
- @error_description = "event_id is required"
1693
- @error_attribute = "event_id"
1694
- return
1695
- end
1696
-
1697
- url = url_for(GET_EVENT_URL, event_id)
1698
-
1699
- response = self.class.get(
1700
- url,
1701
- headers: authorized_headers
1702
- )
1703
-
1704
- if response.code == 200
1705
- json_data = JSON.parse(response.body)
1706
- if json_data && json_data['data']
1707
- return OneLogin::Api::Models::Event.new(json_data['data'][0])
1708
- end
1709
- else
1710
- @error = response.code.to_s
1711
- @error_description = extract_error_message_from_response(response)
1712
- end
1713
- rescue Exception => e
1714
- @error = '500'
1715
- @error_description = e.message
1716
- end
1717
-
1718
- nil
1719
- end
1720
-
1721
- # Create an event in the OneLogin event log.
1722
- #
1723
- # @param event_params [Hash] Event data (event_type_id, account_id, actor_system,
1724
- # actor_user_id, actor_user_name, app_id,
1725
- # assuming_acting_user_id, custom_message,
1726
- # directory_sync_run_id, group_id, group_name,
1727
- # ipaddr, otp_device_id, otp_device_name,
1728
- # policy_id, policy_name, role_id, role_name,
1729
- # user_id, user_name)
1730
- #
1731
- # @return [Boolean] the result of the operation
1732
- #
1733
- # @see {https://developers.onelogin.com/api-docs/1/events/create-event Create Event documentation}
1734
- def create_event(event_params)
1735
- clean_error
1736
- prepare_token
1737
-
1738
- begin
1739
- url = url_for(CREATE_EVENT_URL)
1740
-
1741
- response = self.class.post(
1742
- url,
1743
- headers: authorized_headers,
1744
- body: event_params.to_json
1745
- )
1746
-
1747
- if response.code == 200
1748
- return handle_operation_response(response)
1749
- else
1750
- @error = response.code.to_s
1751
- @error_description = extract_error_message_from_response(response)
1752
- @error_attribute = extract_error_attribute_from_response(response)
1753
- end
1754
- rescue Exception => e
1755
- @error = '500'
1756
- @error_description = e.message
1757
- end
1758
-
1759
- false
1760
- end
1761
-
1762
- #################
1763
- # Group Methods #
1764
- #################
1765
-
1766
- # Gets a list of Group resources (element of groups limited with the limit parameter).
1767
- #
1768
- # @return [Array] the list of groups
1769
- #
1770
- # @see {https://developers.onelogin.com/api-docs/1/groups/get-groups Get Groups documentation}
1771
- def get_groups(params = {})
1772
- clean_error
1773
- prepare_token
1774
-
1775
- begin
1776
- options = {
1777
- model: OneLogin::Api::Models::Group,
1778
- headers: authorized_headers,
1779
- max_results: @max_results,
1780
- params: params
1781
- }
1782
-
1783
- return Cursor.new(self, url_for(GET_GROUPS_URL), options)
1784
-
1785
- rescue Exception => e
1786
- @error = '500'
1787
- @error_description = e.message
1788
- end
1789
-
1790
- nil
1791
- end
1792
-
1793
- # Gets Group by ID.
1794
- #
1795
- # @param group_id [Integer] Id of the Group
1796
- #
1797
- # @return [Group] the group identified by the id
1798
- #
1799
- # @see {https://developers.onelogin.com/api-docs/1/groups/get-group-by-id Get Group by ID documentation}
1800
- def get_group(group_id)
1801
- clean_error
1802
- prepare_token
1803
-
1804
- begin
1805
- if group_id.nil? || group_id.to_s.empty?
1806
- @error = '400'
1807
- @error_description = "group_id is required"
1808
- @error_attribute = "group_id"
1809
- return
1810
- end
1811
-
1812
- url = url_for(GET_GROUP_URL, group_id)
1813
-
1814
- response = self.class.get(
1815
- url,
1816
- headers: authorized_headers
1817
- )
1818
-
1819
- if response.code == 200
1820
- json_data = JSON.parse(response.body)
1821
- if json_data && json_data['data']
1822
- return OneLogin::Api::Models::Group.new(json_data['data'][0])
1823
- end
1824
- else
1825
- @error = response.code.to_s
1826
- @error_description = extract_error_message_from_response(response)
1827
- end
1828
- rescue Exception => e
1829
- @error = '500'
1830
- @error_description = e.message
1831
- end
1832
-
1833
- nil
1834
- end
1835
-
1836
- ##########################
1837
- # SAML Assertion Methods #
1838
- ##########################
1839
-
1840
- # Generates a SAML Assertion.
1841
- #
1842
- # @param username_or_email [String] username or email of the OneLogin user accessing the app
1843
- # @param password [String] Password of the OneLogin user accessing the app
1844
- # @param app_id [String] App ID of the app for which you want to generate a SAML token
1845
- # @param subdomain [String] subdomain of the OneLogin account related to the user/app
1846
- # @param ip_address [String] (Optional) whitelisted IP address that needs to be bypassed (some MFA scenarios)
1847
- #
1848
- # @return [SAMLEndpointResponse] object with an encoded SAMLResponse
1849
- #
1850
- # @see {https://developers.onelogin.com/api-docs/1/saml-assertions/generate-saml-assertion Generate SAML Assertion documentation}
1851
- def get_saml_assertion(username_or_email, password, app_id, subdomain, ip_address=nil)
1852
- clean_error
1853
- prepare_token
1854
-
1855
- begin
1856
- url = url_for(GET_SAML_ASSERTION_URL)
1857
-
1858
- data = {
1859
- 'username_or_email'=> username_or_email,
1860
- 'password'=> password,
1861
- 'app_id'=> app_id,
1862
- 'subdomain'=> subdomain,
1863
- }
1864
-
1865
- unless ip_address.nil? || ip_address.empty?
1866
- data['ip_address'] = ip_address
1867
- end
1868
-
1869
- response = self.class.post(
1870
- url,
1871
- headers: authorized_headers,
1872
- body: data.to_json
1873
- )
1874
-
1875
- if response.code == 200
1876
- return handle_saml_endpoint_response(response)
1877
- else
1878
- @error = response.code.to_s
1879
- @error_description = extract_error_message_from_response(response)
1880
- end
1881
- rescue Exception => e
1882
- @error = '500'
1883
- @error_description = e.message
1884
- end
1885
-
1886
- nil
1887
- end
1888
-
1889
- # Verify a one-time password (OTP) value provided for a second factor when multi-factor authentication (MFA) is required for SAML authentication.
1890
- #
1891
- # @param app_id [String] App ID of the app for which you want to generate a SAML token
1892
- # @param devide_id [String] Provide the MFA device_id you are submitting for verification.
1893
- # @param state_token [String] Provide the state_token associated with the MFA device_id you are submitting for verification.
1894
- # @param otp_token [String] (Optional) Provide the OTP value for the MFA factor you are submitting for verification.
1895
- # @param url_endpoint [String] (Optional) Specify an url where return the response.
1896
- # @param do_not_notify [String] (Optional) When verifying MFA via Protect Push, set this to true to stop additional push notifications being sent to the OneLogin Protect device
1897
- #
1898
- # @return [SAMLEndpointResponse] object with an encoded SAMLResponse
1899
- #
1900
- # @see {https://developers.onelogin.com/api-docs/1/saml-assertions/verify-factor Verify Factor documentation}
1901
- def get_saml_assertion_verifying(app_id, device_id, state_token, otp_token=nil, url_endpoint=nil, do_not_notify=false)
1902
- clean_error
1903
- prepare_token
1904
-
1905
- begin
1906
- if app_id.nil? || app_id.to_s.empty?
1907
- @error = '400'
1908
- @error_description = "app_id is required"
1909
- @error_attribute = "app_id"
1910
- return
1911
- end
1912
-
1913
- if device_id.nil? || device_id.to_s.empty?
1914
- @error = '400'
1915
- @error_description = "device_id is required"
1916
- @error_attribute = "device_id"
1917
- return
1918
- end
1919
-
1920
- if url_endpoint.nil? || url_endpoint.empty?
1921
- url = url_for(GET_SAML_VERIFY_FACTOR)
1922
- else
1923
- url = url_endpoint
1924
- end
1925
-
1926
- data = {
1927
- 'app_id'=> app_id,
1928
- 'device_id'=> device_id.to_s,
1929
- 'state_token'=> state_token,
1930
- 'do_not_notify'=> do_not_notify
1931
- }
1932
-
1933
- unless otp_token.nil? || otp_token.empty?
1934
- data['otp_token'] = otp_token
1935
- end
1936
-
1937
- response = self.class.post(
1938
- url,
1939
- headers: authorized_headers,
1940
- body: data.to_json
1941
- )
1942
-
1943
- if response.code == 200
1944
- return handle_saml_endpoint_response(response)
1945
- else
1946
- @error = response.code.to_s
1947
- @error_description = extract_error_message_from_response(response)
1948
- end
1949
- rescue Exception => e
1950
- @error = '500'
1951
- @error_description = e.message
1952
- end
1953
-
1954
- nil
1955
- end
1956
-
1957
- #############################
1958
- # Multi-factor Auth Methods #
1959
- #############################
1960
-
1961
- # Returns a list of authentication factors that are available for user enrollment via API.
1962
- #
1963
- # @param user_id [Integer] The id of the user.
1964
- #
1965
- # @return [Array] AuthFactor list
1966
- #
1967
- # @see {https://developers.onelogin.com/api-docs/1/multi-factor-authentication/available-factors Get Available Authentication Factors documentation}
1968
- def get_factors(user_id)
1969
- clean_error
1970
- prepare_token
1971
-
1972
- begin
1973
- if user_id.nil? || user_id.to_s.empty?
1974
- @error = '400'
1975
- @error_description = "user_id is required"
1976
- @error_attribute = "user_id"
1977
- return
1978
- end
1979
-
1980
- url = url_for(GET_FACTORS_URL, user_id)
1981
-
1982
- response = self.class.get(
1983
- url,
1984
- :headers => authorized_headers
1985
- )
1986
-
1987
- factors = []
1988
- if response.code == 200
1989
- json_data = JSON.parse(response.body)
1990
- if json_data and json_data['data'] and json_data['data']['auth_factors']
1991
- json_data['data']['auth_factors'].each do |factor_data|
1992
- factors << OneLogin::Api::Models::AuthFactor.new(factor_data)
1993
- end
1994
- end
1995
- else
1996
- @error = response.code.to_s
1997
- @error_description = extract_error_message_from_response(response)
1998
- end
1999
- return factors
2000
- rescue Exception => e
2001
- @error = '500'
2002
- @error_description = e.message
2003
- end
2004
-
2005
- nil
2006
- end
2007
-
2008
- # Enroll a user with a given authentication factor.
2009
- #
2010
- # @param user_id [Integer] The id of the user.
2011
- # @param factor_id [Integer] The identifier of the factor to enroll the user with.
2012
- # @param display_name [String] A name for the users device.
2013
- # @param number [String] The phone number of the user in E.164 format.
2014
- #
2015
- # @return [OTPDevice] MFA device
2016
- #
2017
- # @see {https://developers.onelogin.com/api-docs/1/multi-factor-authentication/enroll-factor Enroll an Authentication Factor documentation}
2018
- def enroll_factor(user_id, factor_id, display_name, number)
2019
- clean_error
2020
- prepare_token
2021
-
2022
- begin
2023
- if user_id.nil? || user_id.to_s.empty?
2024
- @error = '400'
2025
- @error_description = "user_id is required"
2026
- @error_attribute = "user_id"
2027
- return
2028
- end
2029
-
2030
- if factor_id.nil? || factor_id.to_s.empty?
2031
- @error = '400'
2032
- @error_description = "factor_id is required"
2033
- @error_attribute = "factor_id"
2034
- return
2035
- end
2036
-
2037
- url = url_for(ENROLL_FACTOR_URL, user_id)
2038
-
2039
- data = {
2040
- 'factor_id'=> factor_id.to_i,
2041
- 'display_name'=> display_name,
2042
- 'number'=> number
2043
- }
2044
-
2045
- response = self.class.post(
2046
- url,
2047
- :headers => authorized_headers,
2048
- body: data.to_json
2049
- )
2050
-
2051
- if response.code == 200
2052
- json_data = JSON.parse(response.body)
2053
- if json_data and json_data['data']
2054
- return OneLogin::Api::Models::OTPDevice.new(json_data['data'][0])
2055
- end
2056
- else
2057
- @error = response.code.to_s
2058
- @error_description = extract_error_message_from_response(response)
2059
- end
2060
- rescue Exception => e
2061
- @error = '500'
2062
- @error_description = e.message
2063
- end
2064
-
2065
- nil
2066
- end
2067
-
2068
- # Return a list of authentication factors registered to a particular user for multifactor authentication (MFA)
2069
- #
2070
- # @param user_id [Integer] The id of the user.
2071
- #
2072
- # @return [Array] OTPDevice List
2073
- #
2074
- # @see {https://developers.onelogin.com/api-docs/1/multi-factor-authentication/enrolled-factors Get Enrolled Authentication Factors documentation}
2075
- def get_enrolled_factors(user_id)
2076
- clean_error
2077
- prepare_token
2078
-
2079
- begin
2080
- if user_id.nil? || user_id.to_s.empty?
2081
- @error = '400'
2082
- @error_description = "user_id is required"
2083
- @error_attribute = "user_id"
2084
- return
2085
- end
2086
-
2087
- url = url_for(GET_ENROLLED_FACTORS_URL, user_id)
2088
-
2089
- response = self.class.get(
2090
- url,
2091
- :headers => authorized_headers
2092
- )
2093
-
2094
- otp_devices = []
2095
- if response.code == 200
2096
- json_data = JSON.parse(response.body)
2097
- if json_data and json_data['data'] and json_data['data']['otp_devices']
2098
- json_data['data']['otp_devices'].each do |otp_device_data|
2099
- otp_devices << OneLogin::Api::Models::OTPDevice.new(otp_device_data)
2100
- end
2101
- end
2102
- else
2103
- @error = response.code.to_s
2104
- @error_description = extract_error_message_from_response(response)
2105
- end
2106
- return otp_devices
2107
- rescue Exception => e
2108
- @error = '500'
2109
- @error_description = e.message
2110
- end
2111
-
2112
- nil
2113
- end
2114
-
2115
- # Triggers an SMS or Push notification containing a One-Time Password (OTP)
2116
- # that can be used to authenticate a user with the Verify Factor call.
2117
- #
2118
- # @param user_id [Integer] The id of the user.
2119
- # @param device_id [Integer] The id of the MFA device.
2120
- #
2121
- # @return [FactorEnrollmentResponse] Info with User Id, Device Id, and OTP Device
2122
- #
2123
- # @see {https://developers.onelogin.com/api-docs/1/multi-factor-authentication/activate-factor Activate an Authentication Factor documentation}
2124
- def activate_factor(user_id, device_id)
2125
- clean_error
2126
- prepare_token
2127
-
2128
- begin
2129
- if user_id.nil? || user_id.to_s.empty?
2130
- @error = '400'
2131
- @error_description = "user_id is required"
2132
- @error_attribute = "user_id"
2133
- return
2134
- end
2135
-
2136
- if device_id.nil? || device_id.to_s.empty?
2137
- @error = '400'
2138
- @error_description = "device_id is required"
2139
- @error_attribute = "device_id"
2140
- return
2141
- end
2142
-
2143
- url = url_for(ACTIVATE_FACTOR_URL, user_id, device_id)
2144
-
2145
- response = self.class.post(
2146
- url,
2147
- headers: authorized_headers
2148
- )
2149
-
2150
- if response.code == 200
2151
- json_data = JSON.parse(response.body)
2152
- if json_data && json_data['data']
2153
- return OneLogin::Api::Models::FactorEnrollmentResponse.new(json_data['data'][0])
2154
- end
2155
- else
2156
- @error = response.code.to_s
2157
- @error_description = extract_error_message_from_response(response)
2158
- end
2159
- rescue Exception => e
2160
- @error = '500'
2161
- @error_description = e.message
2162
- end
2163
-
2164
- nil
2165
- end
2166
-
2167
- # Authenticates a one-time password (OTP) code provided by a multifactor authentication (MFA) device.
2168
- #
2169
- # @param user_id [Integer] The id of the user.
2170
- # @param device_id [Integer] The id of the MFA device.
2171
- # @param otp_token [String] OTP code provided by the device or SMS message sent to user.
2172
- # When a device like OneLogin Protect that supports Push has
2173
- # been used you do not need to provide the otp_token.
2174
- # @param state_token [String] The state_token is returned after a successful request
2175
- # to Enroll a Factor or Activate a Factor.
2176
- # MUST be provided if the needs_trigger attribute from
2177
- # the proceeding calls is set to true.
2178
- #
2179
- # @return [Boolean] True if Factor is verified
2180
- #
2181
- # @see {https://developers.onelogin.com/api-docs/1/multi-factor-authentication/verify-factor Verify an Authentication Factor documentation}
2182
- def verify_factor(user_id, device_id, otp_token=nil, state_token=nil)
2183
- clean_error
2184
- prepare_token
2185
-
2186
- begin
2187
- if user_id.nil? || user_id.to_s.empty?
2188
- @error = '400'
2189
- @error_description = "user_id is required"
2190
- @error_attribute = "user_id"
2191
- return
2192
- end
2193
-
2194
- if device_id.nil? || device_id.to_s.empty?
2195
- @error = '400'
2196
- @error_description = "device_id is required"
2197
- @error_attribute = "device_id"
2198
- return
2199
- end
2200
-
2201
-
2202
- url = url_for(VERIFY_FACTOR_URL, user_id, device_id)
2203
-
2204
- data = {
2205
- 'user_id'=> user_id,
2206
- 'device_id'=> device_id
2207
- }
2208
-
2209
- unless otp_token.nil? || otp_token.empty?
2210
- data['otp_token'] = otp_token
2211
- end
2212
-
2213
- unless state_token.nil? || state_token.empty?
2214
- data['state_token'] = state_token
2215
- end
2216
-
2217
- response = self.class.post(
2218
- url,
2219
- headers: authorized_headers,
2220
- body: data.to_json
2221
- )
2222
-
2223
- if response.code == 200
2224
- return handle_operation_response(response)
2225
- else
2226
- @error = response.code.to_s
2227
- @error_description = extract_error_message_from_response(response)
2228
- end
2229
- rescue Exception => e
2230
- @error = '500'
2231
- @error_description = e.message
2232
- end
2233
-
2234
- false
2235
- end
2236
-
2237
- # Remove an enrolled factor from a user.
2238
- #
2239
- # @param user_id [Integer] The id of the user.
2240
- # @param device_id [Integer] The device_id of the MFA device.
2241
- #
2242
- # @return [Boolean] The result of the action
2243
- #
2244
- # @see {https://developers.onelogin.com/api-docs/1/multi-factor-authentication/remove-factor Remove a Factor documentation}
2245
- def remove_factor(user_id, device_id)
2246
- clean_error
2247
- prepare_token
2248
-
2249
- begin
2250
-
2251
- if user_id.nil? || user_id.to_s.empty?
2252
- @error = '400'
2253
- @error_description = "user_id is required"
2254
- @error_attribute = "user_id"
2255
- return
2256
- end
2257
-
2258
- if device_id.nil? || device_id.to_s.empty?
2259
- @error = '400'
2260
- @error_description = "device_id is required"
2261
- @error_attribute = "device_id"
2262
- return
2263
- end
2264
-
2265
- url = url_for(REMOVE_FACTOR_URL, user_id, device_id)
2266
-
2267
- response = self.class.delete(
2268
- url,
2269
- :headers => authorized_headers
2270
- )
2271
-
2272
- if response.code == 200
2273
- return true
2274
- else
2275
- @error = response.code.to_s
2276
- @error_description = extract_error_message_from_response(response)
2277
- return false
2278
- end
2279
- rescue Exception => e
2280
- @error = '500'
2281
- @error_description = e.message
2282
- end
2283
-
2284
- nil
2285
- end
2286
-
2287
- ########################
2288
- # Invite Links Methods #
2289
- ########################
2290
-
2291
- # Generates an invite link for a user that you have already created in your OneLogin account.
2292
- #
2293
- # @param email [String] Set to the email address of the user that you want to generate an invite link for.
2294
- #
2295
- # @return [String] the invitation link
2296
- #
2297
- # @see {https://developers.onelogin.com/api-docs/1/invite-links/generate-invite-link Generate Invite Link documentation}
2298
- def generate_invite_link(email)
2299
- clean_error
2300
- prepare_token
2301
-
2302
- begin
2303
- if email.nil? || email.to_s.empty?
2304
- @error = '400'
2305
- @error_description = "email is required"
2306
- @error_attribute = "email"
2307
- return
2308
- end
2309
-
2310
- url = url_for(GENERATE_INVITE_LINK_URL)
2311
-
2312
- data = {
2313
- 'email'=> email
2314
- }
2315
-
2316
- response = self.class.post(
2317
- url,
2318
- headers: authorized_headers,
2319
- body: data.to_json
2320
- )
2321
-
2322
- if response.code == 200
2323
- json_data = JSON.parse(response.body)
2324
- if json_data && json_data['data']
2325
- return json_data['data'][0]
2326
- end
2327
- else
2328
- @error = response.code.to_s
2329
- @error_description = extract_error_message_from_response(response)
2330
- end
2331
- rescue Exception => e
2332
- @error = '500'
2333
- @error_description = e.message
2334
- end
2335
-
2336
- nil
2337
- end
2338
-
2339
- # Sends an invite link to a user that you have already created in your OneLogin account.
2340
- #
2341
- # @param email [String] Set to the email address of the user that you want to send an invite link for.
2342
- # @param personal_email [String] (Optional) If you want to send the invite email to an email other than the
2343
- # one provided in email, provide it here. The invite link will be
2344
- # sent to this address instead.
2345
- #
2346
- # @return [String] the result of the operation
2347
- #
2348
- # @see {https://developers.onelogin.com/api-docs/1/invite-links/send-invite-link Send Invite Link documentation}
2349
- def send_invite_link(email, personal_email=nil)
2350
- clean_error
2351
- prepare_token
2352
-
2353
- begin
2354
- url = url_for(SEND_INVITE_LINK_URL)
2355
-
2356
- data = {
2357
- 'email'=> email
2358
- }
2359
-
2360
- unless personal_email.nil? || personal_email.to_s.empty?
2361
- data['personal_email'] = personal_email
2362
- end
2363
-
2364
- response = self.class.post(
2365
- url,
2366
- headers: authorized_headers,
2367
- body: data.to_json
2368
- )
2369
-
2370
- if response.code == 200
2371
- return handle_operation_response(response)
2372
- else
2373
- @error = response.code.to_s
2374
- @error_description = extract_error_message_from_response(response)
2375
- end
2376
- rescue Exception => e
2377
- @error = '500'
2378
- @error_description = e.message
2379
- end
2380
-
2381
- false
2382
- end
2383
-
2384
- # Lists apps accessible by a OneLogin user.
2385
- #
2386
- # @param token [String] Provide your embedding token.
2387
- # @param email [String] Provide the email of the user for which you want to return a list of embeddable apps.
2388
- #
2389
- # @return [Array] the embed apps
2390
- #
2391
- # @see {https://developers.onelogin.com/api-docs/1/embed-apps/get-apps-to-embed-for-a-user Get Apps to Embed for a User documentation}
2392
- def get_embed_apps(token, email)
2393
- clean_error
2394
-
2395
- begin
2396
- response = self.class.get(
2397
- EMBED_APP_URL,
2398
- headers: {
2399
- 'User-Agent' => @user_agent
2400
- },
2401
- query: {
2402
- token: token,
2403
- email: email
2404
- }
2405
- )
2406
-
2407
- if response.code == 200 && !(response.body.nil? || response.body.empty?)
2408
- return retrieve_apps_from_xml(response.body)
2409
- else
2410
- @error = response.code.to_s
2411
- unless response.body.nil? || response.body.empty?
2412
- @error_description = response.body
2413
- end
2414
- end
2415
- rescue Exception => e
2416
- @error = '500'
2417
- @error_description = e.message
2418
- end
2419
-
2420
- nil
2421
- end
2422
-
2423
- def retrieve_apps_from_xml(xml_content)
2424
- doc = Nokogiri::XML(xml_content) do |config|
2425
- config.options = NOKOGIRI_OPTIONS
2426
- end
2427
-
2428
- node_list = doc.xpath("/apps/app")
2429
- attributes = ['id', 'icon', 'name', 'provisioned', 'extension_required', 'personal', 'login_id']
2430
- apps = []
2431
- node_list.each do |node|
2432
- app_data = {}
2433
- node.children.each do |children|
2434
- if attributes.include? children.name
2435
- app_data[children.name] = children.content
2436
- end
2437
- end
2438
- apps << OneLogin::Api::Models::EmbedApp.new(app_data)
2439
- end
2440
-
2441
- apps
2442
- end
2443
-
2444
- #####################
2445
- # Privilege Methods #
2446
- #####################
2447
-
2448
- # Gets a list of the Privileges created in an account.
2449
- #
2450
- # @return [Array] list of privilege objects
2451
- #
2452
- # @see {https://developers.onelogin.com/api-docs/1/privileges/list-privileges List Privileges documentation}
2453
- def get_privileges()
2454
- clean_error
2455
- prepare_token
2456
-
2457
- begin
2458
-
2459
- url = url_for(LIST_PRIVILEGES_URL)
2460
-
2461
- privileges = []
2462
- response = self.class.get(
2463
- url,
2464
- headers: authorized_headers
2465
- )
2466
-
2467
- if response.code == 200
2468
- json_data = JSON.parse(response.body)
2469
- if !json_data.empty?
2470
- json_data.each do |data|
2471
- privileges << OneLogin::Api::Models::Privilege.new(data)
2472
- end
2473
- end
2474
- return privileges
2475
- else
2476
- @error = extract_status_code_from_response(response)
2477
- @error_description = extract_error_message_from_response(response)
2478
- end
2479
- rescue Exception => e
2480
- @error = '500'
2481
- @error_description = e.message
2482
- end
2483
-
2484
- nil
2485
- end
2486
-
2487
- # Creates a Privilege
2488
- #
2489
- # @param name [string] The name of the privilege.
2490
- # @param version [string] The version for the privilege schema. Set to 2018-05-18.
2491
- # @param statements [Array] A list of statements. Statement object or a dict with the keys Effect, Action and Scope
2492
- #
2493
- # @return [Privilege] the created privilege
2494
- #
2495
- # @see {https://developers.onelogin.com/api-docs/1/privileges/create-privilege Create Privilege documentation}
2496
- def create_privilege(name, version, statements)
2497
- clean_error
2498
- prepare_token
2499
-
2500
- begin
2501
- url = url_for(CREATE_PRIVILEGE_URL)
2502
-
2503
- statement_data = []
2504
- for statement in statements
2505
- if statement.instance_of?(OneLogin::Api::Models::Statement)
2506
- statement_data << {
2507
- 'Effect' => statement.effect,
2508
- 'Action' => statement.actions,
2509
- 'Scope' => statement.scopes
2510
- }
2511
- elsif statement.instance_of?(Hash) && statement.has_key?('Effect') && statement.has_key?('Action') && statement.has_key?('Scope')
2512
- statement_data << statement
2513
- else
2514
- @error = 400.to_s
2515
- @error_description = "statements is invalid. Provide a list of statements. The statement should be an Statement object or dict with the keys Effect, Action and Scope"
2516
- return
2517
- end
2518
- end
2519
-
2520
- privilege_data = {
2521
- 'name' => name,
2522
- 'privilege' => {
2523
- 'Version'=> version,
2524
- 'Statement' => statement_data
2525
- }
2526
- }
2527
-
2528
- response = self.class.post(
2529
- url,
2530
- headers: authorized_headers,
2531
- body: privilege_data.to_json
2532
- )
2533
-
2534
- if response.code == 201
2535
- json_data = JSON.parse(response.body)
2536
- if json_data && json_data.has_key?('id')
2537
- return OneLogin::Api::Models::Privilege.new(json_data['id'], name, version, statements)
2538
- end
2539
- else
2540
- @error = extract_status_code_from_response(response)
2541
- @error_description = extract_error_message_from_response(response)
2542
- end
2543
- rescue Exception => e
2544
- @error = '500'
2545
- @error_description = e.message
2546
- end
2547
-
2548
- nil
2549
- end
2550
-
2551
- # Get a Privilege.
2552
- #
2553
- # @param privilege_id [string] Id of the privilege
2554
- #
2555
- # @return [Privilege] the privilege identified by the id
2556
- #
2557
- # @see {https://developers.onelogin.com/api-docs/1/privileges/get-privilege Get Privilege documentation}
2558
- def get_privilege(privilege_id)
2559
- clean_error
2560
- prepare_token
2561
-
2562
- begin
2563
- if privilege_id.nil? || privilege_id.to_s.empty?
2564
- @error = '400'
2565
- @error_description = "privilege_id is required"
2566
- @error_attribute = "privilege_id"
2567
- return
2568
- end
2569
-
2570
- url = url_for(GET_PRIVILEGE_URL, privilege_id)
2571
-
2572
- response = self.class.get(
2573
- url,
2574
- headers: authorized_headers
2575
- )
2576
-
2577
- if response.code == 200
2578
- json_data = JSON.parse(response.body)
2579
- if json_data && json_data.has_key?('id')
2580
- return OneLogin::Api::Models::Privilege.new(json_data)
2581
- end
2582
- else
2583
- @error = extract_status_code_from_response(response)
2584
- @error_description = extract_error_message_from_response(response)
2585
- end
2586
- rescue Exception => e
2587
- @error = '500'
2588
- @error_description = e.message
2589
- end
2590
-
2591
- nil
2592
- end
2593
-
2594
- # Updates a Privilege
2595
- #
2596
- # @param privilege_id [string] The id of the privilege to be updated.
2597
- # @param name [string] The name of the privilege.
2598
- # @param version [string] The version for the privilege schema. Set to 2018-05-18.
2599
- # @param statements [Array] A list of statements. Statement object or a dict with the keys Effect, Action and Scope
2600
- #
2601
- #
2602
- # @return [Privilege] the modified privilege
2603
- #
2604
- # @see {https://developers.onelogin.com/api-docs/1/privileges/update-privilege Update Privilege documentation}
2605
- def update_privilege(privilege_id, name, version, statements)
2606
- clean_error
2607
- prepare_token
2608
-
2609
- begin
2610
- if privilege_id.nil? || privilege_id.to_s.empty?
2611
- @error = '400'
2612
- @error_description = "privilege_id is required"
2613
- @error_attribute = "privilege_id"
2614
- return
2615
- end
2616
-
2617
- url = url_for(UPDATE_PRIVILEGE_URL, privilege_id)
2618
-
2619
- statement_data = []
2620
- for statement in statements
2621
- if statement.instance_of?(OneLogin::Api::Models::Statement)
2622
- statement_data << {
2623
- 'Effect' => statement.effect,
2624
- 'Action' => statement.actions,
2625
- 'Scope' => statement.scopes
2626
- }
2627
- elsif statement.instance_of?(Hash) && statement.has_key?('Effect') && statement.has_key?('Action') && statement.has_key?('Scope')
2628
- statement_data << statement
2629
- else
2630
- @error = 400.to_s
2631
- @error_description = "statements is invalid. Provide a list of statements. The statement should be an Statement object or dict with the keys Effect, Action and Scope"
2632
- return
2633
- end
2634
- end
2635
-
2636
- privilege_data = {
2637
- 'name' => name,
2638
- 'privilege' => {
2639
- 'Version'=> version,
2640
- 'Statement' => statement_data
2641
- }
2642
- }
2643
-
2644
- response = self.class.put(
2645
- url,
2646
- headers: authorized_headers,
2647
- body: privilege_data.to_json
2648
- )
2649
-
2650
- if response.code == 200
2651
- json_data = JSON.parse(response.body)
2652
- if json_data && json_data.has_key?('id')
2653
- return OneLogin::Api::Models::Privilege.new(json_data['id'], name, version, statements)
2654
- end
2655
- else
2656
- @error = extract_status_code_from_response(response)
2657
- @error_description = extract_error_message_from_response(response)
2658
- end
2659
- rescue Exception => e
2660
- @error = '500'
2661
- @error_description = e.message
2662
- end
2663
-
2664
- nil
2665
- end
2666
-
2667
- # Deletes a Privilege
2668
- #
2669
- # @param privilege_id [string] Id of the privilege to be removed.
2670
- #
2671
- # @return [Boolean] if the action succeed
2672
- #
2673
- # @see {https://developers.onelogin.com/api-docs/1/privileges/delete-privilege Delete Privilege documentation}
2674
- def delete_privilege(privilege_id)
2675
- clean_error
2676
- prepare_token
2677
-
2678
- begin
2679
- if privilege_id.nil? || privilege_id.to_s.empty?
2680
- @error = '400'
2681
- @error_description = "privilege_id is required"
2682
- @error_attribute = "privilege_id"
2683
- return
2684
- end
2685
-
2686
- url = url_for(DELETE_PRIVILEGE_URL, privilege_id)
2687
-
2688
- response = self.class.delete(
2689
- url,
2690
- headers: authorized_headers
2691
- )
2692
-
2693
- if response.code == 204
2694
- return handle_operation_response(response)
2695
- else
2696
- @error = extract_status_code_from_response(response)
2697
- @error_description = extract_error_message_from_response(response)
2698
- end
2699
- rescue Exception => e
2700
- @error = '500'
2701
- @error_description = e.message
2702
- end
2703
-
2704
- false
2705
- end
2706
-
2707
- # Gets a list of the roles assigned to a privilege.
2708
- #
2709
- # @param privilege_id [string] Id of the privilege.
2710
- #
2711
- # @return [Array] list of Role Id
2712
- #
2713
- # @see {https://developers.onelogin.com/api-docs/1/privileges/get-roles Get Assigned Roles documentation}
2714
- def get_roles_assigned_to_privilege(privilege_id)
2715
- clean_error
2716
- prepare_token
2717
-
2718
- begin
2719
- if privilege_id.nil? || privilege_id.to_s.empty?
2720
- @error = '400'
2721
- @error_description = "privilege_id is required"
2722
- @error_attribute = "privilege_id"
2723
- return
2724
- end
2725
-
2726
- options = {
2727
- headers: authorized_headers,
2728
- max_results: @max_results,
2729
- container: 'roles'
2730
- }
2731
-
2732
- return Cursor.new(self, url_for(GET_ROLES_ASSIGNED_TO_PRIVILEGE_URL, privilege_id), options)
2733
-
2734
- rescue Exception => e
2735
- @error = '500'
2736
- @error_description = e.message
2737
- end
2738
-
2739
- nil
2740
- end
2741
-
2742
- # Assign one or more roles to a privilege.
2743
- #
2744
- # @param privilege_id [string] Id of the privilege.
2745
- # @param role_ids [Array] Ids of the roles to be added.
2746
- #
2747
- # @return [Boolean] if the action succeed
2748
- #
2749
- # @see {https://developers.onelogin.com/api-docs/1/privileges/assign-role Assign Roles documentation}
2750
- def assign_roles_to_privilege(privilege_id, role_ids)
2751
- clean_error
2752
- prepare_token
2753
-
2754
- begin
2755
- if privilege_id.nil? || privilege_id.to_s.empty?
2756
- @error = '400'
2757
- @error_description = "privilege_id is required"
2758
- @error_attribute = "privilege_id"
2759
- return
2760
- end
2761
-
2762
- url = url_for(ASSIGN_ROLES_TO_PRIVILEGE_URL, privilege_id)
2763
-
2764
- data = {
2765
- 'roles' => role_ids
2766
- }
2767
-
2768
- response = self.class.post(
2769
- url,
2770
- headers: authorized_headers,
2771
- body: data.to_json
2772
- )
2773
-
2774
- if response.code == 201
2775
- return handle_operation_response(response)
2776
- else
2777
- @error = extract_status_code_from_response(response)
2778
- @error_description = extract_error_message_from_response(response)
2779
-
2780
- end
2781
- rescue Exception => e
2782
- @error = '500'
2783
- @error_description = e.message
2784
- end
2785
-
2786
- false
2787
- end
2788
-
2789
- # Removes one role from the privilege.
2790
- #
2791
- # @param privilege_id [string] Id of the privilege.
2792
- # @param role_id [Integer] Id of the role to be removed.
2793
- #
2794
- # @return [Boolean] if the action succeed
2795
- #
2796
- # @see {https://developers.onelogin.com/api-docs/1/privileges/remove-role Remove Role documentation}
2797
- def remove_role_from_privilege(privilege_id, role_id)
2798
- clean_error
2799
- prepare_token
2800
-
2801
- begin
2802
- if privilege_id.nil? || privilege_id.to_s.empty?
2803
- @error = '400'
2804
- @error_description = "privilege_id is required"
2805
- @error_attribute = "privilege_id"
2806
- return
2807
- end
2808
-
2809
- url = url_for(REMOVE_ROLE_FROM_PRIVILEGE_URL, privilege_id, role_id)
2810
-
2811
- response = self.class.delete(
2812
- url,
2813
- headers: authorized_headers
2814
- )
2815
-
2816
- if response.code == 204
2817
- return true
2818
- else
2819
- @error = extract_status_code_from_response(response)
2820
- @error_description = extract_error_message_from_response(response)
2821
- end
2822
- rescue Exception => e
2823
- @error = '500'
2824
- @error_description = e.message
2825
- end
2826
-
2827
- false
2828
- end
2829
-
2830
- # Gets a list of the users assigned to a privilege.
2831
- #
2832
- # @param privilege_id [string] Id of the privilege.
2833
- #
2834
- # @return [Array] list of User Id
2835
- #
2836
- # @see {https://developers.onelogin.com/api-docs/1/privileges/get-users Get Assigned Users documentation}
2837
- def get_users_assigned_to_privilege(privilege_id)
2838
- clean_error
2839
- prepare_token
2840
-
2841
- begin
2842
- if privilege_id.nil? || privilege_id.to_s.empty?
2843
- @error = '400'
2844
- @error_description = "privilege_id is required"
2845
- @error_attribute = "privilege_id"
2846
- return
2847
- end
2848
-
2849
- options = {
2850
- headers: authorized_headers,
2851
- max_results: @max_results,
2852
- container: 'users'
2853
- }
2854
-
2855
- return Cursor.new(self, url_for(GET_USERS_ASSIGNED_TO_PRIVILEGE_URL, privilege_id), options)
2856
-
2857
- rescue Exception => e
2858
- @error = '500'
2859
- @error_description = e.message
2860
- end
2861
-
2862
- nil
2863
- end
2864
-
2865
- # Assign one or more users to a privilege.
2866
- #
2867
- # @param privilege_id [string] Id of the privilege.
2868
- # @param user_ids [Array] Ids of the users to be added.
2869
- #
2870
- # @return [Boolean] if the action succeed
2871
- #
2872
- # @see {https://developers.onelogin.com/api-docs/1/privileges/assign-users Assign Users documentation}
2873
- def assign_users_to_privilege(privilege_id, user_ids)
2874
- clean_error
2875
- prepare_token
2876
-
2877
- begin
2878
- if privilege_id.nil? || privilege_id.to_s.empty?
2879
- @error = '400'
2880
- @error_description = "privilege_id is required"
2881
- @error_attribute = "privilege_id"
2882
- return
2883
- end
2884
-
2885
- url = url_for(ASSIGN_USERS_TO_PRIVILEGE_URL, privilege_id)
2886
-
2887
- data = {
2888
- 'users' => user_ids
2889
- }
2890
-
2891
- response = self.class.post(
2892
- url,
2893
- headers: authorized_headers,
2894
- body: data.to_json
2895
- )
2896
-
2897
- if response.code == 201
2898
- return handle_operation_response(response)
2899
- else
2900
- @error = extract_status_code_from_response(response)
2901
- @error_description = extract_error_message_from_response(response)
2902
- end
2903
- rescue Exception => e
2904
- @error = '500'
2905
- @error_description = e.message
2906
- end
2907
-
2908
- false
2909
- end
2910
-
2911
- # Removes one user from the privilege.
2912
- #
2913
- # @param privilege_id [string] Id of the privilege.
2914
- # @param user_id [Integer] Id of the user to be removed.
2915
- #
2916
- # @return [Boolean] if the action succeed
2917
- #
2918
- # @see {https://developers.onelogin.com/api-docs/1/privileges/remove-user Remove User documentation}
2919
- def remove_user_from_privilege(privilege_id, user_id)
2920
- clean_error
2921
- prepare_token
2922
-
2923
- begin
2924
- if privilege_id.nil? || privilege_id.to_s.empty?
2925
- @error = '400'
2926
- @error_description = "privilege_id is required"
2927
- @error_attribute = "privilege_id"
2928
- return
2929
- end
2930
-
2931
- url = url_for(REMOVE_USER_FROM_PRIVILEGE_URL, privilege_id, user_id)
2932
-
2933
- response = self.class.delete(
2934
- url,
2935
- headers: authorized_headers
2936
- )
2937
-
2938
- if response.code == 204
2939
- return true
2940
- else
2941
- @error = extract_status_code_from_response(response)
2942
- @error_description = extract_error_message_from_response(response)
2943
- end
2944
- rescue Exception => e
2945
- @error = '500'
2946
- @error_description = e.message
2947
- end
2948
-
2949
- false
2950
- end
2951
-
2952
- end
2953
- end
2954
- end