Sindbad~EG File Manager

Current Path : /home/numerotech/test-abs.numerotech.com/common_abs_v2/core/controller/
Upload File :
Current File : //home/numerotech/test-abs.numerotech.com/common_abs_v2/core/controller/UploadController.py

from flask import Flask, request, Blueprint, jsonify, redirect, url_for,flash, render_template,session, app
from core.model.UserModel import UserModel
from core.model.AbstractModel import AbstractModel
from core.model.BoModel import BoModel
from random import randint
import datetime
from core.library.email import EMAIL
from datetime import timedelta,date,datetime
from core.library.cryptography import Cryptography
from core.library.route_group import RouteGroup
from core.library.auth import Auth
from core.library.helper import Helper
import ast
from urllib.parse import unquote
from collections import defaultdict
import boto3, botocore
from botocore.exceptions import ClientError
from os import listdir
from os.path import join, dirname, realpath
import os
from os import path
from werkzeug.utils import secure_filename

#name : Priyavarthana
#version : 1
#title: For uploading the abstracts such as poster,presentation,fulltext,....
#date:16/11/2024 11:37

app = Blueprint('upload', __name__)	
	
@app.route('/attachment_uploads/<selection_type_id>/<abs_type>/<conf_id>/<conf_key>', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.login_required 
def AttachmentUploads(selection_type_id,abs_type,conf_id,conf_key):
	confData = Auth.get_conference(conf_id)
	society_id  = confData.get("society_id") 
	user_id     = Auth.get_user(society_id).get('user_id')
	abstract    =AbstractModel().get_submitted_abstract(user_id,conf_id,selection_type_id,confData.get('conf_schema'))
	return render_template('uploaded/step1.html',abstract=abstract,abs_type=abs_type,conf_id=conf_id,conf_key=conf_key,user_id=user_id,selection_type_id=selection_type_id)
		
		
@app.route('/get_attachment_uploads/<abs_type>/<conf_id>/<conf_key>', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.login_required 
def getAttachmentUploads(abs_type,conf_id,conf_key):
	confData = Auth.get_conference(conf_id)
	json              = {'msg':'','status' : 1,'data':''}
	abs_id            = request.values.get('abs_id')
	user_id           = request.values.get('user_id')
	selection_type_id = request.values.get('selection_type_id')
	if int(conf_id)  in (51,49):
		img               = AbstractModel().get_uploaded_file_rock(abs_id,conf_id,confData.get('conf_schema'))
	else:
		img               = AbstractModel().get_fulltext_by_abs_id(abs_id,confData.get('conf_schema'))
	abstract          = AbstractModel().get_submitted_abstract(user_id,conf_id,selection_type_id,confData.get('conf_schema'))
	json['data']      = render_template('uploaded/upload_img.html',img=img,abs_id=abs_id,abstract=abstract,abs_type=abs_type,conf_id=conf_id,conf_key=conf_key)
	return jsonify(json)


@app.route('/img_upload/<abs_id>/<abs_type>/<conf_id>/<conf_key>', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.login_required 
def Img_upload(abs_id,abs_type,conf_id,conf_key):
	confData = Auth.get_conference(conf_id)
	file       = request.files.get('file')
	img_type   = request.values.get('img_type') or None
	bucketname = 'common-application'
	if file and bucketname:
# 		if int(conf_id) in (51,49):
# 			img = AbstractModel().get_img_upload_v1(abs_id,img_type)
# 		else:
		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]
		
		absData         = BoModel().get_keynote_abstract(abs_id,confData.get('conf_schema'))
		
		if absData and absData['abs_no']:
			file_str        = str(absData['abs_type'])+str(absData['abs_no'])+str(file_extension)
		else:
			if img_type is None:
				file_str        = "attachment"+str(file_extension)
			else:
				file_str        = str(img_type)+file_extension
# 		print(file_str)
		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     = {
						'path'      : file_path,
						'file_name' : file_str,
						'img_type'  : img_type
						 }
			data_1     = {
						'path'      : file_path,
						'file_name' : file_str+"?"+str(Helper.getcurrenttimestamp()),
						'img_type'  : img_type
						 }
			update_data = AbstractModel().update_imge_db(abs_id,data)
			
			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
		data_1['upload_id'] = update_data['max']
		return jsonify(data_1)
	else:
		return jsonify()

@app.route('/remove_img/<conf_id>/<conf_key>', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.login_required 
def Remove_img(conf_id,conf_key):
	abs_id    = request.values.get('abs_id')  
	upload_id = request.values.get('upload_id')
	img       = AbstractModel().get_img_upload_by_upload_id(upload_id)
	if img:
		bucketname = 'common-application'  
		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_abs_upload(upload_id)
	else:
		pass
	return jsonify('success')


@app.route('/save_upload_details/<abs_id>/<abs_type>/<conf_id>/<conf_key>', methods = ["POST"])
@RouteGroup.conf_required
# @RouteGroup.login_required 
def save_upload_details(abs_id,abs_type,conf_id,conf_key):
	filename       = request.values.get('file_name')
	bucketname = 'common-application'
	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' : filename,
					'img_type'  : None
					 }
		# print(data_1)
		AbstractModel().delete_image(abs_id)			 
		update_data = AbstractModel().update_imge_db(abs_id,data_1)
		data_1.update(update_data)
		return jsonify(data_1)	
	except ClientError as e:
		logging.error(e)
		return jsonify()

@app.route('/delete_file', methods=['POST'])
def Deletefile():
	now = datetime.now()
	current_dt = now.strftime("%Y-%m-%d %H:%M:%S")
	upload_id= request.values.get('upload_id')
	path= request.values.get('path')
	file_name=request.values.get('file_name')
	bucketname='common-application'
	
	foldername =path+"/"+file_name
	# print(foldername)
	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()
	delete_file=AbstractModel().Deletefile_v1(upload_id)
	data      = {"msg" : "success" ,"status" : 1 }
	return jsonify(data)

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