Advertisement
Guest User

Untitled

a guest
Aug 11th, 2017
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.56 KB | None | 0 0
  1. """
  2. source .env/bin/activate
  3. python domain_connect.py
  4.  
  5. """
  6.  
  7. from pyad import *
  8. import re
  9. import pprint
  10.  
  11. #Config
  12. #Comma separated list of groups to include. An earlier group will have priority if one user is member of multiple groups
  13. INCLUDE_GROUPS = "Core,partner,Group1,Group2"
  14.  
  15. #Set to empty string if user not member of INCLUDE_GROUPS should be excluded. Set a default group name if they should be included.
  16. DEFAULT_GROUP = "Default"
  17.  
  18. #A group of which members will be set as alarm receivers
  19. RECEIVER_GROUP = "Group3"
  20.  
  21.  
  22. #Should all users be receivers by default?
  23. DEFAULT_RECEIVER = 0
  24.  
  25. # DOMAIN SETTINGS
  26. DOMAIN_URL = "test.local"
  27. DOMAIN_USER = "Administrator"
  28. DOMAIN_PASS = "admin123!"
  29. #End of config
  30.  
  31.  
  32. include_groups = INCLUDE_GROUPS.split(",")
  33.  
  34. def sanitisePhoneNumber(p):
  35. nondigit = re.compile('[^+0-9]')
  36. return re.sub(nondigit, "", p)
  37.  
  38.  
  39. def get_domain_response(get_groups, url="", uname="", passwd=""):
  40. if url != "":
  41. pyad.set_defaults(ldap_server=url, username=uname, password=passwd)
  42. ad_groups = [adgroup.ADGroup.from_cn(grp) for grp in get_groups]
  43. users = []
  44. for group in ad_groups:
  45. users.extend(user for user in group.get_members())
  46. users = list(set(users))
  47. usersResponse = { }
  48. value = []
  49. for user in users:
  50. response = {}
  51. displayName = user.CN
  52. try:
  53. # get the first mobile Number of the user
  54. mobilePhone = user.get_attribute('mobile')[0]
  55. except:
  56. pass
  57. group_list = []
  58. for group in user.get_memberOfs():
  59. group_list.append({'displayName':group.CN})
  60. response['displayName'] = displayName
  61. response['mobilePhone'] = mobilePhone
  62. response['groups'] = {
  63. 'value': group_list
  64. }
  65. value.append(response)
  66. usersResponse['value'] = value
  67. return usersResponse
  68.  
  69.  
  70.  
  71. def get_alarm_users(usersResponse):
  72. alarmUsers = []
  73. for user in usersResponse['value']:
  74. alarmUser = {}
  75.  
  76. alarmUser['Name'] = user['displayName']
  77. alarmUser['PhoneNumber'] = sanitisePhoneNumber(user['mobilePhone'])
  78.  
  79. groupsResponse = user['groups']
  80.  
  81. if 'value' in groupsResponse:
  82. for group in groupsResponse['value']:
  83. if group['displayName'] == RECEIVER_GROUP:
  84. alarmUser['AlarmReceiver'] = 1
  85.  
  86. if group['displayName'] in include_groups:
  87. if 'Group' in alarmUser:
  88. if include_groups.index(group['displayName']) < include_groups.index(alarmUser['Group']):
  89. alarmUser['Group'] = group['displayName']
  90.  
  91. else:
  92. alarmUser['Group'] = group['displayName']
  93.  
  94. if 'Group' not in alarmUser:
  95. if DEFAULT_GROUP == "":
  96. continue
  97. else:
  98. alarmUser['Group'] = DEFAULT_GROUP
  99.  
  100. if 'PhoneNumber' not in alarmUser:
  101. continue
  102.  
  103. if 'AlarmReceiver' not in alarmUser:
  104. alarmUser['AlarmReceiver'] = DEFAULT_RECEIVER
  105.  
  106. alarmUsers.append(alarmUser)
  107. return alarmUsers
  108.  
  109.  
  110.  
  111. def main():
  112.  
  113. # local domain
  114. url = DOMAIN_URL
  115. uname = DOMAIN_USER
  116. paswd = DOMAIN_PASS
  117. get_groups = INCLUDE_GROUPS.split(',')
  118. get_groups.append(DEFAULT_GROUP)
  119. get_groups.append(RECEIVER_GROUP)
  120. # collects usersResponse from local domain
  121. # (url, uname and paswd, all are optional arguments)
  122. # if not provided the script will connect to RootDSE(default domain as default/current user)
  123. usersResponse = get_domain_response(get_groups, url, uname, paswd)
  124.  
  125. #get the alarm_users in a similar process like openOffice 365
  126. alarm_users = get_alarm_users(usersResponse)
  127. # print(alarm_users)
  128. # json.dumps(alarm_users) # for json object
  129.  
  130.  
  131. if __name__ == '__main__':
  132. main()
  133.  
  134.  
  135.  
  136.  
  137.  
  138. # Sample Output
  139. # alarmUsers_sample = [ { 'AlarmReceiver': 0,
  140. # 'Group': u'Core',
  141. # 'Name': u'Arne Gustin',
  142. # 'PhoneNumber': u'+46702990097'},
  143. # { 'AlarmReceiver': 0,
  144. # 'Group': 'Default',
  145. # 'Name': u'Bj\xf6rn \xd6hman',
  146. # 'PhoneNumber': u'+46709610840'},
  147. # { 'AlarmReceiver': 0,
  148. # 'Group': 'Default',
  149. # 'Name': u'Christoffer Wiklander',
  150. # 'PhoneNumber': u'+46702219630'},
  151. # { 'AlarmReceiver': 1,
  152. # 'Group': u'partner',
  153. # 'Name': u'Fredrik Schmidt',
  154. # 'PhoneNumber': u'+46708899934'},
  155. # { 'AlarmReceiver': 0,
  156. # 'Group': u'Core',
  157. # 'Name': u'Gert S\xf6derberg',
  158. # 'PhoneNumber': u'+46703480096'},
  159. # { 'AlarmReceiver': 1,
  160. # 'Group': u'Core',
  161. # 'Name': u'Jens Olsson',
  162. # 'PhoneNumber': u'+46736187911'},
  163. # { 'AlarmReceiver': 0,
  164. # 'Group': 'Default',
  165. # 'Name': u'Thomas L\xf6\xf6w',
  166. # 'PhoneNumber': u'+46707955935'}
  167. # ]
  168.  
  169. # def get_user_response(url):
  170. # usersResponse = {
  171. # }
  172. # web = requests.get(url)
  173. # data = web.text
  174. # soup = bs4.BeautifulSoup(data, 'html.parser')
  175. # value = []
  176. # for div in soup.find_all('div', { "class" : "user" }):
  177. # response = {}
  178. # displayName, mobilePhone, groups = [i for i in div.text.split('\n') if i]
  179. # if ',' in groups:
  180. # groups = groups.split(',')
  181. # else:
  182. # groups = [groups]
  183. # response['displayName'] = displayName
  184. # response['mobilePhone'] = mobilePhone
  185. # group_list = []
  186. # for group in groups:
  187. # group_list.append({'displayName': group})
  188.  
  189. # response['groups']= {
  190. # 'value': group_list
  191. # }
  192. # value.append(response)
  193. # usersResponse['value'] = value
  194. # return usersResponse
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement