lib/ddr/auth/groups.rb in ddr-models-1.13.2 vs lib/ddr/auth/groups.rb in ddr-models-1.14.0

- old
+ new

@@ -1,18 +1,18 @@ require "delegate" +require "yaml" module Ddr module Auth # Wraps an Array of Group objects class Groups < SimpleDelegator - PUBLIC = Group.new("public").freeze - REGISTERED = Group.new("registered").freeze - DUKE_EPPN = Group.new("duke.all").freeze - - Superusers = Group.new("superusers").freeze - CollectionCreators = Group.new("collection_creators").freeze + PUBLIC = Group.new "public", label: "Public" + REGISTERED = Group.new "registered", label: "Registered Users" + DUKE_EPPN = Group.new "duke.all", label: "Duke NetIDs" + Superusers = Group.new "superusers", label: "Superusers" + CollectionCreators = Group.new "collection_creators", label: "Collection Creators" ISMEMBEROF_RE = Regexp.new('urn:mace:duke\.edu:groups:library:repository:ddr:[\w:]+') DUKE_EPPN_RE = Regexp.new('(?=@duke\.edu)') AFFILIATION_RE = Regexp.new('(%{a})(?=@duke\.edu)' % {a: Affiliation::VALUES.join("|")}) @@ -24,13 +24,13 @@ affiliation + remote + builtin end # Build a Groups instance for the user and env context (if any) def build(user, env=nil) - groups = [ PUBLIC ] # everybody + groups = [ PUBLIC ] # everybody if user.persisted? - groups << REGISTERED + groups << REGISTERED groups << DUKE_EPPN if duke_eppn?(user, env) groups.concat remote(user, env) groups.concat affiliation(user, env) end groups << Superusers if groups.include?(Ddr::Auth.superuser_group) @@ -38,43 +38,43 @@ new(groups) end def remote(*args) if args.empty? - grouper.repository_group_names.map { |name| Group.new(name) } + grouper.repository_groups else user, env = args - names = - if env && env["ismemberof"] - env["ismemberof"].scan(ISMEMBEROF_RE).map { |name| name.sub(/^urn:mace:duke.edu:groups/, "duke") } - else - grouper.user_group_names(user) + if env && env["ismemberof"] + env["ismemberof"].scan(ISMEMBEROF_RE).map do |name| + Group.new(name.sub(/^urn:mace:duke.edu:groups/, "duke")) end - names.map { |name| Group.new(name) } + else + grouper.user_groups(user) + end end end def affiliation(*args) if args.empty? Affiliation.groups else user, env = args - affiliations = + affiliations = if env && env["affiliation"] env["affiliation"].scan(AFFILIATION_RE).flatten else ldap.affiliations(user.principal_name) end affiliations.map { |a| Affiliation.group(a) } end end def duke_eppn?(user, env) - eppn = + eppn = if env && env["eppn"] env["eppn"] else - user.principal_name + user.principal_name end !!(eppn =~ DUKE_EPPN_RE) end def builtin