Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- """
- source .env/bin/activate
- python domain_connect.py
- """
- from pyad import *
- import re
- import pprint
- #Config
- #Comma separated list of groups to include. An earlier group will have priority if one user is member of multiple groups
- INCLUDE_GROUPS = "Core,partner,Group1,Group2"
- #Set to empty string if user not member of INCLUDE_GROUPS should be excluded. Set a default group name if they should be included.
- DEFAULT_GROUP = "Default"
- #A group of which members will be set as alarm receivers
- RECEIVER_GROUP = "Group3"
- #Should all users be receivers by default?
- DEFAULT_RECEIVER = 0
- # DOMAIN SETTINGS
- DOMAIN_URL = "test.local"
- DOMAIN_USER = "Administrator"
- DOMAIN_PASS = "admin123!"
- #End of config
- include_groups = INCLUDE_GROUPS.split(",")
- def sanitisePhoneNumber(p):
- nondigit = re.compile('[^+0-9]')
- return re.sub(nondigit, "", p)
- def get_domain_response(get_groups, url="", uname="", passwd=""):
- if url != "":
- pyad.set_defaults(ldap_server=url, username=uname, password=passwd)
- ad_groups = [adgroup.ADGroup.from_cn(grp) for grp in get_groups]
- users = []
- for group in ad_groups:
- users.extend(user for user in group.get_members())
- users = list(set(users))
- usersResponse = { }
- value = []
- for user in users:
- response = {}
- displayName = user.CN
- try:
- # get the first mobile Number of the user
- mobilePhone = user.get_attribute('mobile')[0]
- except:
- pass
- group_list = []
- for group in user.get_memberOfs():
- group_list.append({'displayName':group.CN})
- response['displayName'] = displayName
- response['mobilePhone'] = mobilePhone
- response['groups'] = {
- 'value': group_list
- }
- value.append(response)
- usersResponse['value'] = value
- return usersResponse
- def get_alarm_users(usersResponse):
- alarmUsers = []
- for user in usersResponse['value']:
- alarmUser = {}
- alarmUser['Name'] = user['displayName']
- alarmUser['PhoneNumber'] = sanitisePhoneNumber(user['mobilePhone'])
- groupsResponse = user['groups']
- if 'value' in groupsResponse:
- for group in groupsResponse['value']:
- if group['displayName'] == RECEIVER_GROUP:
- alarmUser['AlarmReceiver'] = 1
- if group['displayName'] in include_groups:
- if 'Group' in alarmUser:
- if include_groups.index(group['displayName']) < include_groups.index(alarmUser['Group']):
- alarmUser['Group'] = group['displayName']
- else:
- alarmUser['Group'] = group['displayName']
- if 'Group' not in alarmUser:
- if DEFAULT_GROUP == "":
- continue
- else:
- alarmUser['Group'] = DEFAULT_GROUP
- if 'PhoneNumber' not in alarmUser:
- continue
- if 'AlarmReceiver' not in alarmUser:
- alarmUser['AlarmReceiver'] = DEFAULT_RECEIVER
- alarmUsers.append(alarmUser)
- return alarmUsers
- def main():
- # local domain
- url = DOMAIN_URL
- uname = DOMAIN_USER
- paswd = DOMAIN_PASS
- get_groups = INCLUDE_GROUPS.split(',')
- get_groups.append(DEFAULT_GROUP)
- get_groups.append(RECEIVER_GROUP)
- # collects usersResponse from local domain
- # (url, uname and paswd, all are optional arguments)
- # if not provided the script will connect to RootDSE(default domain as default/current user)
- usersResponse = get_domain_response(get_groups, url, uname, paswd)
- #get the alarm_users in a similar process like openOffice 365
- alarm_users = get_alarm_users(usersResponse)
- # print(alarm_users)
- # json.dumps(alarm_users) # for json object
- if __name__ == '__main__':
- main()
- # Sample Output
- # alarmUsers_sample = [ { 'AlarmReceiver': 0,
- # 'Group': u'Core',
- # 'Name': u'Arne Gustin',
- # 'PhoneNumber': u'+46702990097'},
- # { 'AlarmReceiver': 0,
- # 'Group': 'Default',
- # 'Name': u'Bj\xf6rn \xd6hman',
- # 'PhoneNumber': u'+46709610840'},
- # { 'AlarmReceiver': 0,
- # 'Group': 'Default',
- # 'Name': u'Christoffer Wiklander',
- # 'PhoneNumber': u'+46702219630'},
- # { 'AlarmReceiver': 1,
- # 'Group': u'partner',
- # 'Name': u'Fredrik Schmidt',
- # 'PhoneNumber': u'+46708899934'},
- # { 'AlarmReceiver': 0,
- # 'Group': u'Core',
- # 'Name': u'Gert S\xf6derberg',
- # 'PhoneNumber': u'+46703480096'},
- # { 'AlarmReceiver': 1,
- # 'Group': u'Core',
- # 'Name': u'Jens Olsson',
- # 'PhoneNumber': u'+46736187911'},
- # { 'AlarmReceiver': 0,
- # 'Group': 'Default',
- # 'Name': u'Thomas L\xf6\xf6w',
- # 'PhoneNumber': u'+46707955935'}
- # ]
- # def get_user_response(url):
- # usersResponse = {
- # }
- # web = requests.get(url)
- # data = web.text
- # soup = bs4.BeautifulSoup(data, 'html.parser')
- # value = []
- # for div in soup.find_all('div', { "class" : "user" }):
- # response = {}
- # displayName, mobilePhone, groups = [i for i in div.text.split('\n') if i]
- # if ',' in groups:
- # groups = groups.split(',')
- # else:
- # groups = [groups]
- # response['displayName'] = displayName
- # response['mobilePhone'] = mobilePhone
- # group_list = []
- # for group in groups:
- # group_list.append({'displayName': group})
- # response['groups']= {
- # 'value': group_list
- # }
- # value.append(response)
- # usersResponse['value'] = value
- # return usersResponse
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement