Sindbad~EG File Manager

Current Path : /home/numerotech/pvkn-school.numerotech.com/pvkn_school/core/controller/
Upload File :
Current File : //home/numerotech/pvkn-school.numerotech.com/pvkn_school/core/controller/SclDonationController.py

from flask import Flask, request, Blueprint, jsonify, redirect, url_for,flash, render_template,session,json
from core.model.SclDonationModel import SclDonationModel
import datetime
from .. import config
from os.path import join, dirname, realpath
from werkzeug.utils import secure_filename
from .. import current_app
from datetime import timedelta,date,datetime
from flask import session, app

from os.path import join, dirname, realpath
from flask import send_file,send_from_directory

from core.library.cryptography import Cryptography
import ast
import pytz

import os.path
import urllib
from urllib.parse import unquote
import boto3, botocore
# from botocore.exceptions import ClientError
from core.library.email import EMAIL
import random

# from langdetect import detect

# lang = detect("en,ta")


app = Blueprint('scl_donation', __name__)


UPLOADS_PATH = join(dirname(realpath(__file__)), 'static')
UTC = pytz.utc
IST = pytz.timezone('Asia/Kolkata')
# datetime_ist = datetime.now(IST)

@app.route('/', methods = ["GET"])
def Home():
	lang =request.args.get('lang')
	if lang == "en" :
		return render_template('schooldonation/landing_screen.html',lang=lang)
	else :
		return render_template('schooldonation/landing_screen.html',lang=lang)
	
@app.route('/register', methods = ["GET"])
def Register():
	user_id      =  request.values.get('user_id')

	if user_id and int(user_id) > 0  :
		data= SclDonationModel().getUserByID(user_id)
	else :
		data = None

	lang =request.args.get('lang')
	if lang == "en" :
	   return render_template('schooldonation/register.html',data=data,lang=lang)
	else :
		return render_template('schooldonation/register.html',data=data,lang=lang)

@app.route('/post_registration', methods = ["POST"])
def PostRegistration():
	if request.method == "POST":
		form_name			  = request.form['form_name']
		now                   = datetime.now()
		curr_dt               = now.strftime('%Y-%m-%d %H:%M:%S')
		prefix       		  = request.values.get('prefix' or None)  or None
		full_name     		  = request.values.get('full_name'  or None)  or None
		email        		  = request.values.get('email'  or None)  or None
		mobile        		  = request.values.get('mobile'  or None)  or None
		completed_12th		  = request.values.get('completed_12th'  or None)  or None
		period 				  = request.values.get('period'  or None)  or None
		address_during_school = request.values.get('address_during_school'  or None)  or None
		current_address       = request.values.get('current_address'  or None)  or None
		permanent_address     = request.values.get('permanent_address'  or None)  or None
		edu_background        = request.values.get('edu_background'  or None)  or None
		qualification         = request.values.get('qualification'  or None)  or None
		current_occupation    = request.values.get('current_occupation' or None) or None
		occupation_name       = request.values.get('occupation_name' or None) or None
		retired_as            = request.values.get('retired_as' or None) or None
		help_info             = request.values.get('help_info' or None) or None
		lang                  = request.values.get('lang')

		data = {'prefix': prefix,'full_name': full_name,'email': email,'mobile': mobile,'completed_12th': completed_12th,'period': period,'address_during_school': address_during_school,'current_address': current_address,'permanent_address': permanent_address,'edu_background': edu_background,'qualification': qualification,'current_occupation': current_occupation,'occupation_name': occupation_name,'retired_as': retired_as ,'help_info': help_info,'created_at': [curr_dt]	}
		check_email = SclDonationModel().userDataByEmail(email)
		if check_email :
			if form_name == 'reg_eng' :
				flash(" Email id already register with us. Please login with email id. <a href="+ request.host_url + url_for('scl_donation.Login',lang="en") +">Click here..</a>","errorMsg")
				return render_template('schooldonation/register.html',data=data,str=str,lang=lang)
			else :
				flash("மின்னஞ்சல் ஐடி ஏற்கனவே எங்களிடம் பதிவு செய்யப்பட்டுள்ளது. மின்னஞ்சல் ஐடி மூலம் உள்நுழையவும். <a href="+ request.host_url + url_for('scl_donation.Login',lang="ta") +">இங்கே கிளிக் செய்யவும்..</a>","errorMsg")
				return render_template('schooldonation/register.html',data=data,str=str,lang=lang)

		save_user = SclDonationModel().insertUser(data)
		if save_user:
			user_id   = save_user["user_id"]
			enc_user_id = Cryptography.encrypt(user_id)
			return redirect(url_for('scl_donation.FileUpload',enc_user_id=enc_user_id,lang=lang))
		else :
			flash("Try Again." ,"errorMsg")
			user_id = 0
			return redirect(url_for('scl_donation.Home',id=user_id,lang=lang))
	return render_template('schooldonation/register.html',lang=lang)


@app.route('/login', methods = ["GET"])
def Login():
	lang =request.args.get('lang')
	if lang == "en" :
	   return render_template('schooldonation/login_screen.html',lang = lang)
	else :
		return render_template('schooldonation/login_screen.html',lang=lang)


	
@app.route('/post_login', methods = ["POST"])
def PostLogin():
	now           = datetime.now()
	curr_dt       = now.strftime('%Y-%m-%d %H:%M:%S')
	lang =request.args.get('lang')
	email         = request.form['email'] or None
	if email :
		user_data = SclDonationModel().userDataByEmail(email)
		if user_data :
			user_id = user_data["user_id"]
			enc_user_id = Cryptography.encrypt(user_id)
			# generate random otp and send to email after that navigate to otp verify screen
			fixed_digits    = 4
			otp             = random.randrange(1111, 9999, fixed_digits)
			subject         =  str(otp) + " -  OTP for login - PVKN HR Sec School "
			otp_expiry_at   = now + timedelta(minutes = 30)
			html            = render_template('schooldonation/email/otp_mail.html',data = user_data , otp = otp ,otp_expiry_at = otp_expiry_at)
			data_for_update = {'otp_sent_at' : curr_dt,'otp_expiry_at' : otp_expiry_at ,'otp' :otp,'updated_at' : curr_dt}
			updateOTP = SclDonationModel().updateOTP(user_id,data_for_update)
			EMAIL.sendMail(subject,html,email)
			lo = email.find('@')
			if lo>0:
				mask_email =  email[0]+"*****"+email[lo-1:]
			else :
				mask_email = email	

			if lang == "en" :
				msg = "OTP  has been sent to your registered email-id "+ mask_email + " ." 	
				flash(msg, "successMsg")
				return redirect(url_for('scl_donation.VerifyOTP',enc_user_id=enc_user_id,lang=lang))
			else :
				msg = "உங்கள் பதிவு செய்யப்பட்ட மின்னஞ்சல் ஐடிக்கு OTP அனுப்பப்பட்டுள்ளது  "+ mask_email + "." 	
				flash(msg, "successMsg")
				return redirect(url_for('scl_donation.VerifyOTP',enc_user_id=enc_user_id,lang=lang))

		else : 
			flash("Email id not registered. You can register now" , "errorMsg")
			return redirect(url_for('scl_donation.Register',lang=lang))
	else : 
		flash("Email id not registered. You can register now" , "errorMsg")
		return redirect(url_for('scl_donation.Register',lang=lang))	

# resent otp function
@app.route('/resent_otp', methods = ["GET"])
def ResentOTP():
	now           = datetime.now()
	curr_dt       = now.strftime('%Y-%m-%d %H:%M:%S')
	lang =request.args.get('lang')
	enc_user_id   = request.values.get('enc_user_id')
	enc_user_id   = unquote(enc_user_id) 
	if enc_user_id : 
		user_id      = Cryptography.decrypt(enc_user_id)
		user_data    = SclDonationModel().userDataByUserId(user_id)
		if user_data : 
			email  = user_data["email"]
			
			# generate random otp and send to email after that navigate to otp verify screen
			fixed_digits    = 4
			otp             = random.randrange(1111, 9999, fixed_digits)
			subject         =  str(otp) + " -  OTP for login - PVKN HR Sec School "
			otp_expiry_at   = now + timedelta(minutes = 30)
			html            = render_template('schooldonation/email/otp_mail.html',data = user_data , otp = otp ,otp_expiry_at = otp_expiry_at)
			data_for_update = {'otp_sent_at' : curr_dt,'otp_expiry_at' : otp_expiry_at ,'otp' :otp,'updated_at' : curr_dt}
			updateOTP = SclDonationModel().updateOTP(user_id,data_for_update)
			EMAIL.sendMail(subject,html,email)
			lo = email.find('@')
			if lo>0:
				mask_email =  email[0]+"*****"+email[lo-1:]
			else :
				mask_email = email	
		
			if lang == "en" :
				msg = "OTP  has been sent to your registered email-id "+ mask_email + " ." 	
				flash(msg, "successMsg")
				return redirect(url_for('scl_donation.VerifyOTP',enc_user_id=enc_user_id,lang=lang))
			else :
				msg = "உங்கள் பதிவு செய்யப்பட்ட மின்னஞ்சல் ஐடிக்கு OTP அனுப்பப்பட்டுள்ளது  "+ mask_email + " ." 	
				flash(msg, "successMsg")
				return redirect(url_for('scl_donation.VerifyOTP',enc_user_id=enc_user_id,lang=lang))
			
		else : 
			flash("Email id not registered. You can register now" , "errorMsg")
			return redirect(url_for('scl_donation.Register',lang=lang))
	else : 
		flash("Invalid URL " ,"errorMsg")			
		return redirect(url_for('scl_donation.Register',lang=lang))
	# return render_template('users/login_screen.html')


# end

@app.route('/verfy_otp', methods = ["GET"])
def VerifyOTP():
	lang =request.args.get('lang')
	enc_user_id   = request.values.get('enc_user_id')
	enc_user_id   = unquote(enc_user_id) 
	if enc_user_id : 
		user_id      = Cryptography.decrypt(enc_user_id)
		user_data    = SclDonationModel().userDataByUserId(user_id)
		if user_data : 
			if lang == "en" :
				return render_template('schooldonation/verify_otp.html',user_id=user_id,enc_user_id=enc_user_id,lang=lang)	
			else :
				return render_template('schooldonation/verify_otp.html',user_id=user_id,enc_user_id=enc_user_id,lang=lang)	
		else:	
			flash("Invalid URL" ,"errorMsg")
			return redirect(url_for('scl_donation.Login',lang=lang))	
	else :
		flash("Invalid URL" ,"errorMsg")
		return redirect(url_for('scl_donation.Login',lang=lang))

@app.route('/post_verfy_otp', methods = ["POST"])
def PostVerifyOTP():
	lang =request.args.get('lang')

	user_id       = request.form['user_id']	
	enc_user_id   = request.form['enc_user_id']	
	otp_number    = request.form['otp_number']
	now           = datetime.now()
	curr_dt       = now.strftime('%Y-%m-%d %H:%M:%S')
	user_data   = SclDonationModel().userDataByUserId(user_id)
	if user_data :
		db_otp = user_data["otp"]
		if db_otp and db_otp == int(otp_number) :
			# check expiry time here
			session["user"] = user_data
			data = {'otp' : None , 'otp_verify_at' : curr_dt,'updated_at' : curr_dt}
			# flash("OTP successfully verified" ,"successMsg")
			SclDonationModel().updateOTP(user_id,data)
			if lang == "en" :
				return redirect(url_for('scl_donation.FileUpload' ,enc_user_id = enc_user_id,lang=lang))
			else :
				return redirect(url_for('scl_donation.FileUpload' ,enc_user_id = enc_user_id,lang=lang))
		else :
			if lang == "en" :
				flash("Invalid OTP." ,"errorMsg")
				return redirect(url_for('scl_donation.VerifyOTP' ,enc_user_id = enc_user_id,lang=lang))
			else :
				flash("தவறான OTP." ,"errorMsg")
				return redirect(url_for('scl_donation.VerifyOTP' ,enc_user_id = enc_user_id,lang=lang))
			

	else :
		flash("Invalid URL." ,"errorMsg")
		return redirect(url_for('scl_donation.VerifyOTP',enc_user_id = enc_user_id))
					 

