add app and msg_xfer send to process_sms
This commit is contained in:
parent
eb06c9c268
commit
e15169b09c
@ -174,6 +174,8 @@ def build_config(_config_file):
|
|||||||
'AUTHORIZED_TOKENS_FILE': config.get(section, 'AUTHORIZED_TOKENS_FILE'),
|
'AUTHORIZED_TOKENS_FILE': config.get(section, 'AUTHORIZED_TOKENS_FILE'),
|
||||||
'AUTHORIZED_USERS_FILE': config.get(section, 'AUTHORIZED_USERS_FILE'),
|
'AUTHORIZED_USERS_FILE': config.get(section, 'AUTHORIZED_USERS_FILE'),
|
||||||
'ACCESS_SYSTEMS_FILE': config.get(section, 'ACCESS_SYSTEMS_FILE'),
|
'ACCESS_SYSTEMS_FILE': config.get(section, 'ACCESS_SYSTEMS_FILE'),
|
||||||
|
'MY_API_NAME': config.get(section, 'MY_API_NAME'),
|
||||||
|
'DASHBOARD_URL': config.get(section, 'DASHBOARD_URL'),
|
||||||
|
|
||||||
|
|
||||||
})
|
})
|
||||||
|
@ -175,11 +175,16 @@ AUTHORIZED_APPS_FILE: /path/to/authorized_apps.py
|
|||||||
AUTHORIZED_TOKENS_FILE: /tmp/hblink_auth_tokens.txt
|
AUTHORIZED_TOKENS_FILE: /tmp/hblink_auth_tokens.txt
|
||||||
AUTHORIZED_USERS_FILE: /path/to/authorized_users.txt
|
AUTHORIZED_USERS_FILE: /path/to/authorized_users.txt
|
||||||
ACCESS_SYSTEMS_FILE: /path/to/access_systems.txt
|
ACCESS_SYSTEMS_FILE: /path/to/access_systems.txt
|
||||||
|
MY_API_NAME: ABC
|
||||||
|
|
||||||
|
|
||||||
# The following options are used for the dashboard. The dashboard is optional.
|
# The following options are used for the dashboard. The dashboard is optional.
|
||||||
# Title of the Dashboard
|
# Title of the Dashboard
|
||||||
DASHBOARD_TITLE: HBLink3 D-APRS Dashboard
|
DASHBOARD_TITLE: HBLink3 D-APRS Dashboard
|
||||||
|
|
||||||
|
# Used for API, RSS feed link, etc
|
||||||
|
DASHBOARD_URL: http://localhost:8092
|
||||||
|
|
||||||
# Logo used on dashboard page
|
# Logo used on dashboard page
|
||||||
LOGO: https://raw.githubusercontent.com/kf7eel/hblink3/gps/HBlink.png
|
LOGO: https://raw.githubusercontent.com/kf7eel/hblink3/gps/HBlink.png
|
||||||
|
|
||||||
@ -210,9 +215,6 @@ ZOOM_LEVEL: 7
|
|||||||
# The following are options for map themes and just work, you should use one of these: “OpenStreetMap”, “Stamen” (Terrain, Toner, and Watercolor),
|
# The following are options for map themes and just work, you should use one of these: “OpenStreetMap”, “Stamen” (Terrain, Toner, and Watercolor),
|
||||||
MAP_THEME: Stamen Toner
|
MAP_THEME: Stamen Toner
|
||||||
|
|
||||||
# RSS feed link, shows in the link section of each RSS item.
|
|
||||||
RSS_LINK: http://localhost:8092
|
|
||||||
|
|
||||||
#####################################################################
|
#####################################################################
|
||||||
# OPENBRIDGE INSTANCES - DUPLICATE SECTION FOR MULTIPLE CONNECTIONS
|
# OPENBRIDGE INSTANCES - DUPLICATE SECTION FOR MULTIPLE CONNECTIONS
|
||||||
# OpenBridge is a protocol originall created by DMR+ for connection between an
|
# OpenBridge is a protocol originall created by DMR+ for connection between an
|
||||||
|
@ -100,6 +100,10 @@ import libscrc
|
|||||||
import random
|
import random
|
||||||
from bitarray.util import hex2ba as hex2bits
|
from bitarray.util import hex2ba as hex2bits
|
||||||
|
|
||||||
|
#Used for sending data via API
|
||||||
|
import requests
|
||||||
|
import json
|
||||||
|
import hashlib
|
||||||
|
|
||||||
# Does anybody read this stuff? There's a PEP somewhere that says I should do this.
|
# Does anybody read this stuff? There's a PEP somewhere that says I should do this.
|
||||||
__author__ = 'Cortney T. Buffington, N0MJS'
|
__author__ = 'Cortney T. Buffington, N0MJS'
|
||||||
@ -237,6 +241,59 @@ def sos_write(dmr_id, time, message):
|
|||||||
sos_file.write(str(sos_info))
|
sos_file.write(str(sos_info))
|
||||||
sos_file.close()
|
sos_file.close()
|
||||||
logger.info('Saved SOS.')
|
logger.info('Saved SOS.')
|
||||||
|
def send_app_request(url, message, source_id):
|
||||||
|
url = url + '/app'
|
||||||
|
#Load current AUTH token list
|
||||||
|
auth_file = ast.literal_eval(os.popen('cat ' + auth_token_file).read())
|
||||||
|
the_token = str(hashlib.md5(str(time()).encode('utf-8')).hexdigest())
|
||||||
|
new_auth_file = auth_file
|
||||||
|
new_auth_file.append(the_token)
|
||||||
|
# Write new list to file
|
||||||
|
with open(auth_token_file, 'w') as auth_token:
|
||||||
|
auth_token.write(str(auth_file))
|
||||||
|
auth_token.close()
|
||||||
|
app_request = {
|
||||||
|
'mode':'app',
|
||||||
|
'system_name':CONFIG['GPS_DATA']['MY_API_NAME'],
|
||||||
|
'response_url':CONFIG['GPS_DATA']['DASHBOARD_URL'],
|
||||||
|
'auth_token':the_token,
|
||||||
|
'data':{
|
||||||
|
'source_id':source_id,
|
||||||
|
'slot':0,
|
||||||
|
'msg_type':'unit',
|
||||||
|
'msg_format':'motorola',
|
||||||
|
'message':message
|
||||||
|
}
|
||||||
|
}
|
||||||
|
json_object = json.dumps(app_request, indent = 4)
|
||||||
|
print(json_object)
|
||||||
|
requests.post(url, data=json_object, headers={'Content-Type': 'application/json'})
|
||||||
|
|
||||||
|
|
||||||
|
def send_msg_xfer(url, user, password, message, source_id, dest_id):
|
||||||
|
url = url + '/msg_xfer'
|
||||||
|
msg_xfer = {
|
||||||
|
'mode':'msg_xfer',
|
||||||
|
'system_name':CONFIG['GPS_DATA']['MY_API_NAME'],
|
||||||
|
'response_url':CONFIG['GPS_DATA']['DASHBOARD_URL'],
|
||||||
|
'auth_type':'private',
|
||||||
|
'credentials': {
|
||||||
|
'user':user,
|
||||||
|
'password':password,
|
||||||
|
},
|
||||||
|
'data':{
|
||||||
|
1:{'source_id':source_id,
|
||||||
|
'destination_id':dest_id,
|
||||||
|
'slot':0,
|
||||||
|
'msg_type':'unit',
|
||||||
|
'msg_format':'motorola',
|
||||||
|
'message':message
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
json_object = json.dumps(msg_xfer, indent = 4)
|
||||||
|
requests.post(url, data=json_object, headers={'Content-Type': 'application/json'})
|
||||||
|
|
||||||
|
|
||||||
# Send email via SMTP function
|
# Send email via SMTP function
|
||||||
def send_email(to_email, email_subject, email_message):
|
def send_email(to_email, email_subject, email_message):
|
||||||
@ -412,7 +469,32 @@ def process_sms(_rf_src, sms):
|
|||||||
logger.info(str(traceback.extract_tb(error_exception.__traceback__)))
|
logger.info(str(traceback.extract_tb(error_exception.__traceback__)))
|
||||||
packet_assembly = ''
|
packet_assembly = ''
|
||||||
|
|
||||||
|
elif '?' in parse_sms[0][0:1]:
|
||||||
|
use_api = CONFIG['GPS_DATA']['USE_API']
|
||||||
|
print(use_api)
|
||||||
|
if use_api == True:
|
||||||
|
auth_tokens = ast.literal_eval(os.popen('cat ' + auth_token_file).read())
|
||||||
|
access_systems = ast.literal_eval(os.popen('cat ' + access_systems_file).read())
|
||||||
|
authorized_users = ast.literal_eval(os.popen('cat ' + authorized_users_file).read())
|
||||||
|
system = parse_sms[0][1:]
|
||||||
|
#print(access_systems[system])
|
||||||
|
#print(authorized_users)
|
||||||
|
# Determin msg_xfer or app
|
||||||
|
if access_systems[system]['mode'] == 'msg_xfer':
|
||||||
|
s = ' '
|
||||||
|
message_to_send = s.join(parse_sms[2:])
|
||||||
|
dest_id = int(parse_sms[1])
|
||||||
|
source_id = int_id(_rf_src)
|
||||||
|
send_msg_xfer(access_systems[system]['url'], access_systems[system]['user'], access_systems[system]['password'], message_to_send, source_id, dest_id)
|
||||||
|
if access_systems[system]['mode'] == 'app':
|
||||||
|
s = ' '
|
||||||
|
message_to_send = s.join(parse_sms[1:])
|
||||||
|
source_id = int_id(_rf_src)
|
||||||
|
send_app_request(access_systems[system]['url'], message_to_send, source_id)
|
||||||
|
|
||||||
|
|
||||||
|
if use_api == False:
|
||||||
|
send_sms(False, int_id(_rf_src), data_id, 0000, 'unit', 'API not enabled. Contact server admin.')
|
||||||
elif '@' in parse_sms[0][0:1] and 'M-' not in parse_sms[1][0:2] or '@' not in parse_sms[0][1:]:
|
elif '@' in parse_sms[0][0:1] and 'M-' not in parse_sms[1][0:2] or '@' not in parse_sms[0][1:]:
|
||||||
#Example SMS text: @ARMDS A-This is a test.
|
#Example SMS text: @ARMDS A-This is a test.
|
||||||
s = ' '
|
s = ' '
|
||||||
@ -2123,7 +2205,6 @@ class bridgeReportFactory(reportFactory):
|
|||||||
#************************************************
|
#************************************************
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
|
@ -731,6 +731,9 @@ def api(api_mode=None):
|
|||||||
access_systems = ast.literal_eval(os.popen('cat ' + access_systems_file).read())
|
access_systems = ast.literal_eval(os.popen('cat ' + access_systems_file).read())
|
||||||
authorized_users = ast.literal_eval(os.popen('cat ' + authorized_users_file).read())
|
authorized_users = ast.literal_eval(os.popen('cat ' + authorized_users_file).read())
|
||||||
api_data = request.json
|
api_data = request.json
|
||||||
|
#print(type(api_data))
|
||||||
|
#print((api_data))
|
||||||
|
|
||||||
# Find out mode of JSON
|
# Find out mode of JSON
|
||||||
## try:
|
## try:
|
||||||
# Filter msg_xfer
|
# Filter msg_xfer
|
||||||
@ -738,28 +741,32 @@ def api(api_mode=None):
|
|||||||
# Handle authorization
|
# Handle authorization
|
||||||
if api_data['auth_type'] == 'private':
|
if api_data['auth_type'] == 'private':
|
||||||
#Authenticate
|
#Authenticate
|
||||||
if api_data['system_name'] in authorized_users and api_data['credentials']['user'] == authorized_users[api_data['system_name']]['user'] and api_data['credentials']['password'] == authorized_users[api_data['system_name']]['password']:
|
if api_data['system_name'] in authorized_users:
|
||||||
print(api_data['credentials']['user'])
|
if api_data['credentials']['user'] == authorized_users[api_data['system_name']]['user'] and api_data['credentials']['password'] == authorized_users[api_data['system_name']]['password']:
|
||||||
print(api_data['credentials']['password'])
|
print(api_data['credentials']['user'])
|
||||||
for sms in api_data['data'].items():
|
print(api_data['credentials']['password'])
|
||||||
sms_data = sms[1]
|
for sms in api_data['data'].items():
|
||||||
print((sms_data['destination_id']))
|
sms_data = sms[1]
|
||||||
print((sms_data['source_id']))
|
print((sms_data['destination_id']))
|
||||||
print((sms_data['message']))
|
print((sms_data['source_id']))
|
||||||
print((sms_data['slot']))
|
print((sms_data['message']))
|
||||||
if sms_data['slot'] == 0:
|
print((sms_data['slot']))
|
||||||
send_slot = int(unit_sms_ts) - 1
|
if sms_data['slot'] == 0:
|
||||||
if sms_data['slot'] == 1:
|
send_slot = int(unit_sms_ts) - 1
|
||||||
send_slot = 0
|
if sms_data['slot'] == 1:
|
||||||
if sms_data['slot'] == 2:
|
send_slot = 0
|
||||||
send_slot = 1
|
if sms_data['slot'] == 2:
|
||||||
send_sms(False, sms_data['destination_id'], sms_data['source_id'], 0000, 'unit', send_slot, sms_data['message'])
|
send_slot = 1
|
||||||
return jsonify(
|
send_sms(False, sms_data['destination_id'], sms_data['source_id'], 0000, 'unit', send_slot, sms_data['message'])
|
||||||
mode=api_data['mode'],
|
return jsonify(
|
||||||
status='Generated SMS',
|
mode=api_data['mode'],
|
||||||
)
|
status='Generated SMS',
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
message = jsonify(message='Authentication error')
|
||||||
|
return make_response(message, 401)
|
||||||
else:
|
else:
|
||||||
message = jsonify(message='Authentication error')
|
message = jsonify(message='System not authorized')
|
||||||
return make_response(message, 401)
|
return make_response(message, 401)
|
||||||
if api_data['auth_type'] == 'public':
|
if api_data['auth_type'] == 'public':
|
||||||
message = jsonify(message='Not implemented')
|
message = jsonify(message='Not implemented')
|
||||||
@ -770,7 +777,12 @@ def api(api_mode=None):
|
|||||||
if api_data['mode'] == 'app':
|
if api_data['mode'] == 'app':
|
||||||
auth_file = ast.literal_eval(os.popen('cat ' + auth_token_file).read())
|
auth_file = ast.literal_eval(os.popen('cat ' + auth_token_file).read())
|
||||||
for token in auth_file:
|
for token in auth_file:
|
||||||
|
print()
|
||||||
|
print(token)
|
||||||
|
print(api_data['auth_token'])
|
||||||
|
print()
|
||||||
if token == api_data['auth_token']:
|
if token == api_data['auth_token']:
|
||||||
|
|
||||||
auth_file.remove(api_data['auth_token'])
|
auth_file.remove(api_data['auth_token'])
|
||||||
for i in api_data['data'].items():
|
for i in api_data['data'].items():
|
||||||
sms_data = i[1]
|
sms_data = i[1]
|
||||||
@ -855,7 +867,7 @@ if __name__ == '__main__':
|
|||||||
time_format = parser.get('GPS_DATA', 'TIME_FORMAT')
|
time_format = parser.get('GPS_DATA', 'TIME_FORMAT')
|
||||||
|
|
||||||
# RSS feed link, shows in the link section of each RSS item.
|
# RSS feed link, shows in the link section of each RSS item.
|
||||||
rss_link = parser.get('GPS_DATA', 'RSS_LINK')
|
rss_link = parser.get('GPS_DATA', 'DASHBOARD_URL')
|
||||||
|
|
||||||
# Default APRS comment for users.
|
# Default APRS comment for users.
|
||||||
default_comment = parser.get('GPS_DATA', 'USER_APRS_COMMENT')
|
default_comment = parser.get('GPS_DATA', 'USER_APRS_COMMENT')
|
||||||
|
Loading…
Reference in New Issue
Block a user