From d661e21212ab799bf7f552c30620d93e92f8d8bd Mon Sep 17 00:00:00 2001
From: fandrem <none@none>
Date: Tue, 3 May 2022 15:40:32 +0200
Subject: [PATCH] Feature #28491 - sid_user.py script

---
 bin/sid_user.py | 114 +++++++++++++++++++++++++++++++++++++++++-------
 1 file changed, 99 insertions(+), 15 deletions(-)

diff --git a/bin/sid_user.py b/bin/sid_user.py
index 3656001..6e8412a 100755
--- a/bin/sid_user.py
+++ b/bin/sid_user.py
@@ -373,13 +373,71 @@ def sid_update_user_exlude_approver_scheduler_change_management(diego, dfqdn, re
 
     ''' delete: need to check the line exist if not 409'''
     scrat_inst = Scrat(res_rw_user, '', fqdn=dfqdn, version=2, verify=verify)
-    print(dfqdn)
     (scratres) = scrat_inst.deleteLine(block_to_update)
     if str(scratres) != '200':
          print("not removed " + user + " from " + typeExclude)
     else:
         print("removed " + user + " from " + typeExclude)
 
+def sid_create_update_user_approver_scheduler_change_management(diego, dfqdn, res_rw_user, user, uid, typeAdd, need_to_update, context_uid=778000000, verify=True):
+    create = True
+    results = diego.diegoGetObject(uid)
+    print(need_to_update)
+    print(results['objects'])
+    ty = []
+    ty2 = []
+    if 'objects' in results :
+        for typ in results['objects'] : 
+            ty.append(typ['type'])
+            if typ['type'] == typeAdd and need_to_update :
+                create = False 
+    ty2 = ty
+    ty2.append(typeAdd)
+    #print(ty2)
+    #exit(1)
+    #logger.debug(results)
+
+    block_to_update = {
+        'name': user,
+        'context': context_uid,
+        'type': typeAdd,
+        'properties': {
+            'is a' : typeAdd
+        }
+    }
+
+    block_to_update = {
+    'uid': uid,
+    'name': user,
+    'context': context_uid,
+    'type': typeAdd,
+    'properties': {
+        "is a" : [{'type': 'user', 'context': 666000002}, {'type': 'approver', 'context': 778000000}, {'type' : typeAdd, 'context': 778000000}], 
+     }
+    }
+
+    to_print = pformat(block_to_update)
+    for i in list(range(0, int(round(len(to_print) / 250)) + 1)):
+        logger.info('scrat %s update cmd: %s' % (str(i), to_print[250 * i:250 * (i + 1)]))
+
+    ''' delete: need to check the line exist if not 409'''
+    scrat_inst = Scrat(res_rw_user, '', fqdn=dfqdn, version=2, verify=verify)
+    (scrat_json, scratres) = scrat_inst.scratUpdate(block_to_update,  overwrite_mode=True, line_only=True, Full=True)
+    #(scratres) = scrat_inst.scratQuery(block_to_update,  'creation')
+    if str(scratres) != '200':
+        to_print = pformat(block_to_update)
+        for i in list(range(0, int(round(len(to_print) / 250)) + 1)):
+            logger.error('scrat %s creating cmd: %s' % (str(i), to_print[250 * i:250 * (i + 1)]))
+        for i in list(range(0, int(round(len(to_print) / 250)) + 1)):
+            logger.error('scrat %s creating failed: %s' % (str(i), to_print[250 * i:250 * (i + 1)]))
+            # print('scrat %s update failed: %s' % (str(i), to_print[250 * i:250 * (i + 1)]))
+    else:
+        to_print = pformat(block_to_update)
+        for i in list(range(0, int(round(len(to_print) / 250)) + 1)):
+            logger.debug('scrat %s creating cmd: %s' % (str(i), to_print[250 * i:250 * (i + 1)]))
+
+    print("STOP!")
+    exit(1)
 
 def main():
 
@@ -440,7 +498,7 @@ def main():
     departments = ['DIGIT.C.4', 'DIGIT.C.4.002', 'DIGIT.C.4.003', 'DIGIT.C.4.006', 'DIGIT.C.4.007', 'DIGIT.C.4.008']
 
 
-    # last reminder request: 04/2022
+    # last reminder request: 04/2022 : used to remove the relations for others users
     approver_scheduler_list = ['fournla', 'chevaju', 'gondago']
     snet_results = dict()
     snet_results = snet_ldap_get()
@@ -716,11 +774,7 @@ def main():
 
                 if 'Visual' not in block_to_update['properties']['has access to application program']:
                     block_to_update['properties']['has access to application program'].append('Visual')
-
-                # print("#TODO This '%s' is a PM -> also need to add a 'is a' 'approver' + 'scheduler'" % user)
-                # sid_need_approver.append(user)
-                # sid_need_scheduler.append(user)
-
+            
             elif mb == 'sd':
                 if need_to_update is False and need_to_create is True:
                     block_to_update['properties']['belongs to'].append('Snet NOC/SD')
@@ -780,6 +834,20 @@ def main():
         if len(block_to_update['properties']['has access to application program']) == 1:
             block_to_update['properties']['has access to application program'] = block_to_update['properties']['has access to application program'][0]
 
+        # has as role (OQM, Product Owner, SDM)
+        # print("This '%s' is a PM -> also need to add a 'is a' 'approver' + 'scheduler'" % user)
+        if user in sid_results[1] and 'has as role' in sid_results[1][user] :
+             if isinstance(sid_results[1][user]['has as role'], list):
+                for role in sid_results[1][user]['has as role']:
+                    if role == 'OQM' or role ==  'Product Owner' or role == 'SDM' :      
+                        sid_need_approver.append(user)
+                        sid_need_scheduler.append(user)         
+             else :
+                role = sid_results[1][user]['has as role'] 
+                if role == 'OQM' or role ==  'Product Owner' or role == 'SDM' :      
+                    sid_need_approver.append(user)
+                    sid_need_scheduler.append(user)         
+       
         # check and cleanup the data before scrat
         dict_keys = list(block_to_update['properties'].keys())
         for prop in dict_keys:
@@ -809,8 +877,6 @@ def main():
             for i in list(range(0, int(round(len(to_print) / 250)) + 1)):
                 logger.info('scrat %s cmd: %s' % (str(i), to_print[250 * i:250 * (i + 1)]))
 
-    # TODO If this is a Board Coordinator -> also need to add a 'is a' 'approver' + 'scheduler'
-
     params = {}
     sid_s_results = diego.diego_run_dieget_by_name('sid_sheduler_check', params)
     for user in sid_s_results[1]:
@@ -819,12 +885,14 @@ def main():
         if user not in sid_need_scheduler or user not in approver_scheduler_list:
             logger.error('SID user ' + user + ' should not be an scheduler.')
             if not dryrun:
-                sid_update_user_exlude_approver_scheduler_change_management(diego, fqdn, res_rw_user, user, sid_s_results[1][user]['uid'], 'scheduler')
+                sid_update_user_exlude_approver_scheduler_change_management(diego, fqdn, res_rw_user, user, sid_results[1][user]['uid'], 'scheduler')
                 #pass
             else:
                 logger.error('dry run, user not removed from the scheduler role.')
+                #check_if_is_approver_sheduler_add_relation_if_not_exists(diego, fqdn, res_rw_user, user, sid_s_results[1][user]['uid'], 'scheduler')   
             continue
-
+    
+    print(sid_need_scheduler, "SCHESDULER-LIST")
     for user in sid_need_scheduler:
         if user in devnull_user:
             continue
@@ -836,7 +904,16 @@ def main():
         elif user not in sid_s_results[1]:
             need_to_create = True
             logger.debug('SID user ' + user + ' should be addded to scheduler.')
-
+            #create the relation if not exists
+        
+        if not dryrun:
+            #sid_create_update_user_approver_scheduler_change_management(diego, fqdn, res_rw_user, user, sid_results[1][user]['uid'], 'scheduler', need_to_update)
+            pass
+        else:
+            logger.error('dry run, user not add/update from the scheduler role.')
+        continue
+    
+    
     params = {}
     sid_a_results = diego.diego_run_dieget_by_name('sid_approver_check', params)
     for user in sid_a_results[1]:
@@ -845,12 +922,13 @@ def main():
         if user not in sid_need_approver or user not in approver_scheduler_list:
             logger.error('SID user ' + user + ' should not be an approver.')
             if not dryrun:
-                sid_update_user_exlude_approver_scheduler_change_management(diego, fqdn, res_rw_user, user, sid_a_results[1][user]['uid'], 'approver')
+                sid_update_user_exlude_approver_scheduler_change_management(diego, fqdn, res_rw_user, user, sid_results[1][user]['uid'], 'approver')
                 #pass
             else:
                 logger.error('dry run, user not removed from the approver role.')
             continue
-
+    
+    print(sid_need_approver, "APRROVERS-LIST")
     for user in sid_need_approver:
         if user in devnull_user:
             continue
@@ -862,7 +940,13 @@ def main():
         elif user not in sid_a_results[1]:
             need_to_create = True
             logger.debug('SID user ' + user + ' should be addded to approver.')
-
+        #create the relation if not exists
+        if not dryrun:
+            #sid_create_update_user_approver_scheduler_change_management(diego, fqdn, res_rw_user, user, sid_results[1][user]['uid'], 'approver', need_to_update)
+            pass
+        else:
+            logger.error('dry run, user not add/update from the approver role.')
+        continue
     '''
     * scrat department
     DIGIT.C.4.006 is a departement
-- 
GitLab