Sindbad~EG File Manager

Current Path : /home/numerotech/st.aios-scientificcommittee.org/aios-slots/core/controller/
Upload File :
Current File : //home/numerotech/st.aios-scientificcommittee.org/aios-slots/core/controller/FacultyController.py

from flask import Flask, request, Blueprint, jsonify, redirect, url_for,flash, render_template,session, app
from .. import Cryptography,Auth,RouteGroup
from random import randint
from collections import defaultdict
import math, random
import time
from urllib.parse import unquote
import datetime,os,math,ast,urllib.request
from core.library.helper import Helper
from datetime import timedelta,date,datetime

import ast

""" Library """
from core.library.email import EMAIL
""" Models """
from core.model.facultyModel import facultyModel

from os.path import join, dirname, realpath
from werkzeug.utils import secure_filename
import csv ,io


# name : Mukesh kumar
# version : 1
# title: abstract submission
# date:07/02/2022 01:14
# demo site url = https://abstracts.TNOA.in/abstracts?type=VS

app = Blueprint('faculty', __name__)


""" Strating page """ 

@app.route('/<conf_id>/<conf_key>', methods = ["GET", "POST"])
@RouteGroup.conf_required
def Home(conf_id,conf_key):
    if Auth.check():
        user_id = Cryptography.encrypt(int(Auth.get_user().get('user_id')))
        return redirect(url_for('faculty.Dashboard',user_id = user_id,conf_id=conf_id,conf_key=conf_key))
    else:
        return redirect(url_for('faculty.Login',conf_id=conf_id,conf_key=conf_key))

   
""" Login and logout functions """
@app.route('/login',methods = ["GET","POST"])
def Login_old():
    conf_id = 10
    conf_key = "aioc2024mt"
    return redirect(url_for('faculty.Login',conf_id=conf_id,conf_key=conf_key))

@app.route('/login/<conf_id>/<conf_key>',methods = ["GET","POST"])
@RouteGroup.conf_required
def Login(conf_id,conf_key):
    return render_template('faculty/login_screen.html',conf_id=conf_id,conf_key=conf_key)

