oktakit 0.2.0 → 0.3.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: c9ab3f2927fb37bff5e7f744fef1b776cea1e177
4
- data.tar.gz: 14e391e87f55541c6ed309023e415e455e452486
2
+ SHA256:
3
+ metadata.gz: 3fa09f58e951595b1e743df9a7fa8584254ec16c81444a4b961ae2c0f3cdfd4f
4
+ data.tar.gz: 04b21c8abfd412194f11ed3fbf5798e9de7cdda4bf878a51cb742c126d930f2f
5
5
  SHA512:
6
- metadata.gz: 60452d050ed044d24b3cc167ed21e785d6ac16afb728f88090355f637c9a794e9d9bb9cfb63d09ccbc3511f06a08ebad76350843df0c4f6556f854761e709839
7
- data.tar.gz: f5e11f04ef1b29c96c7f4093ce6bc4c53abf2e3a7c470ce7e1af672cc9d5eb15b286504ffcb2c09af0a175b0dbbfe09cac98700f3d4ca1b39f0e186acfa6ca6a
6
+ metadata.gz: '0997c60e8dc44671eaa2422dc8863b4cb0441191829d1c012c7fc1c9fbbb943f59546cc027eef4dda2af774829cc5056950f072fdf5ef3f667a6b2810ce1836c'
7
+ data.tar.gz: 23e3a86d6bf5c928fa1d480b54340be3384722d7904ddd8df4885891b85a7ce52a48906dc39614e7b385ee939623cd34a71f825d49e1f50879f1c0f59a5e7476
@@ -0,0 +1,2 @@
1
+ enabled:
2
+ - cla
@@ -0,0 +1,27 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - master
7
+ pull_request:
8
+ branches:
9
+ - master
10
+
11
+ jobs:
12
+ build:
13
+ runs-on: ubuntu-latest
14
+ name: Ruby ${{ matrix.ruby }}
15
+ strategy:
16
+ matrix:
17
+ ruby: [2.6, 2.7, 3.0, 3.1]
18
+ steps:
19
+ - name: Check out code
20
+ uses: actions/checkout@v2
21
+ - name: Set up Ruby ${{ matrix.ruby }}
22
+ uses: ruby/setup-ruby@v1
23
+ with:
24
+ ruby-version: ${{ matrix.ruby }}
25
+ bundler-cache: true
26
+ - name: Ruby tests
27
+ run: bundle exec rspec
data/.gitignore CHANGED
@@ -1,6 +1,5 @@
1
1
  /.bundle/
2
2
  /.yardoc
3
- /Gemfile.lock
4
3
  /_yardoc/
5
4
  /coverage/
6
5
  /doc/
@@ -9,3 +8,4 @@
9
8
  /tmp/
10
9
  .byebug_history
11
10
  .DS_Store
11
+ *.gem
data/.rubocop.yml CHANGED
@@ -1,88 +1,16 @@
1
1
  # This file strictly follows the rules defined in the Ruby style guide:
2
2
  # http://shopify.github.io/ruby-style-guide/
3
+ inherit_gem:
4
+ rubocop-shopify: rubocop.yml
3
5
 
4
6
  AllCops:
5
- TargetRubyVersion: 2.1
7
+ TargetRubyVersion: 2.6
8
+ SuggestExtensions: false
6
9
 
7
- Rails:
10
+ # Allow .ruby-version and spec.required_ruby_version to differ
11
+ # to run a newer Ruby version for Rubocop, but don't force users to upgrade
12
+ Gemspec/RequiredRubyVersion:
8
13
  Enabled: false
9
14
 
10
- Lint/AssignmentInCondition:
11
- Enabled: false
12
-
13
- Style/Documentation:
14
- Enabled: false
15
-
16
- Style/MultilineOperationIndentation:
17
- Enabled: false
18
-
19
- Style/AlignParameters:
20
- EnforcedStyle: with_fixed_indentation
21
-
22
- Style/FirstParameterIndentation:
23
- EnforcedStyle: consistent
24
-
25
- Style/TrailingCommaInLiteral:
26
- Enabled: false
27
-
28
- Style/SignalException:
29
- EnforcedStyle: only_raise
30
-
31
- Style/NumericLiterals:
32
- Enabled: false
33
-
34
- Style/CaseIndentation:
35
- EnforcedStyle: end
36
-
37
- Style/IndentHash:
38
- EnforcedStyle: consistent
39
-
40
- Style/WordArray:
41
- Enabled: false
42
-
43
- Metrics/AbcSize:
44
- Enabled: false
45
-
46
- Metrics/CyclomaticComplexity:
47
- Enabled: false
48
-
49
- Style/StringLiterals:
50
- Enabled: false
51
-
52
- Metrics/LineLength:
53
- Max: 120
54
-
55
- Metrics/ClassLength:
56
- Enabled: false
57
-
58
- Metrics/MethodLength:
59
- Enabled: false
60
-
61
- Metrics/BlockLength:
62
- Exclude:
63
- - "**/*_spec.rb"
64
-
65
- Metrics/ParameterLists:
66
- Max: 5
67
- CountKeywordArgs: false
68
-
69
- Metrics/PerceivedComplexity:
70
- Enabled: false
71
-
72
- Lint/EndAlignment:
73
- EnforcedStyleAlignWith: variable
74
-
75
15
  Style/FrozenStringLiteralComment:
76
16
  Enabled: false
77
-
78
- Style/Alias:
79
- EnforcedStyle: prefer_alias_method
80
-
81
- Style/MutableConstant:
82
- Enabled: false
83
-
84
- Performance/Casecmp:
85
- Enabled: false
86
-
87
- Style/GuardClause:
88
- Enabled: false
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.6.6
data/.travis.yml CHANGED
@@ -1,7 +1,5 @@
1
- sudo: false
1
+ language: ruby
2
+ os: linux
2
3
  before_install: gem install bundler
3
4
  rvm:
