Sindbad~EG File Manager

Current Path : /home/numerotech/s3.numerotech.com/s3_backup_app_v1/core/controller/
Upload File :
Current File : //home/numerotech/s3.numerotech.com/s3_backup_app_v1/core/controller/UserController.py

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