@app.route('/file_upload',methods=["GET","POST"])
def FileUpload():
	lang =request.values.get('lang')
	enc_user_id   = request.values.get('enc_user_id')
	enc_user_id   = unquote(enc_user_id) 
	if enc_user_id : 
		user_id      = Cryptography.decrypt(enc_user_id)
		user_data    = SclDonationModel().userDataByUserId(user_id)
		if user_data  :
			
			if lang == "en" :
				
				return render_template('schooldonation/file_upload.html',user_id=user_id,enc_user_id = enc_user_id,user_data = user_data,lang=lang)
			else :
				
				return render_template('schooldonation/file_upload.html',user_id=user_id,enc_user_id = enc_user_id,user_data = user_data,lang=lang)
		else :
			flash("Invalid URL" , "errorMsg")
			return redirect(url_for('scl_donation.Home',lang=lang))	
	else : 
		flash("Invalid URL" , "errorMsg")
		return redirect(url_for('scl_donation.Home',lang=lang))
	

@app.route('/post_file_upload',methods=["GET","POST"])
def PostFileUpload(acl="public-read"):
	try:
		now           = datetime.now()
		curr_dt       = now.strftime('%Y-%m-%d %H:%M:%S')
		dates         = now.strftime('%Y%m%d%H%M%S') 
		user_id       = request.values.get('user_id')
		enc_user_id   = Cryptography.encrypt(user_id)
		s3              = boto3.client("s3",aws_access_key_id='AKIAILLDAQ7NFUMVOYLQ',aws_secret_access_key='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')
		files           = request.files.getlist("file")
	
		for file in files:
			if file.filename:
				filename        = secure_filename(file.filename)
				split_tup       = os.path.splitext(filename)
				file_name       = split_tup[0]
				file_extension  = split_tup[1]
				attach_type     = "utr_"+str(dates)
				file_str        = attach_type+file_extension
				
				if " " in file_str :
					file_str = file_str.replace(" ","")
				try:
					bucket     = "aws-s3store"
					user_id    = str(user_id)
					foldername = "payments"
					response   = s3.upload_fileobj(file, bucket,foldername+'/'+user_id+'/'+ file_str, ExtraArgs={"ACL": acl,"ContentType": file.content_type})
					
					file_path  = "https://aws-s3store.s3-ap-southeast-1.amazonaws.com/"+foldername+"/"+user_id
					
					data_for_save = { 'user_id' : user_id,'file_path' : file_path,'file_name' : file_str,'file_extension':file_extension,'created_at':curr_dt }
					save_data  = SclDonationModel().SavePaymentData(data_for_save)
					payment_id = save_data
					data_1     = { 'payment_id' : payment_id,'bucketname' :bucket,'foldername':foldername,'file_name':file_str,'msg':'Image successfully uploded','file_extension':file_extension,'status':1}

					return json.dumps(data_1)
				except ClientError as e:
					logging.error(e)
					data_1 = {'payment_id' : 0 ,'bucketname' :'','foldername':'','file_name':'','msg':str(e),'file_extension':'','status':2}
					json_data   = json.dumps(data_1)
				return json_data
			else :
				data_1 = {'payment_id' : 0,'bucketname' :'','foldername':'','file_name':'','msg':'File type invalid','file_extension':'','status':3}	
				json_data   = json.dumps(data_1)
				return json_data
	except Exception as e:
		print(str(e))
		data_1 = {'payment_id' : 0,'bucketname' :'','foldername':'','file_name':'','msg':str(e),'file_extension':'','status':401}	
		# data = {'msg' : str(e) , 'status' : 401}
		json_data = json.dumps(data_1)
		return json_data
	

