diff --git a/user_managment/app.py b/user_managment/app.py index db91be3..5167b80 100644 --- a/user_managment/app.py +++ b/user_managment/app.py @@ -196,6 +196,8 @@ def create_app(): tg1_acl = db.Column(db.String(100, collation='NOCASE'), nullable=False, server_default='') tg2_acl = db.Column(db.String(100, collation='NOCASE'), nullable=False, server_default='') server = db.Column(db.String(100, collation='NOCASE'), nullable=False, server_default='') + notes = db.Column(db.String(100, collation='NOCASE'), nullable=False, server_default='') + class xlxPeer(db.Model): __tablename__ = 'XLX_peers' id = db.Column(db.Integer(), primary_key=True) @@ -229,6 +231,7 @@ def create_app(): tg1_acl = db.Column(db.String(100, collation='NOCASE'), nullable=False, server_default='') tg2_acl = db.Column(db.String(100, collation='NOCASE'), nullable=False, server_default='') server = db.Column(db.String(100, collation='NOCASE'), nullable=False, server_default='') + notes = db.Column(db.String(100, collation='NOCASE'), nullable=False, server_default='') class ServerList(db.Model): __tablename__ = 'server_list' name = db.Column(db.String(100, collation='NOCASE'), unique=True, primary_key=True) @@ -264,6 +267,7 @@ def create_app(): report_port = db.Column(db.Integer(), primary_key=False, server_default='4321') report_clients =db.Column(db.String(100, collation='NOCASE'), nullable=False, server_default='127.0.0.1') unit_time = db.Column(db.Integer(), primary_key=False, server_default='10080') + notes = db.Column(db.String(100, collation='NOCASE'), nullable=False, server_default='') class MasterList(db.Model): __tablename__ = 'master_list' @@ -346,6 +350,17 @@ def create_app(): description = db.Column(db.String(100, collation='NOCASE'), nullable=False, server_default='') public_list = db.Column(db.Boolean(), nullable=False, server_default='0') + class BridgeList(db.Model): + __tablename__ = 'bridge_list' + id = db.Column(db.Integer(), primary_key=True) + bridge_name = db.Column(db.String(100, collation='NOCASE'), nullable=False, server_default='') + description = db.Column(db.String(100, collation='NOCASE'), nullable=False, server_default='') + public_list = db.Column(db.Boolean(), nullable=False, server_default='0') + tg = db.Column(db.Integer(), primary_key=False) + + + + # Customize Flask-User class CustomUserManager(UserManager): # Override or extend the default login view method @@ -1715,6 +1730,28 @@ def create_app(): r_list.append(str(i.secret)) return r_list + def bridge_add(_name, _desc, _public, _tg): + add_bridge = BridgeList( + bridge_name = _name, + description = _desc, + public_list = _public, + tg = _tg + ) + db.session.add(add_bridge) + db.session.commit() + def update_bridge_list(_name, _desc, _public, _new_name, _tg): + bl = BridgeList.query.filter_by(bridge_name=_name).first() + bl.bridge_name = _new_name + bl.description = _desc + bl.public_list = _public + bl.tg = _tg + db.session.commit() + + def bridge_delete(_name): + bl = BridgeList.query.filter_by(bridge_name=_name).first() + db.session.delete(bl) + db.session.commit() + def generate_rules(_name): # generate UNIT list @@ -1870,7 +1907,7 @@ def create_app(): print(master_config_list) return master_config_list - 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): + 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) if _secret == '': @@ -1907,6 +1944,7 @@ def create_app(): s.report_port = _report_port s.report_clients = _report_clients s.unit_time = int(_unit_time) + s.notes = _notes db.session.commit() def master_delete(_mode, _server, _name): @@ -2083,7 +2121,7 @@ def create_app(): db.session.commit() - def server_add(_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): + def server_add(_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): add_server = ServerList( name = _name, secret = hashlib.sha256(_secret.encode()).hexdigest(), @@ -2116,11 +2154,12 @@ def create_app(): report_interval = _report_interval, report_port = _report_port, report_clients = _report_clients, - unit_time = int(_unit_time) + unit_time = int(_unit_time), + notes = _notes ) db.session.add(add_server) db.session.commit() - def peer_add(_mode, _name, _enabled, _loose, _ip, _port, _master_ip, _master_port, _passphrase, _callsign, _radio_id, _rx, _tx, _tx_power, _cc, _lat, _lon, _height, _loc, _desc, _slots, _url, _grp_hang, _xlx_mod, _opt, _use_acl, _sub_acl, _1_acl, _2_acl, _svr, _enable_unit): + def peer_add(_mode, _name, _enabled, _loose, _ip, _port, _master_ip, _master_port, _passphrase, _callsign, _radio_id, _rx, _tx, _tx_power, _cc, _lat, _lon, _height, _loc, _desc, _slots, _url, _grp_hang, _xlx_mod, _opt, _use_acl, _sub_acl, _1_acl, _2_acl, _svr, _enable_unit, _notes): if _mode == 'xlx': xlx_peer_add = xlxPeer( name = _name, @@ -2151,7 +2190,8 @@ def create_app(): sub_acl = _sub_acl, tg1_acl = _1_acl, tg2_acl = _2_acl, - server = _svr + server = _svr, + notes = _notes ) db.session.add(xlx_peer_add) db.session.commit() @@ -2184,11 +2224,12 @@ def create_app(): sub_acl = _sub_acl, tg1_acl = _1_acl, tg2_acl = _2_acl, - server = _svr + server = _svr, + notes = _notes ) db.session.add(mmdvm_peer_add) db.session.commit() - def peer_edit(_mode, _server, _name, _enabled, _loose, _ip, _port, _master_ip, _master_port, _passphrase, _callsign, _radio_id, _rx, _tx, _tx_power, _cc, _lat, _lon, _height, _loc, _desc, _slots, _url, _grp_hang, _xlx_mod, _opt, _use_acl, _sub_acl, _1_acl, _2_acl, _enable_unit): + def peer_edit(_mode, _server, _name, _enabled, _loose, _ip, _port, _master_ip, _master_port, _passphrase, _callsign, _radio_id, _rx, _tx, _tx_power, _cc, _lat, _lon, _height, _loc, _desc, _slots, _url, _grp_hang, _xlx_mod, _opt, _use_acl, _sub_acl, _1_acl, _2_acl, _enable_unit, _notes): ## print(_mode) if _mode == 'mmdvm': ## print(_server) @@ -2223,11 +2264,12 @@ def create_app(): p.sub_acl = _sub_acl p.tg1_acl = _1_acl p.tg2_acl = _2_acl + p.notes = _notes if _mode == 'xlx': ## print(type(_server)) ## print(type(_name)) ## print(type(_enabled)) - print((_enable_unit)) +## print((_enable_unit)) ## print(type(_use_acl)) #### print(_port) @@ -2263,6 +2305,7 @@ def create_app(): p.sub_acl = _sub_acl p.tg1_acl = _1_acl p.tg2_acl = _2_acl + p.notes = _notes db.session.commit() @@ -2300,13 +2343,13 @@ def create_app(): public_list = False if request.args.get('save_mode') == 'new': - server_add(request.form.get('server_name'), request.form.get('server_secret'), request.form.get('server_ip'), public_list, _port, request.form.get('global_path'), _global_ping_time, _global_max_missed, _global_use_acl, request.form.get('reg_acl'), request.form.get('sub_acl'), request.form.get('global_ts1_acl'), request.form.get('global_ts2_acl'), request.form.get('sub_file'), _ai_try_download, request.form.get('aliases_path'), request.form.get('peer_file'), request.form.get('tgid_file'), request.form.get('peer_url'), request.form.get('sub_url'), _ai_stale, _um_shorten_passphrase, request.form.get('um_burn_file'), _report_enabled, _report_interval, _report_port, request.form.get('report_clients'), request.form.get('unit_time')) + server_add(request.form.get('server_name'), request.form.get('server_secret'), request.form.get('server_ip'), public_list, _port, request.form.get('global_path'), _global_ping_time, _global_max_missed, _global_use_acl, request.form.get('reg_acl'), request.form.get('sub_acl'), request.form.get('global_ts1_acl'), request.form.get('global_ts2_acl'), request.form.get('sub_file'), _ai_try_download, request.form.get('aliases_path'), request.form.get('peer_file'), request.form.get('tgid_file'), request.form.get('peer_url'), request.form.get('sub_url'), _ai_stale, _um_shorten_passphrase, request.form.get('um_burn_file'), _report_enabled, _report_interval, _report_port, request.form.get('report_clients'), request.form.get('unit_time'), request.form.get('notes')) content = '''

Server saved.

Redirecting in 3 seconds.

''' if request.args.get('save_mode') == 'edit': ## print(request.args.get('server')) - server_edit(request.args.get('server'), request.form.get('server_secret'), request.form.get('server_ip'), public_list, _port, request.form.get('global_path'), _global_ping_time, _global_max_missed, _global_use_acl, request.form.get('reg_acl'), request.form.get('sub_acl'), request.form.get('global_ts1_acl'), request.form.get('global_ts2_acl'), request.form.get('sub_file'), _ai_try_download, request.form.get('aliases_path'), request.form.get('peer_file'), request.form.get('tgid_file'), request.form.get('peer_url'), request.form.get('sub_url'), _ai_stale, _um_shorten_passphrase, request.form.get('um_burn_file'), _report_enabled, _report_interval, _report_port, request.form.get('report_clients'), request.form.get('unit_time')) + server_edit(request.args.get('server'), request.form.get('server_secret'), request.form.get('server_ip'), public_list, _port, request.form.get('global_path'), _global_ping_time, _global_max_missed, _global_use_acl, request.form.get('reg_acl'), request.form.get('sub_acl'), request.form.get('global_ts1_acl'), request.form.get('global_ts2_acl'), request.form.get('sub_file'), _ai_try_download, request.form.get('aliases_path'), request.form.get('peer_file'), request.form.get('tgid_file'), request.form.get('peer_url'), request.form.get('sub_url'), _ai_stale, _um_shorten_passphrase, request.form.get('um_burn_file'), _report_enabled, _report_interval, _report_port, request.form.get('report_clients'), request.form.get('unit_time'), request.form.get('notes')) content = '''

