From 9980d65f578ed9a96d89dfe2f0a0d6f71821baf0 Mon Sep 17 00:00:00 2001 From: KF7EEL Date: Tue, 15 Jun 2021 15:32:40 -0700 Subject: [PATCH] improve PROXY, other changes --- HBnetv1.png | Bin 64462 -> 0 bytes bridge.py | 16 ++++++++-------- hblink.py | 4 +++- hotspot_proxy_v2.py | 12 +++++++++++- user_managment/app.py | 43 +++++++++++++++++++++--------------------- 5 files changed, 44 insertions(+), 31 deletions(-) delete mode 100644 HBnetv1.png diff --git a/HBnetv1.png b/HBnetv1.png deleted file mode 100644 index c670424c7079707a72ad8edfcd384033d8eb2c03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64462 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 GwEqJiqOsQi diff --git a/bridge.py b/bridge.py index 60b1a38..bee4a88 100755 --- a/bridge.py +++ b/bridge.py @@ -141,17 +141,17 @@ def download_config(L_CONFIG_FILE, cli_file): ## print((iterate_config['test'])) ## print(corrected_config) - corrected_config['GLOBAL']['TG1_ACL'] = config.acl_build(corrected_config['GLOBAL']['TG1_ACL'], 16776415) - corrected_config['GLOBAL']['TG2_ACL'] = config.acl_build(corrected_config['GLOBAL']['TG2_ACL'], 16776415) - corrected_config['GLOBAL']['REG_ACL'] = config.acl_build(corrected_config['GLOBAL']['REG_ACL'], 16776415) - corrected_config['GLOBAL']['SUB_ACL'] = config.acl_build(corrected_config['GLOBAL']['SUB_ACL'], 16776415) + corrected_config['GLOBAL']['TG1_ACL'] = config.acl_build(corrected_config['GLOBAL']['TG1_ACL'], 4294967295) + corrected_config['GLOBAL']['TG2_ACL'] = config.acl_build(corrected_config['GLOBAL']['TG2_ACL'], 4294967295) + corrected_config['GLOBAL']['REG_ACL'] = config.acl_build(corrected_config['GLOBAL']['REG_ACL'], 4294967295) + corrected_config['GLOBAL']['SUB_ACL'] = config.acl_build(corrected_config['GLOBAL']['SUB_ACL'], 4294967295) ## corrected_config['SYSTEMS'] = {} for i in iterate_config: ## print(i) ## corrected_config['SYSTEMS'][i] = {} if iterate_config[i]['MODE'] == 'MASTER' or iterate_config[i]['MODE'] == 'PROXY': - corrected_config['SYSTEMS'][i]['TG1_ACL'] = config.acl_build(iterate_config[i]['TG1_ACL'], 16776415) - corrected_config['SYSTEMS'][i]['TG2_ACL'] = config.acl_build(iterate_config[i]['TG2_ACL'], 16776415) + corrected_config['SYSTEMS'][i]['TG1_ACL'] = config.acl_build(iterate_config[i]['TG1_ACL'], 4294967295) + corrected_config['SYSTEMS'][i]['TG2_ACL'] = config.acl_build(iterate_config[i]['TG2_ACL'], 4294967295) corrected_config['SYSTEMS'][i]['PASSPHRASE'] = bytes(iterate_config[i]['PASSPHRASE'], 'utf-8') if iterate_config[i]['MODE'] == 'OPENBRIDGE': corrected_config['SYSTEMS'][i]['NETWORK_ID'] = int(iterate_config[i]['NETWORK_ID']).to_bytes(4, 'big') @@ -159,8 +159,8 @@ def download_config(L_CONFIG_FILE, cli_file): if iterate_config[i]['MODE'] == 'PEER' or iterate_config[i]['MODE'] == 'XLXPEER': corrected_config['SYSTEMS'][i]['RADIO_ID'] = int(iterate_config[i]['RADIO_ID']).to_bytes(4, 'big') - corrected_config['SYSTEMS'][i]['TG1_ACL'] = config.acl_build(iterate_config[i]['TG1_ACL'], 16776415) - corrected_config['SYSTEMS'][i]['TG2_ACL'] = config.acl_build(iterate_config[i]['TG2_ACL'], 16776415) + corrected_config['SYSTEMS'][i]['TG1_ACL'] = config.acl_build(iterate_config[i]['TG1_ACL'], 4294967295) + corrected_config['SYSTEMS'][i]['TG2_ACL'] = config.acl_build(iterate_config[i]['TG2_ACL'], 4294967295) corrected_config['SYSTEMS'][i]['MASTER_SOCKADDR'] = tuple(iterate_config[i]['MASTER_SOCKADDR']) corrected_config['SYSTEMS'][i]['SOCK_ADDR'] = tuple(iterate_config[i]['SOCK_ADDR']) corrected_config['SYSTEMS'][i]['PASSPHRASE'] = bytes((iterate_config[i]['PASSPHRASE']), 'utf-8') diff --git a/hblink.py b/hblink.py index 5a3f5dc..1ee598b 100755 --- a/hblink.py +++ b/hblink.py @@ -258,7 +258,7 @@ class HBSYSTEM(DatagramProtocol): #Change this to a config value user_man_url = self._CONFIG['USER_MANAGER']['URL'] shared_secret = str(sha256(self._CONFIG['USER_MANAGER']['SHARED_SECRET'].encode()).hexdigest()) - #print(int(str(int_id(_id))[:7])) +## print(int(str(int_id(_id))[:7])) auth_check = { 'secret':shared_secret, 'login_id':int(str(int_id(_id))[:7]), @@ -269,6 +269,7 @@ class HBSYSTEM(DatagramProtocol): try: req = requests.post(user_man_url, data=json_object, headers={'Content-Type': 'application/json'}) resp = json.loads(req.text) +## print(resp) return resp except requests.ConnectionError: return {'allow':True} @@ -517,6 +518,7 @@ class HBSYSTEM(DatagramProtocol): # Check for valid Radio ID #print(self.check_user_man(_peer_id)) if self._config['USE_USER_MAN'] == True: +## print(str(_peer_id) + ' - hblink.py') self.ums_response = self.check_user_man(_peer_id, self._CONFIG['USER_MANAGER']['THIS_SERVER_NAME'], _sockaddr[0]) ## print(self.ums_response) #Will allow anyone to attempt authentication, used for a transition period diff --git a/hotspot_proxy_v2.py b/hotspot_proxy_v2.py index 34120a5..fea6edd 100644 --- a/hotspot_proxy_v2.py +++ b/hotspot_proxy_v2.py @@ -66,21 +66,30 @@ class Proxy(DatagramProtocol): #If the packet comes from the master if host == self.master: _command = data[:4] + _lng_command = data[:6] +#### print(_lng_command) + if _command == DMRD: _peer_id = data[11:15] +## print(self.peerTrack[_peer_id]['timer']) elif _command == RPTA: if data[6:10] in self.peerTrack: _peer_id = data[6:10] else: _peer_id = self.connTrack[port] - elif _command == MSTN: + elif _lng_command == MSTNAK: + _peer_id = data[6:10] + + elif _command == MSTN and MSTNAK not in _lng_command: _peer_id = data[6:10] + self.peerTrack[_peer_id]['timer'].cancel() self.reaper(_peer_id) return elif _command == MSTP: _peer_id = data[7:11] +## print(self.peerTrack) elif _command == MSTC: _peer_id = data[5:9] self.peerTrack[_peer_id]['timer'].cancel() @@ -150,6 +159,7 @@ class Proxy(DatagramProtocol): self.transport.write(data, (self.master,_dport)) if self.debug: print(data) + return diff --git a/user_managment/app.py b/user_managment/app.py index b101c60..600a6bb 100644 --- a/user_managment/app.py +++ b/user_managment/app.py @@ -461,10 +461,10 @@ def create_app(): _new_peer_id = bytes_4(int(str(dmr_id)[:7])) trimmed_id = int(str(dmr_id)[:7]) b_list = get_burnlist() - print(b_list) + # print(b_list) burned = False for ui in b_list.items(): - print(ui) + # print(ui) #print(b_list) if ui[0] == trimmed_id: if ui[0] != 0: @@ -1719,6 +1719,7 @@ def create_app(): p = mmdvmPeer.query.filter_by(server=_server).filter_by(name=_name).first() if _mode == 'xlx': p = xlxPeer.query.filter_by(server=_server).filter_by(name=_name).first() + db.session.delete(p) db.session.commit() @@ -1901,16 +1902,16 @@ def create_app(): print(s_config['REPORTS']) return s_config def masters_get(_name): -## print(_name) +## # print(_name) #s = ServerList.query.filter_by(name=_name).first() # print(s.name) i = MasterList.query.filter_by(server=_name).filter_by(active=True).all() o = OBP.query.filter_by(server=_name).filter_by(enabled=True).all() p = ProxyList.query.filter_by(server=_name).filter_by(active=True).all() - print('get masters') + # print('get masters') master_config_list = {} ## master_config_list['SYSTEMS'] = {} - print(i) + # print(i) for m in i: print (m.name) master_config_list.update({m.name: { @@ -1970,7 +1971,7 @@ def create_app(): }}) master_config_list[pr.name].update({'PEERS': {}}) - print(master_config_list) + # print(master_config_list) return master_config_list def add_system_rule(_bridge_name, _system_name, _ts, _tg, _active, _timeout, _to_type, _on, _off, _reset, _server, _public_list): @@ -2013,7 +2014,7 @@ def create_app(): def server_edit(_name, _secret, _ip, _public_list, _port, _global_path, _global_ping_time, _global_max_missed, _global_use_acl, _global_reg_acl, _global_sub_acl, _global_tg1_acl, _global_tg2_acl, _ai_subscriber_file, _ai_try_download, _ai_path, _ai_peer_file, _ai_tgid_file, _ai_peer_url, _ai_subs_url, _ai_stale, _um_shorten_passphrase, _um_burn_file, _report_enable, _report_interval, _report_port, _report_clients, _unit_time, _notes): s = ServerList.query.filter_by(name=_name).first() - print(_name) + # print(_name) if _secret == '': s.secret = s.secret else: @@ -2088,7 +2089,7 @@ def create_app(): m.notes = _notes db.session.commit() if _mode == 'OBP': - print(_enable_unit) + # print(_enable_unit) ## print(enable_unit) o = OBP.query.filter_by(server=_server).filter_by(name=_name).first() o.enabled = _active @@ -2153,7 +2154,7 @@ def create_app(): ## db.session.add(add_master) def add_master(_mode, _name, _server, _static_positions, _repeat, _active, _max_peers, _ip, _port, _enable_um, _passphrase, _group_hang_time, _use_acl, _reg_acl, _sub_acl, _tg1_acl, _tg2_acl, _enable_unit, _notes, _external_proxy, _int_start_port, _int_stop_port, _network_id, _target_ip, _target_port, _both_slots): - print(_mode) + # print(_mode) if _mode == 'MASTER': add_master = MasterList( name = _name, @@ -2202,8 +2203,8 @@ def create_app(): db.session.add(add_proxy) db.session.commit() if _mode == 'OBP': - print(_name) - print(_network_id) + # print(_name) + # print(_network_id) add_OBP = OBP( name = _name, enabled = _active, @@ -2380,7 +2381,7 @@ def create_app(): ## s = mmdvmPeer.query.filter_by(server=_server).filter_by(name=_name).first() p = xlxPeer.query.filter_by(server=_server).filter_by(name=_name).first() - print(type(p.enable_unit)) + # print(type(p.enable_unit)) p.enabled = _enabled p.loose = _loose p.ip = _ip @@ -3318,7 +3319,7 @@ def create_app(): all_s = ServerList.query.all() p_list = '' for s in all_s: - print(s.name) + # print(s.name) p_list = p_list + '''

