diff --git a/data_gateway.py b/data_gateway.py index 5092a9f..138104c 100644 --- a/data_gateway.py +++ b/data_gateway.py @@ -149,7 +149,7 @@ def send_dash_loc(CONFIG, call, lat, lon, time, comment, dmr_id): except requests.ConnectionError: logger.error('Config server unreachable') -def send_sms_log(CONFIG, snd_call, rcv_call, msg, rcv_id, snd_id): +def send_sms_log(CONFIG, snd_call, rcv_call, msg, rcv_id, snd_id, system_name): user_man_url = CONFIG['WEB_SERVICE']['URL'] shared_secret = str(sha256(CONFIG['WEB_SERVICE']['SHARED_SECRET'].encode()).hexdigest()) sms_data = { @@ -159,7 +159,29 @@ def send_sms_log(CONFIG, snd_call, rcv_call, msg, rcv_id, snd_id): 'rcv_call': rcv_call, 'message' : msg, 'snd_id' : snd_id, - 'rcv_id' : rcv_id + 'rcv_id' : rcv_id, + 'system_name': system_name + } + json_object = json.dumps(sms_data, indent = 4) + + try: + req = requests.post(user_man_url, data=json_object, headers={'Content-Type': 'application/json'}) +## resp = json.loads(req.text) +## print(resp) +## return resp['rules'] + except requests.ConnectionError: + logger.error('Config server unreachable') + +def send_bb(CONFIG, callsign, dmr_id, bulletin, system_name): + user_man_url = CONFIG['WEB_SERVICE']['URL'] + shared_secret = str(sha256(CONFIG['WEB_SERVICE']['SHARED_SECRET'].encode()).hexdigest()) + sms_data = { + 'bb_send': CONFIG['WEB_SERVICE']['THIS_SERVER_NAME'], + 'secret':shared_secret, + 'callsign': callsign, + 'dmr_id': dmr_id, + 'bulletin': bulletin, + 'system_name' : system_name } json_object = json.dumps(sms_data, indent = 4) @@ -170,7 +192,6 @@ def send_sms_log(CONFIG, snd_call, rcv_call, msg, rcv_id, snd_id): ## return resp['rules'] except requests.ConnectionError: logger.error('Config server unreachable') -## return config.build_config(cli_file) @@ -257,21 +278,24 @@ def dashboard_loc_write(call, lat, lon, time, comment, dmr_id): logger.info('User location saved for dashboard') #logger.info(dash_entries) -def dashboard_bb_write(call, dmr_id, time, bulletin): - #try: - dash_bb = ast.literal_eval(os.popen('cat ' + bb_file).read()) - # except: - # dash_entries = [] - dash_bb.insert(0, {'call': call, 'dmr_id': dmr_id, 'time': time, 'bulletin':bulletin}) - with open(bb_file, 'w') as user_bb_file: - user_bb_file.write(str(dash_bb[:20])) - user_bb_file.close() - logger.info('User bulletin entry saved.') - #logger.info(dash_bb) - -def dashboard_sms_write(snd_call, rcv_call, rcv_dmr_id, snd_dmr_id, sms, time): +def dashboard_bb_write(call, dmr_id, time, bulletin, system_name): if CONFIG['WEB_SERVICE']['REMOTE_CONFIG_ENABLED'] == True: - send_sms_log(CONFIG, snd_call, rcv_call, sms, rcv_dmr_id, snd_dmr_id) + send_bb(CONFIG, call, dmr_id, bulletin, system_name) + else: + #try: + dash_bb = ast.literal_eval(os.popen('cat ' + bb_file).read()) + # except: + # dash_entries = [] + dash_bb.insert(0, {'call': call, 'dmr_id': dmr_id, 'time': time, 'bulletin':bulletin}) + with open(bb_file, 'w') as user_bb_file: + user_bb_file.write(str(dash_bb[:20])) + user_bb_file.close() + logger.info('User bulletin entry saved.') + #logger.info(dash_bb) + +def dashboard_sms_write(snd_call, rcv_call, rcv_dmr_id, snd_dmr_id, sms, time, system_name): + if CONFIG['WEB_SERVICE']['REMOTE_CONFIG_ENABLED'] == True: + send_sms_log(CONFIG, snd_call, rcv_call, sms, rcv_dmr_id, snd_dmr_id, system_name) else: #try: dash_sms = ast.literal_eval(os.popen('cat ' + sms_file).read()) @@ -467,7 +491,7 @@ def user_setting_write(dmr_id, setting, value, call_type): # Process SMS, do something bases on message -def process_sms(_rf_src, sms, call_type): +def process_sms(_rf_src, sms, call_type, system_name): logger.info(call_type) parse_sms = sms.split(' ') logger.info(parse_sms) @@ -497,7 +521,7 @@ def process_sms(_rf_src, sms, call_type): elif '@APRS OFF' in sms or '@APRS off' in sms: user_setting_write(int_id(_rf_src), 'APRS OFF', False, call_type) elif '@BB' in sms: - dashboard_bb_write(get_alias(int_id(_rf_src), subscriber_ids), int_id(_rf_src), time(), re.sub('@BB|@BB ','',sms)) + dashboard_bb_write(get_alias(int_id(_rf_src), subscriber_ids), int_id(_rf_src), time(), re.sub('@BB|@BB ','',sms), system_name) elif '@' in parse_sms[0][1:] and '.' in parse_sms[0]: # and ' E-' in sms: s = ' ' email_message = s.join(parse_sms[1:])#str(re.sub('.*@|.* E-', '', sms)) @@ -1226,9 +1250,10 @@ def data_received(self, _peer_id, _rf_src, _dst_id, _seq, _slot, _call_type, _fr sms = codecs.decode(bytes.fromhex(''.join(sms_hex_string[:-8].split('00'))), 'utf-8', 'ignore') msg_found = re.sub('.*\n', '', sms) logger.info('\n\n' + 'Received SMS from ' + str(get_alias(int_id(_rf_src), subscriber_ids)) + ', DMR ID: ' + str(int_id(_rf_src)) + ': ' + str(msg_found) + '\n') + if int_id(_dst_id) == data_id: - process_sms(_rf_src, msg_found, _call_type) - dashboard_sms_write(str(get_alias(int_id(_rf_src), subscriber_ids)), str(get_alias(int_id(_dst_id), subscriber_ids)), int_id(_dst_id), int_id(_rf_src), msg_found, time()) + process_sms(_rf_src, msg_found, _call_type, UNIT_MAP[_rf_src][0]) + dashboard_sms_write(str(get_alias(int_id(_rf_src), subscriber_ids)), str(get_alias(int_id(_dst_id), subscriber_ids)), int_id(_dst_id), int_id(_rf_src), msg_found, time(), UNIT_MAP[_rf_src][0]) #packet_assembly = '' pass #logger.info(bitarray(re.sub("\)|\(|bitarray|'", '', str(bptc_decode(_data)).tobytes().decode('utf-8', 'ignore')))) diff --git a/web/app.py b/web/app.py index d893736..e9728e2 100644 --- a/web/app.py +++ b/web/app.py @@ -782,7 +782,7 @@ def hbnet_web_service(): return render_template('single_map_peer.html', markup_content = Markup(content)) @app.route('/map') - @login_required +## @login_required def map_page(): dev_loc = GPS_LocLog.query.order_by(GPS_LocLog.time.desc()).limit(300).all() dev_list = [] @@ -2351,9 +2351,26 @@ TG #: ''' + str(tg_d.tg) + ''' ''' + i.snd_callsign + ''' \n ''' + str(i.snd_id) + ''' ''' + i.rcv_callsign + ''' \n ''' + str(i.rcv_id) + ''' ''' + i.message + ''' + ''' + i.server + ' - ' + i.system_name + ''' + ''' return render_template('sms.html', markup_content = Markup(content)) + @app.route('/bb') + def all_bb(): + bbl = BulletinBoard.query.order_by(BulletinBoard.time.desc()).all() + content = ''' ''' + for i in bbl: + content = content + ''' + + ''' + i.callsign + ''' \n ''' + str(i.dmr_id) + ''' + ''' + i.bulletin + ''' + ''' + str(i.time.strftime(time_format)) + ''' + ''' + i.server + ' - ' + i.system_name + ''' + + ''' + return render_template('bb.html', markup_content = Markup(content)) + @app.route('/talkgroups/') #, methods=['POST', 'GET']) @login_required def tg_list_server(server): @@ -2589,6 +2606,18 @@ TG #: ''' + str(tg_d.tg) + ''' db.session.add(add_loc) db.session.commit() + def bb_add(_callsign, _bulletin, _dmr_id, _server, _system_name): + add_bb = BulletinBoard( + callsign = _callsign, + bulletin = _bulletin, + time = datetime.datetime.utcnow(), + dmr_id = _dmr_id, + server = _server, + system_name = _system_name + ) + db.session.add(add_bb) + db.session.commit() + def sms_log_add(_snd_call, _rcv_call, _msg, _snd_id, _rcv_id, _server, _system_name): add_sms = SMSLog( snd_callsign = _snd_call, @@ -2598,11 +2627,20 @@ TG #: ''' + str(tg_d.tg) + ''' snd_id = _snd_id, rcv_id = _rcv_id, server = _server, - system_name = '' + system_name = _system_name ) db.session.add(add_sms) db.session.commit() + def trim_bb(): + trim_bb = BulletinBoard.query.all() + + for i in trim_bb: + elap_time = int(datetime.datetime.utcnow().strftime('%s')) - int(i.time.strftime('%s')) + # Remove entries more than 1 month old + if elap_time > 2678400: + db.session.delete(i) + def trim_sms_log(): trim_sms = SMSLog.query.all() @@ -6095,10 +6133,13 @@ TG #: ''' + str(tg_d.tg) + ''' trim_dash_loc() response = 'yes' elif 'log_sms' in hblink_req: - sms_log_add(hblink_req['snd_call'], hblink_req['rcv_call'], hblink_req['message'], hblink_req['snd_id'], hblink_req['rcv_id'], '', '') + sms_log_add(hblink_req['snd_call'], hblink_req['rcv_call'], hblink_req['message'], hblink_req['snd_id'], hblink_req['rcv_id'], hblink_req['log_sms'], hblink_req['system_name']) + trim_sms_log() + response = 'rcvd' + elif 'bb_send' in hblink_req: + bb_add(hblink_req['callsign'], hblink_req['bulletin'], hblink_req['dmr_id'], hblink_req['bb_send'], hblink_req['system_name']) trim_sms_log() response = 'rcvd' - elif 'get_config' in hblink_req: if hblink_req['get_config']: diff --git a/web/templates/bb.html b/web/templates/bb.html new file mode 100644 index 0000000..e4b5ea9 --- /dev/null +++ b/web/templates/bb.html @@ -0,0 +1,29 @@ +{% extends 'flask_user/_public_base.html' %} +{% block content %} + +

Bulletin Board

+ +
+
+ + + + + + + + + + + + + {{markup_content}} + +
CallsignBullteinTimeServer
+ + +
+
+ +

 

+{% endblock %} diff --git a/web/templates/flask_user_layout.html b/web/templates/flask_user_layout.html index 25f6cce..a551dfc 100644 --- a/web/templates/flask_user_layout.html +++ b/web/templates/flask_user_layout.html @@ -9,6 +9,7 @@ + @@ -44,26 +45,30 @@ @@ -74,7 +79,7 @@