Server changed.

Redirecting in 3 seconds.

''' @@ -2354,9 +2397,12 @@ def create_app(): - + + Notes: +

Global

@@ -2555,6 +2601,10 @@ def create_app(): + + Notes: +

Global

@@ -2728,11 +2778,14 @@ def create_app(): + + ''' for s in all_s: p_list = p_list + ''' +\n ''' p_list = p_list + '''
Name
Notes
''' + str(s.name) + '''''' + s.notes + '''
''' @@ -2762,12 +2815,12 @@ def create_app(): ## print(request.form.get('enable_unit')) ## print(enable_unit) if request.args.get('save_mode') == 'mmdvm_peer': - peer_add('mmdvm', request.form.get('name_text'), peer_enabled, peer_loose, request.form.get('ip'), request.form.get('port'), request.form.get('master_ip'), request.form.get('master_port'), request.form.get('passphrase'), request.form.get('callsign'), request.form.get('radio_id'), request.form.get('rx'), request.form.get('tx'), request.form.get('tx_power'), request.form.get('cc'), request.form.get('lat'), request.form.get('lon'), request.form.get('height'), request.form.get('location'), request.form.get('description'), request.form.get('slots'), request.form.get('url'), request.form.get('group_hangtime'), 'MMDVM', request.form.get('options'), use_acl, request.form.get('sub_acl'), request.form.get('tgid_ts1_acl'), request.form.get('tgid_ts2_acl'), request.form.get('server'), unit_enabled) + peer_add('mmdvm', request.form.get('name_text'), peer_enabled, peer_loose, request.form.get('ip'), request.form.get('port'), request.form.get('master_ip'), request.form.get('master_port'), request.form.get('passphrase'), request.form.get('callsign'), request.form.get('radio_id'), request.form.get('rx'), request.form.get('tx'), request.form.get('tx_power'), request.form.get('cc'), request.form.get('lat'), request.form.get('lon'), request.form.get('height'), request.form.get('location'), request.form.get('description'), request.form.get('slots'), request.form.get('url'), request.form.get('group_hangtime'), 'MMDVM', request.form.get('options'), use_acl, request.form.get('sub_acl'), request.form.get('tgid_ts1_acl'), request.form.get('tgid_ts2_acl'), request.form.get('server'), unit_enabled, request.form.get('notes')) content = '''

MMDVM PEER saved.

Redirecting in 3 seconds.

