Sindbad~EG File Manager
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