psu_identity 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7996e867a943731e649e3cf0c2981fd08dd938e24f914bb8a12f1745bf7d605f
4
- data.tar.gz: f771b556fb55e71d9ae6d0673e863dbf88fb7a1a173c224640111fa140488c92
3
+ metadata.gz: 71486dc8c78a516d121f540ce6966457d863c725c2ab6ada88f7d6090267c8b8
4
+ data.tar.gz: 1ccd98e5c98644f8d1d44999ae2ff7c88284203d3666f241f6422f4a0c122c53
5
5
  SHA512:
6
- metadata.gz: 362b2abff2b599aaae062a0b367c8afbd038e6cc7536476ed7ac1a710ae534f90fa25274ff9ebae21ded7c404de669766db274806ae0c7ae31cf3b8d4249adef
7
- data.tar.gz: 6105dfa4398b1653a1621a84548f7ed3dee1caad9f05a746364eca6f527616d1beea6fbd9c27d277d38be8fc0e5c4fedf5403cbe0a739e1f9f74e3acd0a43773
6
+ metadata.gz: 2a4e22f4667d2163fd0f9ad4f32425cf78b116b4e8db4357493c15f533d8cdddbc70ae55ebc7752c47d4891d3f4d1e69cd351b0b38e3c89da19735deb06b6f91
7
+ data.tar.gz: 19911fbf7bd37ff89bb1b508c43bb3e2fa4142d0a88df670a8a5cfae347b13993bcf15dd55000a50661ede2982fbd39c9329c48dcd9f0938480389b3b7737c91
data/.circleci/config.yml CHANGED
@@ -35,6 +35,8 @@ jobs:
35
35
  - run:
36
36
  name: "Rspec"
37
37
  command: |
38
+ export PSU_ID_OAUTH_CLIENT_ID=foo
39
+ export PSU_ID_OAUTH_CLIENT_SECRET=bar
38
40
  RAILS_ENV=test bundle exec rspec &&
39
41
  bin/cc-test-reporter format-coverage -t simplecov -o coverage/codeclimate.json coverage/.resultset.json &&
40
42
  bin/cc-test-reporter upload-coverage
data/.gitignore CHANGED
@@ -8,9 +8,10 @@
8
8
  /tmp/
9
9
  .idea/
10
10
  log/
11
+ .envrc
11
12
 
12
13
  # rspec failure tracking
13
14
  .rspec_status
14
15
 
15
16
  # ignore gem builds
16
- /psu_identity-*
17
+ /psu_identity-*
data/.rubocop.yml CHANGED
@@ -13,6 +13,7 @@ AllCops:
13
13
  DisplayCopNames: true
14
14
  NewCops: enable
15
15
 
16
+
16
17
  Metrics/BlockLength:
17
18
  Exclude:
18
19
  - 'spec/**/*'
data/Gemfile.lock CHANGED
@@ -1,9 +1,10 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- psu_identity (0.3.0)
4
+ psu_identity (0.4.0)
5
5
  faraday (~> 1.0)
6
6
  json
7
+ oauth2
7
8
  rake (>= 12.0)
8
9
 
9
10
  GEM
@@ -43,8 +44,17 @@ GEM
43
44
  faraday-retry (1.0.3)
44
45
  hashdiff (1.0.1)
45
46
  json (2.5.1)
47
+ jwt (2.3.0)
46
48
  method_source (1.0.0)
49
+ multi_json (1.15.0)
50
+ multi_xml (0.6.0)
47
51
  multipart-post (2.1.1)
52
+ oauth2 (1.4.7)
53
+ faraday (>= 0.8, < 2.0)
54
+ jwt (>= 1.0, < 3.0)
55
+ multi_json (~> 1.3)
56
+ multi_xml (~> 0.5)
57
+ rack (>= 1.2, < 3)
48
58
  parallel (1.21.0)
49
59
  parser (3.0.2.0)
50
60
  ast (~> 2.4.1)
@@ -55,6 +65,7 @@ GEM
55
65
  byebug (~> 11.0)
56
66
  pry (~> 0.13.0)
57
67
  public_suffix (4.0.6)
68
+ rack (2.2.3)
58
69
  rainbow (3.0.0)
59
70
  rake (13.0.6)
60
71
  regexp_parser (2.1.1)
@@ -121,4 +132,4 @@ DEPENDENCIES
121
132
  webmock
122
133
 
123
134
  BUNDLED WITH
