Sindbad~EG File Manager

Current Path : /home/numerotech/sa.aios-scientificcommittee.org/aios_sa_app/core/controller/
Upload File :
Current File : //home/numerotech/sa.aios-scientificcommittee.org/aios_sa_app/core/controller/MainController.py

from flask import Flask, request, Blueprint, jsonify, redirect, url_for,flash, render_template,session, app,json
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
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.UserModel import UserModel
from core.model.AbstractModel import AbstractModel
from core.model.BoModel import BoModel

from pydoc import locate
import imp,sys
import base64 
from urllib.parse import unquote
import boto3, botocore
from botocore.exceptions import ClientError
import os
from os import listdir
from os.path import join, dirname, realpath
from werkzeug.utils import secure_filename
# import importlib


# name : Mukesh kumar
# version : 1
# title: abstract submission
# date:07/02/2022 01:14

app = Blueprint('main', __name__)


@app.route('/guideline_index/<abs_type>', methods = ["GET", "POST"])
@RouteGroup.login_required #check if login else automatically redirect to login page
def GuidelineIndex(abs_type):                                                
	guideline = UserModel().get_guidelines(abs_type)
	return render_template('users/guideline.html',guideline=guideline,abs_type=abs_type)


@app.route('/abstract_index/<abs_type>/<society_id>', methods = ["GET", "POST"])
@RouteGroup.login_required 
def AbstractsIndex(abs_type,society_id):         
	myclass     = Helper.call_custom_controller(abs_type)
	data        = myclass.AbstractsIndex(abs_type,society_id)
	return data
	
@app.route('/fulltextupload/<abs_type>//<society_id>', methods = ["GET", "POST"])
@RouteGroup.login_required 
def FulltextUpload(abs_type,society_id):         
	myclass     = Helper.call_custom_controller(abs_type)
	data        = myclass.FulltextUpload(abs_type)
	return data

@app.route('/get_fulltext/<abs_type>', methods = ["GET","POST"])
def get_fulltext(abs_type):
	myclass     = Helper.call_custom_controller(abs_type)
	data        = myclass.get_fulltext(abs_type)
	return data

@app.route('/<string:abs_type>/<abs_id>/abs/<society_id>', methods = ["GET", "POST"])
@RouteGroup.login_required 
@RouteGroup.validation_OP_required
def main_layout(abs_type,abs_id,society_id):
	# abs_id   = Cryptography.decrypt(abs_id)
	myclass     = Helper.call_custom_controller(abs_type)
	data        = myclass.main_layout(abs_type,abs_id,society_id)
	return data

@app.route('/new/<string:abs_type>/<society_id>', methods = ["GET", "POST"])
@RouteGroup.login_required 
@RouteGroup.validation_OP_required
def New(abs_type,society_id):
	myclass     = Helper.call_custom_controller(abs_type)
	abs_id      = myclass.New(abs_type,society_id)
	return redirect(url_for('main.main_layout',abs_type=abs_type,abs_id=abs_id,society_id=society_id))

@app.route('/step1/<abs_type>/<society_id>', methods = ["GET", "POST"])
@RouteGroup.login_required 
@RouteGroup.validation_OP_required
def Step1(abs_type,society_id):
	myclass     = Helper.call_custom_controller(abs_type)
	data        = myclass.Step1(abs_type,society_id)
	return data

@app.route('/step1post/<abs_type>/<society_id>', methods = ["POST"])
@RouteGroup.login_required 
def Step1post(abs_type,society_id):
	myclass     = Helper.call_custom_controller(abs_type)
	data        = myclass.Step1post(abs_type,society_id)
	return data
	

@app.route('/step2/<abs_type>/<society_id>', methods = ["GET", "POST"])
@RouteGroup.login_required 
@RouteGroup.validation_OP_required
def Step2(abs_type,society_id):
	myclass     = Helper.call_custom_controller(abs_type)
	data        = myclass.Step2(abs_type,society_id)
	return data

@app.route('/step2post/<abs_type>', methods = ["GET", "POST"])
@RouteGroup.login_required 
def StepPost_2(abs_type):
	if request.method == "POST":
		myclass     = Helper.call_custom_controller(abs_type)
		data        = myclass.StepPost_2(abs_type)
		return data
	else:
		return None

