

import requests
import time
import json


US_CP_orgName = "<your-environment-name>"
EMEA_CP_orgName = "<your-emea-environment-name"

US_PWD = 'XXXXXXXXXXX'
EMEA_PWD = 'XXXXXXXXXXX'

headers = {
  'Content-Type': 'application/json'
}


try:
  # Retriev list of groups from NA CP org
  response = requests.get('https://cdn.elastic.snaplogic.com/api/1/rest/public/groups/' + US_CP_orgName, headers=headers, auth=('<your-email>', US_PWD))

  groupsLst = json.loads( response.text )
  for group in groupsLst['groups']:
    print( "Process group:", group )

    #############################################
    # Get group information
    #############################################
    response = requests.get('https://cdn.elastic.snaplogic.com/api/1/rest/public/groups/' + US_CP_orgName + "/" + group, headers=headers, auth=('<your-email>', US_PWD))
    groupInfo = json.loads( response.text )
    groupInfo['organization'] = EMEA_CP_orgName
    groupData = json.dumps( groupInfo )

    #############################################
    # Create group in EMEA CP
    #############################################
    print( "Create group:", group )
    groupData = {
        "organization" : EMEA_CP_orgName,
        "name" : group
        }
    response = requests.post('https://cdn.emea.snaplogic.com/api/1/rest/public/groups', headers=headers, json=groupData, auth=('<your-email>', EMEA_PWD))
    if response.status_code == 200 :
      print( group, "created" )
    elif response.status_code == 409 :
      print( group, "already exists" )
    else :
      print( "Status:", response.status_code, response.reason, response.text )

    #############################################
    # Create the users of the group
    #############################################
    for email in groupInfo['members']:
      print( "Create user:", email )
      # Retrieve user from NA CP org
      response = requests.get('https://cdn.elastic.snaplogic.com/api/1/rest/public/users/' + email, headers=headers, auth=('<your-email>', US_PWD))
      userInfo = json.loads( response.text )
      # print( userInfo )
      # Create user in EMEA CP
      admin = "False"
      for org in userInfo['organizations']:
        if org['name'] == US_CP_orgName :
          admin = org['administrator']
          break
      userData = {
        "email" : email,
        "first_name" : userInfo['first_name'],
        "last_name" : userInfo['last_name'],
        "organization" : EMEA_CP_orgName,
        "administrator" : admin,
        "allow_password_login" : userInfo['allow_password_login'],
        "ui_access" : userInfo['ui_access'],
        "create_home_directory" : "True"
        }
      # print( userData )
      response = requests.post('https://cdn.emea.snaplogic.com/api/1/rest/public/users', headers=headers, json=userData, auth=('<your-email>', EMEA_PWD))
      if response.status_code == 409 :
        # User already exists, update it
        print( "Rather update existing user", email )
        userData = {
        "send_email" : "True",
        "create_home_directory" : "True"
        }
        response = requests.put('https://cdn.emea.snaplogic.com/api/1/rest/public/users/' + email + '/org/' + EMEA_CP_orgName, headers=headers, json=userData, auth=('<your-email>', EMEA_PWD))

      if response.status_code == 200 :
        print( email, "created" )
      else :
        print( "Status:", response.status_code, response.reason, response.text )

      #############################################
      # Add user to group
      #############################################
      groupData = {
        "add_user" : email
        }
      response = requests.patch('https://cdn.emea.snaplogic.com/api/1/rest/public/groups/' + EMEA_CP_orgName + '/' + group, headers=headers, json=groupData, auth=('<your-email>', EMEA_PWD))
      if response.status_code == 200 :
        print( email, "added to group" )
      else :
        print( "Status:", response.status_code, response.reason, response.text )

  print( "Groups and users successfully migrated" )

except Exception as e:
  print(e)
  input("Error... press enter")
  exit()

input("Process completed... press enter to close this window")
