rewrite auth log

This commit is contained in:
KF7EEL 2021-06-03 21:08:31 -07:00
parent ac7b827c36
commit de08cc897e
4 changed files with 243 additions and 58 deletions

View File

@ -156,6 +156,7 @@ def build_config(_config_file):
elif section == 'USER_MANAGER': elif section == 'USER_MANAGER':
CONFIG['USER_MANAGER'].update({ CONFIG['USER_MANAGER'].update({
'THIS_SERVER_NAME': config.get(section, 'THIS_SERVER_NAME'),
'URL': config.get(section, 'URL'), 'URL': config.get(section, 'URL'),
'APPEND_INT': config.getint(section, 'APPEND_INT'), 'APPEND_INT': config.getint(section, 'APPEND_INT'),
'SHARED_SECRET': config.get(section, 'SHARED_SECRET'), 'SHARED_SECRET': config.get(section, 'SHARED_SECRET'),

View File

@ -254,14 +254,16 @@ class HBSYSTEM(DatagramProtocol):
self.datagramReceived = self.peer_datagramReceived self.datagramReceived = self.peer_datagramReceived
self.dereg = self.peer_dereg self.dereg = self.peer_dereg
def check_user_man(self, _id): def check_user_man(self, _id, server_name, peer_ip):
#Change this to a config value #Change this to a config value
user_man_url = self._CONFIG['USER_MANAGER']['URL'] user_man_url = self._CONFIG['USER_MANAGER']['URL']
shared_secret = self._CONFIG['USER_MANAGER']['SHARED_SECRET'] shared_secret = self._CONFIG['USER_MANAGER']['SHARED_SECRET']
#print(int(str(int_id(_id))[:7])) #print(int(str(int_id(_id))[:7]))
auth_check = { auth_check = {
'secret':shared_secret,
'login_id':int(str(int_id(_id))[:7]), 'login_id':int(str(int_id(_id))[:7]),
'secret':shared_secret 'login_ip': peer_ip,
'login_server': server_name
} }
json_object = json.dumps(auth_check, indent = 4) json_object = json.dumps(auth_check, indent = 4)
try: try:
@ -271,6 +273,27 @@ class HBSYSTEM(DatagramProtocol):
except requests.ConnectionError: except requests.ConnectionError:
return {'allow':True} return {'allow':True}
def send_login_conf(self, _id, server_name, peer_ip, old_auth):
#Change this to a config value
user_man_url = self._CONFIG['USER_MANAGER']['URL']
shared_secret = self._CONFIG['USER_MANAGER']['SHARED_SECRET']
#print(int(str(int_id(_id))[:7]))
auth_conf = {
'secret':shared_secret,
'login_id':int(str(int_id(_id))[:7]),
'login_ip': peer_ip,
'login_server': server_name,
'login_confirmed': True,
'old_auth': old_auth
}
json_object = json.dumps(auth_conf, indent = 4)
#try:
req = requests.post(user_man_url, data=json_object, headers={'Content-Type': 'application/json'})
# resp = json.loads(req.text)
#return resp
#except requests.ConnectionError:
# return {'allow':True}
def calc_passphrase(self, peer_id, _salt_str): def calc_passphrase(self, peer_id, _salt_str):
burn_id = ast.literal_eval(os.popen('cat ' + self._CONFIG['USER_MANAGER']['BURN_FILE']).read()) burn_id = ast.literal_eval(os.popen('cat ' + self._CONFIG['USER_MANAGER']['BURN_FILE']).read())
peer_id_trimmed = int(str(int_id(peer_id))[:7]) peer_id_trimmed = int(str(int_id(peer_id))[:7])
@ -416,9 +439,6 @@ class HBSYSTEM(DatagramProtocol):
# Keep This Line Commented Unless HEAVILY Debugging! # Keep This Line Commented Unless HEAVILY Debugging!
# logger.debug('(%s) RX packet from %s -- %s', self._system, _sockaddr, ahex(_data)) # logger.debug('(%s) RX packet from %s -- %s', self._system, _sockaddr, ahex(_data))
# Place holder for DB function
user_db = ast.literal_eval(os.popen('cat ./db.txt').read())
# Extract the command, which is various length, all but one 4 significant characters -- RPTCL # Extract the command, which is various length, all but one 4 significant characters -- RPTCL
_command = _data[:4] _command = _data[:4]
@ -497,7 +517,7 @@ class HBSYSTEM(DatagramProtocol):
# Check for valid Radio ID # Check for valid Radio ID
#print(self.check_user_man(_peer_id)) #print(self.check_user_man(_peer_id))
if self._config['USE_USER_MAN'] == True: if self._config['USE_USER_MAN'] == True:
self.ums_response = self.check_user_man(_peer_id) self.ums_response = self.check_user_man(_peer_id, self._CONFIG['USER_MANAGER']['THIS_SERVER_NAME'], _sockaddr[0])
## print(self.ums_response) ## print(self.ums_response)
if acl_check(_peer_id, self._CONFIG['GLOBAL']['REG_ACL']) and self.ums_response['allow']: if acl_check(_peer_id, self._CONFIG['GLOBAL']['REG_ACL']) and self.ums_response['allow']:
user_auth = self.ums_response['allow'] user_auth = self.ums_response['allow']
@ -540,6 +560,7 @@ class HBSYSTEM(DatagramProtocol):
self.send_peer(_peer_id, b''.join([RPTACK, _salt_str])) self.send_peer(_peer_id, b''.join([RPTACK, _salt_str]))
self._peers[_peer_id]['CONNECTION'] = 'CHALLENGE_SENT' self._peers[_peer_id]['CONNECTION'] = 'CHALLENGE_SENT'
logger.info('(%s) Sent Challenge Response to %s for login: %s', self._system, int_id(_peer_id), self._peers[_peer_id]['SALT']) logger.info('(%s) Sent Challenge Response to %s for login: %s', self._system, int_id(_peer_id), self._peers[_peer_id]['SALT'])
## print(self._peers)
else: else:
self.transport.write(b''.join([MSTNAK, _peer_id]), _sockaddr) self.transport.write(b''.join([MSTNAK, _peer_id]), _sockaddr)
logger.warning('(%s) Invalid Login from %s Radio ID: %s Denied by Registation ACL', self._system, _sockaddr[0], int_id(_peer_id)) logger.warning('(%s) Invalid Login from %s Radio ID: %s Denied by Registation ACL', self._system, _sockaddr[0], int_id(_peer_id))
@ -572,6 +593,11 @@ class HBSYSTEM(DatagramProtocol):
_this_peer['CONNECTION'] = 'WAITING_CONFIG' _this_peer['CONNECTION'] = 'WAITING_CONFIG'
self.send_peer(_peer_id, b''.join([RPTACK, _peer_id])) 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']) 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)
else: else:
logger.info('(%s) Peer %s has FAILED the login exchange successfully', self._system, _this_peer['RADIO_ID']) 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) self.transport.write(b''.join([MSTNAK, _peer_id]), _sockaddr)

View File

@ -59,7 +59,7 @@ def get_ids(callsign):
except: except:
city = result['results'][0]['country'] city = result['results'][0]['country']
for i in result['results']: for i in result['results']:
id_list[i['id']] = '' id_list[i['id']] = 0
return str([id_list, f_name, l_name, city]) return str([id_list, f_name, l_name, city])
except: except:
return str([{}, '', '', '']) return str([{}, '', '', ''])
@ -146,6 +146,7 @@ def create_app():
last_name = db.Column(db.String(100, collation='NOCASE'), nullable=False, server_default='') last_name = db.Column(db.String(100, collation='NOCASE'), nullable=False, server_default='')
dmr_ids = db.Column(db.String(100, collation='NOCASE'), nullable=False, server_default='') dmr_ids = db.Column(db.String(100, collation='NOCASE'), nullable=False, server_default='')
city = db.Column(db.String(100, collation='NOCASE'), nullable=False, server_default='') city = db.Column(db.String(100, collation='NOCASE'), nullable=False, server_default='')
notes = db.Column(db.String(100, collation='NOCASE'), nullable=False, server_default='')
#Used for initial approval #Used for initial approval
initial_admin_approved = db.Column('initial_admin_approved', db.Boolean(), nullable=False, server_default='1') initial_admin_approved = db.Column('initial_admin_approved', db.Boolean(), nullable=False, server_default='1')
# Define the relationship to Role via UserRoles # Define the relationship to Role via UserRoles
@ -167,6 +168,17 @@ def create_app():
__tablename__ = 'burn_list' __tablename__ = 'burn_list'
dmr_id = db.Column(db.Integer(), unique=True, primary_key=True) dmr_id = db.Column(db.Integer(), unique=True, primary_key=True)
version = db.Column(db.Integer(), primary_key=True) version = db.Column(db.Integer(), primary_key=True)
class AuthLog(db.Model):
__tablename__ = 'auth_log'
login_dmr_id = db.Column(db.Integer(), primary_key=True)
login_time = db.Column(db.DateTime(), primary_key=True)
peer_ip = db.Column(db.String(100, collation='NOCASE'), nullable=False, server_default='')
server_name = db.Column(db.Integer(), primary_key=True)
login_auth_method = db.Column(db.String(100, collation='NOCASE'), nullable=False, server_default='')
portal_username = db.Column(db.String(100, collation='NOCASE'), nullable=False, server_default='')
login_type = db.Column(db.String(100, collation='NOCASE'), nullable=False, server_default='')
# Customize Flask-User # Customize Flask-User
class CustomUserManager(UserManager): class CustomUserManager(UserManager):
@ -236,7 +248,8 @@ def create_app():
email='admin@no.reply', email='admin@no.reply',
email_confirmed_at=datetime.datetime.utcnow(), email_confirmed_at=datetime.datetime.utcnow(),
password=user_manager.hash_password('admin'), password=user_manager.hash_password('admin'),
initial_admin_approved = True initial_admin_approved = True,
notes='Default admin account created during installation.'
) )
user.roles.append(Role(name='Admin')) user.roles.append(Role(name='Admin'))
user.roles.append(Role(name='User')) user.roles.append(Role(name='User'))
@ -481,37 +494,37 @@ def create_app():
@app.route('/mmdvm_log', methods=['POST', 'GET']) ## @app.route('/mmdvm_log', methods=['POST', 'GET'])
@login_required # User must be authenticated ## @login_required # User must be authenticated
@roles_required('Admin') ## @roles_required('Admin')
def mmdvm_auth_list(): ## def mmdvm_auth_list():
display_number = 200 ## display_number = 200
content = ''' ## content = '''
<p style="text-align: center;"><strong>Last ''' + str(display_number) + ''' logins or attempts.</strong></p> ##<p style="text-align: center;"><strong>Last ''' + str(display_number) + ''' logins or attempts.</strong></p>
<table style="width: 500px; margin-left: auto; margin-right: auto;" border="1"> ##<table style="width: 500px; margin-left: auto; margin-right: auto;" border="1">
<tbody> ##<tbody>
<tr> ##<tr>
<td style="text-align: center;"><strong>User</strong></td> ##<td style="text-align: center;"><strong>User</strong></td>
<td style="text-align: center;"><strong>DMR ID</strong></td> ##<td style="text-align: center;"><strong>DMR ID</strong></td>
<td style="text-align: center;"><strong>Authentication</strong></td> ##<td style="text-align: center;"><strong>Authentication</strong></td>
<td style="text-align: center;"><strong>Time</strong></td> ##<td style="text-align: center;"><strong>Time</strong></td>
</tr> \n''' ##</tr> \n'''
mmdvm_logins.reverse() ## mmdvm_logins.reverse()
for i in mmdvm_logins: ## for i in mmdvm_logins:
print(i) ## print(i)
if display_number == 0: ## if display_number == 0:
break ## break
else: ## else:
content = content + '''<tr> ## content = content + '''<tr>
<td style="text-align: center;">''' + str(i[1]) + '''</td> ##<td style="text-align: center;">''' + str(i[1]) + '''</td>
<td style="text-align: center;">''' + str(i[0]) + '''</td> ##<td style="text-align: center;">''' + str(i[0]) + '''</td>
<td style="text-align: center;">Value: ''' + str(i[2]) + '''\n<br />DB: ''' + str(i[3]) + '''</td> ##<td style="text-align: center;">Value: ''' + str(i[2]) + '''\n<br />DB: ''' + str(i[3]) + '''</td>
<td style="text-align: center;">''' + datetime.datetime.fromtimestamp(i[4]).strftime(time_format) + '''</td> ##<td style="text-align: center;">''' + datetime.datetime.fromtimestamp(i[4]).strftime(time_format) + '''</td>
</tr> ''' + '\n' ##</tr> ''' + '\n'
display_number = display_number - 1 ## display_number = display_number - 1
mmdvm_logins.reverse() ## mmdvm_logins.reverse()
content = content + '</tbody></table>' ## content = content + '</tbody></table>'
return render_template('flask_user_layout.html', markup_content = Markup(content)) ## return render_template('flask_user_layout.html', markup_content = Markup(content))
@ -640,6 +653,9 @@ def create_app():
if request.form.get('email') != edit_user.email: if request.form.get('email') != edit_user.email:
edit_user.email = request.form.get('email') edit_user.email = request.form.get('email')
content = content + '''<p style="text-align: center;">Changed email for user: <strong>''' + str(user) + ''' to ''' + request.form.get('email') + '''</strong></p>\n''' content = content + '''<p style="text-align: center;">Changed email for user: <strong>''' + str(user) + ''' to ''' + request.form.get('email') + '''</strong></p>\n'''
if request.form.get('notes') != edit_user.notes:
edit_user.notes = request.form.get('notes')
content = content + '''<p style="text-align: center;">Changed notes for user: <strong>''' + str(user) + '''</strong>.</p>\n'''
if request.form.get('password') != '': if request.form.get('password') != '':
edit_user.password = user_manager.hash_password(request.form.get('password')) edit_user.password = user_manager.hash_password(request.form.get('password'))
content = content + '''<p style="text-align: center;">Changed password for user: <strong>''' + str(user) + '''</strong></p>\n''' content = content + '''<p style="text-align: center;">Changed password for user: <strong>''' + str(user) + '''</strong></p>\n'''
@ -757,6 +773,8 @@ def create_app():
<p style="text-align: center;"><strong><a href="email_user?callsign=''' + u.username + '''">Send user an email</a></strong></p> <p style="text-align: center;"><strong><a href="email_user?callsign=''' + u.username + '''">Send user an email</a></strong></p>
<p style="text-align: center;"><strong><a href="auth_log?portal_username=''' + u.username + '''">View auth log for: ''' + u.username + '''</a></strong></p>
<td><form action="edit_user?callsign=''' + callsign + '''" method="POST"> <td><form action="edit_user?callsign=''' + callsign + '''" method="POST">
<table style="margin-left: auto; margin-right: auto;"> <table style="margin-left: auto; margin-right: auto;">
<tbody> <tbody>
@ -799,6 +817,12 @@ def create_app():
<input type="text" id="dmr_ids" name="dmr_ids" value="''' + str(u.dmr_ids) + '''"><br> <input type="text" id="dmr_ids" name="dmr_ids" value="''' + str(u.dmr_ids) + '''"><br>
</td></tr> </td></tr>
<tr style="height: 51.1667px;">
<td style="height: 51.1667px; text-align: center;">
<label for="message">Notes<br /></label></strong><br /><textarea cols="40" name="notes" rows="5" >''' + str(u.notes) + '''</textarea><br /><br />
</td></tr>
<tr style="height: 27px;"> <tr style="height: 27px;">
<td style="text-align: center; height: 27px;"><input type="submit" value="Submit" /></td> <td style="text-align: center; height: 27px;"><input type="submit" value="Submit" /></td>
</tr> </tr>
@ -902,6 +926,111 @@ def create_app():
except: except:
return [False] return [False]
@app.route('/auth_log', methods=['POST', 'GET'])
@login_required # User must be authenticated
@roles_required('Admin')
def all_auth_list():
if request.args.get('flush_db') == 'true':
content = '''<p style="text-align: center;"><strong>Flushed entire auth DB.</strong></strong></p>\n'''
authlog_flush()
elif request.args.get('portal_username'):
a = AuthLog.query.filter_by(portal_username=request.args.get('portal_username')).all()
content = '''
<p>&nbsp;</p>
<table style="width: 800px; margin-left: auto; margin-right: auto;" border="1">
<tbody>
<tr>
<td style="text-align: center;">
<h4>DMR ID</h4>
</td>
<td style="text-align: center;">
<h4>Portal Username</h4>
</td>
<td style="text-align: center;">
<h4>Login IP</h4>
</td>
<td style="text-align: center;">
<h4>Calculated Passphrase</h4>
</td>
<td style="text-align: center;">
<h4>Server</h4>
</td>
<td style="text-align: center;">
<h4>Time (UTC)</h4>
</td>
<td style="text-align: center;">
<h4>Login Type</h4>
</td>
</tr> \n'''
for i in a:
content = content + '''
<tr>
<td style="text-align: center;"><strong>''' + str(i.login_dmr_id) + '''</strong></td>
<td style="text-align: center;">''' + i.portal_username + '''</td>
<td style="text-align: center;"><strong>''' + i.peer_ip + '''</strong></td>
<td style="text-align: center;">''' + i.login_auth_method + '''</td>
<td style="text-align: center;">''' + i.server_name + '''</td>
<td style="text-align: center;">''' + str(i.login_time) + '''</td>
<td style="text-align: center;"><strong>''' + str(i.login_type) + '''</strong></td>
</tr>
'''
content = content + '</tbody></table>'
else:
a = AuthLog.query.all()
content = '''
<p>&nbsp;</p>
<p style="text-align: center;"><strong><a href="auth_log?flush_db=true">Flush entire auth log</a></strong></p>
<p>&nbsp;</p>
<table style="width: 800px; margin-left: auto; margin-right: auto;" border="1">
<tbody>
<tr>
<td style="text-align: center;">
<h4>DMR ID</h4>
</td>
<td style="text-align: center;">
<h4>Portal Username</h4>
</td>
<td style="text-align: center;">
<h4>Login IP</h4>
</td>
<td style="text-align: center;">
<h4>Calculated Passphrase</h4>
</td>
<td style="text-align: center;">
<h4>Server</h4>
</td>
<td style="text-align: center;">
<h4>Time (UTC)</h4>
</td>
<td style="text-align: center;">
<h4>Login Type</h4>
</td>
</tr> \n'''
for i in a:
content = content + '''
<tr>
<td style="text-align: center;"><strong>''' + str(i.login_dmr_id) + '''</strong></td>
<td style="text-align: center;"><a href="auth_log?portal_username=''' + i.portal_username + '''">''' + i.portal_username + '''</a></td>
<td style="text-align: center;"><strong>''' + i.peer_ip + '''</strong></td>
<td style="text-align: center;">''' + i.login_auth_method + '''</td>
<td style="text-align: center;">''' + i.server_name + '''</td>
<td style="text-align: center;">''' + str(i.login_time) + '''</td>
<td style="text-align: center;"><strong>''' + str(i.login_type) + '''</strong></td>
</tr>
'''
content = content + '</tbody></table>'
return render_template('flask_user_layout.html', markup_content = Markup(content))
@app.route('/test') @app.route('/test')
def test_peer(): def test_peer():
#user = User( #user = User(
@ -995,18 +1124,20 @@ def create_app():
## db.session.commit() ## db.session.commit()
## ##
#generate dict #generate dict
b = BurnList.query.all() ## b = BurnList.query.all()
print(b) ## print(b)
burn_dict = {} ## burn_dict = {}
for i in b: ## for i in b:
print(i.dmr_id) ## print(i.dmr_id)
burn_dict[i.dmr_id] = i.version ## burn_dict[i.dmr_id] = i.version
content = burn_dict ## content = burn_dict
# delete ## # delete
## delete_b = BurnList.query.filter_by(dmr_id=3153591).first() #### delete_b = BurnList.query.filter_by(dmr_id=3153591).first()
## db.session.delete(delete_b) #### db.session.delete(delete_b)
## db.session.commit() #### db.session.commit()
## a = AuthLog.query.all()
## print(a)
## authlog_flush()
return render_template('flask_user_layout.html', markup_content = Markup(content)) return render_template('flask_user_layout.html', markup_content = Markup(content))
def get_burnlist(): def get_burnlist():
@ -1034,6 +1165,23 @@ def create_app():
delete_b = BurnList.query.filter_by(dmr_id=_dmr_id).first() delete_b = BurnList.query.filter_by(dmr_id=_dmr_id).first()
db.session.delete(delete_b) db.session.delete(delete_b)
db.session.commit() db.session.commit()
def authlog_add(_dmr_id, _peer_ip, _server_name, _portal_username, _auth_method, _login_type):
auth_log_add = AuthLog(
login_dmr_id=_dmr_id,
login_time=datetime.datetime.utcnow(),
portal_username = _portal_username,
peer_ip = _peer_ip,
server_name = _server_name,
login_auth_method=_auth_method,
login_type=_login_type
)
db.session.add(auth_log_add)
db.session.commit()
def authlog_flush():
AuthLog.query.delete()
db.session.commit()
@app.route('/add_user', methods=['POST', 'GET']) @app.route('/add_user', methods=['POST', 'GET'])
@ -1107,26 +1255,28 @@ def create_app():
@app.route('/auth', methods=['POST']) @app.route('/auth', methods=['POST'])
def auth(): def auth():
hblink_req = request.json hblink_req = request.json
## print((hblink_req)) print((hblink_req))
if hblink_req['secret'] in shared_secrets: if hblink_req['secret'] in shared_secrets:
if 'login_id' in hblink_req: if 'login_id' in hblink_req and 'login_confirmed' not in hblink_req:
if type(hblink_req['login_id']) == int: if type(hblink_req['login_id']) == int:
if authorized_peer(hblink_req['login_id'])[0]: if authorized_peer(hblink_req['login_id'])[0]:
if isinstance(authorized_peer(hblink_req['login_id'])[1], int) == True: if isinstance(authorized_peer(hblink_req['login_id'])[1], int) == True:
mmdvm_logins.append([hblink_req['login_id'], authorized_peer(hblink_req['login_id'])[2], authorized_peer(hblink_req['login_id'])[1], 'Calculated', time.time()]) #mmdvm_logins.append([hblink_req['login_id'], authorized_peer(hblink_req['login_id'])[2], authorized_peer(hblink_req['login_id'])[1], hblink_req['login_ip'], time.time()])
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')
response = jsonify( response = jsonify(
allow=True, allow=True,
mode='normal', mode='normal',
) )
elif authorized_peer(hblink_req['login_id'])[1] == '': elif authorized_peer(hblink_req['login_id'])[1] == '':
# normal #mmdvm_logins.append([hblink_req['login_id'], authorized_peer(hblink_req['login_id'])[2], authorized_peer(hblink_req['login_id'])[1], hblink_req['login_ip'], time.time()])
mmdvm_logins.append([hblink_req['login_id'], authorized_peer(hblink_req['login_id'])[2], authorized_peer(hblink_req['login_id'])[1], 'Legacy', time.time()]) authlog_add(hblink_req['login_id'], hblink_req['login_ip'], hblink_req['login_server'], authorized_peer(hblink_req['login_id'])[2], 'Config: ' + legacy_passphrase, 'Attempt')
response = jsonify( response = jsonify(
allow=True, allow=True,
mode='legacy', mode='legacy',
) )
elif authorized_peer(hblink_req['login_id'])[1] != '' or isinstance(authorized_peer(hblink_req['login_id'])[1], int) == False: elif authorized_peer(hblink_req['login_id'])[1] != '' or isinstance(authorized_peer(hblink_req['login_id'])[1], int) == False:
mmdvm_logins.append([hblink_req['login_id'], authorized_peer(hblink_req['login_id'])[2], authorized_peer(hblink_req['login_id'])[1], 'Custom', time.time()]) #mmdvm_logins.append([hblink_req['login_id'], authorized_peer(hblink_req['login_id'])[2], authorized_peer(hblink_req['login_id'])[1], hblink_req['login_ip'], time.time()])
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')
print(authorized_peer(hblink_req['login_id'])) print(authorized_peer(hblink_req['login_id']))
response = jsonify( response = jsonify(
allow=True, allow=True,
@ -1158,6 +1308,14 @@ def create_app():
msg = jsonify(auth=False, msg = jsonify(auth=False,
reason='Incorrect password') reason='Incorrect password')
response = make_response(msg, 401) response = make_response(msg, 401)
elif 'login_id' in hblink_req and 'login_confirmed' in hblink_req:
if hblink_req['old_auth'] == True:
authlog_add(hblink_req['login_id'], hblink_req['login_ip'], hblink_req['login_server'], authorized_peer(hblink_req['login_id'])[2], 'CONFIG PASSPHRASE', 'Confirmed')
else:
authlog_add(hblink_req['login_id'], hblink_req['login_ip'], hblink_req['login_server'], authorized_peer(hblink_req['login_id'])[2], 'USER MANAGER', 'Confirmed')
response = jsonify(
logged=True
)
elif hblink_req['burn_list']: # == 'burn_list': elif hblink_req['burn_list']: # == 'burn_list':
response = jsonify( response = jsonify(
burn_list=get_burnlist() burn_list=get_burnlist()

View File

@ -48,7 +48,7 @@
<td style="text-align: center;"><a href={{url}}/add_user><strong>Add a User</strong></a></td> <td style="text-align: center;"><a href={{url}}/add_user><strong>Add a User</strong></a></td>
<td style="text-align: center;"><a href={{url}}/list_users><strong>Edit Users</strong></a></td> <td style="text-align: center;"><a href={{url}}/list_users><strong>Edit Users</strong></a></td>
<td style="text-align: center;"><a href={{url}}/approve_users><strong>Waiting Approval</strong></a></td> <td style="text-align: center;"><a href={{url}}/approve_users><strong>Waiting Approval</strong></a></td>
<td style="text-align: center;"><a href={{url}}/mmdvm_log><strong>Auth Log</strong></a></td> <td style="text-align: center;"><a href={{url}}/auth_log><strong>Auth Log</strong></a></td>
{% endif %} {% endif %}
<td style="text-align: center;"><a href={{url}}/help>Help</a></td> <td style="text-align: center;"><a href={{url}}/help>Help</a></td>