Server: ''' + str(s.name) + '''

@@ -3573,8 +3574,8 @@ def create_app(): ''' elif request.args.get('edit_proxy'): - print(request.args.get('server')) - print(request.args.get('edit_proxy')) + # print(request.args.get('server')) + # print(request.args.get('edit_proxy')) p = ProxyList.query.filter_by(server=request.args.get('server')).filter_by(name=request.args.get('edit_proxy')).first() content = '''

 

@@ -4307,8 +4308,8 @@ def create_app(): elif request.args.get('save_rule') == 'edit': content = 'edit rule' elif request.args.get('save_rule') == 'delete': - print(request.args.get('bridge')) - print(request.args.get('server')) + # print(request.args.get('bridge')) + # print(request.args.get('server')) if request.args.get('system'): delete_system_rule(request.args.get('bridge'), request.args.get('server'), request.args.get('system')) else: @@ -4578,7 +4579,7 @@ def create_app(): ''' r_list = '' for i in s: - print(i) + # print(i) r_list = r_list + '''
@@ -4616,7 +4617,7 @@ def create_app(): @app.route('/svr', methods=['POST']) def auth(): hblink_req = request.json - print((hblink_req)) + # print((hblink_req)) if hblink_req['secret'] in shared_secrets(): if 'login_id' in hblink_req and 'login_confirmed' not in hblink_req: if type(hblink_req['login_id']) == int: @@ -4635,14 +4636,14 @@ def create_app(): ) elif authorized_peer(hblink_req['login_id'])[1] != '' or isinstance(authorized_peer(hblink_req['login_id'])[1], int) == False: authlog_add(hblink_req['login_id'], hblink_req['login_ip'], hblink_req['login_server'], authorized_peer(hblink_req['login_id'])[2], authorized_peer(hblink_req['login_id'])[1], 'Attempt') - print(authorized_peer(hblink_req['login_id'])) + # print(authorized_peer(hblink_req['login_id'])) response = jsonify( allow=True, mode='override', value=authorized_peer(hblink_req['login_id'])[1] ) elif authorized_peer(hblink_req['login_id'])[0] == False: - print('log fail') +## print('log fail') authlog_add(hblink_req['login_id'], hblink_req['login_ip'], hblink_req['login_server'], 'Not Registered', '-', 'Failed') response = jsonify( allow=False)