From b7b29a44028ee00cbc249271a7ae392ad3cec76b Mon Sep 17 00:00:00 2001 From: KF7EEL Date: Sat, 19 Jun 2021 12:45:54 -0700 Subject: [PATCH] save progress, attempt fix of tg page, still WIP, mark code for rule download, add mechanism to track rule download --- bridge.py | 23 ++++--- hblink.py | 14 ++-- user_managment/app.py | 151 +++++++++++++++++++++++++++++++++--------- 3 files changed, 143 insertions(+), 45 deletions(-) diff --git a/bridge.py b/bridge.py index 91ae299..4569c16 100755 --- a/bridge.py +++ b/bridge.py @@ -297,7 +297,8 @@ def hotspot_proxy(listen_port, port_start, port_stop): statsa = stats_task.start(30) statsa.addErrback(loopingErrHandle) -# Module gobal varaibles +# Used to track if we have downloaded user custon rules +user_rules = {} # Dictionary for dynamically mapping unit (subscriber) to a system. # This is for pruning unit-to-uint calls to not broadcast once the @@ -824,7 +825,6 @@ class routerOBP(OPENBRIDGE): class routerHBP(HBSYSTEM): - def __init__(self, _name, _config, _report): HBSYSTEM.__init__(self, _name, _config, _report) ## print(_config) @@ -890,15 +890,12 @@ class routerHBP(HBSYSTEM): } } } - - def group_received(self, _peer_id, _rf_src, _dst_id, _seq, _slot, _frame_type, _dtype_vseq, _stream_id, _data): global UNIT_MAP pkt_time = time() dmrpkt = _data[20:53] _bits = _data[15] - # Make/update an entry in the UNIT_MAP for this subscriber UNIT_MAP[_rf_src] = (self.name, pkt_time) @@ -924,11 +921,22 @@ class routerHBP(HBSYSTEM): # just make a new one from the HBP header. This is good enough, and it saves lots of time else: self.STATUS[_slot]['RX_LC'] = LC_OPT + _dst_id + _rf_src - + # Download rules + if _rf_src not in user_rules: + user_rules[_rf_src] = self.name + if _rf_src in user_rules: + print('in') + if user_rules[_rf_src] != self.name: + user_rules[_rf_src] = self.name + print('updated') + print(user_rules) for _bridge in BRIDGES: ## print(BRIDGES) + print(_bridge) + # Match bridge name here for _system in BRIDGES[_bridge]: - + print(_system) + # Modify rule here for indiv system if (_system['SYSTEM'] == self._system and _system['TGID'] == _dst_id and _system['TS'] == _slot and _system['ACTIVE'] == True): for _target in BRIDGES[_bridge]: @@ -1299,7 +1307,6 @@ class routerHBP(HBSYSTEM): self.STATUS[_slot]['RX_TIME'] = pkt_time self.STATUS[_slot]['RX_STREAM_ID'] = _stream_id - def dmrd_received(self, _peer_id, _rf_src, _dst_id, _seq, _slot, _call_type, _frame_type, _dtype_vseq, _stream_id, _data): if _call_type == 'group': self.group_received(_peer_id, _rf_src, _dst_id, _seq, _slot, _frame_type, _dtype_vseq, _stream_id, _data) diff --git a/hblink.py b/hblink.py index 50fb44d..e751712 100755 --- a/hblink.py +++ b/hblink.py @@ -595,17 +595,17 @@ class HBSYSTEM(DatagramProtocol): if self._config['USE_USER_MAN'] == False: _calc_hash = bhex(sha256(_salt_str+self._config['PASSPHRASE']).hexdigest()) # Uncomment below to only accept calculated passphrase -# if _sent_hash == _calc_hash: + if _sent_hash == _calc_hash: # Condition below accepts either calculated passphrase or config passphrase - if _sent_hash == _calc_hash or _sent_hash == _ocalc_hash: +## if _sent_hash == _calc_hash or _sent_hash == _ocalc_hash: _this_peer['CONNECTION'] = 'WAITING_CONFIG' self.send_peer(_peer_id, b''.join([RPTACK, _peer_id])) logger.info('(%s) Peer %s has completed the login exchange successfully', self._system, _this_peer['RADIO_ID']) - #self.send_login_conf(_peer_id, self._CONFIG['USER_MANAGER']['THIS_SERVER_NAME'], _sockaddr[0], False) - if _sent_hash == _ocalc_hash: - self.send_login_conf(_peer_id, self._CONFIG['USER_MANAGER']['THIS_SERVER_NAME'], _sockaddr[0], True) - else: - self.send_login_conf(_peer_id, self._CONFIG['USER_MANAGER']['THIS_SERVER_NAME'], _sockaddr[0], False) + self.send_login_conf(_peer_id, self._CONFIG['USER_MANAGER']['THIS_SERVER_NAME'], _sockaddr[0], False) +## if _sent_hash == _ocalc_hash: +## self.send_login_conf(_peer_id, self._CONFIG['USER_MANAGER']['THIS_SERVER_NAME'], _sockaddr[0], True) +## else: +## self.send_login_conf(_peer_id, self._CONFIG['USER_MANAGER']['THIS_SERVER_NAME'], _sockaddr[0], False) else: logger.info('(%s) Peer %s has FAILED the login exchange successfully', self._system, _this_peer['RADIO_ID']) self.transport.write(b''.join([MSTNAK, _peer_id]), _sockaddr) diff --git a/user_managment/app.py b/user_managment/app.py index 5cabd09..d4664da 100644 --- a/user_managment/app.py +++ b/user_managment/app.py @@ -385,6 +385,52 @@ def create_app(): description = db.Column(db.String(100), nullable=False, server_default='') public_list = db.Column(db.Boolean(), nullable=False, server_default='0') tg = db.Column(db.Integer(), primary_key=False) + + class GPS_LocLog(db.Model): + __tablename__ = 'gps_locations' + id = db.Column(db.Integer(), primary_key=True) + callsign = db.Column(db.String(100), nullable=False, server_default='') + comment = db.Column(db.String(100), nullable=False, server_default='') + lat = db.Column(db.String(100), nullable=False, server_default='') + lon = db.Column(db.String(100), nullable=False, server_default='') + time = db.Column(db.DateTime()) + server = db.Column(db.String(100), nullable=False, server_default='') + system_name = db.Column(db.String(100), nullable=False, server_default='') + dmr_id = db.Column(db.Integer(), primary_key=False) + + class BulletinBoard(db.Model): + __tablename__ = 'sms_bb' + id = db.Column(db.Integer(), primary_key=True) + callsign = db.Column(db.String(100), nullable=False, server_default='') + bulletin = db.Column(db.String(100), nullable=False, server_default='') + time = db.Column(db.DateTime()) + server = db.Column(db.String(100), nullable=False, server_default='') + system_name = db.Column(db.String(100), nullable=False, server_default='') + dmr_id = db.Column(db.Integer(), primary_key=False) + + class SMSLog(db.Model): + __tablename__ = 'sms_log' + id = db.Column(db.Integer(), primary_key=True) + snd_callsign = db.Column(db.String(100), nullable=False, server_default='') + rcv_callsign = db.Column(db.String(100), nullable=False, server_default='') + message = db.Column(db.String(100), nullable=False, server_default='') + time = db.Column(db.DateTime()) + server = db.Column(db.String(100), nullable=False, server_default='') + system_name = db.Column(db.String(100), nullable=False, server_default='') + snd_id = db.Column(db.Integer(), primary_key=False) + rcv_id = db.Column(db.Integer(), primary_key=False) + + class MailBox(db.Model): + __tablename__ = 'sms_aprs_mailbox' + id = db.Column(db.Integer(), primary_key=True) + snd_callsign = db.Column(db.String(100), nullable=False, server_default='') + rcv_callsign = db.Column(db.String(100), nullable=False, server_default='') + message = db.Column(db.String(100), nullable=False, server_default='') + time = db.Column(db.DateTime()) + server = db.Column(db.String(100), nullable=False, server_default='') + system_name = db.Column(db.String(100), nullable=False, server_default='') + snd_id = db.Column(db.Integer(), primary_key=False) + rcv_id = db.Column(db.Integer(), primary_key=False) @@ -1489,21 +1535,37 @@ def create_app(): sl = ServerList.query.all() user_ids = ast.literal_eval(u.dmr_ids) content = '

