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