From 6b7c3818dfc4a0f48e4dfd225924f0b331fde094 Mon Sep 17 00:00:00 2001
From: Sinisa Veseli <sveseli@aps.anl.gov>
Date: Tue, 11 Oct 2016 15:08:00 +0000
Subject: [PATCH] got dm user updates algorithm working

---
 .../aps_user_db/cli/updateUsersFromApsDbCli.py   | 16 ++++++++++++++--
 src/python/dm/ds_web_service/api/userRestApi.py  |  4 ++--
 2 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/src/python/dm/aps_user_db/cli/updateUsersFromApsDbCli.py b/src/python/dm/aps_user_db/cli/updateUsersFromApsDbCli.py
index 7b99e8c3..8b13a527 100755
--- a/src/python/dm/aps_user_db/cli/updateUsersFromApsDbCli.py
+++ b/src/python/dm/aps_user_db/cli/updateUsersFromApsDbCli.py
@@ -1,5 +1,6 @@
 #!/usr/bin/env python
 
+import datetime
 from dm.common.exceptions.invalidRequest import InvalidRequest
 from dm.common.cli.dmCli import DmCli
 from dm.common.utility.configurationManager import ConfigurationManager
@@ -19,13 +20,14 @@ Description:
     Updates all users in DM LDAP and database using information from APS DB. 
         """)
         ConfigurationManager.getInstance().setConfigFile('/home/oxygen/SVESELI/Work/DM/etc/dm.conf')
-        print ConfigurationManager.getInstance().getConfigOption('DsRestApiFactory', 'username')
+        self.logger.debug('Starting sync process')
         apsUserDbApi = ApsUserDbApi()
         userRestApi = DsRestApiFactory.getUserRestApi()
 
-
+        self.logger.debug('Retrieving APS users')
         apsUsers = apsUserDbApi.getApsUsers()
         self.logger.debug('Number of APS Users: %s' % len(apsUsers))
+        self.logger.debug('Retrieving DM users')
         dmUsers = userRestApi.getUsers()
         self.logger.debug('Number of DM Users: %s' % len(dmUsers))
         dmUserBadgeMap = {}
@@ -60,15 +62,25 @@ Description:
                 nCreatedUsers += 1
             else:
                 dmLastUpdate = dmUser.get('lastUpdate')
+                if dmLastUpdate:
+                    # need to convert DM last update time to datetime object
+                    # datetime cannot handle time zone at the moment
+                    timeZonePos = dmLastUpdate.rfind('-')
+                    dmLastUpdate = dmLastUpdate[0:timeZonePos]
+                    dmLastUpdate = datetime.datetime.strptime(dmLastUpdate, '%Y-%m-%d %H:%M:%S')
                 if not dmLastUpdate or dmLastUpdate < apsLastChangeDate:
                     id = dmUser.get('id')
                     self.logger.debug('Modifying user with badge %s: %s (DM id: %s)' % (badge, apsUser['name'], id))
+                    print apsUser
                     userRestApi.updateUser(id, username, firstName, lastName, middleName, email, badge, globusUsername, description, password, isLocalUser, lastUpdate)
                     nUpdatedUsers += 1
                 else:
                     # User is up to date
                     pass
            
+        self.logger.debug('Number of new DM users: %s' % (nCreatedUsers))
+        self.logger.debug('Number of updated DM users: %s' % (nUpdatedUsers))
+        self.logger.debug('Completed sync process')
 
         #ldapUserManager = LdapUserManager('ldaps://dmid-vm.xray.aps.anl.gov:636', 'uid=dmadmin,ou=People,o=aps.anl.gov,dc=aps,dc=anl,dc=gov', '/tmp/ldapPassword', userDnFormat='uid=%s,ou=DM,ou=People,o=aps.anl.gov,dc=aps,dc=anl,dc=gov', groupDnFormat='cn=%s,ou=DM,ou=Group,o=aps.anl.gov,dc=aps,dc=anl,dc=gov', minGidNumber=66000)
         #ldapUser = ldapUserManager.getUserInfo(username)
diff --git a/src/python/dm/ds_web_service/api/userRestApi.py b/src/python/dm/ds_web_service/api/userRestApi.py
index 4a7946d9..31f9bf52 100755
--- a/src/python/dm/ds_web_service/api/userRestApi.py
+++ b/src/python/dm/ds_web_service/api/userRestApi.py
@@ -94,12 +94,12 @@ class UserRestApi(DsRestApi):
         if isLocalUser:
             url += '&isLocaUser=%s' % isLocalUser
         if lastUpdate:
-            url += '&lastUpdate=%s' % lastUpdate
+            url += '&lastUpdate=%s' % Encoder.encode(str(lastUpdate))
         if not url:
             raise InvalidRequest('No user attributes have been modified.')
         # Remove first '&' character
         url = '%s/users/%s?%s' % (self.getContextRoot(), id, url[1:])
-        responseData = self.sendSessionRequest(url=url, method='POST')
+        responseData = self.sendSessionRequest(url=url, method='PUT')
         return UserInfo(responseData)
 
     @DsRestApi.execute
-- 
GitLab