Currently active talkgroups. Updated every 2 minutes.

' +## print(active_tgs) for s in sl: for i in user_ids.items(): - for ts in active_tgs.items(): - for x in ts[1]: - print(x) - print(s.name) -## print(active_tgs[s.name]) -## print(str(active_tgs[ts[1]])) - # Remove 0 from TG list + for ts in active_tgs[s.name].items(): +## print(ts) +## print(ts[1][3]['peer_id']) + if i[0] == ts[1][3]['peer_id']: +## print(i[0]) + print(ts) +## if i[0] in active_tgs[s.name]: +## for x in ts[1]: +## print(x) +## ## if i[0] != ts[1][x][3]['peer_id']: +## ## print('nope') +## ## pass +## ## elif i[0] == ts[1][x][3]['peer_id']: +## ## print(x) +## ## print(s.name) +## ## print('-----ts-----') +## ## print(ts[1][x][3]['peer_id']) #[s.name][3]['peer_id']) +## ## print(active_tgs) +## +## ## print(active_tgs[s.name]) +## ## print(str(active_tgs[ts[1]])) +## # Remove 0 from TG list try: - active_tgs[s.name][x][0]['1'].remove(0) - active_tgs[s.name][x][1]['2'].remove(0) + active_tgs[s.name][ts[0]][0]['1'].remove(0) + active_tgs[s.name][ts[0]][1]['2'].remove(0) except: pass -## try: +#### try: content = content + ''' @@ -1518,11 +1580,11 @@ def create_app(): - + - +
Timeslot 1 ''' + str(active_tgs[s.name][x][0]['1'])[1:-1] + ''' ''' + str(active_tgs[s.name][ts[0]][0]['1'])[1:-1] + '''
Timeslot 2 ''' + str(active_tgs[s.name][x][1]['2'])[1:-1] + ''' ''' + str(active_tgs[s.name][ts[0]][1]['2'])[1:-1] + '''
@@ -1539,7 +1601,7 @@ def create_app(): ## content = content + ''' ''' + str(tg) + ''' ##''' ## print(active_tgs[s.name][i[0]]) -#### content = active_tgs[s.name][i[0]][1]['2'] +## content = active_tgs[s.name][i[0]][1]['2'] ## content = 'hji' return render_template('flask_user_layout.html', markup_content = Markup(content)) @@ -2634,14 +2696,7 @@ def create_app():  Unit Call Timeout (minutes):   - - Public list: - +  Notes:   @@ -2837,13 +2892,7 @@ def create_app():  Unit Call Timeout (minutes):   - - Public list: - +  Notes:   @@ -3853,6 +3902,14 @@ def create_app(): + Public List: + +  Notes:   @@ -3975,6 +4032,13 @@ def create_app(): + Public List: + +  Notes:   @@ -4086,6 +4150,13 @@ def create_app(): + Public List: + +  Notes:   @@ -4289,6 +4360,14 @@ def create_app(): + Public List: + +  Notes:   @@ -4803,20 +4882,24 @@ def create_app(): if 'login_id' in hblink_req and 'login_confirmed' not in hblink_req: if type(hblink_req['login_id']) == int: if authorized_peer(hblink_req['login_id'])[0]: + print(active_tgs) if isinstance(authorized_peer(hblink_req['login_id'])[1], int) == True: authlog_add(hblink_req['login_id'], hblink_req['login_ip'], hblink_req['login_server'], authorized_peer(hblink_req['login_id'])[2], gen_passphrase(hblink_req['login_id']), 'Attempt') +## active_tgs[hblink_req['login_server']][hblink_req['system']] = [{'1':[]}, {'2':[]}, {'SYSTEM': ''}, {'peer_id':hblink_req['login_id']}] response = jsonify( allow=True, mode='normal', ) elif authorized_peer(hblink_req['login_id'])[1] == '': authlog_add(hblink_req['login_id'], hblink_req['login_ip'], hblink_req['login_server'], authorized_peer(hblink_req['login_id'])[2], 'Config Passphrase: ' + legacy_passphrase, 'Attempt') +## active_tgs[hblink_req['login_server']][hblink_req['system']] = [{'1':[]}, {'2':[]}, {'SYSTEM': ''}, {'peer_id':hblink_req['login_id']}] response = jsonify( allow=True, mode='legacy', ) 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') +## active_tgs[hblink_req['login_server']][hblink_req['system']] = [{'1':[]}, {'2':[]}, {'SYSTEM': ''}, {'peer_id':hblink_req['login_id']}] # print(authorized_peer(hblink_req['login_id'])) response = jsonify( allow=True, @@ -4827,7 +4910,7 @@ def create_app(): active_tgs[hblink_req['login_server']][hblink_req['system']] = [{'1':[]}, {'2':[]}, {'SYSTEM': ''}, {'peer_id':hblink_req['login_id']}] ## print('Restart ' + hblink_req['login_server'] + ' please.') except: - active_tgs[hblink_req['login_server']] = {} +## active_tgs[hblink_req['login_server']] = {} pass elif authorized_peer(hblink_req['login_id'])[0] == False: ## print('log fail') @@ -4929,16 +5012,21 @@ def create_app(): else: active_tgs[hblink_req['update_tg']][hblink_req['data'][0]['SYSTEM']][1]['2'].append(hblink_req['data'][2]['tg']) else: + try: print('---------on------------') print(hblink_req['data']) - print(active_tgs[hblink_req['update_tg']][hblink_req['data'][0]['SYSTEM']][1]['2']) + print(active_tgs[hblink_req['update_tg']]) print(hblink_req['data'][2]['ts2']) print('-----------------------') ## active_tgs[hblink_req['update_tg']][hblink_req['data'][0]['SYSTEM']][2]['SYSTEM'] = hblink_req['data'][0]['SYSTEM'] #### active_tgs[hblink_req['update_tg']][hblink_req['dmr_id']].update({hblink_req['data'][0]['SYSTEM']: [{1:[hblink_req['data'][1]['ts1']]}, {2:[hblink_req['data'][2]['ts2']]}]}) #.update({[hblink_req['dmr_id']]:hblink_req['data']}) if hblink_req['data'][1]['ts1'] not in active_tgs[hblink_req['update_tg']][hblink_req['data'][0]['SYSTEM']][0]['1']: active_tgs[hblink_req['update_tg']][hblink_req['data'][0]['SYSTEM']][0]['1'].append(hblink_req['data'][1]['ts1']) + active_tgs[hblink_req['update_tg']][hblink_req['data'][0]['SYSTEM']][2]['SYSTEM'] = hblink_req['data'][0]['SYSTEM'] if hblink_req['data'][2]['ts2'] not in active_tgs[hblink_req['update_tg']][hblink_req['data'][0]['SYSTEM']][1]['2']: + print('---0---') + print(hblink_req['data'][0]['SYSTEM']) + active_tgs[hblink_req['update_tg']][hblink_req['data'][0]['SYSTEM']][2]['SYSTEM'] = hblink_req['data'][0]['SYSTEM'] active_tgs[hblink_req['update_tg']][hblink_req['data'][0]['SYSTEM']][1]['2'].append(hblink_req['data'][2]['ts2']) ## print('append') #### active_tgs[hblink_req['update_tg']][system[0]][1]['2'].append(0) @@ -4948,6 +5036,9 @@ def create_app(): ## print(active_tgs[hblink_req['update_tg']][hblink_req['data'][0]['SYSTEM']][2]['2']) ## print(hblink_req['data'][1]['ts2']) ## print(active_tgs[hblink_req['update_tg']]) + except: +## active_tgs[hblink_req['update_tg']] = {} + pass ## except: ## pass