-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathcucmJabberWriter.py
More file actions
299 lines (254 loc) · 11.5 KB
/
Copy pathcucmJabberWriter.py
File metadata and controls
299 lines (254 loc) · 11.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
#!/usr/bin/env python3.6
__version__ = '0.4'
__author__ = 'Christopher Phillips'
# import sys
import logging
import json
from cucmAxlWriter import cucmAxlWriter
cjwLogger = logging.getLogger(__name__)
cjwLogger.setLevel(logging.DEBUG)
infoHandler = logging.FileHandler('jabberInfo.log', mode='w')
infoHandler.setLevel(logging.INFO)
debugHandler = logging.FileHandler('jabberDebug.log', mode='w')
debugHandler.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - \
%(message)s')
infoHandler.setFormatter(formatter)
debugHandler.setFormatter(formatter)
cjwLogger.addHandler(infoHandler)
cjwLogger.addHandler(debugHandler)
# cjwLogger.addHandler(logging.StreamHandler(sys.stdout))
cjwLogger.info("Begin JabberWriter Info Logging")
cjwLogger.debug("Begin JabberWriter Debug Logging")
class cucmJabberWriter:
# uses cucmAxlWriter to write Jabber devices lines users to CUCM
_jabberTypes = ['CSF', 'TCT', 'BOT', 'TAB']
# jabberWriter will take all data about user, below
# data obtained based on given data
_obtainedFirstName = '' # obtained from LDAP user in CUCM
_obtainedLastName = '' # obtained from LDAP user in CUCM
# data given during inital setup
_givensAMAccountName = '' # sAMAccountName must have a matching user
_givenDID = '' # DID / +e164 number (10 digit number)
_givenEpriseExt = '' # Extension (6 digit number)
_givenCity = '' # City name (for D_CSS)
_givenBuilding = '' # Building name (for Device Pool)
_givenVM = '' # Bool
_givenVMprofile = '' # IF T - VM Profile required to set on line
_givenCoS = 'INTL' # Class of Service - default INTLf
_givenSNR = '' # Bool
_givenSNRphone = '' # IF T - Cell Phone Number required
# Meet me config? (maybe)
myCucmAxlWriter = cucmAxlWriter()
def __init__(self, sAMAccountName, DID, EpriseExt, Building, City, VM='f',
VMprofile='voicemailusertemplate', CoS='International',
SNR='f', SNRphone='', PIN='232323', gFirstName='GetAD!',
gLastName='GetAD!'):
self._setsAMAccountName(sAMAccountName)
self._setDID(DID)
self._setEpriseExt(EpriseExt)
self._setBuilding(Building)
self._setCity(City)
self._setVM(VM)
self._setVMprofile(VMprofile)
self._setCoS(CoS)
self._setSNR(SNR)
self._setSNRphone(SNRphone)
user = self.myCucmAxlWriter.userGet(username=self.getsAMAccountName())
cjwLogger.debug(user)
if not user:
raise Exception("User does NOT exist in CUCM, unrecoverable")
cjwLogger.info("init getUser Completed")
if 'GetAD!' in gFirstName:
tempFirstName = user['return']['user']['firstName']
else:
tempFirstName = gFirstName
if 'GetAD!' in gLastName:
tempLastName = user['return']['user']['lastName']
else:
tempLastName = gLastName
cjwLogger.debug('firstname: %s lastname: %s', tempFirstName,
tempLastName)
self._setFirstName(tempFirstName)
self._setLastName(tempLastName)
def _setsAMAccountName(self, username):
self._usersAMAccountName = username
def getsAMAccountName(self):
return self._usersAMAccountName
def _setDID(self, did):
self._userDID = did
def getDID(self):
return self._userDID
def _setEpriseExt(self, extension):
self._userEpriseExt = extension
def getEpriseExt(self):
return self._userEpriseExt
def getE164Ext(self):
return "\+1" + self._userDID
def _setBuilding(self, building):
self._givenBuilding = building
def getBuilding(self):
return self._givenBuilding
def _setCity(self, city):
self._givenCity = city
def getCity(self):
return self._givenCity
def _setVM(self, vm):
self._givenVM = vm
def getVM(self):
return self._givenVM
def _setVMprofile(self, vmprofile):
self._givenVMprofile = vmprofile
def getVMprofile(self):
return self._givenVMprofile
def _setCoS(self, cos):
self._givenCoS = cos
def getCoS(self):
return self._givenCoS
def _setSNR(self, snr):
self._givenSNR = snr
def getSNR(self):
return self._givenSNR
def _setSNRphone(self, snrphone):
self._givenSNRphone = snrphone
def getSNRphone(self):
return self._givenSNRphone
def _setFirstName(self, firstName):
self._obtainedFirstName = firstName
def getFirstName(self):
return self._obtainedFirstName
def _setLastName(self, lastName):
self._obtainedLastName = lastName
def getLastName(self):
return self._obtainedLastName
def _deleteJabberLine(self):
cjwLogger.info("deleteJabberLine called")
# verify line exists
if self.myCucmAxlWriter.lineExists(self.getE164Ext()):
cjwLogger.info("Line exists")
self.myCucmAxlWriter.lineDelete(self.getE164Ext())
return "Success" # Deleted
cjwLogger.info("deleteJabberLine Completed")
else:
cjwLogger.info("Line does not exist to delete")
return "Fail" # Did not delete
def _createJabberLine(self):
cjwLogger.info("createJabberLine called")
# verify line NOT exist
if not self.myCucmAxlWriter.lineExists(self.getE164Ext()):
cjwLogger.info("Line does NOT exist")
self.myCucmAxlWriter.lineAdd(extension=self.getE164Ext(),
firstname=self.getFirstName(),
lastname=self.getLastName(),
building=self.getBuilding(),
city=self.getCity(),
vm='True',
# vm=self.getVM()) # original code
vmProfileName=self.getVMprofile())
# vm= is NOW set to always 'True' because of the use case where
# users with NO voicemail have a voicmail profile set that
# still fowrwards callers to voicemail to be answered by a
# call handler.
cjwLogger.info("createJabberLine Completed")
return "Success" # Line Created
else:
cjwLogger.info("createJabberLine already exists")
return "Fail" # Line already exists
def _updateJabberLine(self):
cjwLogger.info("updateJabberLine called")
if self.myCucmAxlWriter.lineExists(self.getE164Ext()):
cjwLogger.info("Line exists, updating")
self.myCucmAxlWriter.lineUpdate(extension=self.getE164Ext(),
did=self.getDID())
return "Success" # Line Updated
else:
cjwLogger.info("updateJabberLine does NOT exist")
return "Fail" # Attempted to update a line that does not exist"
def _deleteJabberDevices(self):
status = {}
cjwLogger.info("deleteJabberDevice called")
for jabberType in self._jabberTypes:
if self.myCucmAxlWriter.deviceExists(jabberType +
self.getsAMAccountName()):
cjwLogger.info("%s Device exists", jabberType)
self.myCucmAxlWriter.deviceDelete(self.getsAMAccountName(),
jabberType)
status.update({"{0}".format(jabberType): "Success"})
# status.update({"{0}".format(jabberType): "Fail"})
cjwLogger.info("%s deleteJabberDevice done", jabberType)
return status
def _createJabberDevices(self):
status = {}
cjwLogger.info("createJabberDevices called")
for jabberType in self._jabberTypes:
if not self.myCucmAxlWriter.deviceExists(jabberType +
self.getsAMAccountName()):
cjwLogger.info("%s Device does NOT exist", jabberType)
self.myCucmAxlWriter.deviceAdd(self.getsAMAccountName(),
firstname=self.getFirstName(),
lastname=self.getLastName(),
extension=self.getEpriseExt(),
e164ext=self.getE164Ext(),
did=self.getDID(),
building=self.getBuilding(),
city=self.getCity(),
devicetype=jabberType)
status.update({"{0}".format(jabberType): "Success"})
cjwLogger.info("%s createJabberDevice done", jabberType)
else:
status.update({"{0}".format(jabberType): "Fail"})
return status
def _updateJabberUser(self):
deviceList = []
for jabberType in self._jabberTypes:
deviceList.insert(0, jabberType+self.getsAMAccountName())
self.myCucmAxlWriter.userUpdate(username=self.getsAMAccountName(),
extension=self.getE164Ext(),
did=self.getDID(),
deviceList=deviceList,
pin="232323")
cjwLogger.info("updateJabberUser completed")
return "Success" # User Updated"
def _createRdpDevice(self):
cjwLogger.info("createRdpDevice called")
result = self.myCucmAxlWriter.rdpAdd(self.getsAMAccountName(),
firstname=self.getFirstName(),
lastname=self.getLastName(),
e164ext=self.getE164Ext(),
did=self.getDID(),
extension=self.getEpriseExt(),
building=self.getBuilding(),
city=self.getCity())
cjwLogger.debug(result)
return "Success"
def _deleteRdpDevice(self):
cjwLogger.info("deleteRdpDevice called")
result = self.myCucmAxlWriter.rdpDelete(name=self.getsAMAccountName())
cjwLogger.debug(result)
return "Success"
def writeJabber(self):
status = {}
cjwLogger.info("writeJabber called")
# create line, needed for all other associations
status.update({"lineCreate": self._createJabberLine()})
# required for adding an e164AltNum
status.update({"lineUpdate": self._updateJabberLine()})
# create ALL jabber devices in CUCM
status.update({"deviceCreate": self._createJabberDevices()})
# update user to associate devices
status.update({"endUserUpdate": self._updateJabberUser()})
# add Remote Destination Profile
status.update({"rdpCreate": self._createRdpDevice()})
cjwLogger.info("writeJabber completed")
return json.dumps(status)
def cleanJabber(self):
status = {}
cjwLogger.info("cleanJabber called")
# delete all devices
status.update({"deviceDelete": self._deleteJabberDevices()})
# delete RDP
status.update({"rdpDelete": self._deleteRdpDevice()})
# delete line
status.update({"lineDelete": self._deleteJabberLine()})
cjwLogger.info("cleanJabber completed")
return json.dumps(status)