Skip to content

Commit 87204c6

Browse files
committed
Superset and PgWeb integration
1 parent ddddd27 commit 87204c6

File tree

5 files changed

+177
-36
lines changed

5 files changed

+177
-36
lines changed

src/athlete_auth.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,15 @@ def ath_auth_register(ath_un,ath_pw,encr_pass):
5252

5353
# close the communication with the PostgreSQL
5454
cur.close()
55+
56+
# Add the user to superset fab
57+
superset_params = config(filename="encrypted_settings.ini", section="superset", encr_pass=encr_pass)
58+
superset_used = str(superset_params.get("superset"))
59+
if superset_used == 'true':
60+
head, sep, tail = ath_un.partition('@')
61+
usr_name = head
62+
os.system("superset fab create-user --role ath_role1 --username {} --firstname {} --lastname {} --email {} --password {}".format(ath_un,usr_name,usr_name,ath_un,ath_pw))
63+
5564
except (Exception, psycopg2.IntegrityError) as error:
5665
print((str(datetime.datetime.now()) + ' [' + sys._getframe().f_code.co_name + ']' + ' Error on line {}'.format(sys.exc_info()[-1].tb_lineno) + ' ' + str(error)))
5766
return None
@@ -113,6 +122,12 @@ def ath_auth_reset(ath_un,ath_pw,encr_pass):
113122
cur = conn_localhost.cursor()
114123
cur.execute(sql_update_usr_pwd,query_params)
115124

125+
# Reset superset user password
126+
superset_params = config(filename="encrypted_settings.ini", section="superset", encr_pass=encr_pass)
127+
superset_used = str(superset_params.get("superset"))
128+
if superset_used == 'true':
129+
os.system("superset fab reset-password --username {} --password {}".format(ath_un,ath_pw))
130+
116131
except Exception as error:
117132
print((str(datetime.datetime.now()) + ' [' + sys._getframe().f_code.co_name + ']' + ' Error on line {}'.format(sys.exc_info()[-1].tb_lineno) + ' ' + str(error)))
118133
return None

src/athletedataapp_apache.py

Lines changed: 59 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,23 @@ def encrypt(plaintext, password):
105105
else:
106106
diasend_enabled = True
107107

108+
superset_params = config(filename="encrypted_settings.ini", section="superset", encr_pass=encr_pass)
109+
superset_installed = str(superset_params.get("superset"))
110+
superset_url = str(superset_params.get("url"))
111+
if superset_installed == 'true':
112+
superset_enabled = True
113+
else:
114+
superset_enabled = False
115+
116+
pgweb_params = config(filename="encrypted_settings.ini", section="pgweb", encr_pass=encr_pass)
117+
pgweb_installed = str(pgweb_params.get("pgweb"))
118+
pgweb_smpl_url = str(pgweb_params.get("url_smpl"))
119+
pgweb_usr_url = str(pgweb_params.get("url_usr"))
120+
if pgweb_installed == 'true':
121+
pgweb_enabled = True
122+
else:
123+
pgweb_enabled = False
124+
108125
def get_dropbox_auth_flow(session):
109126
return dropbox.oauth.DropboxOAuth2Flow(
110127
APP_KEY, REDIRECT_URI, session, "athletedataapp_dropbox-auth-csrf-token", APP_SECRET,token_access_type="offline")
@@ -199,7 +216,7 @@ def index():
199216
connection = check_db_server_connectivity(ath_un,db_host,superuser_un,superuser_pw)
200217
if connection != 'SUCCESS':
201218
flash(' Could cot connect to the DB Host.The host returned an error: '+connection,'danger')
202-
return render_template("index.html",signin_valid=signin_valid,admin_email=admin_email,integrated_with_dropbox=integrated_with_dropbox,diasend_enabled=diasend_enabled,oura_enabled=oura_enabled,strava_enabled=strava_enabled)
219+
return render_template("index.html",superset_enabled=superset_enabled,superset_url=superset_url,pgweb_enabled=pgweb_enabled,pgweb_smpl_url=pgweb_smpl_url,pgweb_usr_url=pgweb_usr_url,signin_valid=signin_valid,admin_email=admin_email,integrated_with_dropbox=integrated_with_dropbox,diasend_enabled=diasend_enabled,oura_enabled=oura_enabled,strava_enabled=strava_enabled)
203220
else:
204221
#If user does not wish to download to his db, credentials to be retrieved from .ini.
205222
params = config(filename="encrypted_settings.ini", section="postgresql",encr_pass=encr_pass)
@@ -212,13 +229,13 @@ def index():
212229
host_record_exists = check_host_record_exists(ath_un,db_name,db_host,encr_pass)
213230
if host_record_exists == True:
214231
flash(' You can only download to one db host. Please correct the db_hostname and try again','warning')
215-
return render_template("index.html",signin_valid=signin_valid,admin_email=admin_email,integrated_with_dropbox=integrated_with_dropbox,diasend_enabled=diasend_enabled,oura_enabled=oura_enabled,strava_enabled=strava_enabled)
232+
return render_template("index.html",superset_enabled=superset_enabled,superset_url=superset_url,pgweb_enabled=pgweb_enabled,pgweb_smpl_url=pgweb_smpl_url,pgweb_usr_url=pgweb_usr_url,signin_valid=signin_valid,admin_email=admin_email,integrated_with_dropbox=integrated_with_dropbox,diasend_enabled=diasend_enabled,oura_enabled=oura_enabled,strava_enabled=strava_enabled)
216233