@app.route('/step3/<abs_type>',methods=["GET","POST"])
@RouteGroup.login_required 
@RouteGroup.validation_OP_required
def Step3(abs_type):
	myclass     = Helper.call_custom_controller(abs_type)
	data        = myclass.Step3(abs_type)
	return data

@app.route('/step3post/<abs_id>/<abs_type>', methods = ["GET", "POST"])
@RouteGroup.login_required 
def Step3post(abs_id,abs_type):
	myclass     = Helper.call_custom_controller(abs_type)
	data        = myclass.Step3post(abs_id,abs_type)
	return data

# IC Functons starts
@app.route('/step3getauthor/<abs_type>', methods = ["GET", "POST"])
@RouteGroup.login_required 
def Get_co_Instructor(abs_type):
	myclass     = Helper.call_custom_controller(abs_type)
	data        = myclass.Step3getauthor(abs_type)
	return data

@app.route('/total_duration/<abs_type>',methods=["GET","POST"])
@RouteGroup.login_required #check if login else automatically redirect to login pag
def Total_duration(abs_type):
	myclass     = Helper.call_custom_controller(abs_type)
	data        = myclass.Total_duration()
	return data

@app.route('/searchinstructor/<abs_type>',methods=["GET","POST"])
@RouteGroup.login_required #check if login else automatically redirect to login pag
def SearchInstructor(abs_type):
	myclass     = Helper.call_custom_controller(abs_type)
	data        = myclass.SearchInstructor(abs_type)
	return data

@app.route('/step3editauthor/<abs_type>',methods=["GET","POST"])
@RouteGroup.login_required #check if login else automatically redirect to login pag
def Step3editauthor(abs_type):
	myclass     = Helper.call_custom_controller(abs_type)
	data        = myclass.Step3editauthor(abs_type)
	return data

@app.route('/add_and_edit_to_authors/<abs_type>',methods=["GET","POST"])
@RouteGroup.login_required #check if login else automatically redirect to login pag
def add_and_edit_intructors(abs_type):#this will add coinstructor for IC
	myclass     = Helper.call_custom_controller(abs_type)
	data        = myclass.add_and_edit_intructors(abs_type)
	return data

@app.route('/step3model/<abs_type>',methods=["GET","POST"])
@RouteGroup.login_required #check if login else automatically redirect to login pag
def Step3model(abs_type):
	myclass     = Helper.call_custom_controller(abs_type)
	data        = myclass.Step3model(abs_type)
	return data

# IC Functons end

@app.route('/searchauthor/<abs_type>', methods = ["GET", "POST"])
@RouteGroup.login_required 
def Searchauthor(abs_type):
	myclass     = Helper.call_custom_controller(abs_type)
	data        = myclass.Searchauthor(abs_type)
	return data
	

@app.route('/add_presenting_author/<abs_type>', methods = ["GET", "POST"])
@RouteGroup.login_required 
def Add_update_Presenting_author(abs_type):
	myclass     = Helper.call_custom_controller(abs_type)
	data        = myclass.Add_update_Presenting_author(abs_type)
	return data

@app.route('/getccuploads/<abs_type>', methods = ["GET", "POST"])
@RouteGroup.login_required 
def GetCcUploads(abs_type):
	myclass     = Helper.call_custom_controller(abs_type)
	data        = myclass.Get_cc_uploads(abs_type)
	return data    

@app.route('/add_co_author/<abs_type>', methods = ["GET", "POST"])
@RouteGroup.login_required 
def Add_update_co_author(abs_type):
	myclass     = Helper.call_custom_controller(abs_type)
	data        = myclass.Add_update_co_author(abs_type)
	return data


@app.route('/ppstep1getauthor/<abs_type>', methods = ["GET", "POST"])
@RouteGroup.login_required 
def Step1_get_author(abs_type):
	myclass     = Helper.call_custom_controller(abs_type)
	data        = myclass.Step1_get_author(abs_type)
	return data

@app.route('/get_co_author/<abs_type>', methods = ["GET", "POST"])
@RouteGroup.login_required 
def Get_co_author(abs_type):
	myclass     = Helper.call_custom_controller(abs_type)
	data        = myclass.Get_co_author(abs_type)
	return data

@app.route('/step3deleteauthor', methods = ["GET", "POST"])
@RouteGroup.login_required 
def Step3deleteauthor():
	topic_id  = request.values["topic_id"]
	data       = AbstractModel().delete_author_userid(topic_id)#deleting the author
	return jsonify()

@app.route('/step4/<string:abs_type>',methods=["GET","POST"])
@RouteGroup.login_required 
@RouteGroup.validation_OP_required
def Step4(abs_type):
	myclass = Helper.call_custom_controller(abs_type)
	abs_id  = request.values.get("abs_id") or None    
	data    = myclass.Step4(abs_id,abs_type)
	return data

@app.route('/step4post/<abs_id>/<string:abs_type>', methods = ["GET", "POST"])
@RouteGroup.login_required 
def Step4post(abs_id,abs_type):
	myclass     = Helper.call_custom_controller(abs_type)
	data        = myclass.Step4post(abs_id,abs_type)
	return data
	
@app.route('/step5/<string:abs_type>',methods=["GET","POST"])
@RouteGroup.login_required 
@RouteGroup.validation_OP_required
def Step5(abs_type):
	myclass     = Helper.call_custom_controller(abs_type)
	abs_id  = request.values.get("abs_id") or None    
	data        = myclass.Step5(abs_id,abs_type)
	return data

@app.route('/mail/<abs_id>/<abs_type>/<society_id>', methods = ["GET","POST"])
@RouteGroup.login_required 
@RouteGroup.validation_OP_required
def Mail(abs_id,abs_type,society_id):
	myclass     = Helper.call_custom_controller(abs_type)
	data        = myclass.Mail(abs_id,society_id)
	return data
		
@app.route('/success/<string:abs_type>/<abs_id>/<user_id>/<society_id>',methods = ["GET","POST"])
@RouteGroup.login_required
def success(abs_type,abs_id,user_id,society_id):
	myclass     = Helper.call_custom_controller(abs_type)
	data        = myclass.success(abs_type,abs_id,user_id,society_id)
	return data

@app.route('/<abs_id>/<abs_type>/view/<society_id>',methods=["GET","POST"])
@RouteGroup.login_required 
def View(abs_id,abs_type,society_id):
	myclass     = Helper.call_custom_controller(abs_type)
	data        = myclass.View(abs_id,society_id)
	return data

@app.route('/coi_consent/<user_id>/<abs_id>/<abs_type>/<topic_id>', methods = ["GET","POST"])
@RouteGroup.login_required #check if login else automatically redirect to login pag
def co_instructor_consent(user_id,abs_id,abs_type,topic_id):
	myclass     = Helper.call_custom_controller(abs_type)
	data        = myclass.co_instructor_consent(user_id,abs_id,abs_type,topic_id)
	return data

@app.route('/consent_status/<user_id>/<topic_id>/<abs_type>/<int:status>',methods=["GET","POST"])
@RouteGroup.ic_consent_date
def Consent_status(user_id,topic_id,abs_type,status):
	myclass     = Helper.call_custom_controller(abs_type)
	data        = myclass.Consent_status(user_id,topic_id,abs_type,status)
	return data
	
@app.route('/change_co_instructor/<abs_id>/<abs_type>', methods = ["GET","POST"])
@RouteGroup.login_required #check if login else automatically redirect to login pag
def Change_co_instructor(abs_id,abs_type):
	myclass     = Helper.call_custom_controller(abs_type)
	data        = myclass.Change_co_instructor(abs_id,abs_type)
	return data

@app.route('/update_coi/<abs_type>', methods = ["GET","POST"])
@RouteGroup.login_required #check if login else automatically redirect to login pag
def Update_coi(abs_type):
	myclass     = Helper.call_custom_controller(abs_type)
	data        = myclass.Update_coi(abs_type)
	return data

@app.route('/send_reminder/<abs_type>', methods = ["GET","POST"])
@RouteGroup.login_required #check if login else automatically redirect to login pag
def Send_reminder(abs_type):
	myclass     = Helper.call_custom_controller(abs_type)
	data        = myclass.Send_reminder(abs_type)
	return data