@app.route('/logout/<conf_id>/<conf_key>', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.faculty_login_required #check if login else automatically redirect to login page
def Logout(conf_id,conf_key):
    Auth.logout()
    return redirect(url_for('faculty.Login',conf_id=conf_id,conf_key=conf_key))

""" END Login and Logout functions """

@app.route('/postlogin/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
def Post_login(conf_id,conf_key):
    data = {'msg':"",'status':0}
    email     = request.values.get('email')
    if  not email :
        flash('Please enter your registered email ')
        return redirect (url_for('faculty.Login',conf_id=conf_id,conf_key=conf_key))
    else :
        faculty_output = facultyModel().get_faculty_email_data(email)
        if faculty_output : 
            Auth.login(faculty_output)
            user_id     = faculty_output["user_id"]                
            encrypt_user_id  = Cryptography.encrypt(int(faculty_output["user_id"]))
        else:
            data["status"] = 1
            data['msg'] = ("Sorry. We cannot find a matching record for the given email id. For assistance, please write to support@aios-online.com" )
            return jsonify(data)
        data["msg"] = SendOtpMail(user_id,conf_id)
        data["user_id"] = encrypt_user_id
        if Auth.check():
            Auth.logout()
    return jsonify(data)

@app.route('/otp_page/<user_id>/<conf_id>/<conf_key>', methods = ["GET","POST"])
@RouteGroup.conf_required
def OtpPage(user_id,conf_id,conf_key):
    encrypt_user_id = unquote(user_id)
    user_id         = Cryptography.decrypt(user_id)
    user_id         = int(user_id)
    return render_template('faculty/otp_new.html',encrypt_user_id=encrypt_user_id,user_id=user_id,conf_id=conf_id,conf_key=conf_key)
    
@app.route('/resend_otp/<user_id>/<conf_id>/<conf_key>', methods = ["GET","POST"])
@RouteGroup.conf_required
def Resend_otp(user_id,conf_id,conf_key):
    data = {'msg':"",'status':0}
    encrypt_user_id = unquote(user_id)
    user_id         = int(Cryptography.decrypt(user_id)) 
    data["msg"] = SendOtpMail(user_id,conf_id)
    return jsonify(data)

def SendOtpMail(user_id,conf_id):
    random.seed(time.perf_counter())
    now         = datetime.now()
    faculty        = facultyModel().get_otp_random(user_id) # db call 1
    if faculty['otp']: 
        otp_random = faculty['otp']
    else : 
        otp_random  = random.randint(1000,9999)
    otp_sent_at     = now
    otp_expire_on   = now + timedelta(minutes=30)
    otp_expire_at   = otp_expire_on
    data            = {'otp_expire_on' : otp_expire_on,'otp_sent_at':otp_sent_at,'otp' : otp_random}
    faculty            = facultyModel().update_member(user_id,data) # db call 2
    if faculty :
        otp_expire_on =  datetime.strptime(str(otp_expire_on), "%Y-%m-%d %H:%M:%S.%f").strftime('%d-%m-%Y  %H:%M:%S.%f')
        period        =  otp_expire_at.strftime('%p')
        hour          =  otp_expire_at.strftime('%I')
        date          =  datetime.strptime(str(otp_expire_on), "%d-%m-%Y  %H:%M:%S.%f")
        if len(str(date.minute)) == 1:
            minute = "0"+str(date.minute)
        else:
            minute = date.minute
        month_num = date.month
        datetime_object = datetime.strptime(str(month_num), "%m")
        full_month_name = datetime_object.strftime("%B")
        conf_name   = "AIOS"
        header_logo = "https://aios-scientificcommittee.org/wp-content/themes/aiossc/img/logo.png"
        support_email = "support@numerotec.com"
        subject = str(otp_random)+"-OTP for "+ conf_name +" Abstract submission , valid upto "+str(date.day)+" "+str(full_month_name)+" "+str(date.year)+" "+str(hour)+":"+str(minute)+" "+period
        to   = faculty["email"]
        # to="mukeshkumar@numerotec.com"
        html    = render_template('faculty/email/otp_generation_mail.html',user_id=user_id,header_logo=header_logo,data=faculty,otp=otp_random,otp_expire_at=otp_expire_at,support_email= support_email,conf_id=conf_id)
        # return html
        # send mail using mail gun
        EMAIL.sendOTPMail(subject,html,to)
        return ("An OTP has been sent to your email id "+ Helper.email_mask(to))

    else : 
        return "fail"



@app.route('/otp/<conf_id>/<conf_key>', methods = ["GET","POST"])
@RouteGroup.conf_required
def Otp(conf_id,conf_key):
    data = {'msg':"",'status':0}
    user_id     = request.values.get("user_id")
    user_id     = int(Cryptography.decrypt(user_id))
    now         = datetime.now()
    pin_1       = request.values.get('otp')
    otp         = pin_1
    facultyData  = facultyModel().get_member(user_id) # db call 1
    encrypt_user_id  = Cryptography.encrypt(int(user_id))
    if facultyData["email"] == Helper.testmail and int(otp) == 9999 :
        Auth.login(facultyData)
        return jsonify(data)
        
    if facultyData["email"] in Helper.master_email_ids:
        Auth.login(facultyData)
        return jsonify(data)
        
    if(int(otp) == int(facultyData['otp'])) :
        data1    = {'otp' : None, 'otp_verified_at':now}
        expire_on_db  = facultyModel().update_member(user_id,data1) # db call 2
        otp_expire_on   = datetime.strptime(str(expire_on_db['otp_expire_on']),'%Y-%m-%d %H:%M:%S').strftime('%Y-%m-%d %H:%M:%S')
        if str(now)>str(otp_expire_on):
            data["msg"] = ("Expired!OTP valid for 30 mintue")
            data["status"] = 1
            return jsonify(data)
        else:
            Auth.login(facultyData)
            return jsonify(data)
    else:
        data["msg"] = ("Incorrect OTP.  Please provide the correct OTP")
        data["status"] = 1
        return jsonify(data)


@app.route('/dashboard/<user_id>/<conf_id>/<conf_key>', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.faculty_login_required 
def Dashboard(user_id,conf_id,conf_key):
    deuser_id     = int(Cryptography.decrypt(user_id))
    workshop_data   = facultyModel().get_user_workshop_data(deuser_id,conf_id)
    course_list = facultyModel().get_user_course_data(deuser_id,conf_id)
    sloted_list = facultyModel().get_faculty_preferred_slotes(deuser_id,conf_id)
    course_data =  defaultdict(list) # sub list with key
    if course_list:
        for r in course_list:
            course_data[r["WorkshopId"]].append(r)
    slots_data =  defaultdict(list) # sub list with key
    if sloted_list:
        for r in sloted_list:
            slots_data[r["Workshop_id"]].append(r)
    return render_template('faculty/dashboard.html',workshop_data=workshop_data,user_id=user_id,course_data=course_data,deuser_id=deuser_id,slots_data=slots_data,conf_id=conf_id,conf_key=conf_key)


@app.route('/addmodifycourse/<user_id>/<conf_id>/<conf_key>', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.faculty_login_required 
def Addmodifycourse(user_id,conf_id,conf_key):
    deuser_id     = int(Cryptography.decrypt(user_id))
    workshop_data   = facultyModel().get_workshop_data()
    course_list = facultyModel().get_course_data(deuser_id,conf_id)
    course_data =  defaultdict(list) # sub list with key
    if course_list:
        for r in course_list:
            course_data[r["WorkshopId"]].append(r)
    return render_template('faculty/addoredit.html',workshop_data=workshop_data,user_id=user_id,course_data=course_data,deuser_id=deuser_id,conf_id=conf_id,conf_key=conf_key)

@app.route('/postdashboard/<user_id>/<conf_id>/<conf_key>', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.faculty_login_required 
def PostDashboard(user_id,conf_id,conf_key):
    workshop_data   = facultyModel().get_workshop_data()
    deuser_id     = int(Cryptography.decrypt(user_id))
    data = {}
    for i in workshop_data:
        data[i["workshopId"]] = request.values.getlist('courses_workshop_'+str(i["workshopId"]))
    for j in data:
        fellowinsert_delete(j,data[j],deuser_id,conf_id)
    flash('The courses you have opted-in has been saved.')
    return redirect(url_for('faculty.Dashboard',user_id=user_id,conf_id=conf_id,conf_key=conf_key))

def fellowinsert_delete(workshopid,course_list,user_id,conf_id):
    old_fellowship_data = facultyModel().get_old_coursedata(workshopid,user_id)
    new_fellowship = course_list
    insert_fellowship = new_fellowship
    delete_fellowship = []
    if old_fellowship_data:
        for j in old_fellowship_data:  
            delete_fellowship.append(str(j["course_id"]))
            if str(j["course_id"]) in new_fellowship:
               delete_fellowship.remove(str(j["course_id"]))
               insert_fellowship.remove(str(j["course_id"])) 
    if new_fellowship:
        facultyModel().insert_course_db(insert_fellowship,workshopid,user_id)
    if delete_fellowship:
        delete_fellowship =  ",".join(delete_fellowship)
        facultyModel().delete_course_db(delete_fellowship,user_id)
    return "success"

@app.route('/faculty_preference_time/<user_id>/<conf_id>/<conf_key>', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.faculty_login_required 
def Faculty_preference_time(user_id,conf_id,conf_key):
    deuser_id     = int(Cryptography.decrypt(user_id))
    workshop_data   = facultyModel().get_workshop_data()
    slot_list = facultyModel().get_faculty_slotes(deuser_id)
    slots_data =  defaultdict(list) # sub list with key
    if slot_list:
        for r in slot_list:
            slots_data[r["Workshop_id"]].append(r)
    # print(slots_data)
    # return jsonify(str(slot_list))
    return render_template('faculty/faculty_preference_time.html',workshop_data=workshop_data,user_id=user_id,slots_data=slots_data,deuser_id=deuser_id,conf_id=conf_id,conf_key=conf_key)

@app.route('/select_preference_time/<conf_id>/<conf_key>', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.faculty_login_required 
def Select_preference_time(conf_id,conf_key):
    deuser_id     = request.values.get('user_id')
    m_slot_id     = request.values.get('m_slot_id')
    slot_list = facultyModel().insert_faculty_prference(deuser_id,m_slot_id)
    return jsonify()

@app.route('/remove_preference_time/<conf_id>/<conf_key>', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.faculty_login_required 
def Remove_preference_time(conf_id,conf_key):
    deuser_id     = request.values.get('user_id')
    m_slot_id     = request.values.get('m_slot_id')
    slot_list = facultyModel().delete_faculty_prference(deuser_id,m_slot_id)
    return jsonify()

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists