Sindbad~EG File Manager
from flask import request, Blueprint, jsonify, redirect, url_for,flash, render_template,session,json,render_template_string,Response
from core.model.MemAppModel import MemAppModel
from core.model.AbstractAdminModel import AbstractAdminModel
from .. import Cryptography,Helper,Auth,RouteGroup
from datetime import timedelta,date,datetime,time
import os,sys
from flask import make_response
from os.path import join, dirname, realpath
import ast
from collections import defaultdict
import math
from core import app
from core.library.helper import Helper
from core.library.email import EMAIL
import boto3, botocore
from PIL import Image
import io
app = Blueprint('dashboard', __name__)
@app.route('/', methods = ["GET", "POST"])
def Home_index():
host = request.host
return redirect(url_for("dashboard.AdminPanelLogin"))
@app.route('/admin_panel_login', methods = ["GET","POST"])
def AdminPanelLogin():
return render_template('admin_panel_login.html')
@app.route('/post_admin_panel_login', methods = ["GET","POST"])
def PostAdminPanelLogin():
if request.method == "POST":
now = datetime.now()
current_dt = now.strftime("%Y-%m-%d %H:%M:%S")
email_id = request.form['email']
# password = request.form['password']
userData = MemAppModel().check_admin_email(email_id)
#print(userData)
# if password == "admin@123":
# pass
# else:
# flash('Invalid Password')
# return redirect (url_for('dashboard.AdminPanelLogin'))
if userData is not None:
Auth.login(userData)
return redirect (url_for('dashboard.Societies'))
else:
flash('Access Denied')
return redirect (url_for('dashboard.AdminPanelLogin'))
@app.route('/admin_panel_logout', methods = ["GET","POST"])
def AdminPanelLogout():
return redirect (url_for('dashboard.AdminPanelLogin'))
@app.route('/societies', methods = ["GET","POST"])
def Societies():
userdata = Auth.user()
if userdata:
societies = MemAppModel().get_societies()
get_m_app = MemAppModel().GetM_App_Data()
conf = MemAppModel().Get_Conf()
return render_template('dashboard_templates/society_index.html',data=societies,conf=conf,get_m_app=get_m_app)
else:
return redirect(url_for("dashboard.AdminPanelLogin"))
@app.route('/post_society_index', methods = ["GET","POST"])
def PostSocietyIndex():
society_id = request.form['society_id']
society_name = request.form['society_name']
society_data = MemAppModel().get_society_app(society_id)
get_conf = MemAppModel().GetConf(society_id)
get_m_app = MemAppModel().GetM_App_Data()
html_data = render_template('dashboard_templates/get_society_data.html',society_data=society_data,society_id=society_id,society_name=society_name,get_m_app=get_m_app,get_conf=get_conf)
datas = {"status" : 1,"html_data":html_data}
json_data = json.dumps(datas,default=str)
return json_data
@app.route('/<conf_id>/<society_id>/abstract_redirect')
def AbstractAutoLogin(conf_id,society_id):
return redirect(url_for('abstract_admin.AbstractAdmin',conf_id=conf_id,society_id=society_id))
@app.route('/<app_type_id>/<society_id>/profile_redirect')
def ProfileRedirect(app_type_id,society_id):
app_data = MemAppModel().get_profile_application_by_app_id(app_type_id,society_id)
if app_data:
app_id = app_data['app_id']
return redirect(url_for('profile.EditProfileInfo',app_id=app_id))
else :
flash("There is no Profile Update App for this society. Please click the button 'Add Profile App' to create App" ,"errorMsg")
return redirect(url_for('profile.GetProfileApp'))
@app.route('/active_conf_submission_daily_report_v1',methods=["GET","POST"])
def common_submission_daily_report():
send_now = request.values.get('send_now') or 0
is_view = request.values.get("is_view") or 0
current_tm = datetime.now()
# return current_tm.hour
# return SendDailySubmissionCountMail(society_id,is_view)
if int(is_view) == 1 or int(send_now) == 1:
# print("is_view ",is_view)
# print("send_now ",send_now)
return AllActiveConferenceDetails()
elif (current_tm.hour == 5 and current_tm.minute > 45) or (current_tm.hour == 6 and current_tm.minute < 15):
# print("Is 6 clock")
# print(str(current_tm.strftime('%d-%m-%Y %H:%M:%S'))+" Time match")
# call function here
return AllActiveConferenceDetails()
else:
# print(str(current_tm.strftime('%d-%m-%Y %H:%M:%S'))+" Time not match ")
# return AllActiveConferenceDetails()
return ( str(current_tm.strftime('%d-%m-%Y %H:%M:%S'))+" Time not match ")
@app.route('/all_active_conference_details')
def AllActiveConferenceDetails():
now =datetime.now()
# print(now)
current_dt =now.strftime("%d-%b-%Y %I:%M %p")
yesterday = date.today() - timedelta(days = 1)
# print(yesterday)
users = AbstractAdminModel().get_trigger_report_emails_data()
conference_data = AbstractAdminModel().GetAllActiveConferenceData()
count_data = defaultdict(list) # sub list with key
active_conf_count=[]
total_count=[]
for r in conference_data[0]:
count_data[r["conf_id"]].append(r)
if r["conf_id"] not in total_count:
total_count.append(r["conf_id"])
active_conf_count.append(r['app_name'])
my_dict = {i:active_conf_count.count(i) for i in active_conf_count}
tota_active_conf=len(total_count)
# print(tota_active_conf)
if users:
# Auth.active_mail_report(users[0])
for i in users:
email=i["email"]
# print("email ", email)
subject='Active Conference List '+str(current_dt)
# print(subject)
html= render_template('dashboard_templates/active_conference_list_mail.html',conference_data=conference_data,active_conf_count=active_conf_count,count_data=count_data,my_dict=my_dict,tota_active_conf=tota_active_conf,current_dt=current_dt,yesterday=yesterday,datetime=datetime)
# return html
EMAIL.common_sendMail_daily_report(subject,html,email)
return "mail sent successful"
@app.route('/logs')
def Logs():
get_logs=AbstractAdminModel().GetLogsData()
return render_template('dashboard_templates/log_page.html',get_logs=get_logs)
@app.route('/search_logs',methods=['POST'])
def SearchLogs():
app_type= request.values.get('app_type') or None
logger_name=request.values.get('logger_name') or None
host_url=request.values.get('host_url')or None
before_time=request.values.get('before_time') or None
limit=request.values.get('limit') or 10
data={
'app_type':app_type,
'logger_name':logger_name,
'host_url':host_url,
'before_time':before_time,
'limit':limit
}
filter_logs=AbstractAdminModel().usp_filter_logs(app_type,logger_name,host_url,before_time,limit)
# print(filter_logs)
html_data=render_template('dashboard_templates/error_logs_table.html',filter_logs=filter_logs)
datas = {"status" : 1,"html_data":html_data,"msg":"success"}
json_data = json.dumps(datas,default=str)
return json_data
#------- Find/Search User ------------------
@app.route('/find_user',methods=['GET'])
def FindUser():
userdata = Auth.user()
if userdata:
return render_template('dashboard_templates/find_user.html')
else:
return redirect(url_for("dashboard.AdminPanelLogin"))
@app.route('/get_user_data',methods=['POST'])
def get_user_data():
search_text = request.values.get('search_txt') or None
if search_text:
length = len(search_text)
else:
length = 0
searched_data = AbstractAdminModel().get_searched_data(search_text)
if searched_data:
count = len(searched_data)
else:
count = 0
if (length>=3):
html_data = render_template('dashboard_templates/get_search_data_table.html',data=searched_data,count=count)
data = {"html_data" :html_data,"msg" : "success" ,"status" : 1 }
json_data = json.dumps(data,default = str)
return json_data
else:
data = {"html_data" :"","msg" : "fail" ,"status" : 2 }
json_data = json.dumps(data,default = str)
return json_data
@app.route('/view_user/<user_id>/<society_id>',methods=['GET','POST'])
def ViewUser(user_id,society_id):
data = AbstractAdminModel().get_user_data(user_id)
conference = AbstractAdminModel().GetConferenceBySociety(society_id)
conf_id = None
return render_template('dashboard_templates/view_user.html',data=data,conference=conference,conf_id=conf_id)
@app.route('/get_user_abstract_details/<user_id>/<conf_id>',methods=['GET','POST'])
def GetUserAbstract(user_id,conf_id):
# print("user_id>>>>>",user_id)
# conf_id = int(request.values.get('conf_id'))
# print("conf_id>>>",conf_id)
conf_key = AbstractAdminModel().get_conf_key_by_id(conf_id)
conf_key = conf_key['conf_key']
results = AbstractAdminModel().usp_get_abstracts(conf_id,user_id,None,None)
for index,value in enumerate(results) :
if index == 0 :
db_abstract = value
if index == 1 :
db_abstopic = value
if index == 2 :
user_profile = value[0]
if index == 3 :
db_judges = value
if index == 4 :
db_eva_data = value
commitmentData = AbstractAdminModel().get_user_commitment_data(conf_id,user_id,None,None,None)
if commitmentData:
commitment_data = commitmentData[1]
else:
commitment_data = None
abstopics_lst = {}
if db_abstopic:
for abstopic in db_abstopic:
abstopics_lst[abstopic['abs_id']] = (abstopics_lst[abstopic['abs_id']] if abstopics_lst.get(abstopic['abs_id'],None) else [] ) + [abstopic]
abstopic = []
if db_abstract:
for absData in db_abstract:
absData['topics'] = abstopics_lst.get(absData['abs_id'],[])
abstopic.append(absData)
html_data = render_template('dashboard_templates/user_abstracts_detail.html',conf_id=conf_id,conf_key=conf_key,userData=user_profile,absDatas=abstopic,db_judges=db_judges,user_id=user_id,commitment_data=commitment_data,db_eva_data=db_eva_data)
data = {"html_data" :html_data,"msg" : "success" ,"status" : 1 }
json_data = json.dumps(data,default = str)
return json_data
@app.route('/generate_sqllite',methods=['GET','POST'])
def GetGenerateSqllite():
userdata = Auth.user()
if userdata:
return render_template('dashboard_templates/generate_sqllite.html')
else:
return redirect(url_for("dashboard.AdminPanelLogin"))
@app.route('/<int:conf_id>/edit_conference_data', methods = ["GET", "POST"])
def EditConferenceData(conf_id):
get_conf = AbstractAdminModel().GetConf(conf_id)
if get_conf :
return render_template('dashboard_templates/conference_edit_index.html',conf_data=get_conf,conf_id=conf_id)
else:
return "<h1>Invalid URL </h1>"
@app.route('/<int:conf_id>/conference_prefix',methods=["GET","POST"])
def ConferencePrefix(conf_id):
now = datetime.now()
current_dt = now.strftime("%Y-%m-%d %H:%M:%S")
formatted_time = now.strftime("%Y%m%d%H%M%S%f")[:-3]
try:
conf_name = request.form.get('conf_name') or None
conf_title = request.form.get('conf_title')or None
conf_key = request.form.get('conf_key') or None
conf_schema = request.form.get('conf_schema')or None
conf_name_full_form = request.form.get('conf_name_full_form') or None
header_text = request.form.get('header_text',None) or None
abs_header_text = request.form.get('abs_header_text', None ) or None
is_active = request.form.get('is_active') or None
update_data = {'conf_name':conf_name,'conf_title':conf_title,'conf_key':conf_key,'conf_schema':conf_schema,'conf_name_full_form':conf_name_full_form,'header_text':header_text,'abs_header_text':abs_header_text,'is_active':is_active}
update_conf_data = AbstractAdminModel().update_conf(conf_id,update_data)
if update_conf_data == 'success':
datas = {"msg":"Updated Successfully","status" : 1}
else:
datas = {"msg":"","status" : 2}
return json.dumps(datas,default=str)
except Exception as e:
data = {"msg": str(e),"status":400}
return json.dumps(data,default = str)
@app.route('/<int:conf_id>/conference_media',methods=["GET","POST"])
def ConferenceMedia(conf_id):
now = datetime.now()
current_dt = now.strftime("%Y-%m-%d %H:%M:%S")
try:
mail_header_logo = request.values.get('mail_header_logo') or None
header_logo = request.values.get('header_logo')or None
update_data = {'mail_header_logo':mail_header_logo,'header_logo':header_logo}
update_conf_data = AbstractAdminModel().update_conf(conf_id,update_data)
if update_conf_data == 'success':
datas = {"update_data":update_data,"msg":"success","status" : 1}
else:
datas = {"update_data":'',"msg":"success","status" : 2}
return json.dumps(datas,default=str)
except Exception as e:
data = {"update_data":"","msg": str(e),"status":400}
return json.dumps(data,default = str)
@app.route('/<int:conf_id>/conference_contents',methods=["GET","POST"])
def ConferenceContents(conf_id):
now = datetime.now()
current_dt = now.strftime("%Y-%m-%d %H:%M:%S")
try:
index_content = request.values.get('index_content') or None
tariff_url = request.values.get('tariff_url')or None
update_data = {'index_content':index_content,'tariff_url':tariff_url}
update_conf_data = AbstractAdminModel().update_conf(conf_id,update_data)
if update_conf_data == 'success':
datas = {"msg":"Updated Successfully","status" : 1}
else:
datas = {"msg":"","status" : 2}
return json.dumps(datas,default=str)
except Exception as e:
data = {"update_data":"","msg": str(e),"status":400}
return json.dumps(data,default = str)
@app.route('/<int:conf_id>/conference_emails',methods=["GET","POST"])
def ConferenceEmails(conf_id):
now = datetime.now()
current_dt = now.strftime("%Y-%m-%d %H:%M:%S")
try:
support_email = request.form.get('support_email') or None
backup_email = request.form.get('backup_email')or None
acc_support_mail = request.form.get('acc_support_mail') or None
from_email = request.form.get('from_email')or None
reply_to = request.form.get('reply_to') or None
is_email_enable = request.form.get('is_email_enable')or None
e_support_email = request.form.get('e_support_email') or None
e_backup_emails = request.form.get('e_backup_emails')or None
e_from_email = request.form.get('e_from_email') or None
e_reply_name = request.form.get('e_reply_name')or None
e_reply_to = request.form.get('e_reply_to') or None
update_data = {
'support_email':support_email,
'backup_email':backup_email,
'acc_support_mail':acc_support_mail,
'from_email':from_email,
'reply_to':reply_to,
'is_email_enable':is_email_enable,
'e_support_email':e_support_email,
'e_backup_emails':e_backup_emails,
'e_from_email':e_from_email,
'e_reply_name':e_reply_name,
'e_reply_to':e_reply_to
}
update_conf_data = AbstractAdminModel().update_conf(conf_id,update_data)
if update_conf_data == 'success':
datas = {"msg":"Updated Successfully","status" : 1}
else:
datas = {"msg":"","status" : 2}
return json.dumps(datas,default=str)
except Exception as e:
data = {"update_data":"","msg": str(e),"status":400}
return json.dumps(data,default = str)
@app.route('/<int:conf_id>/conference_setting',methods=["GET","POST"])
def ConferenceSetting(conf_id):
now = datetime.now()
current_dt = now.strftime("%Y-%m-%d %H:%M:%S")
try:
conf_start_time = request.form.get('conf_start_time') or None
conf_end_time = request.form.get('conf_end_time') or None
conf_start_dt = request.form.get('conf_start_dt') or None
conf_end_dt = request.form.get('conf_end_dt')or None
abs_ses_table_name = request.form.get('abs_ses_table_name') or None
abs_ses_query_table_name = request.form.get('abs_ses_query_table_name')or None
scientific_support_team = request.form.get('scientific_support_team') or None
hall_scan_is_exit = request.form.get('hall_scan_is_exit')or None
food_logo = request.form.get('food_logo') or None
kit_logo = request.form.get('kit_logo')or None
set_count_of_per_counter = request.form.get('set_count_of_per_counter') or None
badge_count_of_per_set = request.form.get('badge_count_of_per_set') or None
update_data = {
'conf_start_time':conf_start_time,
'conf_end_time':conf_end_time,
'conf_start_dt':conf_start_dt,
'conf_end_dt':conf_end_dt,
'abs_ses_table_name':abs_ses_table_name,
'abs_ses_query_table_name':abs_ses_query_table_name,
'scientific_support_team':scientific_support_team,
'hall_scan_is_exit':hall_scan_is_exit,
'food_logo':food_logo,
'kit_logo':kit_logo,
'set_count_of_per_counter':set_count_of_per_counter,
'badge_count_of_per_set':badge_count_of_per_set
}
update_conf_data = AbstractAdminModel().update_conf(conf_id,update_data)
if update_conf_data == 'success':
datas = {"msg":"Updated Successfully","status" : 1}
else:
datas = {"msg":"","status" : 2}
return json.dumps(datas,default=str)
except Exception as e:
data = {"msg": str(e),"status":400}
return json.dumps(data,default = str)
@app.route('/<int:conf_id>/additional_settings',methods=["GET","POST"])
def AdditionalSettings(conf_id):
now = datetime.now()
current_dt = now.strftime("%Y-%m-%d %H:%M:%S")
try:
reg_start_on = request.form.get('reg_start_on') or None
reg_end_on = request.form.get('reg_end_on') or None
default_country_id = request.form.get('default_country_id')or None
is_requried_fields = request.form.get('is_requried_fields') or None
del_table_name = request.form.get('del_table_name')or None
is_regdesk_open = request.form.get('is_regdesk_open') or None
pg_details = request.form.get('pg_details')or None
system_wise_scan = request.form.get('system_wise_scan') or None
addons_member_list = request.form.get('addons_member_list')or None
dashboard_box_content = request.form.get('dashboard_box_content') or None
update_data = {
'reg_start_on':reg_start_on,
'reg_end_on':reg_end_on,
'default_country_id':default_country_id,
'is_requried_fields':is_requried_fields,
'del_table_name':del_table_name,
'is_regdesk_open':is_regdesk_open,
'pg_details':pg_details,
'system_wise_scan':system_wise_scan,
'addons_member_list':addons_member_list,
'dashboard_box_content':dashboard_box_content
}
update_conf_data = AbstractAdminModel().update_conf(conf_id,update_data)
if update_conf_data == 'success':
datas = {"msg":"Updated Successfully","status" : 1}
else:
datas = {"msg":"","status" : 2}
return json.dumps(datas,default=str)
except Exception as e:
data = {"msg": str(e),"status":400}
return json.dumps(data,default = str)
@app.route('/<int:conf_id>/favicon_upload_fun',methods=["GET","POST"])
def FaviconUploadFun(conf_id):
now = datetime.now()
current_dt = now.strftime("%Y-%m-%d %H:%M:%S")
formatted_time = now.strftime("%Y%m%d%H%M%S%f")[:-3]
try:
file_name = request.form.get('fileName') or None
file = request.files.get('file_favicon') or None
print("file_name--",file_name,file)
if file:
print(file_name,file)
# Create an S3 client
s3 = boto3.client("s3", aws_access_key_id='AKIAILLDAQ7NFUMVOYLQ',
aws_secret_access_key='EEudWCsWeCIt/J9/z5m5htmUdGFJNzWFPvNQBIp/')
bucket = 'aws-s3store'
acl = "public-read"
# file_name = f"{file_name.replace(' ', '_').rsplit('.', 1)[0]}_{formatted_time}.{file_name.rsplit('.', 1)[1]}"
# Prepare the ICO file name
file_name = f"{os.path.splitext(file.filename)[0].replace(' ', '_').rsplit('.', 1)[0]}_{formatted_time}.ico"
foldername = 'favicon_1/'
file_path = f"{foldername}{file_name}"
# Open and resize the image, then save it to a bytes buffer
with Image.open(file) as img:
img = img.resize((48, 48)) # Resize to 48x48
img_byte_arr = io.BytesIO()
img.save(img_byte_arr, format='ICO')
img_byte_arr.seek(0) # Move to the beginning of the BytesIO object
# Upload to S3
response = s3.upload_fileobj(
img_byte_arr,
bucket,
file_path,
ExtraArgs={"ACL": acl, "ContentType": 'image/x-icon'} # Set content type for ICO
)
# Generate the file URL
file_url = f"https://{bucket}.s3.ap-southeast-1.amazonaws.com/{file_path}"
update_data = {'favicon_url':file_url}
update_conf_data = AbstractAdminModel().update_conf(conf_id,update_data)
if update_conf_data == 'success':
datas = {"update_data":update_data,"msg":"Updated successfully","status" : 1}
else:
datas = {"update_data":'',"msg":"success","status" : 2}
return json.dumps(datas,default=str)
except Exception as e:
data = {"update_data":"","msg": str(e),"status":400}
return json.dumps(data,default = str)
@app.route('/<int:conf_id>/remove_favicon',methods=["GET","POST"])
def RemoveFavicon(conf_id):
now = datetime.now()
current_dt = now.strftime("%Y-%m-%d %H:%M:%S")
try:
url = request.values.get('image_favicon') or None
file_name = url.split('/')[-1]
acl = "public-read"
s3 = boto3.resource("s3", aws_access_key_id='AKIAILLDAQ7NFUMVOYLQ', aws_secret_access_key='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')
bucket = 'aws-s3store'
foldername = 'favicon_1'
path = f"{foldername}/{file_name}"
try:
response = s3.Object(bucket, path).delete()
print("Object deleted successfully")
except Exception as e:
print(f"An error occurred: {str(e)}")
remove_favicon = AbstractAdminModel().remove_favicon_data(conf_id)
if remove_favicon == 'success':
datas = {"msg":"deleted successfully","status" : 1}
else:
datas = {"msg":"","status" : 2}
return json.dumps(datas,default=str)
except Exception as e:
data = {"msg": str(e),"status":400}
return json.dumps(data,default = str)
@app.route('/get_conf_data_by_society_id',methods=["GET","POST"])
def GetConfDataBySocietyId():
try:
society_id = request.values.get('society_id') or None
conf_data_by_society = AbstractAdminModel().get_conf_data_by_society_id(society_id)
if conf_data_by_society :
datas = {"conf_data_by_society":conf_data_by_society,"msg":"success","status" : 1}
else:
datas = {"conf_data_by_society":"","msg":"","status" : 2}
return json.dumps(datas,default=str)
except Exception as e:
data = {"conf_data_by_society":"","msg": str(e),"status":400}
return json.dumps(data,default = str)
@app.route('/create_duplicate_conf',methods=["GET","POST"])
def CreateDuplicateConf():
try:
conf_id = request.values.get('conf_id') or None
society_id = request.values.get('society_id') or None
conf_data = AbstractAdminModel().create_duplicate_conf(conf_id,society_id)
last_insert_id = conf_data[0]['last_insert_id']
if last_insert_id :
datas = {"last_insert_id":last_insert_id,"msg":"success","status" : 1}
else:
datas = {"last_insert_id":"","msg":"success","status" : 2}
return json.dumps(datas,default=str)
except Exception as e:
data = {"last_insert_id":"","msg": str(e),"status":400}
return json.dumps(data,default = str)
@app.route('/do/insert_new_user_data_by_society_id/<society_id>', methods = ["GET", "POST"])
def insert_new_user_data_by_society_id(society_id):
userdata = Auth.user()
super_admin_email = userdata['admin_email']
userdata = Auth.user()
if userdata and userdata['admin_email']:
insert_data = AbstractAdminModel().insert_new_user_data_by_society_id(super_admin_email,society_id) #add new user by society
# get_user_uuid = AdminAccessModel().get_user_uuid(super_admin_email,society_id)
user_uuid = insert_data['user_uuid']
data_1 = {"user_uuid":user_uuid,"status" : 1 , "msg" : "Updated Successfully"}
else:
data_1 = {"user_uuid":"","status" : 2 , "msg" : "Updated Failed"}
return json.dumps(data_1 ,default=str)
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists