Skip to content

Commit 985dd54

Browse files
Merge pull request #79 from TilCreator/feat_omm_auto
(ommsync)! Improve extension handling and enable subscription automatically
2 parents 89d43bc + 7f48449 commit 985dd54

4 files changed

Lines changed: 62 additions & 36 deletions

File tree

services/dect-wip-ommsync/dect-wip-ommsync.py

Lines changed: 43 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -11,76 +11,84 @@
1111
from datetime import datetime
1212
from tools.confighelper import DectWIPConfig
1313

14-
print('Make sure Subscription and Auto-Create are enabled')
15-
1614
lock = Lock()
1715
app = Flask(__name__)
1816
scheduler = APScheduler()
1917

2018
@app.route('/connect/', methods=['POST'])
2119
def connect():
22-
23-
print('obtaining lock')
2420
with lock:
25-
print('lock obtained')
26-
2721
req_json = request.get_json()
2822

2923
user_extension = requests.get(f"http://{config.dect_wip_internal_ip}:{config.dect_wip_port}/api/v1/GetUserExtensionByToken/{req_json['token']}").json()
3024

3125
extension = user_extension['extension']
3226
password = user_extension['password']
3327
displayname = user_extension['name']
34-
28+
29+
# TODO get temp_extension from omm
3530
temp_extenison = requests.get(f"http://{config.dect_wip_internal_ip}:{config.dect_wip_port}/api/v1/GetTempExtensionByCallerid/{req_json['callerid']}").json()
36-
37-
ppn = temp_extenison['ppn']
38-
uid = temp_extenison['uid']
39-
40-
print(ppn)
41-
print(uid)
42-
43-
client.detach_user_device(uid,ppn)
44-
45-
newuser = client.create_user(extension)
46-
client.set_user_sipauth(newuser.uid, extension, password)
47-
client.set_user_name(newuser.uid, displayname)
48-
49-
print(client.attach_user_device(int(newuser.uid), ppn))
50-
# no implemented in current ommclient ...
51-
#client.delete_user(uid)
52-
31+
32+
# deletes existing users with the same extension
33+
# this also detaches the (dynamically linked) device
34+
for user in client.find_users(lambda user: user.num == extension):
35+
print(f"deleting uid {user.uid} (duplicate of extension {extension})")
36+
client.delete_user(user.uid)
37+
38+
new_user = client.create_user(extension)
39+
client.set_user_sipauth(new_user.uid, extension, password)
40+
client.set_user_name(new_user.uid, displayname)
41+
42+
print(f"detaching ppn {temp_extenison['ppn']} from uid {temp_extenison['uid']}")
43+
client.detach_user_device(temp_extenison['uid'], temp_extenison['ppn'])
44+
45+
print(f"deleting uid {temp_extenison['uid']}")
46+
client.delete_user(temp_extenison['uid'])
47+
48+
print(f"attaching ppn {temp_extenison['ppn']} to uid {new_user.uid}, extension {extension}")
49+
client.attach_user_device(int(new_user.uid), temp_extenison['ppn'])
50+
5351
response = make_response(jsonify( {"message": "extension added"}), 200)
5452
return response
5553

5654
@scheduler.task('interval', id='makeTemps', seconds=5, next_run_time=datetime.now(), max_instances=1)
5755
def makeTemps():
58-
print("lets go")
59-
60-
print('obtaining lock')
6156
with lock:
62-
print('lock obtained')
63-
6457
for device in list(client.find_devices(lambda d: d.relType == mitel_ommclient2.types.PPRelTypeType("Unbound"))):
6558
extension = 't_' + namegenerator.generate_name() + utilities.getRandomNumber(4)
6659
password = utilities.getRandomStr(20)
67-
60+
6861
newuser = client.create_user(extension)
6962
client.set_user_sipauth(newuser.uid, extension, password)
7063
client.set_user_name(newuser.uid, extension[2:21])
7164
client.attach_user_device(int(newuser.uid), int(device.ppn))
72-
65+
7366
data = {
7467
"extension": extension,
7568
"password": password,
7669
"uid": newuser.uid,
7770
"ppn": device.ppn
7871
}
7972