''' if request.args.get('save_mode') == 'xlx_peer': - peer_add('xlx', request.form.get('name_text'), peer_enabled, peer_loose, request.form.get('ip'), request.form.get('port'), request.form.get('master_ip'), request.form.get('master_port'), request.form.get('passphrase'), request.form.get('callsign'), request.form.get('radio_id'), request.form.get('rx'), request.form.get('tx'), request.form.get('tx_power'), request.form.get('cc'), request.form.get('lat'), request.form.get('lon'), request.form.get('height'), request.form.get('location'), request.form.get('description'), request.form.get('slots'), request.form.get('url'), request.form.get('group_hangtime'), request.form.get('xlxmodule'), request.form.get('options'), use_acl, request.form.get('sub_acl'), request.form.get('tgid_ts1_acl'), request.form.get('tgid_ts2_acl'), request.form.get('server'), unit_enabled) + peer_add('xlx', request.form.get('name_text'), peer_enabled, peer_loose, request.form.get('ip'), request.form.get('port'), request.form.get('master_ip'), request.form.get('master_port'), request.form.get('passphrase'), request.form.get('callsign'), request.form.get('radio_id'), request.form.get('rx'), request.form.get('tx'), request.form.get('tx_power'), request.form.get('cc'), request.form.get('lat'), request.form.get('lon'), request.form.get('height'), request.form.get('location'), request.form.get('description'), request.form.get('slots'), request.form.get('url'), request.form.get('group_hangtime'), request.form.get('xlxmodule'), request.form.get('options'), use_acl, request.form.get('sub_acl'), request.form.get('tgid_ts1_acl'), request.form.get('tgid_ts2_acl'), request.form.get('server'), unit_enabled, request.form.get('notes')) content = '''

XLX PEER saved.

Redirecting in 3 seconds.

''' @@ -2937,6 +2990,10 @@ def create_app():  Talkgroup Slot 2 ACLs:   + + Notes: +

 

@@ -2968,12 +3025,12 @@ def create_app(): ## print(type(peer_enabled)) ## print(type(use_acl)) if request.args.get('edit_mmdvm') == 'save': - peer_edit('mmdvm', request.args.get('server'), request.args.get('name'), peer_enabled, peer_loose, request.form.get('ip'), request.form.get('port'), request.form.get('master_ip'), request.form.get('master_port'), request.form.get('passphrase'), request.form.get('callsign'), request.form.get('radio_id'), request.form.get('rx'), request.form.get('tx'), request.form.get('tx_power'), request.form.get('cc'), request.form.get('lat'), request.form.get('lon'), request.form.get('height'), request.form.get('location'), request.form.get('description'), request.form.get('slots'), request.form.get('url'), request.form.get('group_hangtime'), 'MMDVM', request.form.get('options'), use_acl, request.form.get('sub_acl'), request.form.get('tgid_ts1_acl'), request.form.get('tgid_ts2_acl'), unit_enabled) + peer_edit('mmdvm', request.args.get('server'), request.args.get('name'), peer_enabled, peer_loose, request.form.get('ip'), request.form.get('port'), request.form.get('master_ip'), request.form.get('master_port'), request.form.get('passphrase'), request.form.get('callsign'), request.form.get('radio_id'), request.form.get('rx'), request.form.get('tx'), request.form.get('tx_power'), request.form.get('cc'), request.form.get('lat'), request.form.get('lon'), request.form.get('height'), request.form.get('location'), request.form.get('description'), request.form.get('slots'), request.form.get('url'), request.form.get('group_hangtime'), 'MMDVM', request.form.get('options'), use_acl, request.form.get('sub_acl'), request.form.get('tgid_ts1_acl'), request.form.get('tgid_ts2_acl'), unit_enabled, request.form.get('notes')) content = '''

MMDVM PEER changed.

Redirecting in 3 seconds.

''' if request.args.get('edit_xlx') == 'save': - peer_edit('xlx', request.args.get('server'), request.args.get('name'), peer_enabled, peer_loose, request.form.get('ip'), request.form.get('port'), request.form.get('master_ip'), request.form.get('master_port'), request.form.get('passphrase'), request.form.get('callsign'), request.form.get('radio_id'), request.form.get('rx'), request.form.get('tx'), request.form.get('tx_power'), request.form.get('cc'), request.form.get('lat'), request.form.get('lon'), request.form.get('height'), request.form.get('location'), request.form.get('description'), request.form.get('slots'), request.form.get('url'), request.form.get('group_hangtime'), request.form.get('xlxmodule'), request.form.get('options'), use_acl, request.form.get('sub_acl'), request.form.get('tgid_ts1_acl'), request.form.get('tgid_ts2_acl'), unit_enabled) + peer_edit('xlx', request.args.get('server'), request.args.get('name'), peer_enabled, peer_loose, request.form.get('ip'), request.form.get('port'), request.form.get('master_ip'), request.form.get('master_port'), request.form.get('passphrase'), request.form.get('callsign'), request.form.get('radio_id'), request.form.get('rx'), request.form.get('tx'), request.form.get('tx_power'), request.form.get('cc'), request.form.get('lat'), request.form.get('lon'), request.form.get('height'), request.form.get('location'), request.form.get('description'), request.form.get('slots'), request.form.get('url'), request.form.get('group_hangtime'), request.form.get('xlxmodule'), request.form.get('options'), use_acl, request.form.get('sub_acl'), request.form.get('tgid_ts1_acl'), request.form.get('tgid_ts2_acl'), unit_enabled, request.form.get('notes')) content = '''

