Class: PrincetonUsers

Inherits:
Object
  • Object
show all
Defined in:
app/services/princeton_users.rb

Constant Summary collapse

CHARS_AND_NUMS =
('a'..'z').to_a + (0..9).to_a

Class Method Summary collapse

Class Method Details

.create_users_from_ldap(current_uid_start: "", ldap_connection: default_ldap_connection) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
# File 'app/services/princeton_users.rb', line 13

def create_users_from_ldap(current_uid_start: "", ldap_connection: default_ldap_connection)
  CHARS_AND_NUMS.each do |char|
    filter =(~ Net::LDAP::Filter.eq( "pustatus", "guest" )) & Net::LDAP::Filter.eq("uid", "#{current_uid_start}#{char}*")
    people = ldap_connection.search(filter:, attributes: [:pudisplayname, :givenname, :sn, :uid, :edupersonprincipalname]); 
    if ldap_connection.get_operation_result.message == "Success"
      people.each{|person| user_from_ldap(person)}
    else
      create_users_from_ldap(current_uid_start: "#{current_uid_start}#{char}", ldap_connection:)
    end
  end
end

.default_ldap_connectionObject



44
45
46
47
48
49
50
# File 'app/services/princeton_users.rb', line 44

def default_ldap_connection
  @default_ldap_connection ||= Net::LDAP.new host: "ldap.princeton.edu", base: "o=Princeton University,c=US", port: 636,
                                              encryption: {
                                                method: :simple_tls,
                                                tls_options: OpenSSL::SSL::SSLContext::DEFAULT_PARAMS
                                              }
end

.user_from_ldap(ldap_person) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'app/services/princeton_users.rb', line 25

def user_from_ldap(ldap_person)
  return if ldap_person[:edupersonprincipalname].blank?
  uid = ldap_person[:uid].first.downcase
  current_entries = User.where(uid:)
  if current_entries.empty?
    User.create(uid: , display_name: ldap_person[:pudisplayname].first, 
                family_name: ldap_person[:sn].first, given_name: ldap_person[:givenname].first, 
                email: ldap_person[:edupersonprincipalname].first)
  else
    user = current_entries.first
    if user.display_name.blank?
      user.display_name = ldap_person[:pudisplayname].first
      user.family_name = ldap_person[:sn].first
      user.given_name = ldap_person[:givenname].first
      user.save
    end
  end
end

.user_listObject



7
8
9
10
11
# File 'app/services/princeton_users.rb', line 7

def user_list
  Rails.cache.fetch("princeton_user_list", expires_in: 6.hours) do
    @user_list = User.all.map { |user| { uid: user.uid, name: user.display_name } }
  end
end