add update from radioid.net

This commit is contained in:
KF7EEL 2021-05-18 10:10:40 -07:00
parent d1a7faf29c
commit cb81326da2
3 changed files with 111 additions and 11 deletions

View File

@ -41,13 +41,21 @@ def get_ids(callsign):
url = "https://www.radioid.net"
response = requests.get(url+"/api/dmr/user/?callsign=" + callsign)
result = response.json()
print(result)
# id_list = []
id_list = {}
f_name = result['results'][0]['fname']
l_name = result['results'][0]['surname']
try:
city = str(result['results'][0]['city'] + ', ' + result['results'][0]['state'] + ', ' + result['results'][0]['country'])
except:
city = result['results'][0]['country']
for i in result['results']:
id_list[i['id']] = ''
return str(id_list)
return str([id_list, f_name, l_name, city])
except:
return ''
# Return string in NATO phonetics
def convert_nato(string):
@ -77,10 +85,11 @@ def convert_nato(string):
# Class-based application configuration
class ConfigClass(object):
from config import MAIL_SERVER, MAIL_PORT, MAIL_USE_SSL, MAIL_USE_TLS, MAIL_USERNAME, MAIL_PASSWORD, MAIL_DEFAULT_SENDER, USER_ENABLE_EMAIL, USER_ENABLE_USERNAME, USER_REQUIRE_RETYPE_PASSWORD, USER_ENABLE_CHANGE_USERNAME, USER_ENABLE_MULTIPLE_EMAILS, USER_ENABLE_CONFIRM_EMAIL, USER_ENABLE_REGISTER, USER_AUTO_LOGIN_AFTER_CONFIRM, USER_SHOW_USERNAME_DOES_NOT_EXIST
""" Flask application config """
# Flask settings
SECRET_KEY = 'HFJGKSDGHFJKDFSGHJGFHJ'
SECRET_KEY = secret_key
# Flask-SQLAlchemy settings
SQLALCHEMY_DATABASE_URI = db_location # File-based SQL database
@ -89,6 +98,8 @@ class ConfigClass(object):
# Flask-User settings
USER_APP_NAME = title # Shown in and email templates and page footers
USER_EMAIL_SENDER_EMAIL = MAIL_DEFAULT_SENDER
USER_EDIT_USER_PROFILE_TEMPLATE = 'flask_user/edit_user_profile.html'
@ -125,6 +136,7 @@ def create_app():
first_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='')
city = db.Column(db.String(100, collation='NOCASE'), nullable=False, server_default='')
# Define the relationship to Role via UserRoles
roles = db.relationship('Role', secondary='user_roles')
@ -165,14 +177,28 @@ def create_app():
@user_registered.connect_via(app)
def _after_user_registered_hook(sender, user, **extra):
edit_user = User.query.filter(User.username == user.username).first()
edit_user.dmr_ids = get_ids(user.username)
edit_user.dmr_ids = str(ast.literal_eval(get_ids(user.username))[0])
edit_user.first_name = str(ast.literal_eval(get_ids(user.username))[1])
edit_user.last_name = str(ast.literal_eval(get_ids(user.username))[2])
edit_user.city = str(ast.literal_eval(get_ids(user.username))[3])
user_role = UserRoles(
user_id=edit_user.id,
role_id=2,
)
db.session.add(user_role)
edit_user.active = default_account_state
db.session.commit()
def update_from_radioid(callsign):
edit_user = User.query.filter(User.username == callsign).first()
edit_user.dmr_ids = str(ast.literal_eval(get_ids(callsign))[0])
edit_user.first_name = str(ast.literal_eval(get_ids(callsign))[1])
edit_user.last_name = str(ast.literal_eval(get_ids(callsign))[2])
edit_user.city = str(ast.literal_eval(get_ids(callsign))[3])
db.session.commit()
# The Home page is accessible to anyone
@app.route('/')
def home_page():
@ -308,12 +334,31 @@ def create_app():
#return str(content)
return render_template('view_passphrase.html', markup_content = Markup(content))
# The Members page is only accessible to authenticated users via the @login_required decorator
@app.route('/members')
## # The Members page is only accessible to authenticated users via the @login_required decorator
## @app.route('/members')
## @login_required # User must be authenticated
## def member_page():
## content = 'Mem only'
## return render_template('flask_user_layout.html', markup_content = content)
@app.route('/update_ids', methods=['POST', 'GET'])
@login_required # User must be authenticated
def member_page():
content = 'Mem only'
return render_template('flask_user_layout.html', markup_content = content)
def update_info():
#print(request.args.get('callsign'))
#print(current_user.username)
if request.args.get('callsign') == current_user.username or request.args.get('callsign') and request.args.get('callsign') != current_user.username and current_user.has_roles('Admin'):
content = '<h3 style="text-align: center;"><strong>Updated your information.</strong></h3>'
update_from_radioid(request.args.get('callsign'))
else:
content = '''
<p>Use this page to sync changes from <a href="https://www.radioid.net/">RadioID.net</a> with this system (such as a new DMR ID, name change, etc.).</p>
<p>Updating your information from <a href="https://www.radioid.net/">RadioID.net</a> will <strong>overwrite any custom authentication passphrases</strong>, your city, and name in the database. Are you sure you want to continue?</p>
<p>&nbsp;</p>
<h2 style="text-align: center;"><a href="update_ids?callsign=''' + current_user.username + '''">Yes, update my information.</a></h2>
'''
return render_template('flask_user_layout.html', markup_content = Markup(content))
@ -348,6 +393,7 @@ def create_app():
@roles_required('Admin') # Use of @roles_required decorator
def admin_page():
#print(request.args.get('callsign'))
#print(request.args.get('callsign'))
## if request.method == 'POST' and request.form.get('callsign'):
## #result = request.json
## callsign = request.form.get('callsign')
@ -355,7 +401,7 @@ def create_app():
## content = u.dmr_ids
if request.method == 'POST' and request.args.get('callsign') == None:
content = 'Not found'
if request.method == 'POST' and request.args.get('callsign') and request.form.get('user_status'):
elif request.method == 'POST' and request.args.get('callsign') and request.form.get('user_status'):
user = request.args.get('callsign')
#print(user)
edit_user = User.query.filter(User.username == user).first()
@ -408,7 +454,7 @@ def create_app():
db.session.commit()
content = '''<p style="text-align: center;">Email verified for: <strong>''' + str(request.args.get('callsign')) + '''</strong></p>\n'''
elif request.method == 'POST' and request.form.get('callsign') and not request.form.get('user_status') or request.method == 'GET' and request.args.get('callsign'): # and request.form.get('user_status') :
elif request.method == 'POST' and request.form.get('callsign') and not request.form.get('user_status') or request.method == 'GET' and request.args.get('callsign'):# and request.form.get('user_status') :
if request.args.get('callsign'):
callsign = request.args.get('callsign')
if request.form.get('callsign'):
@ -427,6 +473,28 @@ def create_app():
content = '''
<p>&nbsp;</p>
<table style="width: 500px; margin-left: auto; margin-right: auto;" border="1">
<tbody>
<tr>
<td style="text-align: center;"><strong>First Name</strong></td>
<td style="text-align: center;"><strong>Last Name</strong></td>
</tr>
<tr>
<td>''' + u.first_name + '''</td>
<td>''' + u.last_name + '''</td>
</tr>
<tr>
<td style="text-align: center;"><strong>City</strong></td>
<td>''' + u.city + '''</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p style="text-align: center;"><strong><a href="update_ids?callsign=''' + u.username + '''">Update user information from RadioID.net</a></strong></p>
<td><form action="edit_user?callsign=''' + callsign + '''" method="POST">
<table style="margin-left: auto; margin-right: auto;">
<tbody>

View File

@ -34,6 +34,8 @@ MAIL_PASSWORD = 'password'
MAIL_DEFAULT_SENDER = '"' + title + '" <app@gmail.com>'
# UMS settings
secret_key = 'SUPER SECRET LONG KEY'
USER_ENABLE_EMAIL = True
USER_ENABLE_USERNAME = True # Enable username authentication
USER_REQUIRE_RETYPE_PASSWORD = True # Simplify register form

View File

@ -0,0 +1,30 @@
{% extends 'flask_user/_authorized_base.html' %}
{% block content %}
{% from "flask_user/_macros.html" import render_field, render_checkbox_field, render_submit_field %}
<h1>{%trans%}User profile{%endtrans%}</h1>
<form action="" method="POST" class="form" role="form">
{{ form.hidden_tag() }}
{% for field in form %}
{% if not field.flags.hidden %}
{% if field.type=='SubmitField' %}
{{ render_submit_field(field, tabindex=loop.index*10) }}
{% else %}
{{ render_field(field, tabindex=loop.index*10) }}
{% endif %}
{% endif %}
{% endfor %}
</form>
<br/>
<p><a href="../update_ids">Update your information from RadioID.net</a></p>
{% if not user_manager.USER_ENABLE_AUTH0 %}
{% if user_manager.USER_ENABLE_CHANGE_USERNAME %}
<p><a href="{{ url_for('user.change_username') }}">{%trans%}Change username{%endtrans%}</a></p>
{% endif %}
{% if user_manager.USER_ENABLE_CHANGE_PASSWORD %}
<p><a href="{{ url_for('user.change_password') }}">{%trans%}Change password{%endtrans%}</a></p>
{% endif %}
{% endif %}
{% endblock %}