XLX PEER changed.

Redirecting in 3 seconds.

''' @@ -3142,6 +3199,10 @@ def create_app():  Talkgroup Slot 2 ACLs:   + + Notes: +

 

@@ -3161,6 +3222,8 @@ def create_app(): Name Mode +Notes + \n ''' all_p = mmdvmPeer.query.filter_by(server=s.name).all() @@ -3170,14 +3233,18 @@ def create_app(): ''' + str(p.name) + ''' MMDVM -\n +''' + p.notes + ''' + + ''' for x in all_x: p_list = p_list + ''' ''' + str(x.name) + ''' XLX -\n +''' + x.notes + ''' + + ''' p_list = p_list + ''' \n''' content = ''' @@ -3979,7 +4046,7 @@ def create_app(): Mode Notes -\n + ''' all_m = MasterList.query.filter_by(server=s.name).all() all_p = ProxyList.query.filter_by(server=s.name).all() @@ -4102,6 +4169,151 @@ def create_app(): return render_template('flask_user_layout.html', markup_content = Markup(content)) + @app.route('/manage_rules', methods=['POST', 'GET']) + def manage_rules(): + + if request.args.get('save_bridge') == 'save': + public = False + if request.form.get('public_list') == 'True': + public = True + bridge_add(request.form.get('bridge_name'), request.form.get('description'), public, request.form.get('tg')) + if request.args.get('save_bridge') == 'edit': + public = False + if request.form.get('public_list') == 'True': + public = True + update_bridge_list(request.args.get('bridge'), request.form.get('description'), public, request.form.get('bridge_name'), request.form.get('tg')) + content = 'edit' + if request.args.get('save_bridge') == 'delete': + bridge_delete(request.args.get('bridge')) + content = 'deleted' + + elif request.args.get('add_bridge'): + s = ServerList.query.all() +## server_options = '' +## for i in s: +## server_options = server_options + '''\n''' + + content = ''' +

 

+

Add a Talk Group

+
+ + + + + + + + + + + + + + + + + + + + +

 

+

 

+


 

+
+

 

+ +

+
+
+''' + elif request.args.get('edit_bridge'): + b = BridgeList.query.filter_by(bridge_name=request.args.get('edit_bridge')).first() +## s = ServerList.query.all() +## server_options = '' +## for i in s: +## server_options = server_options + '''\n''' + + content = ''' +

 

+

Edit a Talk Group

+

Delete Talk Group

+

 

+ +
+ + + + + + + + + + + + + + + + + + + + +

 

+

 

+


 

+
+

 

+ +

+
+
+''' + else: + all_b = BridgeList.query.all() + b_list = ''' +

View/Edit Bridges (Talk Groups)

+ + + + + + + + +
Add Bridge
+

 

+ + + + + + + + +''' + for i in all_b: + b_list = b_list + ''' + + + + +''' + content = b_list + '
NamePublicDescription
''' + str(i.bridge_name) + ''' +''' + str(i.public_list) + '''''' + str(i.description) + '''
' + + return render_template('flask_user_layout.html', markup_content = Markup(content)) + @app.route('/auth', methods=['POST']) def auth(): hblink_req = request.json diff --git a/user_managment/templates/flask_user_layout.html b/user_managment/templates/flask_user_layout.html index 514f4df..166f3c5 100644 --- a/user_managment/templates/flask_user_layout.html +++ b/user_managment/templates/flask_user_layout.html @@ -68,6 +68,7 @@ Manage Servers Manage Peers Manage Masters +Manage Rules @@ -125,7 +126,7 @@

{% endblock %}