124
- 2.2.29
135
+ 2.3.6
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'oauth2'
4
+ require 'ostruct'
5
+
6
+ # @abstract Client for querying Penn State's directory-service API: https://directory-service.k8s.psu.edu/directory-service-web/resources
7
+ module PsuIdentity::DirectoryService
8
+ class Error < StandardError; end
9
+
10
+ class NotFound < StandardError; end
11
+
12
+ class Client
13
+ attr_reader :base_url
14
+
15
+ # @param [String] base_url
16
+ def initialize(base_url: '/directory-service-web/resources')
17
+ @base_url = base_url
18
+ end
19
+
20
+ # @param [Hash] args of options to pass to the endpoint
21
+ # @option args [String] :userid of the person
22
+ def userid(userid)
23
+ process_userid_response connection.get("#{base_url}/people/#{userid}")
24
+ end
25
+
26
+ private
27
+
28
+ def process_userid_response(response)
29
+ raise NotFound if response.status == 404
30
+
31
+ raise Error.new(response.body) unless response.success?
32
+
33
+ snake_cased_response = JSON.parse(response.body).transform_keys { |str| StringHelpers.underscore(str) }
34
+ OpenStruct.new(snake_cased_response)
35
+ rescue JSON::ParserError
36
+ end
37
+
38
+ def connection
39
+ @connection ||= Faraday.new(url: endpoint, headers: auth_headers) do |conn|
40
+ conn.adapter :net_http
41
+ end
42
+ end
43
+
44
+ def auth_headers
45
+ { 'Authorization' => "Bearer #{token}" }
46
+ end
47
+
48
+ def token
49
+ oauth_client = OAuth2::Client.new(client_id,
50
+ client_secret, site: oauth_endpoint,
51
+ authorize_url: '/oauth/api/authz',
52
+ token_url: '/oauth/api/token')
53
+ oauth_token = oauth_client.client_credentials.get_token
54
+ oauth_token.token
55
+ end
56
+
57
+ def client_id
58
+ @client_id ||= ENV.fetch('PSU_ID_OAUTH_CLIENT_ID')
59
+ end
60
+
61
+ def client_secret
62
+ @client_secret ||= ENV.fetch('PSU_ID_OAUTH_CLIENT_SECRET')
63
+ end
64
+
65
+ def oauth_endpoint
66
+ @oauth_endpoint ||= ENV.fetch('PSU_ID_OAUTH_ENDPOINT', 'https://acceptance-oauth2-server.qa.k8s.psu.edu')
67
+ end
68
+
69
+ def endpoint
70
+ @endpoint ||= ENV.fetch('DIRECTORY_SERVICE_ENDPOINT', 'https://acceptance-directory-service.qa.k8s.psu.edu')
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module StringHelpers
4
+ def self.underscore(str)
5
+ str
6
+ .to_s
7
+ .gsub(/::/, '/')
8
+ .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
9
+ .gsub(/([a-z\d])([A-Z])/, '\1_\2')
10
+ .tr('-', '_')
11
+ .downcase
12
+ end
13
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PsuIdentity
4
- VERSION = '0.3.0'
4
+ VERSION = '0.4.0'
5
5
  end
data/lib/psu_identity.rb CHANGED
@@ -7,8 +7,10 @@ require 'ostruct'
7
7
  module PsuIdentity
8
8
  class Error < StandardError; end
9
9
 
10
+ require 'psu_identity/directory_service/client'
10
11
  require 'psu_identity/search_service/atomic_link'
11
12
  require 'psu_identity/search_service/client'
12
13
  require 'psu_identity/search_service/person'
14
+ require 'psu_identity/string_helpers'
13
15
  require 'psu_identity/version'
14
16
  end
data/psu_identity.gemspec CHANGED
@@ -25,6 +25,7 @@ Gem::Specification.new do |spec|
25
25
 
26
26
  spec.add_dependency 'faraday', '~> 1.0'
27
27
  spec.add_dependency 'json'
28
+ spec.add_dependency 'oauth2'
28
29
  spec.add_dependency 'rake', '>= 12.0'
29
30
 
30
31
  spec.add_development_dependency 'pry-byebug'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: psu_identity
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Kiessling
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-01-25 00:00:00.000000000 Z
11
+ date: 2022-02-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: oauth2
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rake
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -207,9 +221,11 @@ files:
207
221
  - bin/console
208
222
  - bin/setup
209
223
  - lib/psu_identity.rb
224
+ - lib/psu_identity/directory_service/client.rb
210
225
  - lib/psu_identity/search_service/atomic_link.rb
211
226
  - lib/psu_identity/search_service/client.rb
212
227
  - lib/psu_identity/search_service/person.rb
228
+ - lib/psu_identity/string_helpers.rb
213
229
  - lib/psu_identity/version.rb
214
230
  - psu_identity.gemspec
215
231
  homepage: https://github.com/psu-libraries/psu_identity