# @app.route('/img_upload/<abs_id>/<abs_type>', methods = ["GET", "POST"])
# @RouteGroup.conf_required
# @RouteGroup.login_required 
# def Img_upload(abs_id,abs_type):
#     file = request.files.get('file')
#     # print(file)
#     bucketname = 'aios-app'
#     if file and bucketname:
#         img             = AbstractModel().get_img_upload(abs_id)
#         if img:
#             img             = img  
#             filepath        = img['path']
#             filename        = img['file_name']
#             foldername      = filepath+filename
#             foldername      = foldername.replace("https://"+bucketname+".s3-ap-southeast-1.amazonaws.com/", "")
#             s3 = boto3.resource("s3",aws_access_key_id='AKIAILLDAQ7NFUMVOYLQ',aws_secret_access_key='EEudWCsWeCIt/J9/z5m5htmUdGFJNzWFPvNQBIp/')
#             response  =  s3.Object(bucketname, foldername).delete() 
#             AbstractModel().delete_image(abs_id)
#         else:
#             pass
#         data_1 = {}
#         acl="public-read"
#         s3 = boto3.client("s3",aws_access_key_id='AKIAILLDAQ7NFUMVOYLQ',aws_secret_access_key='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')
#         filename = secure_filename(file.filename)
#         split_tup       = os.path.splitext(filename)
#         file_name       = split_tup[0]
#         file_extension  = split_tup[1]
#         file_str = filename
#         try:
#             bucket     = bucketname
#             foldername_1 = 'abs_uploads'
#             foldername_2 = conf_key
#             file_path  = "https://"+bucketname+".s3-ap-southeast-1.amazonaws.com/"+foldername_1+"/"+foldername_2+"/"+str(abs_type)+"/"+str(abs_id)+"/"
#             data_1     = {
#                         'path'      : file_path,
#                         'file_name' : file_str,
#                          }
#             update_data = AbstractModel().update_imge_db(abs_id,data_1)
#             response   = s3.upload_fileobj(file, bucket,foldername_1+'/'+foldername_2+'/'+str(abs_type)+'/'+str(abs_id)+'/'+ file_str, ExtraArgs={"ACL": acl,"ContentType": file.content_type})
#         except ClientError as e:
#             logging.error(e)
#         data_1['file_extension'] = file_extension
#         return jsonify(data_1)
#     else:
#         return jsonify()





@app.route('/upload_img/<abs_id>/<abs_type>', methods = ["GET","POST"])
@RouteGroup.login_required #check if login else automatically redirect to login pag
def Upload_image(abs_id,abs_type):
	myclass     = Helper.call_custom_controller(abs_type)
	data        = myclass.Upload_image(abs_id,abs_type)
	return data

@app.route('/delete_img/<abs_type>', methods = ["GET","POST"])
@RouteGroup.login_required #check if login else automatically redirect to login pag
def Delete_Image(abs_type):
	myclass     = Helper.call_custom_controller(abs_type)
	data        = myclass.Delete_Image(abs_type)
	return data

# @app.route('/remove_img', methods = ["GET", "POST"])
# @RouteGroup.conf_required
# @RouteGroup.login_required 
# def Remove_img():
#     abs_id  = request.values.get('abs_id')  
#     img    = AbstractModel().get_img_upload(abs_id)
#     if img:
#         bucketname = 'aios-app'
#         img        = img  
#         filepath   = img['path']
#         filename   = img['file_name']
#         foldername = filepath+filename
#         foldername = foldername.replace("https://"+bucketname+".s3-ap-southeast-1.amazonaws.com/", "")
#         s3         = boto3.resource("s3",aws_access_key_id='AKIAILLDAQ7NFUMVOYLQ',aws_secret_access_key='EEudWCsWeCIt/J9/z5m5htmUdGFJNzWFPvNQBIp/')
#         response   = s3.Object(bucketname, foldername).delete() 
#         AbstractModel().delete_image(abs_id)
#     else:
#         pass
#     return jsonify('success')
	

   


@app.route('/post_regret_remarks/<abs_type>/<topic_id>', methods = ["GET","POST"])
def postRegretRemarks(abs_type,topic_id):
	myclass     = Helper.call_custom_controller(abs_type)
	data        = myclass.postRegretRemarks(abs_type,topic_id)
	return data

