Sindbad~EG File Manager
from flask import Flask, request, Blueprint, jsonify, redirect, url_for,flash, render_template,session,Response,jsonify,json
from core.model.PhotoModel import PhotoModel
from datetime import timedelta,date,datetime
from .. import Cryptography,Auth,RouteGroup,Helper,Custom,AWSUpload
import base64
import os
import boto3, botocore
from botocore.exceptions import ClientError
import requests
from PIL import Image
from io import StringIO
import io
import ast
from urllib.parse import urlparse
app = Blueprint('photo', __name__)
@app.route('/<int:conf_id>/<conf_key>/photo_login', methods = ["GET", "POST"])
@RouteGroup.conf_required
def PhotoLogin(conf_id,conf_key):
conf = Auth.getConf(conf_id,conf_key)
# conf = PhotoModel().get_conf_photo(conf_id,conf_key)
now = datetime.now()
dt_string = now.strftime("%Y-%m-%d %H:%M:%S")
if conf :
return render_template('photo_upload/delegate_login.html',conf_id=conf_id,conf_key=conf_key,conf=conf)
else :
return "<h3 style='color:red;text-align:center'>Invalid URL </h3>"
@app.route('/<int:conf_id>/<conf_key>/photo_upload', methods = ["GET", "POST"])
@RouteGroup.conf_required
def PhotoUpload(conf_id,conf_key):
conf = Auth.getConf(conf_id,conf_key)
is_gen_number = conf["is_gen_number"]
if request.method == 'POST' :
delegate_no = request.values.get("delegate_no")
else :
delegate_no = request.args.get("delegate_no")
delegate_no = Helper.base64decode(delegate_no)
if delegate_no:
delegate_data = PhotoModel().delegateDataByDelegateNo(conf_id,conf_key,delegate_no,is_gen_number)
if delegate_data :
enc_delegate_no = Cryptography.encrypt(delegate_no)
return render_template('photo_upload/delegate_photo_upload.html',conf_id=conf_id,conf_key=conf_key,conf=conf,enc_delegate_no=enc_delegate_no,delegate_data=delegate_data)
else :
flash("Record not found" , "errorMsg")
return render_template('photo_upload/delegate_login.html',conf_id=conf_id,conf_key=conf_key,conf=conf)
else:
return redirect (url_for('photo.PhotoLogin',conf_id=conf_id ,conf_key=conf_key))
@app.route('/<int:conf_id>/<conf_key>/photo/at/<string:user_uuid>', methods = ["GET","POST"])
@RouteGroup.conf_required
def PhotoAtAutoLogin(conf_id,conf_key,user_uuid):
conf = Auth.getConf(conf_id,conf_key)
is_gen_number = conf["is_gen_number"]
delegateData = PhotoModel().delegateDataByDelegateuser_uuid(conf_id,user_uuid)
if delegateData :
if is_gen_number == 'ref_number':
delegate_no = delegateData["ref_no"]
else:
delegate_no = delegateData['delegate_no']
delegate_no = Helper.base64encode(delegate_no)
return redirect(url_for('photo.PhotoUpload', delegate_no = delegate_no,conf_id=conf_id,conf_key=conf_key))
else:
# flash("Please Check your credentials","AutoLoginError")
return "<h3 style='color:red;text-align:center'>Please Check your credentials</h3>"
# @app.route('/<int:conf_id>/<conf_key>/post_photo_upload',methods = ['POST', 'GET'])
# @RouteGroup.conf_required
# def PostPhotoUpload(conf_id,conf_key):
# now = datetime.now()
# current_dt = now.strftime("%Y-%m-%d %H:%M:%S")
# conf_data = Auth.getConf(conf_id,conf_key)
# if conf_data:
# delegate_id = request.values.get('delegate_id')
# file_name = request.values.get('file_name',None) or None
# image_data = request.values.get('image_data',None) or None
# get_delegate_data = PhotoModel().delegateDataByDelegateId(conf_id,conf_key,delegate_id)
# if get_delegate_data :
# image_name = None
# image_path = None
# #######
# if file_name:
# file_upload = AwsFileUpload_1(delegate_id,file_name,image_data,conf_key)
# else:
# file_upload = None
# # return jsonify(file_upload)
# # If file upload function call then this block will execute
# if file_upload :
# file_upload = ast.literal_eval(file_upload)
# file_upload_msg = file_upload["msg"]
# file_upload_status = file_upload["status"]
# if file_upload_status == 1 :
# image_path = file_upload["image_path"] or None
# image_name = file_upload["image_name"] or None
# image_url_1 = image_path+image_name
# update_stmt = "update delegates set updated_at = '"+current_dt+"' , del_img_filename = '"+str(image_name)+"' , del_img_path = '"+str(image_path)+"' where delegate_id = " + str(delegate_id) + " ;"
# updated_data = PhotoModel().UpdateDelegatePhoto(update_stmt,delegate_id,conf_id)
# user_id = get_delegate_data.get('user_id')
# if user_id:
# CallUserProfileUpdateAPI(conf_data.get('society_id'),user_id,image_name,image_path)
# msg = "Updated Successfully"
# return_data = { "image_name" : image_name,"image_path" : image_path,"image_url_1":image_url_1, "msg" : msg, "status" : 1 }
# else :
# return file_upload_msg
# else:
# return_data = { "image_name" : '',"image_path" : '',"image_url_1":"", "msg" : "The server encountered an error processing the request. Please try again, Sorry for the trouble.", "status" : 0 }
# # if image_data:
# # image_name = get_delegate_data['image_name'] or ''
# # image_path = get_delegate_data['image_path']
# # update_stmt = "update delegates set updated_at = '"+current_dt+"' , image_name = '"+str(image_name)+"' , image_path = '"+str(image_path)+"' where delegate_no = " + str(delegate_no) + " ;"
# # else:
# # update_stmt = "update delegates set updated_at = '"+current_dt+"' , image_name = NULL , image_path = NULL where delegate_no = " + str(delegate_no) + " ;"
# # update_data = { 'full_name':full_name, 'email':email,'mobile':mobile,'role':role }
# # update_delegate_details = BadgeModel().UpdateDelegateDeatils(del_table_name,update_data,delegate_no)
# return json.dumps(return_data,default =str)
# else :
# flash("Invalid Delegate Number" , "errorMsg")
# return redirect (url_for('photo.PhotoUpload',conf_id=conf_id ,conf_key=conf_key))
# else:
# return "<h1>Invalid URL</h1>"
# def AwsFileUpload_1(delegate_id,file_name,image_data,conf_key):
# now = datetime.now()
# curr_dt = now.strftime("%Y-%m-%d %H:%M:%S")
# image_name = None
# image_path = None
# bucket = "delegateapp"
# try:
# if file_name:
# if image_data:
# split_tup = os.path.splitext(file_name)
# file_name = split_tup[0]
# file_extension = split_tup[1]
# filename_str = str(delegate_id) + "-delegate_image_"+ datetime.now().strftime("%Y%m%d-%H%M%S") +file_extension
# if " " in filename_str :
# filename_str = filename_str.replace(" ","")
# delegate_id = str(delegate_id) if delegate_id else None
# foldername = "delegate_photo/"+conf_key
# acl = "public-read"
# s3 = boto3.client("s3",aws_access_key_id='AKIAILLDAQ7NFUMVOYLQ',aws_secret_access_key='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')
# image_data = base64.b64decode(image_data.split(',')[1])
# image = Image.open(io.BytesIO(image_data))
# if image.mode == 'RGBA':
# image = image.convert('RGB')
# image.save(os.path.join('core/static/temp_images', filename_str))
# img_path = os.path.join('core/static/temp_images/'+ filename_str)
# with open(img_path, 'rb') as f:
# response = s3.upload_fileobj(f,bucket,foldername+'/'+ filename_str, ExtraArgs={"ACL": acl, "ContentType": "image/jpeg"})
# os.remove('core/static/temp_images/'+ filename_str)
# data_1 = {'bucketname' : bucket,'foldername':foldername,'file_name':filename_str+"?"+str(Helper.getcurrenttimestamp()),'msg':'Image successfully uploded','file_extension':file_extension,'status':1}
# file_path = f"https://{bucket}.s3.ap-southeast-1.amazonaws.com/{foldername}"
# image_path = file_path
# image_name = filename_str
# msg = "Added Successfully"
# return_data = { "image_name" : image_name,"image_path" : image_path, "msg" : msg, "status" : 1 }
# else :
# msg = "File name is not exists."
# return_data = { "image_name" : image_name,"image_path" : image_path, "msg" : msg, "status" : 2 }
# return json.dumps(return_data,default =str)
# else :
# msg = "File not exists. Please try again"
# return_data = { "image_name" : image_name,"image_path" : image_path, "msg" : msg, "status" : 3 }
# return json.dumps(return_data,default =str)
# except ClientError as e:
# return_data = { "image_name" : image_name,"image_path" : image_path, "msg" : str(e), "status" : 401 }
# return json.dumps(return_data,default =str)
@app.route('/<int:conf_id>/<conf_key>/remove_image_aws', methods=["GET", "POST"])
def RemoveImageAWS(conf_id, conf_key):
now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
url = request.values.get('image_url')
parsed_url = urlparse(url)
image_name = parsed_url.path.split('/')[-1]
delegate_id = request.values.get('delegate_id')
acl = "public-read"
s3 = boto3.resource("s3", aws_access_key_id='AKIAILLDAQ7NFUMVOYLQ', aws_secret_access_key='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')
bucket = "delegateapp"
foldername = "delegate_photo/"+conf_key
path = f"{foldername}/{image_name}"
try:
response = s3.Object(bucket, path).delete()
print("Object deleted successfully")
except Exception as e:
print(f"An error occurred: {str(e)}")
delete_in_db = PhotoModel().delete_file_nameand_path(conf_id,delegate_id)
if delete_in_db == "success":
data = {'msg': "Removed Successfully", 'status': 1}
else:
data = {'delete_in_db': delete_in_db, 'status': 2}
return json.dumps(data, default=str)
# @app.route('/api/update_photo_image', methods=["GET", "POST"])
# def UpdatePhotoImage():
# now = datetime.now()
# curr_dt = now.strftime("%Y-%m-%d %H:%M:%S")
# if request.method in ['GET', 'POST']:
# user_id = request.values.get('user_id') or None
# society_id = request.values.get('society_id') or None
# del_img_path = request.values.get('del_img_path') or None
# del_img_filename = request.values.get('del_img_filename') or None
# update_del_photo = PhotoModel().update_file_nameand_path(user_id,society_id,del_img_path,del_img_filename,curr_dt)
# return "success"
# else:
# return "Invalid request method", 405
def CallUserProfileUpdateAPI(society_id,user_id,image_name,image_path):
url = f"http://profile.vrsi.in/api/profile_photo/{society_id}/{user_id}"
payload = {'attach_file_name': image_name,'attach_path': image_path}
files=[]
headers = {}
response = requests.request("POST", url, headers=headers, data=payload, files=files)
print(response.text)
return "success"
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists