LDAP sync: If EG user found, reactivate
authorDan Scott <dscott@laurentian.ca>
Mon, 16 Jan 2012 22:53:27 +0000 (17:53 -0500)
committerDan Scott <dscott@laurentian.ca>
Tue, 7 May 2013 18:57:29 +0000 (14:57 -0400)
In theory, we won't be asked to create a user that already exists in
Evergreen if they are already there and active. So, go ahead and set the
"active" flag to true and update the account expiry date when we are
asked to create an existing user.

Signed-off-by: Dan Scott <dscott@laurentian.ca>
tools/patron-load/ldap_osrf_sync

index 04fef38..5e26823 100755 (executable)
@@ -405,6 +405,23 @@ def find_evergreen_user(auth, user):
 
     return None
 
+def retrieve_evergreen_user(auth, user, uid):
+    """
+    Update account for an existing user in Evergreen
+
+    Sets active flag, updates expiry date
+    """
+
+    egau = osrf_request(
+        'open-ils.actor', 'open-ils.actor.user.retrieve', auth, uid
+    ).send()
+
+    if not egau:
+        print sys.stderr >> "Damn it"
+
+    return egau
+
+
 def create_evergreen_user(auth, user):
     """
     Map LDAP record to Evergreen user
@@ -421,32 +438,36 @@ def create_evergreen_user(auth, user):
         return
 
     found = find_evergreen_user(auth, user)
-    if found:
-        print("Found: %s" % user.usrname)
-        return
 
-    newau = osrf.net_obj.new_object_from_hint('au')
+    egau = osrf.net_obj.new_object_from_hint('au')
 
-    newau.isnew(True)
-    newau.usrname(user.usrname)
-    newau.profile(user.profile)
-    newau.email(user.email)
-    newau.family_name(user.family_name)
-    newau.first_given_name(user.first_given_name)
-    newau.ident_type(user.ident_type)
-    newau.ident_value(user.ident_value)
-    newau.home_ou(user.home_ou)
-    newau.passwd(user.passwd)
-    newau.expire_date(user.expire_date)
+    if found:
+        print("Found: %s" % user.usrname)
+        egau = retrieve_evergreen_user(auth, user, found)
+        egau.ischanged(True)
+        egau.active(True)
+    else:
+        egau.isnew(True)
+
+    egau.usrname(user.usrname)
+    egau.profile(user.profile)
+    egau.email(user.email)
+    egau.family_name(user.family_name)
+    egau.first_given_name(user.first_given_name)
+    egau.ident_type(user.ident_type)
+    egau.ident_value(user.ident_value)
+    egau.home_ou(user.home_ou)
+    egau.passwd(user.passwd)
+    egau.expire_date(user.expire_date)
 
     # Workaround open-ils.actor.patron.update bug
-    newau.addresses([])
-    newau.cards([])
+    egau.addresses([])
+    egau.cards([])
 
-    # Create the user
+    # Create or update the user
     try:
         usr = osrf_request(
-            'open-ils.actor', 'open-ils.actor.patron.update', auth, newau
+            'open-ils.actor', 'open-ils.actor.patron.update', auth, egau
         ).send()
     except Exception, exc:
         print >> sys.stderr, exc
@@ -458,6 +479,10 @@ def create_evergreen_user(auth, user):
             AuthException(evt.text_code), user.usrname)
         return None
 
+    if found:
+        # Do not generate a barcode for the user
+        return
+
     # Generate a barcode for the user
     try:
         barcode = osrf_request(
@@ -476,9 +501,9 @@ def create_evergreen_user(auth, user):
  
     user.barcode = barcode['evergreen.lu_update_barcode']
 
-    create_stat_cats(newau, user)
+    create_stat_cats(egau, user)
 
-    print("Created: %s with barcode %s" % (newau.usrname(), user.barcode))
+    print("Created: %s with barcode %s" % (egau.usrname(), user.barcode))
     return user.barcode
 
 def update_ldap_barcode(con, user):
@@ -576,6 +601,9 @@ def parse_args():
     parser.add_argument('--query-date',
         help='Search LDAP for users created since (YYYYMMDDHHMMSSZ)'
     )
+    parser.add_argument('--find-eg-user',
+        help='Find Evergreen user by user name'
+    )
     parser.add_argument('-U', '--eg-user', nargs='?',
         help='Evergreen user name', default=credentials.OSRF_USER
     )
@@ -619,6 +647,19 @@ def main():
     # Log in and get an authtoken
     AUTHTOKEN = osrf_login(ARGS.eg_user, ARGS.eg_password, ARGS.eg_workstation)
 
+    if ARGS.find_eg_user:
+        class QuickUser:
+            "A quick and dirty user class"
+            pass
+        user = QuickUser()
+        user.ident_value = ARGS.find_eg_user
+        user.email = ARGS.find_eg_user
+        user.usrname = ARGS.find_eg_user
+        uid = find_evergreen_user(AUTHTOKEN, user)
+        if uid:
+            print "Found Evergreen user: %s" % (uid)
+        sys.exit()
+
     try:
         con = ldap.initialize(ARGS.ldap_server)
         con.set_option(ldap.OPT_REFERRALS, 0)