217234
#----Check if the provided GC credentials are valid-----
218235
#gc_cred_valid = gc.check_gc_creds(gc_username,gc_password)
219236
#if gc_cred_valid == False:
220237
#flash(' The Garmin Connect login credentials are not valid. Please try again','warning')
221-
#return render_template("index.html",signin_valid=signin_valid,admin_email=admin_email,integrated_with_dropbox=integrated_with_dropbox,diasend_enabled=diasend_enabled,oura_enabled=oura_enabled,strava_enabled=strava_enabled)
238+
#return render_template("index.html",superset_enabled=superset_enabled,superset_url=superset_url,pgweb_enabled=pgweb_enabled,pgweb_smpl_url=pgweb_smpl_url,pgweb_usr_url=pgweb_usr_url,signin_valid=signin_valid,admin_email=admin_email,integrated_with_dropbox=integrated_with_dropbox,diasend_enabled=diasend_enabled,oura_enabled=oura_enabled,strava_enabled=strava_enabled)
222239

223240
#----- Set Auto_Synch variables--------
224241

@@ -412,7 +429,7 @@ def index():
412429
time.sleep(1)
413430
with ProgressStdoutRedirection(ath_un):
414431
print(del_progress)
415-
return render_template("index.html",signin_valid=signin_valid,del_progress=del_progress,admin_email=admin_email,integrated_with_dropbox=integrated_with_dropbox,diasend_enabled=diasend_enabled,oura_enabled=oura_enabled,strava_enabled=strava_enabled)
432+
return render_template("index.html",superset_enabled=superset_enabled,superset_url=superset_url,pgweb_enabled=pgweb_enabled,pgweb_smpl_url=pgweb_smpl_url,pgweb_usr_url=pgweb_usr_url,signin_valid=signin_valid,del_progress=del_progress,admin_email=admin_email,integrated_with_dropbox=integrated_with_dropbox,diasend_enabled=diasend_enabled,oura_enabled=oura_enabled,strava_enabled=strava_enabled)
416433
except:
417434
del_progress = 'Error deleting data'
418435
progress_error = True
@@ -421,7 +438,7 @@ def index():
421438
time.sleep(1)
422439
with ErrorStdoutRedirection(ath_un):
423440
print((str(datetime.datetime.now()) + ' [' + sys._getframe().f_code.co_name + ']' + ' Error on line {}'.format(sys.exc_info()[-1].tb_lineno) + ' ' + del_progress))
424-
return render_template("index.html",signin_valid=signin_valid,del_progress=del_progress,admin_email=admin_email,integrated_with_dropbox=integrated_with_dropbox,diasend_enabled=diasend_enabled,oura_enabled=oura_enabled,strava_enabled=strava_enabled)
441+
return render_template("index.html",superset_enabled=superset_enabled,superset_url=superset_url,pgweb_enabled=pgweb_enabled,pgweb_smpl_url=pgweb_smpl_url,pgweb_usr_url=pgweb_usr_url,signin_valid=signin_valid,del_progress=del_progress,admin_email=admin_email,integrated_with_dropbox=integrated_with_dropbox,diasend_enabled=diasend_enabled,oura_enabled=oura_enabled,strava_enabled=strava_enabled)
425442

