Class: Ddr::Auth::GrouperGateway
- Inherits:
-
SimpleDelegator
- Object
- SimpleDelegator
- Ddr::Auth::GrouperGateway
- Defined in:
- lib/ddr/auth/grouper_gateway.rb
Constant Summary collapse
- SUBJECT_ID_RE =
Regexp.new('[^@]+(?=@duke\.edu)')
- DEFAULT_TIMEOUT =
5
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize ⇒ GrouperGateway
constructor
A new instance of GrouperGateway.
-
#repository_groups(raw = false) ⇒ Object
List of all grouper groups for the repository.
- #user_groups(user, raw = false) ⇒ Object
Constructor Details
#initialize ⇒ GrouperGateway
Returns a new instance of GrouperGateway.
18 19 20 21 22 23 |
# File 'lib/ddr/auth/grouper_gateway.rb', line 18 def initialize super Grouper::Rest::Client::Resource.new(ENV["GROUPER_URL"], user: ENV["GROUPER_USER"], password: ENV["GROUPER_PASSWORD"], timeout: ENV.fetch("GROUPER_TIMEOUT", DEFAULT_TIMEOUT).to_i) end |
Class Method Details
.repository_groups(*args) ⇒ Object
10 11 12 |
# File 'lib/ddr/auth/grouper_gateway.rb', line 10 def self.repository_groups(*args) new.repository_groups(*args) end |
.user_groups(*args) ⇒ Object
14 15 16 |
# File 'lib/ddr/auth/grouper_gateway.rb', line 14 def self.user_groups(*args) new.user_groups(*args) end |
Instance Method Details
#repository_groups(raw = false) ⇒ Object
List of all grouper groups for the repository
26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/ddr/auth/grouper_gateway.rb', line 26 def repository_groups(raw = false) repo_groups = groups(Ddr::Auth.repository_group_filter) if ok? return repo_groups if raw repo_groups.map do |g| Group.new(g["name"], label: g["displayExtension"]) end else [] end end |
#user_groups(user, raw = false) ⇒ Object
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/ddr/auth/grouper_gateway.rb', line 38 def user_groups(user, raw = false) groups = [] subject_id = user.principal_name.scan(SUBJECT_ID_RE).first return groups unless subject_id begin request_body = { "WsRestGetGroupsRequest" => { "subjectLookups" => [{"subjectIdentifier" => subject_id}] } } # Have to use :call b/c grouper-rest-client :subjects method doesn't support POST response = call("subjects", :post, request_body) if ok? result = response["WsGetGroupsResults"]["results"].first # Have to manually filter results b/c Grouper WS version 1.5 does not support filter parameter if result && result["wsGroups"] groups = result["wsGroups"].select { |g| g["name"] =~ /^#{REPOSITORY_GROUP_FILTER}/ } end end rescue StandardError => e # XXX Should we raise a custom exception? Rails.logger.error e end return groups if raw groups.map do |g| Group.new(g["name"], label: g["displayExtension"]) end end |