@app.route('/delete_image', methods = ["GET","POST"])
def DeleteImage():
	ua    = UserAttachments().get_user_attach(attach_id,attach_type_id)
	if ua is None:
		data = {'msg':'Deleted','status' : 1}
	else:
		filepath        = ua['attach_path']
		filename        = ua['attach_file_name']
		foldername      = filepath+ "/"+filename
		foldername      = foldername.replace(societyData['aws_url'], "")
		s3              = boto3.resource("s3",aws_access_key_id='AKIAILLDAQ7NFUMVOYLQ',aws_secret_access_key='EEudWCsWeCIt/J9/z5m5htmUdGFJNzWFPvNQBIp/')
		response        = s3.Object(societyData['aws_bucket'], foldername).delete()
		UserAttachments().delete_image(attach_id,attach_type_id)
		data            = {'msg':'Deleted','status' : 1}
		json_data   = json.dumps(data)
		return json_data 

# ---------------------------------------
@app.route('/post_payment_form', methods = ["POST"])
def PostPaymentForm():
	if request.method == "POST":
		lang =request.args.get('lang')
		datetime_ist  = datetime.now(IST)
		curr_dt       = datetime_ist.strftime("%Y-%m-%d %H:%M:%S")
		utr_number    = request.values.get('utr_number')	
		amount        = request.values.get('amount') or '0.00'
		user_id       = request.values.get('user_id')	
		enc_user_id   = request.values.get('enc_user_id')	
		payment_id    = request.values.get('payment_id')
		email         = request.values.get('email') or None
		data 		  = {
		'utr_number' : utr_number,
		'amount'     : amount,
		'paid_at'    : curr_dt,
		'updated_at' : curr_dt
		}
		if payment_id and int(payment_id) > 0 :
			update_payment = SclDonationModel().updatePayment_data(user_id,payment_id,data)
			if update_payment:
				html = render_template('schooldonation/email/donation_submit_mail.html',data= update_payment)
				subject = "Thanks for your support. Your UTR number is" + utr_number
				# send mail here thanks mail 
				if email :
					EMAIL.sendMail(subject,html,email)

					
					if lang == "en" :
						flash("Thanks for your support. Payment confimation mail has been sent to your rgistered mail-id." , "successMsg")
					else :
						flash("உங்கள் ஒத்துழைப்புக்கு நன்றி. உங்கள் பதிவு செய்யப்பட்ட மெயில்-ஐடிக்கு பணம் செலுத்தும் உறுதிப்படுத்தல் அஞ்சல் அனுப்பப்பட்டுள்ளது." , "successMsg")
				else : 
					if lang == "en" :
						flash("Thanks for your support. Payment confimation mail has been sent to your rgistered mail-id." , "successMsg")
					else :
						flash("உங்கள் ஒத்துழைப்புக்கு நன்றி. உங்கள் பதிவு செய்யப்பட்ட மெயில்-ஐடிக்கு பணம் செலுத்தும் உறுதிப்படுத்தல் அஞ்சல் அனுப்பப்பட்டுள்ளது." , "successMsg")
				
				if session.get("user") :
					session.pop('user', None)
				else : 
					pass	
				lang =request.args.get('lang')
				return redirect(url_for('scl_donation.Home',lang=lang))
			else :
				flash("Invalid trasaction .Please try again.","errorMsg")
					
		else :
			flash("Invalid trasaction .Please try again.","errorMsg")
			return redirect (url_for('scl_donation.FileUpload' ,enc_user_id=enc_user_id,lang=lang))	
		# if user_id> 0 :
		# 	enc_user_id = Cryptography.encrypt(user_id)
		# 	return redirect(url_for('user.FileUpload',enc_user_id=enc_user_id))
	else :
		flash("Try Again." ,"errorMsg")
		return redirect(url_for('scl_donation.Home',id=user_id,lang=lang))
	return render_template('schooldonation/register.html',lang=lang)





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