import asyncio
import uvicorn
##################
import gradio as gr
from fastapi import FastAPI, Request
from fastapi.responses import RedirectResponse, HTMLResponse
from starlette.middleware.sessions import SessionMiddleware
import firebase
from datetime import datetime
import nbformat
from nbconvert import HTMLExporter
from pathlib import Path
import shutil
import os
from time import time
import numpy as np
from plagitp import *
UPLOAD_FOLDER = "./upload"
add_down = True
config = {
"apiKey": "AIzaSyAjhnW-K7AT_ZFFk57wuEBCxdVLDfLVbIE",
"authDomain": "ustomodsim2-7f385.firebaseapp.com",
"projectId": "ustomodsim2-7f385",
"storageBucket": "ustomodsim2-7f385.appspot.com",
"messagingSenderId": "926000012641",
"appId": "1:926000012641:web:39a3d315306c1418c2f920",
"measurementId": "G-HKHQ4B23ND",
"databaseURL": "https://ustomodsim2-7f385-default-rtdb.europe-west1.firebasedatabase.app"
}
client_secret_config = {
"client_id": "926000012641-jncoadc8g9kufof945906gbichju0bd2.apps.googleusercontent.com",
"client_secret": "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",
"redirect_uris": ["https://bendahmane-ustomb-ustomodsimup.hf.space/auth"]
}
app = FastAPI()
secret_key = "##@!secret"
fbapp = firebase.initialize_app(config)
auth = fbapp.auth(client_secret=client_secret_config)
db = fbapp.database()
reports = {}
fbappA = firebase.initialize_app(config)
authA = fbappA.auth()
usr_mail = authA.sign_in_with_email_and_password("gormat83@gmail.com", "ustorfia")
dbA = fbappA.database()
records = db.child("tpreports").get(usr_mail.get('idToken'))
if records.each():
for field in records.each():
val=field.val()
key=field.key()
if "report" in val and "date" in val:
notestr=val["report"]
val["report"]=nbformat.reads(notestr, as_version=4)
reports[key]=val
def refresh_user(user):
if user is not None and int(user.get("expiresAt", -1)) > 0:
if int(user.get("expiresAt", -1)) > time():
error = "success"
else:
error = f"Session Expired! Logout & login again."
else:
error = f"You are not connected!"
return user, error
def send_rep(notebook, plagia_errs, all_reports, user_s, ln1, fn1, em1, gr1, ln2, fn2, em2, gr2, request: gr.Request):
global reports
cl="red"
user = request.request.session.get("user")
if user["localId"] != user_s["localId"]:
return all_reports, f"
User UID mismatch don't switch accounts!
"
user, error = refresh_user(user)
if error=="success":
request.request.session["user"] = user
error=""
if len(error)==0:
if notebook is not None:
if plagia_errs!="error":
if user:
notebook_str = nbformat.writes(notebook)
if len(notebook_str)<=(5*1024*1024):
try:
newval={"report":notebook_str, "ln1":ln1, "fn1":fn1, "em1":em1, "gr1":gr1,
"ln2":ln2, "fn2":fn2, "em2":em2, "gr2":gr2,
"date":f"{datetime.fromtimestamp(time()+3600).strftime('%Y-%m-%d %H:%M:%S')}"}
db.child("tpreports").child(user["localId"]).set(newval, user['idToken'])
gr.Info("Report sent")
newval["report"]=notebook
reports[user["localId"]] = newval
reports_l = get_reports_list(request)
all_reports = reports_html(reports_l)
error = "Report sent successfully."
cl="green"
except Exception as e:
error = f"Error! Can't send report, Error: {e}"
else:
error = f"Error! Your report size is > 5Mb, try to reduce the displayed data & images"
else:
error = f"Correct plagiarism errors first!"
else:
error = f"Generate your report first!"
return all_reports, f"
{error}
"
@app.middleware("http")
async def check_authentication(request: Request, call_next):
if request.url.path.startswith('/login') or request.url.path.startswith('/auth'):
return await call_next(request)
user = request.session.get("user")
if not user:
return RedirectResponse(url="/login")
elif int(user["expiresAt"])