426443

427444
#----Check and set start_date and end_date variables and proceed with download----
@@ -447,7 +464,7 @@ def index():
447464
print((str(datetime.datetime.now()) + ' [' + sys._getframe().f_code.co_name + ']' + ' Error on line {}'.format(sys.exc_info()[-1].tb_lineno) + ' ' + str(e)))
448465
#PG:If start date not provided render index and flash warning
449466
flash(' Please provide a valid start date and try again!','danger')
450-
return render_template("index.html",signin_valid=signin_valid,admin_email=admin_email,integrated_with_dropbox=integrated_with_dropbox,diasend_enabled=diasend_enabled,oura_enabled=oura_enabled,strava_enabled=strava_enabled)
467+
return render_template("index.html",superset_enabled=superset_enabled,superset_url=superset_url,pgweb_enabled=pgweb_enabled,pgweb_smpl_url=pgweb_smpl_url,pgweb_usr_url=pgweb_usr_url,signin_valid=signin_valid,admin_email=admin_email,integrated_with_dropbox=integrated_with_dropbox,diasend_enabled=diasend_enabled,oura_enabled=oura_enabled,strava_enabled=strava_enabled)
451468

452469
# DATA DOWNLOAD --------------------------------------
453470

@@ -489,7 +506,7 @@ def index():
489506
with StdoutRedirection(ath_un):
490507
print(gc_login_progress)
491508
flash(' There was a problem logging in to Garmin Connect. The script will now continue, but will skip the Garmin data. Please try again later','warning')
492-
#return render_template("index.html",signin_valid=signin_valid,admin_email=admin_email,integrated_with_dropbox=integrated_with_dropbox,diasend_enabled=diasend_enabled,oura_enabled=oura_enabled,strava_enabled=strava_enabled)
509+
#return render_template("index.html",superset_enabled=superset_enabled,superset_url=superset_url,pgweb_enabled=pgweb_enabled,pgweb_smpl_url=pgweb_smpl_url,pgweb_usr_url=pgweb_usr_url,signin_valid=signin_valid,admin_email=admin_email,integrated_with_dropbox=integrated_with_dropbox,diasend_enabled=diasend_enabled,oura_enabled=oura_enabled,strava_enabled=strava_enabled)
493510

494511
#---------------------------------- GC Activities ---------------------------------------
495512

@@ -815,7 +832,7 @@ def index():
815832
with ProgressStdoutRedirection(ath_un):
816833
print(('--------------- ' + str(datetime.datetime.now()) + ' User ' + ath_un + ' Finished Data Download ' + error_log_entry +' -------------' ))
817834