@app.route('/img_upload_v1/<abs_id>/<abs_type>/<file_type>', methods = ["GET", "POST"])
@RouteGroup.login_required 
def Img_upload_v1(abs_id,abs_type,file_type):
	file = request.files.get('file')
	# print(file)
	bucketname = 'aios-app'
	if file and bucketname:
		img             = AbstractModel().get_img_upload_v1(abs_id,file_type)
		if img:
			img             = img  
			filepath        = img['path']
			filename        = img['file_name']
			foldername      = filepath+filename
			foldername      = foldername.replace("https://"+bucketname+".s3-ap-southeast-1.amazonaws.com/", "")
			s3 = boto3.resource("s3",aws_access_key_id='AKIAILLDAQ7NFUMVOYLQ',aws_secret_access_key='EEudWCsWeCIt/J9/z5m5htmUdGFJNzWFPvNQBIp/')
			response  =  s3.Object(bucketname, foldername).delete() 
			AbstractModel().delete_image(abs_id)
		else:
			pass
		data_1 = {}
		acl="public-read"
		s3 = boto3.client("s3",aws_access_key_id='AKIAILLDAQ7NFUMVOYLQ',aws_secret_access_key='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')
		filename = secure_filename(file.filename)
		file_str = filename
		try:
			bucket     = bucketname
			foldername_1 = 'abs_uploads'
			file_path  = "https://"+bucketname+".s3-ap-southeast-1.amazonaws.com/"+foldername_1+"/"+str(abs_type)+"/"+str(abs_id)+"/"
			data_1     = {
						'path'      : file_path,
						'file_name' : file_str,
						'img_type'  : file_type,
						 }
			update_data = AbstractModel().update_imge_db_v1(abs_id,data_1)
			response   = s3.upload_fileobj(file, bucket,foldername_1+'/'+str(abs_type)+'/'+str(abs_id)+'/'+ file_str, ExtraArgs={"ACL": acl,"ContentType": file.content_type})
		except ClientError as e:
			logging.error(e)
		return jsonify(data_1)
	else:
		return jsonify()
	
@app.route('/remove_img_v1/<file_type>', methods = ["GET", "POST"])
@RouteGroup.login_required 
def Remove_img_v1(file_type):
	abs_id  = request.values.get('abs_id')  
	img    = AbstractModel().get_img_upload_v1(abs_id,file_type)
	if img:
		bucketname = 'aios-app'
		img        = img  
		filepath   = img['path']
		filename   = img['file_name']
		foldername = filepath+filename
		foldername = foldername.replace("https://"+bucketname+".s3-ap-southeast-1.amazonaws.com/", "")
		s3         = boto3.resource("s3",aws_access_key_id='AKIAILLDAQ7NFUMVOYLQ',aws_secret_access_key='EEudWCsWeCIt/J9/z5m5htmUdGFJNzWFPvNQBIp/')
		response   = s3.Object(bucketname, foldername).delete() 
		AbstractModel().delete_image_v1(abs_id,file_type)
	else:
		pass
	return jsonify('success')
	

@app.route('/abstract_ajax_insert/<society_id>',methods=["POST"])
@RouteGroup.login_required
def InsertAjaxCall(society_id):
	abs_id=request.values.get('abs_id')
	user_id=request.values.get('user_id')
	title=request.values.get('title')
	synopsis=request.values.get('synopsis')
	data={
	'user_id':user_id,
	'title':title,
	'synopsis':synopsis,
	'category_id':request.values.get("category") or None
	}
	update_ajax_call=AbstractModel().UpdateAjaxCall(abs_id,data)
	data      = {"msg" : "success" ,"status" : 1 }
	json_data = json.dumps(data,default = str)
	return json_data

@app.route('/save_upload_details/<abs_id>/<abs_type>/<society_id>', methods = ["POST"])
# @RouteGroup.login_required 
def save_upload_details(abs_id,abs_type,society_id):
	filename       = request.values.get('file_name')
	img_type 	  = request.values.get('img_type') or None
	bucketname = 'aios-app'
	try:
		bucket     = bucketname
		foldername_1 = 'abs_uploads'
		foldername_2 = 'aioc24'
		file_path  = "https://"+bucketname+".s3-ap-southeast-1.amazonaws.com/"+foldername_1+"/"+foldername_2+"/"+str(abs_type)+"/"+str(abs_id)+"/"
		data_1     = {
					'path'      : file_path,
					'file_name' : filename,
					'img_type'  : img_type
					 }
		AbstractModel().delete_image(abs_id)			 
		update_data = AbstractModel().update_imge_db(abs_id,data_1)
		data_1['upload_id'] = update_data['max']
		return jsonify(data_1)	
	except ClientError as e:
		logging.error(e)
		return jsonify()

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