import sys import math import time import os from flask import Flask, request, jsonify from flask.globals import session #from flaskext.mysql import MySQL import json import random import datetime import secrets #import numpy as np import pandas as pd import db_conf from flask import send_file from flask_cors import CORS from tinydb import TinyDB #from flask_mail import Mail, Message #import firebase_admin #from firebase_admin import credentials, firestore, initialize_app, firebase app = Flask(__name__, static_folder='../frontend/build', static_url_path='/') CORS(app) # Add this line db = TinyDB('/app/data/responses.json') responses_table = db.table('responses') app.config['MYSQL_DATABASE_HOST'] = db_conf.host app.config['MYSQL_DATABASE_USER'] = db_conf.user app.config['MYSQL_DATABASE_PASSWORD'] = db_conf.password app.config['MYSQL_DATABASE_DB'] = db_conf.db db_table_prefix = 'miniVlat' #mail = Mail(app) # app.config['MAIL_SERVER'] = 'smtp.gmail.com' # app.config['MAIL_PORT'] = 465 # app.config['MAIL_USERNAME'] = 'minivlat@gmail.com' # app.config['MAIL_PASSWORD'] = "minivlat123" # app.config['MAIL_USE_TLS'] = False # app.config['MAIL_USE_SSL'] = True #mail = Mail(app) #mysql = MySQL() # mysql.init_app(app) global_session = {} #cred = credentials.Certificate("securekey.json") #default_app = initialize_app(cred) #db = firestore.client() if __name__ == '__main__': app.run(debug=True) print('ready') @app.route('/') def index(): return app.send_static_file('index.html') @app.route('/get_time') def get_time(): return jsonify({'time': time.time()}) @app.route('/new_session_id', methods=['GET', 'POST']) def get_new_session_id(): """ Returns a new session ID and sets up the session. """ data = request.json print(data) # session id id = secrets.token_urlsafe(16) global_session[id] = { } # insert session into database ''' conn = mysql.connect() cur = conn.cursor() sql_statement = f"insert into {db_table_prefix}_participants (id, data_condition, policy_condition, presentation_condition, tutorial_loaded_client_time, tutorial_loaded) values (" + ", ".join( [f"\"{str(item)}\"" for item in [id, data_condition, policy_condition, presentation_condition, tutorial_loaded_client_time, datetime.datetime.today()]]) + ")" cur.execute(sql_statement) conn.commit() cur.fetchall() conn.close() ''' print('%d active users' % len(global_session.keys())) print(global_session.keys()) return jsonify({'new_id': id}) @app.route('/record_responses_to_db', methods=['POST']) def record_responses_to_db(): data = request.json session_id = data['session_id'] #fname = str(session_id)+'.txt' #fname = './surveys/quiz/' + fname # with open(fname, 'w+') as test: # test.write(json.dumps(data) + "\n") #res = firebase.post(data_send) # data_send = json.dumps(data) # msg = Message("Quiz Response for " + str(session_id),sender='minivlat@gmail.com', recipients=['minivlat@gmail.com']) # msg.body = data_send # mail.send(msg) # fname = str(session_id)+'.txt' # fname = './surveys/quiz/' + fname responses_table.insert(data) # with open(fname, 'w+') as test: # test.write(json.dumps(data) + "\n") print('TODO: Record quiz responses into a file or DB') print('Collected quiz data: ', data) return {'response': "json post succeeded"} # @app.route('/record_survey_to_db', methods=['POST']) # def record_survey_to_db(): # data = request.json # session_id = data['session_id'] # #fname = str(session_id)+'.txt' # #fname = './surveys/demographicResponses/' + fname # # with open(fname, 'w+') as test2: # # test2.write(json.dumps(data) + "\n") # #res = firebase.post(data_send) # # data_send = json.dumps(data) # # msg = Message("Demographic Response for " + str(session_id),sender='minivlat@gmail.com', recipients=['minivlat@gmail.com']) # # msg.body = data_send # # mail.send(msg) # fname = str(session_id) + '.txt' # fname = './surveys/demographicResponses/' + fname # with open(fname, 'w+') as test2: # test2.write(json.dumps(data) + "\n") # print('TODO: Record survey responses into a file or DB') # print('Collected survey data: ', data) # return {'response': "json post succeeded"}