818-
return render_template("index.html",signin_valid=signin_valid,del_progress = del_progress,mfp_progress = mfp_progress,diasend_progress = diasend_progress,
835+
return render_template("index.html",superset_enabled=superset_enabled,superset_url=superset_url,pgweb_enabled=pgweb_enabled,pgweb_smpl_url=pgweb_smpl_url,pgweb_usr_url=pgweb_usr_url,signin_valid=signin_valid,del_progress = del_progress,mfp_progress = mfp_progress,diasend_progress = diasend_progress,
819836
glimp_progress = glimp_progress, mm_progress = mm_progress, cstm_progress = cstm_progress, gc_login_progress = gc_login_progress,gc_fit_activ_progress = gc_fit_activ_progress,
820837
gc_tcx_activ_progress = gc_tcx_activ_progress,gc_fit_well_progress = gc_fit_well_progress, gc_json_well_progress = gc_json_well_progress,
821838
gc_json_dailysum_progress = gc_json_dailysum_progress, oura_well_progress = oura_well_progress, strava_activ_progress=strava_activ_progress,
@@ -833,7 +850,7 @@ def index():
833850

834851
else: # Request method is GET
835852
continue_btn = request.args.get('continue_btn')
836-
return render_template("index.html",signin_valid=signin_valid,continue_btn = continue_btn,admin_email=admin_email,integrated_with_dropbox=integrated_with_dropbox,diasend_enabled=diasend_enabled,oura_enabled=oura_enabled,strava_enabled=strava_enabled)
853+
return render_template("index.html",superset_enabled=superset_enabled,superset_url=superset_url,pgweb_enabled=pgweb_enabled,pgweb_smpl_url=pgweb_smpl_url,pgweb_usr_url=pgweb_usr_url,signin_valid=signin_valid,continue_btn = continue_btn,admin_email=admin_email,integrated_with_dropbox=integrated_with_dropbox,diasend_enabled=diasend_enabled,oura_enabled=oura_enabled,strava_enabled=strava_enabled)
837854

838855
@app.route("/ath_register", methods = ['GET', 'POST'])
839856
def ath_register():
@@ -845,10 +862,10 @@ def ath_register():
845862
session['signin_valid'] = signin_valid
846863
session['ath_pw'] = ath_pw
847864
flash(' Account created successfuly. You are now logged-in','success')
848-
return render_template("index.html",signin_valid=signin_valid,admin_email=admin_email,integrated_with_dropbox=integrated_with_dropbox,diasend_enabled=diasend_enabled,oura_enabled=oura_enabled,strava_enabled=strava_enabled)
865+
return render_template("index.html",superset_enabled=superset_enabled,superset_url=superset_url,pgweb_enabled=pgweb_enabled,pgweb_smpl_url=pgweb_smpl_url,pgweb_usr_url=pgweb_usr_url,signin_valid=signin_valid,admin_email=admin_email,integrated_with_dropbox=integrated_with_dropbox,diasend_enabled=diasend_enabled,oura_enabled=oura_enabled,strava_enabled=strava_enabled)
849866
else:
850867
flash(' An account with this email address already exists','danger')
851-
return render_template("index.html",signin_valid=signin_valid,admin_email=admin_email,integrated_with_dropbox=integrated_with_dropbox,diasend_enabled=diasend_enabled,oura_enabled=oura_enabled,strava_enabled=strava_enabled)
868+
return render_template("index.html",superset_enabled=superset_enabled,superset_url=superset_url,pgweb_enabled=pgweb_enabled,pgweb_smpl_url=pgweb_smpl_url,pgweb_usr_url=pgweb_usr_url,signin_valid=signin_valid,admin_email=admin_email,integrated_with_dropbox=integrated_with_dropbox,diasend_enabled=diasend_enabled,oura_enabled=oura_enabled,strava_enabled=strava_enabled)
852869

853870
@app.route("/ath_login", methods = ['GET', 'POST'])
854871
def ath_login():
@@ -860,17 +877,42 @@ def ath_login():
860877
session['signin_valid'] = signin_valid
861878
session['ath_pw'] = ath_pw
862879
flash(' Login successfull.','success')
863-
return render_template("index.html",signin_valid=signin_valid,admin_email=admin_email,integrated_with_dropbox=integrated_with_dropbox,diasend_enabled=diasend_enabled,oura_enabled=oura_enabled,strava_enabled=strava_enabled)
880+
return render_template("index.html",superset_enabled=superset_enabled,superset_url=superset_url,pgweb_enabled=pgweb_enabled,pgweb_smpl_url=pgweb_smpl_url,pgweb_usr_url=pgweb_usr_url,signin_valid=signin_valid,admin_email=admin_email,integrated_with_dropbox=integrated_with_dropbox,diasend_enabled=diasend_enabled,oura_enabled=oura_enabled,strava_enabled=strava_enabled)
864881
else:
865882
flash(' Login failed, please try again.','danger')
866-
return render_template("index.html",signin_valid=signin_valid,admin_email=admin_email,integrated_with_dropbox=integrated_with_dropbox,diasend_enabled=diasend_enabled,oura_enabled=oura_enabled,strava_enabled=strava_enabled)
883+
return render_template("index.html",superset_enabled=superset_enabled,superset_url=superset_url,pgweb_enabled=pgweb_enabled,pgweb_smpl_url=pgweb_smpl_url,pgweb_usr_url=pgweb_usr_url,signin_valid=signin_valid,admin_email=admin_email,integrated_with_dropbox=integrated_with_dropbox,diasend_enabled=diasend_enabled,oura_enabled=oura_enabled,strava_enabled=strava_enabled)
867884

868885
@app.route("/ath_logout", methods = ['GET', 'POST'])
869886
def ath_logout():
870887
if 'signin_valid' in session:
871888
session['signin_valid'] = None
872889
return redirect(url_for('index'))
873890

891+
@app.route("/ath_superset", methods = ['GET', 'POST'])
892+
def superset_login_request():
893+
superset_params = config(filename="encrypted_settings.ini", section="superset", encr_pass=encr_pass)
894+
superset_url = str(superset_params.get("url"))
895+
if request.args.get('user') == 'user':
896+
if 'signin_valid' not in session:#User not logged in
897+
flash(' You need to be logged in to access this link.','danger')
898+
else:
899+
ath_un = session['signin_valid']
900+
user_exists = check_user_exists(ath_un,encr_pass)
901+
if not user_exists:
902+
flash(' This email address does not exist in the superset database.','danger')
903+
return redirect(url_for('index'))
904+
else:
905+
usr_token = jwt.encode({'ath_un': ath_un,'exp': time.time() + 10},key=app.secret_key, algorithm="HS256")
906+
if type(usr_token) != str:
907+
usr_token = usr_token.decode('UTF-8')
908+
return redirect(superset_url+ 'login?username={}'.format(usr_token))
909+
else:#Sample User
910+
ath_un = 'sample_user'
911+
usr_token = jwt.encode({'ath_un': ath_un,'exp': time.time() + 10},key=app.secret_key, algorithm="HS256")
912+
if type(usr_token) != str:
913+
usr_token = usr_token.decode('UTF-8')
914+
return redirect(superset_url+ 'login?username={}'.format(usr_token))
915+
874916
@app.route("/ath_reset_password", methods = ['GET', 'POST'])
875917
def reset_request():
876918
ath_un = str(request.form.get('athUserReset'))
@@ -887,6 +929,9 @@ def reset_request():
887929
return redirect(url_for('index'))
888930
else:
889931
password_reset_token = jwt.encode({'reset_password': ath_un,'exp': time.time() + 300},key=app.secret_key, algorithm="HS256")
932+
#Check whether the token is of type string, and decode if not.
933+
if type(password_reset_token) != str:
934+
password_reset_token = password_reset_token.decode('UTF-8')
890935
if send_emails == 'true':
891936
send_email(
892937
encr_pass,
@@ -1039,7 +1084,7 @@ def db_info():
10391084
db_username = None
10401085
password_info = None
10411086
flash(' The DB name, DB role and DB permissions are generated based on your username(email). Please log-in and try again. This information is not recorded anywhere until you proceed with the download and the AutoSynch option is enabled.','warning')
1042-
return render_template("index.html",admin_email=admin_email,integrated_with_dropbox=integrated_with_dropbox,diasend_enabled=diasend_enabled,oura_enabled=oura_enabled,strava_enabled=strava_enabled)
1087+
return render_template("index.html",superset_enabled=superset_enabled,superset_url=superset_url,pgweb_enabled=pgweb_enabled,pgweb_smpl_url=pgweb_smpl_url,pgweb_usr_url=pgweb_usr_url,admin_email=admin_email,integrated_with_dropbox=integrated_with_dropbox,diasend_enabled=diasend_enabled,oura_enabled=oura_enabled,strava_enabled=strava_enabled)
10431088

10441089
@app.route("/dropbox_auth_request")
10451090
def dropbox_auth_request():

0 commit comments

Comments
 (0)