80-
print(data)
81-
73+
print("new temp extension created", data)
74+
8275
response = requests.post(f"http://{config.dect_wip_internal_ip}:{config.dect_wip_port}/api/v1/AddTempExtensionToDB", json=data)
83-
print(response.text)
76+
if response.status_code != 200:
77+
raise RuntimeError(f"adding temp extension to db failed: {response.status_code} {response.text}")
78+
79+
@scheduler.task('interval', id='enable_subscription', seconds=15, next_run_time=datetime.now(), max_instances=1)
80+
def enable_subscription():
81+
with lock:
82+
if config.ommsync_enable_subscription:
83+
if client.get_dect_auth_code() != config.ommsync_auth_code:
84+
print(f"setting auth code to {config.ommsync_auth_code}")
85+
client.set_dect_auth_code(config.ommsync_auth_code)
86+
if not client.get_device_auto_create():
87+
print("enabling device auto creation on OMM")
88+
client.set_device_auto_create(True)
89+
if client.get_dect_subscription_mode() != 'Configured':
90+
print("enabling subscription on OMM")
91+
client.set_dect_subscription_mode('Configured')
8492

8593
def init(config_path):
8694

@@ -94,6 +102,7 @@ def init(config_path):
94102
client = mitel_ommclient2.OMMClient2(
95103
host=config.omm_ip,
96104
port=config.omm_port,
105+
use_ssl=config.omm_usessl,
97106
username=config.omm_username,
98107
password=config.omm_password,
99108
ommsync=True

services/dect-wip-ommsync/requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
mitel_ommclient2
1+
mitel_ommclient2 @ git+https://codeberg.org/TilCreator/mitel_ommclient2.git@main
22
rsa
33
flask
44
flask-apscheduler

systemfiles/etc/dect-wip.ini.sample

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,11 @@ show_voucher = False
1717

1818
[omm]
1919
ip = 10.10.10.10
20-
port = 12621
20+
port = 12622
21+
# To use SSL the ports needs to be set to 12622
22+
# SSL is supported on almost every OMM version
23+
# OMM version >9 does not support unencrypted connection
24+
use_ssl = true
2125
username = ade
2226
password = ade
2327

@@ -46,3 +50,5 @@ port = 8082
4650
[ommsync]
4751
listen_ip = 0.0.0.0
4852
port = 8081
53+
enable_subscription = true
54+
auth_code = 0000

tools/confighelper.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
import os
22

3+
def str_to_bool(input):
4+
if input.lower() in ["true", "yes", "y", "1"]:
5+
return True
6+
elif input.lower() in ["false", "no", "n", "0"]:
7+
return False
8+
else:
9+
raise ValueError(f'"{input}" can no be converted to boolean')
10+
311
class DectWIPConfig():
412
import configparser
513
config = configparser.ConfigParser()
@@ -64,9 +72,12 @@ def __init__(self, config_path = '/etc/dect-wip.ini'):
6472
# [ommsync] --- MicroService
6573
self.ommsync_listen_ip = self.__get_config_with_env_override('ommsync', 'listen_ip')
6674
self.ommsync_port = int(self.__get_config_with_env_override('ommsync', 'port'))
75+
self.ommsync_enable_subscription = str_to_bool(self.__get_config_with_env_override('ommsync', 'enable_subscription'))
76+
self.ommsync_auth_code = self.__get_config_with_env_override('ommsync', 'auth_code')
6777

6878
# [omm]
6979
self.omm_ip = self.__get_config_with_env_override('omm', 'ip')
7080
self.omm_port = int(self.__get_config_with_env_override('omm', 'port'))
81+
self.omm_use_ssl = str_to_bool(self.__get_config_with_env_override('omm', 'use_ssl'))
7182
self.omm_username = self.__get_config_with_env_override('omm', 'username')
7283
self.omm_password = self.__get_config_with_env_override('omm', 'password')

0 commit comments

Comments
 (0)