basic system auth
This commit is contained in:
parent
c8c8ccc4d0
commit
5632ad507b
@ -1,20 +1,38 @@
|
|||||||
# Types: App, s2s_msg
|
# Types: App, s2s_msg
|
||||||
|
# Auth: public, private
|
||||||
|
|
||||||
|
import json
|
||||||
|
|
||||||
|
|
||||||
msg_xfer = {
|
msg_xfer = {
|
||||||
'mode':'msg_xfer',
|
'mode':'msg_xfer',
|
||||||
'type':'s2s_msg',
|
'system_name':'ABC',
|
||||||
'response_url':'http://localhost:8093/api/',
|
'response_url':'http://localhost:8093/api/',
|
||||||
'user':'test_name',
|
'auth_type':'private',
|
||||||
'password':'passw0rd',
|
'credentials': {
|
||||||
'data':{'source_id':1234567,
|
'user':'test_name',
|
||||||
'destination_id':7654321,
|
'password':'passw0rd',
|
||||||
|
},
|
||||||
|
'data':{
|
||||||
|
1:{'source_id':1234,
|
||||||
|
'destination_id':3153591,
|
||||||
'slot':2,
|
'slot':2,
|
||||||
'msg_type':'unit',
|
'msg_type':'unit',
|
||||||
'msg_format':'motorola',
|
'msg_format':'motorola',
|
||||||
'message':'text of the message'
|
'message':'text of the message'
|
||||||
|
},
|
||||||
|
2:{'source_id':1234,
|
||||||
|
'destination_id':3153591,
|
||||||
|
'slot':2,
|
||||||
|
'msg_type':'unit',
|
||||||
|
'msg_format':'motorola',
|
||||||
|
'message':'text of the 2nd message'
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
print(msg_xfer['data']['slot'])
|
json_object = json.dumps(msg_xfer, indent = 4)
|
||||||
|
print(json_object)
|
||||||
|
|
||||||
|
@ -112,16 +112,19 @@ STALE_DAYS: 1
|
|||||||
# DATA_DMR_ID - This is the DMR ID that users send DMR GPS data.
|
# DATA_DMR_ID - This is the DMR ID that users send DMR GPS data.
|
||||||
# CALL_TYPE - group, unit, or both. Group if you want users to send data to a talkgroup,
|
# CALL_TYPE - group, unit, or both. Group if you want users to send data to a talkgroup,
|
||||||
# unit if you want users to send data as a private call, or both if you want both options.
|
# unit if you want users to send data as a private call, or both if you want both options.
|
||||||
# USER_APRS_SSID - Default APRS SSID assigned to user APRS positions.
|
# UNIT_SMS_TS - Default timeslot for private SMS, where the subscriber's last TS is not known.
|
||||||
# USER_APRS_COMMENT - Default Comment attached to user APRS positions.
|
|
||||||
# APRS_LOGIN_CALL, PASSCODE, SERVER, and PORT - Login settings for APRS-IS.
|
|
||||||
[GPS_DATA]
|
[GPS_DATA]
|
||||||
DATA_DMR_ID: 9099
|
DATA_DMR_ID: 9099
|
||||||
CALL_TYPE: unit
|
CALL_TYPE: unit
|
||||||
|
UNIT_SMS_TS: 2
|
||||||
|
|
||||||
|
#APRS settings
|
||||||
|
# USER_APRS_SSID - Default APRS SSID assigned to user APRS positions.
|
||||||
|
# USER_APRS_COMMENT - Default Comment attached to user APRS positions.
|
||||||
|
# APRS_LOGIN_CALL, PASSCODE, SERVER, and PORT - Login settings for APRS-IS.
|
||||||
|
# Setting APRS_LOGIN_CALL to N0CALL will cause the gateway to not upload packets to APRS server.
|
||||||
USER_APRS_SSID: 15
|
USER_APRS_SSID: 15
|
||||||
USER_APRS_COMMENT: HBLink3 D-APRS -
|
USER_APRS_COMMENT: HBLink3 D-APRS -
|
||||||
|
|
||||||
# Setting APRS_LOGIN_CALL to N0CALL will cause the gateway to not upload packets to APRS server.
|
|
||||||
APRS_LOGIN_CALL: N0CALL
|
APRS_LOGIN_CALL: N0CALL
|
||||||
APRS_LOGIN_PASSCODE: 12345
|
APRS_LOGIN_PASSCODE: 12345
|
||||||
APRS_SERVER: rotate.aprs2.net
|
APRS_SERVER: rotate.aprs2.net
|
||||||
@ -165,6 +168,9 @@ EMERGENCY_SOS_FILE: /tmp/gps_data_user_sos.txt
|
|||||||
# User settings file, MUST configure using absolute path.
|
# User settings file, MUST configure using absolute path.
|
||||||
USER_SETTINGS_FILE: /path/to/user_settings.txt
|
USER_SETTINGS_FILE: /path/to/user_settings.txt
|
||||||
|
|
||||||
|
# Authorized Apps file - data used for the dashboard API
|
||||||
|
AUTHORIZED_APPS_FILE: /path/to/authorized_apps.py
|
||||||
|
|
||||||
# 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
|
||||||
|
25
scripts/dashboard/authorized_apps.py
Normal file
25
scripts/dashboard/authorized_apps.py
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
#global authorized_users, other_systems
|
||||||
|
# The following info will allow others to SMS into your system.
|
||||||
|
authorized_users = {
|
||||||
|
'ABC':{
|
||||||
|
'mode':'msg_xfer',
|
||||||
|
'user':'test_name',
|
||||||
|
'password':'passw0rd'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# The following info will allow users to access other systems.
|
||||||
|
access_systems = {
|
||||||
|
'XYZ':{
|
||||||
|
'mode':'msg_xfer',
|
||||||
|
'user':'test_name',
|
||||||
|
'password':'passw0rd'
|
||||||
|
},
|
||||||
|
'APP':{
|
||||||
|
'mode':'app',
|
||||||
|
'user':'test_name',
|
||||||
|
'password':'passw0rd'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -21,7 +21,7 @@
|
|||||||
This is a web dashboard for the GPS/Data application.
|
This is a web dashboard for the GPS/Data application.
|
||||||
'''
|
'''
|
||||||
|
|
||||||
from flask import Flask, render_template, request, Response, Markup
|
from flask import Flask, render_template, request, Response, Markup, jsonify, make_response
|
||||||
import ast, os
|
import ast, os
|
||||||
#from dashboard_settings import *
|
#from dashboard_settings import *
|
||||||
import folium
|
import folium
|
||||||
@ -30,6 +30,7 @@ import re
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
import argparse
|
import argparse
|
||||||
from configparser import ConfigParser
|
from configparser import ConfigParser
|
||||||
|
from send_sms import *
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -185,8 +186,12 @@ def user_setting_write(dmr_id, input_ssid, input_icon, input_comment):
|
|||||||
new_dict[dmr_id][1]['ssid'] = input_ssid
|
new_dict[dmr_id][1]['ssid'] = input_ssid
|
||||||
new_dict[dmr_id][2]['icon'] = input_icon
|
new_dict[dmr_id][2]['icon'] = input_icon
|
||||||
new_dict[dmr_id][3]['comment'] = input_comment
|
new_dict[dmr_id][3]['comment'] = input_comment
|
||||||
print(input_comment)
|
if input_aprs == 'True':
|
||||||
print(new_dict[dmr_id])
|
new_dict[dmr_id][5]['APRS'] = True
|
||||||
|
if input_aprs == 'False':
|
||||||
|
new_dict[dmr_id][5]['APRS'] = False
|
||||||
|
#print(input_comment)
|
||||||
|
#print(new_dict[dmr_id])
|
||||||
|
|
||||||
# Write modified dict to file
|
# Write modified dict to file
|
||||||
with open(user_settings_file, 'w') as user_dict_file:
|
with open(user_settings_file, 'w') as user_dict_file:
|
||||||
@ -401,8 +406,11 @@ def user_settings():
|
|||||||
ssid = user_settings[int(request.form.get('dmr_id'))][1]['ssid']
|
ssid = user_settings[int(request.form.get('dmr_id'))][1]['ssid']
|
||||||
icon = user_settings[int(request.form.get('dmr_id'))][2]['icon']
|
icon = user_settings[int(request.form.get('dmr_id'))][2]['icon']
|
||||||
comment = user_settings[int(request.form.get('dmr_id'))][3]['comment']
|
comment = user_settings[int(request.form.get('dmr_id'))][3]['comment']
|
||||||
|
aprs_msg_status = str(user_settings[int(request.form.get('dmr_id'))][5]['APRS'])
|
||||||
|
|
||||||
try:
|
try:
|
||||||
pin = user_settings[int(request.form.get('dmr_id'))][4]['pin']
|
pin = user_settings[int(request.form.get('dmr_id'))][4]['pin']
|
||||||
|
|
||||||
if ssid == '':
|
if ssid == '':
|
||||||
ssid = aprs_ssid
|
ssid = aprs_ssid
|
||||||
if icon == '':
|
if icon == '':
|
||||||
@ -432,6 +440,15 @@ def user_settings():
|
|||||||
<td style="width: 319.367px; text-align: center;"><input id="comment" name="comment" type="text" placeholder='""" + comment + """'/></td>
|
<td style="width: 319.367px; text-align: center;"><input id="comment" name="comment" type="text" placeholder='""" + comment + """'/></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
<td style="width: 82px;"><strong>APRS Messaging:</strong></td>
|
||||||
|
<td style="width: 319.367px; text-align: center;"><select name="aprs" id="aprs">
|
||||||
|
<option value='""" + aprs_msg_status + """' selected>""" + aprs_msg_status + """</option>
|
||||||
|
<option value="True"> True (Enabled) </option>
|
||||||
|
<option value="False"> False (Disabled) </option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
<td style="width: 82px;"><strong>DMR ID:</strong></td>
|
<td style="width: 82px;"><strong>DMR ID:</strong></td>
|
||||||
<td style="width: 319.367px; text-align: center;"><input id="dmr_id" name="dmr_id" type="text" value='""" + user_id + """'/></td>
|
<td style="width: 319.367px; text-align: center;"><input id="dmr_id" name="dmr_id" type="text" value='""" + user_id + """'/></td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -462,7 +479,7 @@ def user_settings():
|
|||||||
ssid = request.form.get('ssid')
|
ssid = request.form.get('ssid')
|
||||||
icon = request.form.get('icon')
|
icon = request.form.get('icon')
|
||||||
comment = request.form.get('comment')
|
comment = request.form.get('comment')
|
||||||
user_setting_write(request.form.get('dmr_id'), request.form.get('ssid'), request.form.get('icon'), request.form.get('comment'))
|
user_setting_write(request.form.get('dmr_id'), request.form.get('ssid'), request.form.get('icon'), request.form.get('comment'), request.form.get('aprs'))
|
||||||
user_result = """<h2 style="text-align: center;">Changed settings for """ + str(user_settings[int(user_id)][0]['call']) + """ - """ + request.form.get('dmr_id') + """</h2>
|
user_result = """<h2 style="text-align: center;">Changed settings for """ + str(user_settings[int(user_id)][0]['call']) + """ - """ + request.form.get('dmr_id') + """</h2>
|
||||||
<p style="text-align: center;"><button onclick="history.back()">Back</button>
|
<p style="text-align: center;"><button onclick="history.back()">Back</button>
|
||||||
</p>"""
|
</p>"""
|
||||||
@ -525,6 +542,7 @@ def user_settings():
|
|||||||
ssid = user_settings[int(user_id)][1]['ssid']
|
ssid = user_settings[int(user_id)][1]['ssid']
|
||||||
icon = user_settings[int(user_id)][2]['icon']
|
icon = user_settings[int(user_id)][2]['icon']
|
||||||
comment = user_settings[int(user_id)][3]['comment']
|
comment = user_settings[int(user_id)][3]['comment']
|
||||||
|
aprs_msg_status = str(user_settings[int(user_id)][5]['APRS'])
|
||||||
if ssid == '':
|
if ssid == '':
|
||||||
ssid = aprs_ssid
|
ssid = aprs_ssid
|
||||||
if icon == '':
|
if icon == '':
|
||||||
@ -554,6 +572,10 @@ def user_settings():
|
|||||||
<td style="width: 82px;"><strong>Comment:</strong></td>
|
<td style="width: 82px;"><strong>Comment:</strong></td>
|
||||||
<td style="width: 319.367px; text-align: center;">""" + comment + """</td>
|
<td style="width: 319.367px; text-align: center;">""" + comment + """</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td style="width: 82px;"><strong>APRS Messaging:</strong></td>
|
||||||
|
<td style="width: 319.367px; text-align: center;">""" + aprs_msg_status + """</td>
|
||||||
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<p style="text-align: center;"><button onclick="history.back()">Back</button>
|
<p style="text-align: center;"><button onclick="history.back()">Back</button>
|
||||||
@ -699,6 +721,54 @@ def mail_rss():
|
|||||||
"""
|
"""
|
||||||
return Response(rss_header + post_data + "\n</channel>\n</rss>", mimetype='text/xml')
|
return Response(rss_header + post_data + "\n</channel>\n</rss>", mimetype='text/xml')
|
||||||
|
|
||||||
|
@app.route('/api/<api_mode>', methods=['POST'])
|
||||||
|
def api(api_mode=None):
|
||||||
|
api_data = request.json
|
||||||
|
# Find out type of JSON
|
||||||
|
#print(api_data)
|
||||||
|
#print(authorized_users)
|
||||||
|
try:
|
||||||
|
# Filter msg_xfer
|
||||||
|
if api_data['mode'] == 'msg_xfer':
|
||||||
|
# Handle authorization
|
||||||
|
if api_data['auth_type'] == 'private':
|
||||||
|
#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']:
|
||||||
|
print(api_data['credentials']['user'])
|
||||||
|
print(api_data['credentials']['password'])
|
||||||
|
for sms in api_data['data'].items():
|
||||||
|
sms_data = sms[1]
|
||||||
|
print((sms_data['destination_id']))
|
||||||
|
print((sms_data['source_id']))
|
||||||
|
print((sms_data['message']))
|
||||||
|
#send_sms(False, sms_data['destination_id'], sms_data['source_id'], 0000, 'unit', 1, sms_data['message'])
|
||||||
|
return jsonify(
|
||||||
|
mode=api_data['mode'],
|
||||||
|
status='Generated SMS',
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
return jsonify(
|
||||||
|
mode=api_data['mode'],
|
||||||
|
status='Authentication error',
|
||||||
|
)
|
||||||
|
if api_data['auth_type'] == 'public':
|
||||||
|
return jsonify(
|
||||||
|
mode=api_data['mode'],
|
||||||
|
status='Not implemented at this time',
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
return jsonify(
|
||||||
|
mode=api_data['mode'],
|
||||||
|
status='Not an authorization method',
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
message = jsonify(message='Mode not found')
|
||||||
|
return make_response(message, 400)
|
||||||
|
except Exception as e:
|
||||||
|
message = jsonify(message='Error:' + str(e))
|
||||||
|
return make_response(message, 400)
|
||||||
|
|
||||||
|
#################### Run App ############################
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
arg_parser = argparse.ArgumentParser()
|
arg_parser = argparse.ArgumentParser()
|
||||||
arg_parser.add_argument('-c', '--config', action='store', dest='CONFIG_FILE', help='/full/path/to/config.file (usually gps_data.cfg)')
|
arg_parser.add_argument('-c', '--config', action='store', dest='CONFIG_FILE', help='/full/path/to/config.file (usually gps_data.cfg)')
|
||||||
@ -759,6 +829,15 @@ if __name__ == '__main__':
|
|||||||
emergency_sos_file = parser.get('GPS_DATA', 'EMERGENCY_SOS_FILE')
|
emergency_sos_file = parser.get('GPS_DATA', 'EMERGENCY_SOS_FILE')
|
||||||
the_mailbox_file = parser.get('GPS_DATA', 'MAILBOX_FILE')
|
the_mailbox_file = parser.get('GPS_DATA', 'MAILBOX_FILE')
|
||||||
user_settings_file = parser.get('GPS_DATA', 'USER_SETTINGS_FILE')
|
user_settings_file = parser.get('GPS_DATA', 'USER_SETTINGS_FILE')
|
||||||
|
|
||||||
|
# API settings
|
||||||
|
authorized_apps_file = parser.get('GPS_DATA', 'AUTHORIZED_APPS_FILE')
|
||||||
|
try:
|
||||||
|
global authorized_users, other_systems
|
||||||
|
from authorized_apps import authorized_users, access_systems
|
||||||
|
except Exception as e:
|
||||||
|
print(e)
|
||||||
|
|
||||||
########################
|
########################
|
||||||
|
|
||||||
app.run(debug = True, port=dash_port, host=dash_host)
|
app.run(debug = True, port=dash_port, host=dash_host)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user