4
- - '2.1'
5
- - '2.2'
6
- - '2.3.1'
7
-
5
+ - '2.6.0'
data/CHANGELOG.md ADDED
@@ -0,0 +1,16 @@
1
+ # Changelog
2
+
3
+ ## [v0.3.2] - 2022-06-30
4
+ - [Fix 'Faraday::Connection#authorization' deprecation warning](https://github.com/Shopify/oktakit/pull/56)
5
+
6
+ ## [v0.3.1] - 2022-01-20
7
+ - [Reverts a breaking change that caused errors to be raised for non-2xx responses](https://github.com/Shopify/oktakit/pull/54)
8
+
9
+ ## [v0.3.0] - 2022-01-20
10
+ - [Adds support for Ruby 3](https://github.com/Shopify/oktakit/pull/42)
11
+ - [Adds support for user reactivation endpoint](https://github.com/Shopify/oktakit/pull/47)
12
+ - [Adds support for app user schema operations endpoint](https://github.com/Shopify/oktakit/pull/32)
13
+ - [Makes custom error details available](https://github.com/Shopify/oktakit/pull/48)
14
+
15
+ ## [v0.2.1] - 2021-10-14
16
+ - Adds support for [Group Rule operations](https://developer.okta.com/docs/reference/api/groups/#group-rule-operations)
@@ -0,0 +1,76 @@
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ ## Our Pledge
4
+
5
+ In the interest of fostering an open and welcoming environment, we as
6
+ contributors and maintainers pledge to making participation in our project and
7
+ our community a harassment-free experience for everyone, regardless of age, body
8
+ size, disability, ethnicity, sex characteristics, gender identity and expression,
9
+ level of experience, education, socio-economic status, nationality, personal
10
+ appearance, race, religion, or sexual identity and orientation.
11
+
12
+ ## Our Standards
13
+
14
+ Examples of behavior that contributes to creating a positive environment
15
+ include:
16
+
17
+ * Using welcoming and inclusive language
18
+ * Being respectful of differing viewpoints and experiences
19
+ * Gracefully accepting constructive criticism
20
+ * Focusing on what is best for the community
21
+ * Showing empathy towards other community members
22
+
23
+ Examples of unacceptable behavior by participants include:
24
+
25
+ * The use of sexualized language or imagery and unwelcome sexual attention or
26
+ advances
27
+ * Trolling, insulting/derogatory comments, and personal or political attacks
28
+ * Public or private harassment
29
+ * Publishing others' private information, such as a physical or electronic
30
+ address, without explicit permission
31
+ * Other conduct which could reasonably be considered inappropriate in a
32
+ professional setting
33
+
34
+ ## Our Responsibilities
35
+
36
+ Project maintainers are responsible for clarifying the standards of acceptable
37
+ behavior and are expected to take appropriate and fair corrective action in
38
+ response to any instances of unacceptable behavior.
39
+
40
+ Project maintainers have the right and responsibility to remove, edit, or
41
+ reject comments, commits, code, wiki edits, issues, and other contributions
42
+ that are not aligned to this Code of Conduct, or to ban temporarily or
43
+ permanently any contributor for other behaviors that they deem inappropriate,
44
+ threatening, offensive, or harmful.
45
+
46
+ ## Scope
47
+
48
+ This Code of Conduct applies both within project spaces and in public spaces
49
+ when an individual is representing the project or its community. Examples of
50
+ representing a project or community include using an official project e-mail
51
+ address, posting via an official social media account, or acting as an appointed
52
+ representative at an online or offline event. Representation of a project may be
53
+ further defined and clarified by project maintainers.
54
+
55
+ ## Enforcement
56
+
57
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
58
+ reported by contacting the project team at security@shopify.com. All
59
+ complaints will be reviewed and investigated and will result in a response that
60
+ is deemed necessary and appropriate to the circumstances. The project team is
61
+ obligated to maintain confidentiality with regard to the reporter of an incident.
62
+ Further details of specific enforcement policies may be posted separately.
63
+
64
+ Project maintainers who do not follow or enforce the Code of Conduct in good
65
+ faith may face temporary or permanent repercussions as determined by other
66
+ members of the project's leadership.
67
+
68
+ ## Attribution
69
+
70
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
71
+ available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
72
+
73
+ [homepage]: https://www.contributor-covenant.org
74
+
75
+ For answers to common questions about this code of conduct, see
76
+ https://www.contributor-covenant.org/faq
data/Gemfile CHANGED
@@ -1,13 +1,15 @@
1
+ # frozen_string_literal: true
1
2
  source 'https://rubygems.org'
2
3
 
3
4
  gem 'byebug'
4
5
  gem 'rake'
5
- gem 'rubocop'
6
6
  gem 'yard'
7
7
 
8
8
  group :test do
9
- gem 'rspec', '~> 3.2'
10
- gem 'vcr', '~> 2.9', github: 'vcr/vcr', branch: 'master', ref: '480304be6d73803e6c4a0eb21a4ab4091da558d8'
9
+ gem 'rubocop'
10
+ gem 'rubocop-shopify', require: false
11
+ gem 'rspec', '~> 3.10'
12
+ gem 'vcr', '~> 6.0'
11
13
  end
12
14
 
13
15
  gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,101 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ oktakit (0.3.2)
5
+ sawyer (~> 0.8.1)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ addressable (2.8.0)
11
+ public_suffix (>= 2.0.2, < 5.0)
12
+ ast (2.4.2)
13
+ byebug (11.1.3)
14
+ diff-lcs (1.4.4)
15
+ faraday (1.9.3)
16
+ faraday-em_http (~> 1.0)
17
+ faraday-em_synchrony (~> 1.0)
18
+ faraday-excon (~> 1.1)
19
+ faraday-httpclient (~> 1.0)
20
+ faraday-multipart (~> 1.0)
21
+ faraday-net_http (~> 1.0)
22
+ faraday-net_http_persistent (~> 1.0)
23
+ faraday-patron (~> 1.0)
24
+ faraday-rack (~> 1.0)
25
+ faraday-retry (~> 1.0)
26
+ ruby2_keywords (>= 0.0.4)
27
+ faraday-em_http (1.0.0)
28
+ faraday-em_synchrony (1.0.0)
29
+ faraday-excon (1.1.0)
30
+ faraday-httpclient (1.0.1)
31
+ faraday-multipart (1.0.3)
32
+ multipart-post (>= 1.2, < 3)
33
+ faraday-net_http (1.0.1)
34
+ faraday-net_http_persistent (1.2.0)
35
+ faraday-patron (1.0.0)
36
+ faraday-rack (1.0.0)
37
+ faraday-retry (1.0.3)
38
+ multipart-post (2.1.1)
39
+ parallel (1.21.0)
40
+ parser (3.0.3.2)
41
+ ast (~> 2.4.1)
42
+ public_suffix (4.0.6)
43
+ rainbow (3.0.0)
44
+ rake (13.0.6)
45
+ regexp_parser (2.2.0)
46
+ rexml (3.2.5)
47
+ rspec (3.10.0)
48
+ rspec-core (~> 3.10.0)
49
+ rspec-expectations (~> 3.10.0)
50
+ rspec-mocks (~> 3.10.0)
51
+ rspec-core (3.10.1)
52
+ rspec-support (~> 3.10.0)
53
+ rspec-expectations (3.10.1)
54
+ diff-lcs (>= 1.2.0, < 2.0)
55
+ rspec-support (~> 3.10.0)
56
+ rspec-mocks (3.10.2)
57
+ diff-lcs (>= 1.2.0, < 2.0)
58
+ rspec-support (~> 3.10.0)
59
+ rspec-support (3.10.3)
60
+ rubocop (1.23.0)
61
+ parallel (~> 1.10)
62
+ parser (>= 3.0.0.0)
63
+ rainbow (>= 2.2.2, < 4.0)
64
+ regexp_parser (>= 1.8, < 3.0)
65
+ rexml
66
+ rubocop-ast (>= 1.12.0, < 2.0)
67
+ ruby-progressbar (~> 1.7)
68
+ unicode-display_width (>= 1.4.0, < 3.0)
69
+ rubocop-ast (1.15.0)
70
+ parser (>= 3.0.1.1)
71
+ rubocop-shopify (2.3.0)
72
+ rubocop (~> 1.22)
73
+ ruby-progressbar (1.11.0)
74
+ ruby2_keywords (0.0.5)
75
+ sawyer (0.8.2)
76
+ addressable (>= 2.3.5)
77
+ faraday (> 0.8, < 2.0)
78
+ unicode-display_width (2.1.0)
79
+ vcr (6.0.0)
80
+ webrick (1.7.0)
81
+ yard (0.9.27)
82
+ webrick (~> 1.7.0)
83
+
84
+ PLATFORMS
85
+ -darwin-21
86
+ arm64-darwin-21
87
+ x86_64-linux
88
+
89
+ DEPENDENCIES
90
+ bundler
91
+ byebug
92
+ oktakit!
93
+ rake
94
+ rspec (~> 3.10)
95
+ rubocop
96
+ rubocop-shopify
97
+ vcr (~> 6.0)
98
+ yard
99
+
100
+ BUNDLED WITH
101
+ 2.2.22
data/README.md CHANGED
@@ -15,11 +15,13 @@ gem 'oktakit'
15
15
 
16
16
  And then execute:
17
17
 
18
- $ bundle
18
+ ```sh
19
+ bundle
20
+ ```
19
21
 
20
22
  ## Usage
21
23
 
22
- `Oktakit` follows similar patterns as found in [`Octokit`](https://github.com/octokit/octokit.rb). So if you are familiar with Oktakit, then you should feel right at home.
24
+ `Oktakit` follows similar patterns as found in [`Octokit`](https://github.com/octokit/octokit.rb). So if you are familiar with Octokit, then you should feel right at home.
23
25
 
24
26
  ```ruby
25
27
  client = Oktakit.new(token: 't0k3n', organization: 'my-great-org')
@@ -32,7 +34,8 @@ To work with the Okta sandbox (`<organization>.oktapreview.com`), set the `api_e
32
34
  client = Oktakit.new(token: 't0k3n', api_endpoint: 'https://my-great-org.oktapreview.com/api/v1')
33
35
  ```
34
36
 
35
- #### Pagination
37
+ ### Pagination
38
+
36
39
  Pass the `paginate` flag as options for any `get` action for Oktakit to autopaginate the response for you.
37
40
 
38
41
  ```ruby
@@ -59,8 +62,13 @@ The [API Test Client](https://developer.okta.com/docs/api/getting_started/api_te
59
62
 
60
63
  ## Contributing
61
64
 
62
- 1. Fork it ( https://github.com/shopify/oktakit/fork )
65
+ 1. Fork it ( <https://github.com/shopify/oktakit/fork> )
63
66
  2. Create your feature branch (`git checkout -b my-new-feature`)
64
67
  3. Commit your changes (`git commit -am 'Add some feature'`)
65
68
  4. Push to the branch (`git push origin my-new-feature`)
66
69
  5. Create a new Pull Request
70
+
71
+ ### Contributor License Agreement
72
+
73
+ New contributors will be required to sign [Shopify's Contributor License Agreement (CLA)](https://cla.shopify.com/).
74
+ There are two versions of the CLA: one for individuals and one for organizations.
data/dev.yml CHANGED
@@ -3,13 +3,9 @@
3
3
  name: oktakit
4
4
 
5
5
  up:
6
- - ruby: 2.3.1
6
+ - ruby: 2.6.6
7
7
  - bundler
8
8
 
9
9
  commands:
10
10
  test: bundle exec rspec
11
11
  console: bin/console
12
-
13
- packages:
14
- - git@github.com:Shopify/dev-shopify.git
15
-
@@ -176,6 +176,22 @@ module Oktakit
176
176
  get("/apps/#{id}/users", options)
177
177
  end
178
178
 
179
+ # List Applications Assigned to User
180
+ #
181
+ # @params user_id [string] User ID
182
+ # @param options[:query] [Hash] Optional. Query params for request
183
+ # @param options[:headers] [Hash] Optional. Header params for the request.
184
+ # @param options[:accept] [String] Optional. The content type to accept. Default application/json
185
+ # @param options[:content_type] [String] Optional. The content type for the request. Default application/json
186
+ # @param options [Hash] Optional. Body params for request.
187
+ # @return [Array<Sawyer::Resource>] Array of Applications Assigned to User
188
+ # @see https://developer.okta.com/docs/api/resources/apps#list-applications-assigned-to-user
189
+ # @example
190
+ # Oktakit.list_applications_assigned_to_user('<user_id>')
191
+ def list_applications_assigned_to_user(user_id, options = {})
192
+ get("/apps?filter=user.id+eq+\"#{user_id}\"&expand=user/#{user_id}", options)
193
+ end
194
+
179
195
  # Update Application Credentials for Assigned User
180
196
  #
181
197
  # @params app_id [string] Application ID
@@ -0,0 +1,115 @@
1
+ module Oktakit
2
+ class Client
3
+ module GroupRules
4
+ # Add Group Rule
5
+ #
6
+ # @param options[:query] [Hash] Optional. Query params for request
7
+ # @param options[:headers] [Hash] Optional. Header params for the request.
8
+ # @param options[:accept] [String] Optional. The content type to accept. Default application/json
9
+ # @param options[:content_type] [String] Optional. The content type for the request. Default application/json
10
+ # @param options [Hash] Optional. Body params for request.
11
+ # @return [Hash<Sawyer::Resource>] The created Group Rule.
12
+ # @see https://developer.okta.com/docs/reference/api/groups/#create-group-rule
13
+ # @example
14
+ # Oktakit.add_group_rule
15
+ def add_group_rule(options = {})
16
+ post('/groups/rules', options)
17
+ end
18
+
19
+ # Get Group Rule
20
+ #
21
+ # @params id [string] Group Rule ID
22
+ # @param options[:query] [Hash] Optional. Query params for request
23
+ # @param options[:headers] [Hash] Optional. Header params for the request.
24
+ # @param options[:accept] [String] Optional. The content type to accept. Default application/json
25
+ # @param options[:content_type] [String] Optional. The content type for the request. Default application/json
26
+ # @param options [Hash] Optional. Body params for request.
27
+ # @return [Hash<Sawyer::Resource>] Fetched Group Rule
28
+ # @see https://developer.okta.com/docs/reference/api/groups/#get-group-rule
29
+ # @example
30
+ # Oktakit.get_group_rule('id')
31
+ def get_group_rule(id, options = {})
32
+ get("/groups/rules/#{id}", options)
33
+ end
34
+
35
+ # List Group Rules
36
+ #
37
+ # @param options[:query] [Hash] Optional. Query params for request
38
+ # @param options[:headers] [Hash] Optional. Header params for the request.
39
+ # @param options[:accept] [String] Optional. The content type to accept. Default application/json
40
+ # @param options[:content_type] [String] Optional. The content type for the request. Default application/json
41
+ # @param options [Hash] Optional. Body params for request.
42
+ # @return [Array<Sawyer::Resource>] Array of Group Rules
43
+ # @see https://developer.okta.com/docs/reference/api/groups/#list-group-rules
44
+ # @example
45
+ # Oktakit.list_group_rules
46
+ def list_group_rules(options = {})
47
+ get('/groups/rules', options)
48
+ end
49
+
50
+ # Update Group Rule
51
+ #
52
+ # @params id [string] Group Rule ID
53
+ # @param options[:query] [Hash] Optional. Query params for request
54
+ # @param options[:headers] [Hash] Optional. Header params for the request.
55
+ # @param options[:accept] [String] Optional. The content type to accept. Default application/json
56
+ # @param options[:content_type] [String] Optional. The content type for the request. Default application/json
57
+ # @param options [Hash] Optional. Body params for request.
58
+ # @return [Hash<Sawyer::Resource>] Updated Group Rule
59
+ # @see https://developer.okta.com/docs/reference/api/groups/#update-group-rule
60
+ # @example
61
+ # Oktakit.update_group_rule('id')
62
+ def update_group_rule(id, options = {})
63
+ put("/groups/rules/#{id}", options)
64
+ end
65
+
66
+ # Remove Group Rule
67
+ #
68
+ # @params id [string] Group ID
69
+ # @param options[:query] [Hash] Optional. Query params for request
70
+ # @param options[:headers] [Hash] Optional. Header params for the request.
71
+ # @param options[:accept] [String] Optional. The content type to accept. Default application/json
72
+ # @param options[:content_type] [String] Optional. The content type for the request. Default application/json
73
+ # @param options [Hash] Optional. Body params for request.
74
+ # @return HTTP 202 Accepted
75
+ # @see https://developer.okta.com/docs/reference/api/groups/#delete-a-group-rule
76
+ # @example
77
+ # Oktakit.remove_group_rule('id')
78
+ def remove_group_rule(id, options = {})
79
+ delete("/groups/rules/#{id}", options)
80
+ end
81
+
82
+ # Activate Group Rule
83
+ #
84
+ # @params id [string] Group ID
85
+ # @param options[:query] [Hash] Optional. Query params for request
86
+ # @param options[:headers] [Hash] Optional. Header params for the request.
87
+ # @param options[:accept] [String] Optional. The content type to accept. Default application/json
88
+ # @param options[:content_type] [String] Optional. The content type for the request. Default application/json
89
+ # @param options [Hash] Optional. Body params for request.
90
+ # @return HTTP 204 No Content
91
+ # @see https://developer.okta.com/docs/reference/api/groups/#activate-a-group-rule
92
+ # @example
93
+ # Oktakit.activate_group_rule('id')
94
+ def activate_group_rule(id, options = {})
95
+ post("/groups/rules/#{id}/lifecycle/activate", options)
96
+ end
97
+
98
+ # Deactivate Group Rule
99
+ #
100
+ # @params id [string] Group ID
101
+ # @param options[:query] [Hash] Optional. Query params for request
102
+ # @param options[:headers] [Hash] Optional. Header params for the request.
103
+ # @param options[:accept] [String] Optional. The content type to accept. Default application/json
104
+ # @param options[:content_type] [String] Optional. The content type for the request. Default application/json
105
+ # @param options [Hash] Optional. Body params for request.
106
+ # @return HTTP 204 No Content
107
+ # @see https://developer.okta.com/docs/reference/api/groups/#deactivate-a-group-rule
108
+ # @example
109
+ # Oktakit.deactivate_group_rule('id')
110
+ def deactivate_group_rule(id, options = {})
111
+ post("/groups/rules/#{id}/lifecycle/deactivate", options)
112
+ end
113
+ end
114
+ end
115
+ end
@@ -60,6 +60,70 @@ module Oktakit
60
60
  def remove_property_from_user_profile_schema(options = {})
61
61
  post('/meta/schemas/user/default', options)
62
62
  end
63
+
64
+ # Get App User Schema
65
+ #
66
+ # @params id [string] Application ID
67
+ # @param options[:query] [Hash] Optional. Query params for request
68
+ # @param options[:headers] [Hash] Optional. Header params for the request.
69
+ # @param options[:accept] [String] Optional. The content type to accept. Default application/json
70
+ # @param options[:content_type] [String] Optional. The content type for the request. Default application/json
71
+ # @param options [Hash] Optional. Body params for request.
72
+ # @return [Hash<Sawyer::Resource>] User Schema
73
+ # @see https://developer.okta.com/docs/reference/api/schemas/#get-app-user-schema
74
+ # @example
75
+ # Oktakit.get_app_user_schema('id')
76
+ def get_app_user_schema(id, options = {})
77
+ get("/meta/schemas/apps/#{id}/default", options)
78
+ end
79
+
80
+ # Add Property to App User Profile Schema
81
+ #
82
+ # @params id [string] Application ID
83
+ # @param options[:query] [Hash] Optional. Query params for request
84
+ # @param options[:headers] [Hash] Optional. Header params for the request.
85
+ # @param options[:accept] [String] Optional. The content type to accept. Default application/json
86
+ # @param options[:content_type] [String] Optional. The content type for the request. Default application/json
87
+ # @param options [Hash] Optional. Body params for request.
88
+ # @return [Hash<Sawyer::Resource>] User Schema
89
+ # @see https://developer.okta.com/docs/reference/api/schemas/#add-property-to-app-user-profile-schema
90
+ # @example
91
+ # Oktakit.add_property_to_app_user_profile_schema('id')
92
+ def add_property_to_app_user_profile_schema(id, options = {})
93
+ post("/meta/schemas/apps/#{id}/default", options)
94
+ end
95
+
96
+ # Update App User Profile Schema property
97
+ #
98
+ # @params id [string] Application ID
99
+ # @param options[:query] [Hash] Optional. Query params for request
100
+ # @param options[:headers] [Hash] Optional. Header params for the request.
101
+ # @param options[:accept] [String] Optional. The content type to accept. Default application/json
102
+ # @param options[:content_type] [String] Optional. The content type for the request. Default application/json
103
+ # @param options [Hash] Optional. Body params for request.
104
+ # @return [Hash<Sawyer::Resource>] User Schema
105
+ # @see https://developer.okta.com/docs/reference/api/schemas/#update-app-user-profile-schema-property
106
+ # @example
107
+ # Oktakit.update_app_user_profile_schema_property('id')
108
+ def update_app_user_profile_schema_property(id, options = {})
109
+ post("/meta/schemas/apps/#{id}/default", options)
110
+ end
111
+
112
+ # Remove property from App User Profile Schema
113
+ #
114
+ # @params id [string] Application ID
115
+ # @param options[:query] [Hash] Optional. Query params for request
116
+ # @param options[:headers] [Hash] Optional. Header params for the request.
117
+ # @param options[:accept] [String] Optional. The content type to accept. Default application/json
118
+ # @param options[:content_type] [String] Optional. The content type for the request. Default application/json
119
+ # @param options [Hash] Optional. Body params for request.
120
+ # @return [Hash<Sawyer::Resource>] User Schema
121
+ # @see https://developer.okta.com/docs/reference/api/schemas/#remove-property-from-app-user-profile-schema
122
+ # @example
123
+ # Oktakit.remove_property_from_app_user_profile_schema('id')
124
+ def remove_property_from_app_user_profile_schema(id, options = {})
125
+ post("/meta/schemas/apps/#{id}/default", options)
126
+ end
63
127
  end
64
128
  end
65
129
  end
@@ -9,7 +9,7 @@ module Oktakit
9
9
  # @param options[:content_type] [String] Optional. The content type for the request. Default application/json
10
10
  # @param options [Hash] Optional. Body params for request.
11
11
  # @return [Hash<Sawyer::Resource>] Returns the created User.
12
- # @see http://developer.okta.com/docs/api/resources/users.html#create-user
12
+ # @see https://developer.okta.com/docs/api/resources/users#create-user
13
13
  # @example
14
14
  # Oktakit.create_user
15
15
  def create_user(options = {})
@@ -25,7 +25,7 @@ module Oktakit
25
25
  # @param options[:content_type] [String] Optional. The content type for the request. Default application/json
26
26
  # @param options [Hash] Optional. Body params for request.
27
27
  # @return [Hash<Sawyer::Resource>] Fetched User
28
- # @see http://developer.okta.com/docs/api/resources/users.html#get-user
28
+ # @see https://developer.okta.com/docs/api/resources/users#get-user
29
29
  # @example
30
30
  # Oktakit.get_user('id')
31
31
  def get_user(id, options = {})
@@ -40,7 +40,7 @@ module Oktakit
40
40
  # @param options[:content_type] [String] Optional. The content type for the request. Default application/json
41
41
  # @param options [Hash] Optional. Body params for request.
42
42
  # @return [Array<Sawyer::Resource>] Array of User
43
- # @see http://developer.okta.com/docs/api/resources/users.html#list-users
43
+ # @see https://developer.okta.com/docs/api/resources/users#list-users
44
44
  # @example
45
45
  # Oktakit.list_users
46
46
  def list_users(options = {})
@@ -54,13 +54,18 @@ module Oktakit
54
54
  # @param options[:headers] [Hash] Optional. Header params for the request.
55
55
  # @param options[:accept] [String] Optional. The content type to accept. Default application/json
56
56
  # @param options[:content_type] [String] Optional. The content type for the request. Default application/json
57
+ # @param options[:partial] [Boolean] Indicates a partial update, in which case POST will be used instead of PUT
57
58
  # @param options [Hash] Optional. Body params for request.
58
59
  # @return [Hash<Sawyer::Resource>] Updated User
59
- # @see http://developer.okta.com/docs/api/resources/users.html#update-user
60
+ # @see https://developer.okta.com/docs/api/resources/users#update-user
60
61
  # @example
61
62
  # Oktakit.update_user('id')
62
63
  def update_user(id, options = {})
63
- put("/users/#{id}", options)
64
+ if options.delete(:partial)
65
+ post("/users/#{id}", options)
66
+ else
67
+ put("/users/#{id}", options)
68
+ end
64
69
  end
65
70
 
66
71
  # Update Profile
@@ -72,7 +77,7 @@ module Oktakit
72
77
  # @param options[:content_type] [String] Optional. The content type for the request. Default application/json
73
78
  # @param options [Hash] Optional. Body params for request.
74
79
  # @return [Hash<Sawyer::Resource>] Updated User
75
- # @see http://developer.okta.com/docs/api/resources/users.html#update-profile
80
+ # @see https://developer.okta.com/docs/api/resources/users#update-profile
76
81
  # @example
77
82
  # Oktakit.update_profile('id')
78
83
  def update_profile(id, options = {})
@@ -87,7 +92,7 @@ module Oktakit
87
92
  # @param options[:content_type] [String] Optional. The content type for the request. Default application/json
88
93
  # @param options [Hash] Optional. Body params for request.
89
94
  # @return [Array<Sawyer::Resource>] Array of App Links
90
- # @see http://developer.okta.com/docs/api/resources/users.html#get-assigned-app-links
95
+ # @see https://developer.okta.com/docs/api/resources/users#get-assigned-app-links
91
96
  # @example
92
97
  # Oktakit.get_assigned_app_links('id')
93
98
  def get_assigned_app_links(id, options = {})
@@ -103,7 +108,7 @@ module Oktakit
103
108
  # @param options[:content_type] [String] Optional. The content type for the request. Default application/json
104
109
  # @param options [Hash] Optional. Body params for request.
105
110
  # @return [Array<Sawyer::Resource>] Array of Groups
106
- # @see http://developer.okta.com/docs/api/resources/users.html#get-member-groups
111
+ # @see https://developer.okta.com/docs/api/resources/users#get-member-groups
107
112
  # @example
108
113
  # Oktakit.get_member_groups('id')
109
114
  def get_member_groups(id, options = {})
@@ -119,13 +124,31 @@ module Oktakit
119
124
  # @param options[:content_type] [String] Optional. The content type for the request. Default application/json
120
125
  # @param options [Hash] Optional. Body params for request.
121
126
  # @return [Hash<Sawyer::Resource>] Returns empty object by default. If sendEmail is false, a user activation link.
122
- # @see http://developer.okta.com/docs/api/resources/users.html#activate-user
127
+ # @see https://developer.okta.com/docs/api/resources/users#activate-user
123
128
  # @example
124
129
  # Oktakit.activate_user('id')
125
130
  def activate_user(id, options = {})
126
131
  post("/users/#{id}/lifecycle/activate", options)
127
132
  end
128
133
 
134
+ # Reactivate User
135
+ #
136
+ # @params id [string] User ID
137
+ # @param options[:query] [Hash] Optional. Query params for request
138
+ # @param options[:headers] [Hash] Optional. Header params for the request.
139
+ # @param options[:accept] [String] Optional. The content type to accept. Default application/json
140
+ # @param options[:content_type] [String] Optional. The content type for the request. Default application/json
141
+ # @param options [Hash] Optional. Body params for request.
142
+ # @return [Hash<Sawyer::Resource>].
143
+ # @note The user must be in a PROVISIONED status
144
+ # @see https://developer.okta.com/docs/reference/api/users/#reactivate-user
145
+ # @example
146
+ # Oktakit.reactivate_user('id')
147
+
148
+ def reactivate_user(id, options = {})
149
+ post("/users/#{id}/lifecycle/reactivate", options)
150
+ end
151
+
129
152
  # Deactivate User
130
153
  #
131
154
  # @params id [string] User ID
@@ -135,13 +158,31 @@ module Oktakit
135
158
  # @param options[:content_type] [String] Optional. The content type for the request. Default application/json
136
159
  # @param options [Hash] Optional. Body params for request.
137
160
  # @return [Hash<Sawyer::Resource>] Returns an empty object.
138
- # @see http://developer.okta.com/docs/api/resources/users.html#deactivate-user
161
+ # @see https://developer.okta.com/docs/api/resources/users#deactivate-user
139
162
  # @example
140
163
  # Oktakit.deactivate_user('id')
141
164
  def deactivate_user(id, options = {})
142
165
  post("/users/#{id}/lifecycle/deactivate", options)
143
166
  end
144
167
 
168
+ # Delete User
169
+ #
170
+ # @params id [string] User ID
171
+ # @param options[:query] [Hash] Optional. Query params for request
172
+ # @param options[:headers] [Hash] Optional. Header params for the request.
173
+ # @param options[:accept] [String] Optional. The content type to accept. Default application/json
174
+ # @param options[:content_type] [String] Optional. The content type for the request. Default application/json
175
+ # @param options [Hash] Optional. Body params for the request.
176
+ # @return 204 'No Content'
177
+ # @note Deletes a user permanently. This operation can only be performed on users that have a DEPROVISIONED status. This action cannot be recovered!
178
+ # This operation on a user that hasn't been deactivated causes that user to be deactivated. A second delete operation is required to delete the user.
179
+ # @see https://developer.okta.com/docs/reference/api/users/#delete-user
180
+ # @example
181
+ # Oktakit.delete_user('id')
182
+ def delete_user(id, options = {})
183
+ delete("/users/#{id}", options)
184
+ end
185
+
145
186
  # Suspend User
146
187
  #
147
188
  # @params id [string] User ID
@@ -151,7 +192,7 @@ module Oktakit
151
192
  # @param options[:content_type] [String] Optional. The content type for the request. Default application/json
152
193
  # @param options [Hash] Optional. Body params for request.
153
194
  # @return [Hash<Sawyer::Resource>] Returns an empty object.
154
- # @see http://developer.okta.com/docs/api/resources/users.html#suspend-user
195
+ # @see https://developer.okta.com/docs/api/resources/users#suspend-user
155
196
  # @example
156
197
  # Oktakit.suspend_user('id')
157
198
  def suspend_user(id, options = {})
@@ -167,7 +208,7 @@ module Oktakit
167
208
  # @param options[:content_type] [String] Optional. The content type for the request. Default application/json
168
209
  # @param options [Hash] Optional. Body params for request.
169
210
  # @return [Hash<Sawyer::Resource>] Returns an empty object. Returns an empty object.
170
- # @see http://developer.okta.com/docs/api/resources/users.html#unsuspend-user
211
+ # @see https://developer.okta.com/docs/api/resources/users#unsuspend-user
171
212
  # @example
172
213
  # Oktakit.unsuspend_user('id')
173
214
  def unsuspend_user(id, options = {})
@@ -183,7 +224,7 @@ module Oktakit
183
224
  # @param options[:content_type] [String] Optional. The content type for the request. Default application/json
184
225
  # @param options [Hash] Optional. Body params for request.
185
226
  # @return [Hash<Sawyer::Resource>] Returns an empty object
186
- # @see http://developer.okta.com/docs/api/resources/users.html#unlock-user
227
+ # @see http://developer.okta.com/docs/api/resources/users#unlock-user
187
228
  # @example
188
229
  # Oktakit.unlock_user('id')
189
230
  def unlock_user(id, options = {})
@@ -199,7 +240,7 @@ module Oktakit
199
240
  # @param options[:content_type] [String] Optional. The content type for the request. Default application/json
200
241
  # @param options [Hash] Optional. Body params for request.
201
242
  # @return [Hash<Sawyer::Resource>] Returns an empty object by default. If sendEmail is false a password reset link
202
- # @see http://developer.okta.com/docs/api/resources/users.html#reset-password
243
+ # @see https://developer.okta.com/docs/api/resources/users#reset-password
203
244
  # @example
204
245
  # Oktakit.reset_password('id')
205
246
  def reset_password(id, options = {})
@@ -215,7 +256,7 @@ module Oktakit
215
256
  # @param options[:content_type] [String] Optional. The content type for the request. Default application/json
216
257
  # @param options [Hash] Optional. Body params for request.
217
258
  # @return [Hash<Sawyer::Resource>] Returns the user by default. If tempPassword is true, a temporary password.
218
- # @see http://developer.okta.com/docs/api/resources/users.html#expire-password
259
+ # @see https://developer.okta.com/docs/api/resources/users#expire-password
219
260
  # @example
220
261
  # Oktakit.expire_password('id')
221
262
  def expire_password(id, options = {})
@@ -231,7 +272,7 @@ module Oktakit
231
272
  # @param options[:content_type] [String] Optional. The content type for the request. Default application/json
232
273
  # @param options [Hash] Optional. Body params for request.
233
274
  # @return [Hash<Sawyer::Resource>] Returns an empty object by default.
234
- # @see http://developer.okta.com/docs/api/resources/users.html#reset-factors
275
+ # @see https://developer.okta.com/docs/api/resources/users#reset-factors
235
276
  # @example
236
277
  # Oktakit.reset_factors('id')
237
278
  def reset_factors(id, options = {})
@@ -247,7 +288,7 @@ module Oktakit
247
288
  # @param options[:content_type] [String] Optional. The content type for the request. Default application/json
248
289
  # @param options [Hash] Optional. Body params for request.
249
290
  # @return [Hash<Sawyer::Resource>] Returns an empty object by default. If sendEmail is false a password reset link
250
- # @see http://developer.okta.com/docs/api/resources/users.html#forgot-password
291
+ # @see https://developer.okta.com/docs/api/resources/users#forgot-password
251
292
  # @example
252
293
  # Oktakit.forgot_password('id')
253
294
  def forgot_password(id, options = {})
@@ -263,7 +304,7 @@ module Oktakit
263
304
  # @param options[:content_type] [String] Optional. The content type for the request. Default application/json
264
305
  # @param options [Hash] Optional. Body params for request.
265
306
  # @return [Hash<Sawyer::Resource>] Credentials of the user
266
- # @see http://developer.okta.com/docs/api/resources/users.html#change-password
307
+ # @see https://developer.okta.com/docs/api/resources/users#change-password
267
308
  # @example
268
309
  # Oktakit.change_password('id')
269
310
  def change_password(id, options = {})
@@ -279,12 +320,27 @@ module Oktakit
279
320
  # @param options[:content_type] [String] Optional. The content type for the request. Default application/json
280
321
  # @param options [Hash] Optional. Body params for request.
281
322
  # @return [Hash<Sawyer::Resource>] Credentials of the user
282
- # @see http://developer.okta.com/docs/api/resources/users.html#change-recovery-question
323
+ # @see https://developer.okta.com/docs/api/resources/users#change-recovery-question
283
324
  # @example
284
325
  # Oktakit.change_recovery_question('id')
285
326
  def change_recovery_question(id, options = {})
286
327
  post("/users/#{id}/credentials/change_recovery_question", options)
287
328
  end
329
+
330
+ # Clear user sessions
331
+ #
332
+ # @params id [string] User ID
333
+ # @param options[:query] [Hash] Optional. Query params for request
334
+ # @param options[:headers] [Hash] Optional. Header params for the request.
335
+ # @param options[:accept] [String] Optional. The content type to accept. Default application/json
336
+ # @param options[:content_type] [String] Optional. The content type for the request. Default application/json
337
+ # @param options [Hash] Optional. Body params for the request.
338
+ # @return 204 'No Content'
339
+ # @see https://developer.okta.com/docs/api/resources/users#user-sessions
340
+ # Oktakit.clear_user_sessions('id')
341
+ def clear_user_sessions(id, options = {})
342
+ delete("/users/#{id}/sessions", options)
343
+ end
288
344
  end
289
345
  end
290
346
  end
@@ -5,6 +5,7 @@ require 'oktakit/client/apps'
5
5
  require 'oktakit/client/events'
6
6
  require 'oktakit/client/factors'
7
7
  require 'oktakit/client/groups'
8
+ require 'oktakit/client/group_rules'
8
9
  require 'oktakit/client/identity_providers'
9
10
  require 'oktakit/client/schemas'
10
11
  require 'oktakit/client/templates'
@@ -17,6 +18,7 @@ module Oktakit
17
18
  include Events
18
19
  include Factors
19
20
  include Groups
21
+ include GroupRules
20
22
  include IdentityProviders
21
23
  include Schemas
22
24
  include Templates
@@ -27,26 +29,27 @@ module Oktakit
27
29
 
28
30
  # Default Faraday middleware stack
29
31
  MIDDLEWARE = RACK_BUILDER_CLASS.new do |builder|
30
- builder.use Oktakit::Response::RaiseError
31
- builder.adapter Faraday.default_adapter
32
+ builder.use(Oktakit::Response::RaiseError)
33
+ builder.adapter(Faraday.default_adapter)
32
34
  end
33
35
 
34
- def initialize(token:, organization: nil, api_endpoint: nil)
36
+ def initialize(token: nil, access_token: nil, organization: nil, api_endpoint: nil)
35
37
  if organization.nil? && api_endpoint.nil?
36
38
  raise ArgumentError, "Please provide either the organization or the api_endpoint argument"
37
39
  end
38
40
 
41
+ if (token.nil? && access_token.nil?) || (token && access_token)
42
+ raise ArgumentError, "Please provide either the token or the access_token argument"
43
+ end
44
+
39
45
  @token = token
46
+ @access_token = access_token
40
47
  @organization = organization
41
48
  @api_endpoint = api_endpoint
42
49
  end
43
50
 
44
51
  def api_endpoint
45
- if @api_endpoint
46
- @api_endpoint
47
- else
48
- "https://#{@organization.downcase}.okta.com/api/v1"
49
- end
52
+ @api_endpoint || "https://#{@organization.downcase}.okta.com/api/v1"
50
53
  end
51
54
 
52
55
  # Make a HTTP GET request
@@ -67,16 +70,16 @@ module Oktakit
67
70
  accept: options.delete(:accept),
68
71
  content_type: options.delete(:content_type),
69
72
  paginate: should_paginate,
70
- data: options
73
+ data: options,
71
74
  }
72
75
 
73
- resp, status, next_page = request :get, url, **request_options
76
+ resp, status, next_page = request(:get, url, **request_options)
74
77
 
75
78
  # If request succeeded and we should paginate, then automatically traverse all next_pages
76
79
  if status == 200 && should_paginate
77
80
  all_objs = [resp]
78
81
  while next_page
79
- resp, status, next_page = request :get, next_page, **request_options
82
+ resp, status, next_page = request(:get, next_page, **request_options)
80
83
  break unless status == 200 # Return early if page request fails
81
84
 
82
85
  all_objs << resp
@@ -97,9 +100,9 @@ module Oktakit
97
100
  # @param options [Hash] Optional. Body params for request.
98
101
  # @return [Sawyer::Resource]
99
102
  def post(url, options = {})
100
- request :post, url, query: options.delete(:query), headers: options.delete(:headers),
103
+ request(:post, url, query: options.delete(:query), headers: options.delete(:headers),
101
104
  accept: options.delete(:accept), content_type: options.delete(:content_type),
102
- data: options
105
+ data: options)
103
106
  end
104
107
 
105
108
  # Make a HTTP PUT request
@@ -112,9 +115,9 @@ module Oktakit
112
115
  # @param options [Hash] Optional. Body params for request.
113
116
  # @return [Sawyer::Resource]
114
117
  def put(url, options = {})
115
- request :put, url, query: options.delete(:query), headers: options.delete(:headers),
118
+ request(:put, url, query: options.delete(:query), headers: options.delete(:headers),
116
119
  accept: options.delete(:accept), content_type: options.delete(:content_type),
117
- data: options
120
+ data: options)
118
121
  end
119
122
 
120
123
  # Make a HTTP PATCH request
@@ -127,9 +130,9 @@ module Oktakit
127
130
  # @param options [Hash] Optional. Body params for request.
128
131
  # @return [Sawyer::Resource]
129
132
  def patch(url, options = {})
130
- request :patch, url, query: options.delete(:query), headers: options.delete(:headers),
133
+ request(:patch, url, query: options.delete(:query), headers: options.delete(:headers),
131
134
  accept: options.delete(:accept), content_type: options.delete(:content_type),
132
- data: options
135
+ data: options)
133
136
  end
134
137
 
135
138
  # Make a HTTP DELETE request
@@ -142,9 +145,9 @@ module Oktakit
142
145
  # @param options [Hash] Optional. Body params for request.
143
146
  # @return [Sawyer::Resource]
144
147
  def delete(url, options = {})
145
- request :delete, url, query: options.delete(:query), headers: options.delete(:headers),
148
+ request(:delete, url, query: options.delete(:query), headers: options.delete(:headers),
146
149
  accept: options.delete(:accept), content_type: options.delete(:content_type),
147
- data: options
150
+ data: options)
148
151
  end
149
152
 
150
153
  # Make a HTTP HEAD request
@@ -157,9 +160,9 @@ module Oktakit
157
160
  # @param options [Hash] Optional. Body params for request.
158
161
  # @return [Sawyer::Resource]
159
162
  def head(url, options = {})
160
- request :head, url, query: options.delete(:query), headers: options.delete(:headers),
163
+ request(:head, url, query: options.delete(:query), headers: options.delete(:headers),
161
164
  accept: options.delete(:accept), content_type: options.delete(:content_type),
162
- data: options
165
+ data: options)
163
166
  end
164
167
 
165
168
  attr_reader :last_response
@@ -182,11 +185,12 @@ module Oktakit
182
185
  end
183
186
 
184
187
  def sawyer_agent
185
- @agent ||= Sawyer::Agent.new(api_endpoint, sawyer_options) do |http|
188
+ @sawyer_agent ||= Sawyer::Agent.new(api_endpoint, sawyer_options) do |http|
186
189
  http.headers[:accept] = 'application/json'
187
190
  http.headers[:content_type] = 'application/json'
188
191
  http.headers[:user_agent] = "Oktakit v#{Oktakit::VERSION}"
189
- http.authorization 'SSWS ', @token
192
+ http.headers[:authorization] = "SSWS #{@token}" if @token
193
+ http.headers[:authorization] = "Bearer #{@access_token}" if @access_token
190
194
  end
191
195
  end
192
196
 
@@ -199,6 +203,7 @@ module Oktakit
199
203
 
200
204
  def absolute_to_relative_url(next_ref)
201
205
  return unless next_ref
206
+
202
207
  next_ref.href.sub(api_endpoint, '')
203
208
  end
204
209
  end
data/lib/oktakit/error.rb CHANGED
@@ -8,7 +8,7 @@ module Oktakit
8
8
  # @return [Oktakit::Error]
9
9
  def self.from_response(response)
10
10
  status = response[:status].to_i
11
- if klass = error(status)
11
+ if (klass = error(status))
12
12
  klass.new(response)
13
13
  end
14
14
  end
@@ -41,19 +41,19 @@ module Oktakit
41
41
  # Array of validation errors
42
42
  # @return [Array<Hash>] Error info
43
43
  def errors
44
- if data && data.is_a?(Hash)
44
+ if data&.is_a?(Hash)
45
45
  data[:errors] || []
46
46
  else
47
47
  []
48
48
  end
49
49
  end
50
50
 
51
- private
52
-
53
51
  def data
54
52
  @data ||= parse_data
55
53
  end
56
54
 
55
+ private
56
+
57
57
  def parse_data
58
58
  body = @response[:body]
59
59
  return if body.empty?
@@ -89,7 +89,7 @@ module Oktakit
89
89
 
90
90
  def redact_url(url_string)
91
91
  %w[client_secret access_token].each do |token|
92
- url_string.gsub!(/#{token}=\S+/, "#{token}=(redacted)") if url_string.include? token
92
+ url_string.gsub!(/#{token}=\S+/, "#{token}=(redacted)") if url_string.include?(token)
93
93
  end
94
94
  url_string
95
95
  end
@@ -10,7 +10,7 @@ module Oktakit
10
10
  private
11
11
 
12
12
  def on_complete(response)
13
- if error = Oktakit::Error.from_response(response)
13
+ if (error = Oktakit::Error.from_response(response))
14
14
  raise error
15
15
  end
16
16
  end
@@ -1,3 +1,3 @@
1
1
  module Oktakit
2
- VERSION = '0.2.0'.freeze
2
+ VERSION = '0.3.2'.freeze
3
3
  end
data/lib/oktakit.rb CHANGED
@@ -2,7 +2,7 @@ require 'oktakit/version'
2
2
  require 'oktakit/client'
3
3
 
4
4
  module Oktakit
5
- def self.new(*args)
6
- Client.new(*args)
5
+ def self.new(**args)
6
+ Client.new(**args)
7
7
  end
8
8
  end
data/oktakit.gemspec CHANGED
@@ -1,4 +1,4 @@
1
- lib = File.expand_path('../lib', __FILE__)
1
+ lib = File.expand_path('lib', __dir__)
2
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
  require 'oktakit/version'
4
4
 
@@ -9,16 +9,16 @@ Gem::Specification.new do |spec|
9
9
  spec.email = ['graeme.johnson@shopify.com', 'julian@shopify.com']
10
10
 
11
11
  spec.summary = 'Ruby toolkit for working with the Okta API'
12
- spec.homepage = 'https://github.com/shopify/oktakit'
12
+ spec.homepage = 'https://github.com/Shopify/oktakit'
13
13
  spec.license = 'MIT'
14
14
 
15
- spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
15
+ spec.files = %x(git ls-files -z).split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
16
16
  spec.bindir = 'exe'
17
17
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
18
18
  spec.require_paths = ['lib']
19
19
 
20
- spec.required_ruby_version = '>= 2.0'
20
+ spec.required_ruby_version = '>= 2.6'
21
21
 
22
- spec.add_dependency 'sawyer', '~> 0.8.1'
23
- spec.add_development_dependency 'bundler'
22
+ spec.add_dependency('sawyer', '~> 0.8.1')
23
+ spec.add_development_dependency('bundler')
24
24
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oktakit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Graeme Johnson
8
8
  - Julian Nadeau
9
- autorequire:
9
+ autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2017-10-06 00:00:00.000000000 Z
12
+ date: 2022-06-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sawyer
@@ -39,7 +39,7 @@ dependencies:
39
39
  - - ">="
40
40
  - !ruby/object:Gem::Version
41
41
  version: '0'
42
- description:
42
+ description:
43
43
  email:
44
44
  - graeme.johnson@shopify.com
45
45
  - julian@shopify.com
@@ -47,11 +47,17 @@ executables: []
47
47
  extensions: []
48
48
  extra_rdoc_files: []
49
49
  files:
50
+ - ".github/probots.yml"
51
+ - ".github/workflows/ci.yml"
50
52
  - ".gitignore"
51
53
  - ".rspec"
52
54
  - ".rubocop.yml"
55
+ - ".ruby-version"
53
56
  - ".travis.yml"
57
+ - CHANGELOG.md
58
+ - CODE_OF_CONDUCT.md
54
59
  - Gemfile
60
+ - Gemfile.lock
55
61
  - LICENSE.txt
56
62
  - README.md
57
63
  - Rakefile
@@ -64,6 +70,7 @@ files:
64
70
  - lib/oktakit/client/apps.rb
65
71
  - lib/oktakit/client/events.rb
66
72
  - lib/oktakit/client/factors.rb
73
+ - lib/oktakit/client/group_rules.rb
67
74
  - lib/oktakit/client/groups.rb
68
75
  - lib/oktakit/client/identity_providers.rb
69
76
  - lib/oktakit/client/schemas.rb
@@ -73,11 +80,11 @@ files:
73
80
  - lib/oktakit/response/raise_error.rb
74
81
  - lib/oktakit/version.rb
75
82
  - oktakit.gemspec
76
- homepage: https://github.com/shopify/oktakit
83
+ homepage: https://github.com/Shopify/oktakit
77
84
  licenses:
78
85
  - MIT
79
86
  metadata: {}
80
- post_install_message:
87
+ post_install_message:
81
88
  rdoc_options: []
82
89
  require_paths:
83
90
  - lib
@@ -85,16 +92,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
85
92
  requirements:
86
93
  - - ">="
87
94
  - !ruby/object:Gem::Version
88
- version: '2.0'
95
+ version: '2.6'
89
96
  required_rubygems_version: !ruby/object:Gem::Requirement
90
97
  requirements:
91
98
  - - ">="
92
99
  - !ruby/object:Gem::Version
93
100
  version: '0'
94
101
  requirements: []
95
- rubyforge_project:
96
- rubygems_version: 2.6.13
97
- signing_key:
102
+ rubygems_version: 3.2.20
103
+ signing_key:
98
104
  specification_version: 4
99
105
  summary: Ruby toolkit for working with the Okta API
100
106
  test_files: []