Sindbad~EG File Manager
from flask import Flask, request, Blueprint, jsonify, redirect, url_for,flash, render_template,session,json,Response
from random import randint
from core.model.Aws import Aws
import datetime
from datetime import timedelta,date,datetime
from .. import Cryptography,Auth,Helper,RouteGroup
from core.library.email import EMAIL
from flask import session, app
from os import listdir
from os.path import join, dirname, realpath
from werkzeug.utils import secure_filename
import os
from os import path
import urllib.request
import math, random
import base64
from urllib.parse import unquote
import boto3, botocore
from botocore.exceptions import ClientError
import logging
import requests
import flask
import pdfkit
app = Blueprint('user', __name__)
@app.route('/',methods = ["GET", "POST"])
def index():
if session.get("Awssession") :
return redirect(url_for('aws.AwsUpload'))
else:
return redirect(url_for('user.AWSLogin'))
@app.route('/aws_login',methods = ["GET", "POST"])
def AWSLogin():
if session.get("Awssession") :
return redirect(url_for('aws.AwsUpload'))
else:
return render_template('aws_files/aws_login_screen.html')
@app.route('/post_aws_login', methods = ["GET","POST"])
def PostAWSLogin():
if request.method == "POST":
now = datetime.now()
current_dt = now.strftime("%Y-%m-%d %H:%M:%S")
email_id = request.form['email_id']
if not email_id:
flash('Please Enter Email Id')
return redirect (url_for('user.AWSLogin'))
else :
userData = Aws().getDataByuser_name(email_id)
if userData:
aws_user_id = userData['aws_user_id']
if userData['otp']:
otp_random = userData['otp']
else :
otp_random = Helper.random_otp()
otp_expire_on = datetime.now() + timedelta(minutes=30)
data = {'otp_expire_on' : otp_expire_on,'otp_sent_at':datetime.now(),'login_at': datetime.now(),'otp' : otp_random,'updated_at' : datetime.now()}
Aws().update_awsmember(aws_user_id,data)
if sendOtpMail(email_id,otp_random,otp_expire_on):
return redirect (url_for('user.getOtp',aws_user_id=aws_user_id))
else:
flash("Something Wrong, Please Try Again","errorMsg")
return redirect(url_for('user.AWSLogin'))
else:
flash("User is not registered with us","errorMsg")
return redirect(url_for('user.AWSLogin'))
@app.route('/otp/<aws_user_id>', methods = ["GET"])
def getOtp(aws_user_id):
return render_template('aws_files/aws_otp.html',aws_user_id=aws_user_id)
@app.route('/otp/<aws_user_id>', methods = ["POST"])
def postOtp(aws_user_id):
now = datetime.now()
pin_1 = request.values.get('input1')
pin_2 = request.values.get('input2')
pin_3 = request.values.get('input3')
pin_4 = request.values.get('input4')
otp = pin_1+pin_2+pin_3+pin_4
otp = int(otp)
userData = Aws().getUserByID(aws_user_id)
if(otp == userData['otp']) :
otp_expire_on = datetime.strptime(str(userData["otp_expire_on"]),'%Y-%m-%d %H:%M:%S')
if now > otp_expire_on:
flash("Expired!OTP valid for 30 mintue","errorMsg")
encrypt_user_id = Cryptography.encrypt(int(user_id))
return render_template('aws_files/aws_otp.html',aws_user_id=aws_user_id)
else:
data = {'otp' : None, 'otp_verified_at':datetime.now(),'login_at':datetime.now(),'updated_at' : datetime.now()}
output = Aws().update_awsmember(aws_user_id,data)
if output:
session["Awssession"] = userData
return redirect(url_for('aws.AwsUpload'))
else:
flash("Incorrect OTP. Please provide the correct OTP","errorMsg")
return render_template('aws_files/aws_otp.html',aws_user_id=aws_user_id)
def sendOtpMail(email_id,otp_random,otp_expire_on):
try:
date = otp_expire_on.strftime("%d %B %Y %H:%M")
subject = str(otp_random) + " OTP for AWS S3 Upload Management Login"
to = email_id
html = render_template('aws_files/email/otp_mail.html',otp_random=otp_random,date=date)
EMAIL.OtpSendMail(subject,html,to)
flash("An OTP has been sent to your email id "+ to,"successMsg")
return True
except TypeError as e:
flash(e ,"errorMsg")
raise False
@app.route('/resend_otp/<aws_user_id>', methods = ["GET","POST"])
def resendOTP(aws_user_id):
userData = Aws().getUserByID(aws_user_id)
if userData['otp']:
otp_random = userData['otp']
else :
otp_random = Helper.random_otp()
otp_expire_on = datetime.now() + timedelta(minutes=30)
email = userData['email_id']
data = {'otp_expire_on' : otp_expire_on,'otp_sent_at':datetime.now(),'otp' : otp_random,'updated_at' : datetime.now()}
output = Aws().update_awsmember(aws_user_id,data)
if sendOtpMail(email,otp_random,otp_expire_on):
return redirect (url_for('user.getOtp',aws_user_id=aws_user_id))
else:
flash("Something Wrong, Please Try Again","errorMsg")
return redirect(url_for('user.AWSLogin'))
@app.route('/aws_logout',methods = ["GET", "POST"])
def AWSLogout():
if session.get("Awssession") :
session.pop('Awssession', None)
flash("logout Successfully","successMsg")
else:
pass
return redirect(url_for('user.AWSLogin'))
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists