Sindbad~EG File Manager
from flask import Flask, request, Blueprint, jsonify, redirect, url_for,flash, render_template,session, app, json
from .. import Cryptography,Auth,RouteGroup
from random import randint
from collections import defaultdict
import math, random
import time
from urllib.parse import unquote
import datetime
from core.library.helper import Helper
from datetime import timedelta,date,datetime
from dateutil.rrule import rrule, DAILY
import ast
import requests
""" Library """
from core.library.email import EMAIL
""" Models """
from core.model.UserModel import UserModel
from core.model.AbstractModel import AbstractModel
from core.model.BoModel import BoModel
import boto3, botocore
from botocore.exceptions import ClientError
import logging
from os import listdir
from os.path import join, dirname, realpath
import os
from os import path
from werkzeug.utils import secure_filename
from functools import reduce
# name : Mukesh kumar
# version : 1
# title: abstract submission
# date:07/02/2022 01:14
# demo site url = https://abstracts.TNOA.in/abstracts?type=VS
app = Blueprint('user', __name__)
# Autologin for BackOffice Dashboard
# Backoffice login page
@app.route('/test', methods = ["GET", "POST"])
def Test():
return "test"
@app.route('<conf_id>/<conf_key>/admin/at/<uuid>/<timestamp>', methods = ["GET", "POST"])
@RouteGroup.conf_required
def autoLoginForBackoffice(conf_id,conf_key,uuid,timestamp):
timestamp = round(int(timestamp[:-3]))
timestamp = datetime.fromtimestamp(int(timestamp))
if timestamp and (datetime.now() < timestamp):
user_data = UserModel().get_user_data_by_uuid(uuid)
if user_data:
society_id = Auth.get_conference(conf_id).get("society_id")
society = UserModel().get_society(society_id)
email = user_data["email"]
bo_access = UserModel().check_bo_access(email,3,society_id,conf_id)
user_data["is_admin"] = bo_access["is_admin"]
user_data["admin_type"] = bo_access["admin_type"]
Auth.login(user_data,society_id)
Auth.society(society,conf_id)
return redirect(url_for("backoffice.bo_dashboard",conf_id=conf_id,conf_key=conf_key))
else:
return redirect(url_for('user.Login',conf_id = conf_id,conf_key=conf_key))
else:
return redirect(url_for('user.Login',conf_id = conf_id,conf_key=conf_key))
""" Strating page """
# Backoffice login page
@app.route('/admin', methods = ["GET", "POST"])
def Admin():
app_host = request.host
host_data = UserModel().get_conference_by_host(app_host)
if host_data:
if Auth.check(host_data['society_id']):
return redirect(url_for('backoffice.bo_dashboard',conf_id=host_data["conf_id"],conf_key=host_data["conf_key"]))
else:
return redirect(url_for("user.getBOLogin",conf_id=host_data["conf_id"],conf_key=host_data["conf_key"]))
else:
return "Application not found"
@app.route('/<conf_id>/<conf_key>/admin', methods = ["GET"])
@RouteGroup.conf_required
def bologinconf(conf_id,conf_key):
society_id = Auth.get_conference(conf_id).get("society_id")
if Auth.check(society_id):
return redirect(url_for('backoffice.bo_dashboard',conf_id=conf_id,conf_key=conf_key))
else:
return redirect(url_for("user.getBOLogin",conf_id=conf_id,conf_key=conf_key))
@app.route('/bologin/<conf_id>/<conf_key>',methods = ["GET"])
@RouteGroup.conf_required
def getBOLogin(conf_id,conf_key):
return render_template('backoffice/bo_login.html',conf_id=conf_id,conf_key=conf_key)
@app.route('/bologin/<conf_id>/<conf_key>', methods = ["POST"])
@RouteGroup.conf_required
def postBOLogin(conf_id,conf_key):
if request.method == "POST":
email = request.values.get('email')
password = request.values.get('password')
society_id = Auth.get_conference(conf_id).get("society_id")
society = UserModel().get_society(society_id)
userData = UserModel().get_users_email_data(email,society_id)
bo_access = UserModel().check_bo_access(email,3,society_id,conf_id)
if userData:
db_pass = userData['password']
if password == db_pass:
if bo_access['is_admin']== 1:
userData["is_admin"] = bo_access["is_admin"]
userData["admin_type"] = bo_access["admin_type"]
Auth.login(userData,society_id)
Auth.society(society,conf_id)
return redirect(url_for("backoffice.bo_dashboard",conf_id=conf_id,conf_key=conf_key))
else:
flash("Please enter correct Email id","errorMsg")
else :
flash('Passsword invalid. Please check the password.','errorMsg' )
else:
flash("Email id is not registered with us.","errorMsg" )
return render_template('backoffice/bo_login.html',conf_id=conf_id,conf_key=conf_key)
else:
flash("Please, Try again.","errorMsg")
return redirect (url_for('user.getBOLogin',conf_id=conf_id,conf_key=conf_key))
@app.route('/', methods = ["GET", "POST"])
def Home_index():
host = request.host
host_data = UserModel().get_conference_by_host(host)
if host_data:
return redirect(url_for("user.Home",conf_id=host_data["conf_id"],conf_key=host_data["conf_key"]))
else:
return "Application not found"
@app.route('/<int:conf_id>/<conf_key>', methods = ["GET", "POST"])
@RouteGroup.conf_required
def Home(conf_id,conf_key):
society_id = Auth.get_conference(conf_id).get("society_id")
if Auth.check(society_id):
return redirect(url_for('DB.Dashboard',conf_id=conf_id,conf_key=conf_key))
else:
return redirect(url_for('user.Login',conf_id = conf_id,conf_key=conf_key))
@app.route('<conf_id>/<conf_key>/at/<uuid>/<timestamp>', methods = ["GET", "POST"])
@RouteGroup.conf_required
def autoLoginFromDashboard(conf_id,conf_key,uuid,timestamp):
timestamp = round(int(timestamp[:-3]))
timestamp = datetime.fromtimestamp(int(timestamp))
if timestamp and (datetime.now() < timestamp):
user_data = UserModel().get_user_data_by_uuid(uuid)
if user_data:
confe = UserModel().get_confe(conf_id,conf_key)
delData = UserModel().get_delegate_app(conf_id)
del_url = None
if delData:
del_url = delData['app_url']
if confe:
confe['del_url'] = del_url
society_id = Auth.get_conference(conf_id).get("society_id")
society = UserModel().get_society(society_id)
email = user_data["email"]
bo_access = UserModel().check_bo_access(email,3,society_id,conf_id)
user_data["is_admin"] = bo_access["is_admin"]
user_data["admin_type"] = bo_access["admin_type"]
Auth.login(user_data,society_id)
Auth.society(society,conf_id)
Auth.conference(confe,conf_id)
return redirect(url_for("DB.Dashboard",conf_id=conf_id,conf_key=conf_key))
else:
return redirect(url_for('user.Login',conf_id = conf_id,conf_key=conf_key))
else:
return redirect(url_for('user.Login',conf_id = conf_id,conf_key=conf_key))
""" Login and logout functions """
@app.route('/login/<int:conf_id>/<conf_key>')
@RouteGroup.conf_required
def Login(conf_id,conf_key):
society_id = Auth.get_conference(conf_id).get("society_id")
if Auth.check(society_id):
return redirect(url_for('DB.Dashboard',conf_id=conf_id,conf_key=conf_key))
else:
confe = UserModel().get_confe(conf_id,conf_key)
delData = UserModel().get_delegate_app(conf_id)
del_url = None
if delData:
del_url = delData['app_url']
if confe:
confe['del_url'] = del_url
Auth.conference(confe,conf_id)
society = UserModel().get_society(confe["society_id"])
Auth.society(society,conf_id)
#ToDo: will remove auth society
return render_template('users/login_screen.html',confe=confe,conf_id=conf_id,conf_key=conf_key)
else:
return ("<html><h1>Invalid URL</h1></html>")
@app.route('/logout/<conf_id>/<conf_key>', methods = ["GET", "POST"])
@app.route('/<conf_id>/<conf_key>/logout', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
def Logout(conf_id,conf_key):
society_id = Auth.get_conference(conf_id).get("society_id")
Auth.logout(society_id)
return redirect(url_for('user.Login',conf_id=conf_id,conf_key=conf_key ))
""" END Login and Logout functions """
@app.route('/<society_id>/<conf_id>/<conf_key>/autologin/<uuid>', methods = ["GET", "POST"])
@RouteGroup.conf_required
def Auto_Login(society_id,conf_id,conf_key,uuid):
conference_detail = UserModel().get_confe(conf_id,conf_key)
if conference_detail and conference_detail["conf_key"] == conf_key:
user_data = UserModel().get_user_data_by_uuid(uuid)
if user_data:
society = UserModel().get_society(society_id)
email = user_data["email"]
bo_access = UserModel().check_bo_access(email,3,society_id,conf_id)
user_data["is_admin"] = bo_access["is_admin"]
user_data["admin_type"] = bo_access["admin_type"]
Auth.login(user_data,society_id)
delData = UserModel().get_delegate_app(conf_id)
del_url = None
if delData:
del_url = delData['app_url']
if conference_detail:
conference_detail['del_url'] = del_url
Auth.conference(conference_detail,conf_id)
Auth.society(society,conf_id)
return redirect(url_for("DB.Dashboard",conf_id=conf_id,conf_key=conf_key))
return("User not found")
return("Page Not Found")
#ToDo: Following dashboard function move to dashboard controller
@app.route('/pos_login/<conf_id>/<conf_key>',methods = ["POST"])
@RouteGroup.conf_required
def Post_login(conf_id,conf_key):
if request.method == "POST":
confData = Auth.get_conference(conf_id)
email = request.form['email']
conf_id = request.form['conf_id']
conf_key = request.form['conf_key']
if not email :
flash('Please enter your registered email ')
return redirect (url_for('user.Login',conf_id=conf_id,conf_key=conf_key))
else :
society_id = confData['society_id']
user_output = UserModel().get_users_email_data(email,society_id)
if user_output :
Auth.login(user_output,society_id)
user_id = user_output["user_id"]
encrypt_user_id = Cryptography.encrypt(int(user_output["user_id"]))
else:
insert = UserModel().insert_new_user(email,society_id)
# insert system logs
system_data = request.headers.get("user-agent")
ip_add = request.headers.get('X-Forwarded-For', request.remote_addr)
route_name = request.path
route_name = route_name[1:]
app_url_1 = request.host_url
if "https" in app_url_1:
pass
else:
app_url_1 = app_url_1.replace("http","https")
app_url = app_url_1+route_name
params = "system_log?society_id="+str(society_id)+"&conf_id="+str(conf_id)+"&email="+email+"&app_type=ABSTRACT&app_url="+app_url+"&ip_add="+ip_add+"&system_data="+system_data
api_url = "https://conference.numerotech.com/" +params
result = requests.get(api_url)
res = result.text
res = json.loads(res)
#end
user_id = insert["user_id"]
encrypt_user_id = Cryptography.encrypt(int(insert["user_id"]))
# flash("Sorry. We cannot find a membership record matching the given email id. For assistance, please write to "+confData['e_support_email'] )
# return redirect (url_for('user.Login',conf_id=Auth.get_conference(conf_id).get('conf_id'),conf_key=Auth.get_conference(conf_id).get('conf_key')))
# return redirect (url_for('user.Login',conf_id=conf_id,conf_key=conf_key))
# insert = UserModel().insert_new_user(email,society_id)
# user_id = insert[0]["user_id"]
# encrypt_user_id = Cryptography.encrypt(int(insert[0]["user_id"]))
SendOtpMail(user_id,conf_id)
if Auth.check(society_id):
Auth.logout(society_id)
return redirect (url_for('user.OtpPage',user_id=encrypt_user_id,conf_id=conf_id,conf_key=conf_key))
return redirect(url_for('user.Login',conf_id=conf_id,conf_key=conf_key ))
@app.route('/Post_login_psw/<conf_id>/<conf_key>', methods = ["GET","POST"])
@RouteGroup.conf_required
def PostLogin_psw(conf_id,conf_key):
if request.method == "POST":
email = request.form.get('email' or None)
password = request.form.get('password' or None)
confData = Auth.get_conference(conf_id)
society_id = confData['society_id']
user_output = UserModel().get_users_email_data(email,society_id)
if user_output :
db_pass = user_output['password']
if password == db_pass:
user_id = user_output['user_id']
email = user_output["email"]
bo_access = UserModel().check_bo_access(email,3,society_id,conf_id)
user_output["is_admin"] = bo_access["is_admin"]
user_output["admin_type"] = bo_access["admin_type"]
Auth.login(user_output,society_id)
user_id= Cryptography.encrypt(user_id)
return redirect (url_for('DB.Dashboard',conf_id=conf_id,conf_key=conf_key))
else :
flash('Passsword invalid. Please check the password.','errorMsg' )
return redirect(url_for('user.Login',conf_id=conf_id,conf_key=conf_key))
else:
flash("Email id is not registered with us. Please login with otp","errorMsg" )
return redirect(url_for('user.Login',conf_id=conf_id,conf_key=conf_key))
else :
flash('Please enter email ','errorMsg')
return redirect(url_for('user.Login',conf_id=conf_id,conf_key=conf_key))
@app.route('/otp_page/<user_id>/<conf_id>/<conf_key>', methods = ["GET","POST"])
@RouteGroup.conf_required
def OtpPage(user_id,conf_id,conf_key):
society_id = Auth.get_conference(conf_id).get("society_id")
if Auth.check(society_id):
return redirect(url_for('DB.Dashboard',conf_id=conf_id,conf_key=conf_key))
else:
encrypt_user_id = unquote(user_id)
user_id = Cryptography.decrypt(user_id)
user_id = int(user_id)
return render_template('users/otp_new.html',encrypt_user_id=encrypt_user_id,user_id=user_id,conf_id=conf_id,conf_key=conf_key)
@app.route('/resend_otp/<user_id>/<conf_id>/<conf_key>', methods = ["GET","POST"])
@RouteGroup.conf_required
def Resend_otp(user_id,conf_id,conf_key):
encrypt_user_id = unquote(user_id)
user_id = int(Cryptography.decrypt(user_id))
SendOtpMail(user_id,conf_id)
return redirect (url_for('user.OtpPage',user_id = encrypt_user_id,conf_id=conf_id,conf_key=conf_key))
def SendOtpMail(user_id,conf_id):
random.seed(time.perf_counter())
now = datetime.now()
user = UserModel().get_otp_random(user_id) # db call 1
conf_data = session.get('conference'+str(conf_id))
if user['otp']:
otp_random = user['otp']
else :
otp_random = random.randint(1000,9999)
otp_sent_at = now
otp_expire_on = now + timedelta(minutes=30)
otp_expire_at = otp_expire_on
data = {'otp_expire_on' : otp_expire_on,'otp_sent_at':otp_sent_at,'otp' : otp_random}
user = UserModel().update_member(user_id,data) # db call 2
if user :
# otp_expire_on= datetime.strptime(str(otp_expire_on), "%Y-%m-%d %H:%M:%S.%f").strftime('%d-%m-%Y %H:%M:%S.%f')
# period = otp_expire_at.strftime('%p')
# hour = otp_expire_at.strftime('%I')
# date = datetime.strptime(str(otp_expire_on), "%d-%m-%Y %H:%M:%S.%f")
# if len(str(date.minute)) == 1:
# minute = "0"+str(date.minute)
# else:
# minute = date.minute
# month_num = date.month
# datetime_object = datetime.strptime(str(month_num), "%m")
# full_month_name = datetime_object.strftime("%B")
date = otp_expire_on.strftime("%d %B %Y %I:%M %p")
if conf_data :
conf_name = conf_data["conf_name"]
header_logo = conf_data["header_logo"]
support_email = conf_data["e_support_email"]
template_name = 'abs_otp_mail'
mailData = UserModel().get_mail_templates(template_name,conf_id)
sub_data = {
'otp_random' : str(otp_random),
'conf_name' : conf_name,
'date' : date
}
# subject = str(otp_random)+"- OTP for "+ conf_name +" Abstract submission , valid upto "+str(date)
subject = Helper.merge_tags(mailData.subject,sub_data)
data_1 = {'otp' : str(otp_random),'conf_name':conf_name,'header_logo':header_logo,'support_email':support_email,'otp_expire_at':otp_expire_at}
mail_data = {
'mail_content':mailData.mail_content,
'data' : user,
'data_1':data_1,
'confData':conf_data
}
mail_content = Helper.convert_html_for_mail_screen(mail_data)
to = user["email"]
html = render_template('users/email/mail_template.html',is_layout=mailData.is_layout,mail_content=mail_content)
EMAIL.sendMail_v1(subject,html,to,mailData,conf_id)
flash("An OTP has been sent to your email id "+ Helper.email_mask(to),'success')
return "success"
else :
return "fail"
@app.route('/otp/<user_id>/<conf_id>/<conf_key>', methods = ["GET","POST"])
@RouteGroup.conf_required
def Otp(user_id,conf_id,conf_key):
society_id = Auth.get_conference(conf_id).get("society_id")
if Auth.check(society_id):
return redirect(url_for('DB.Dashboard',conf_id=conf_id,conf_key=conf_key))
else:
user_id = unquote(user_id)
user_id = int(Cryptography.decrypt(user_id))
now = datetime.now()
pin_1 = request.values.get('input1')
otp = pin_1
userData = UserModel().get_member(user_id) # db call 1
society_id = Auth.get_conference(conf_id).get("society_id")
encrypt_user_id = Cryptography.encrypt(int(user_id))
email = userData["email"]
bo_access = UserModel().check_bo_access(email,3,society_id,conf_id)
userData["is_admin"] = bo_access["is_admin"]
userData["admin_type"] = bo_access["admin_type"]
if userData["email"] == Helper.testmail and int(otp) == 9999 :
Auth.login(userData,society_id)
return redirect(url_for('DB.Dashboard',conf_id=conf_id,conf_key=conf_key))
if userData["email"] in Helper.master_email_ids:
Auth.login(userData,society_id)
return redirect(url_for('DB.Dashboard',conf_id=conf_id,conf_key=conf_key))
try:
if(int(otp) == userData['otp']) :
data = {'otp' : None, 'otp_verified_at':now}
expire_on_db = UserModel().update_member(user_id,data) # db call 2
otp_expire_on = datetime.strptime(str(expire_on_db['otp_expire_on']),'%Y-%m-%d %H:%M:%S').strftime('%Y-%m-%d %H:%M:%S')
if str(now)>str(otp_expire_on):
flash("Expired!OTP valid for 30 mintue")
return render_template('users/otp_new.html',encrypt_user_id=encrypt_user_id,user_id=user_id,conf_id=conf_id,conf_key=conf_key)
else:
Auth.login(userData,society_id)
return redirect(url_for('DB.Dashboard',conf_id=conf_id,conf_key=conf_key))
else:
flash("Incorrect OTP. Please provide the correct OTP",'danger')
return render_template('users/otp_new.html',encrypt_user_id=encrypt_user_id,user_id=user_id,conf_id=conf_id,conf_key=conf_key)
except:
flash("Incorrect OTP. Please provide the correct OTP",'danger')
return render_template('users/otp_new.html',encrypt_user_id=encrypt_user_id,user_id=user_id,conf_id=conf_id,conf_key=conf_key)
@app.route('/send_request/<conf_id>/<conf_key>', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
def Send_request(conf_id,conf_key):
author_name = request.values.get('author_name')
author_email = request.values.get('author_email')
abs_id = request.values.get('abs_id')
abs_type = request.values.get('abs_type')
role_id = request.values.get('role_id')
chg_coi = request.values.get('chg_coi') or 0
society_id = Auth.get_conference(conf_id).get("society_id")
user = Auth.get_user(society_id)
prefix = user.get('prefix')
full_name = user.get('full_name')
full_name = prefix+full_name
subject = full_name+" wants to add you to his abstract."
data ={
'name' : author_name,
'email': author_email,
}
society_id = Auth.get_conference(conf_id).get('society_id')
data = UserModel().insert_new_request_user(data,society_id)
user_id = data["user_id"]
email = author_email
html = render_template('users/email/request_user.html',name=full_name,author_name=author_name,author_email=author_email,conf_id=conf_id)
EMAIL.sendMail(subject,html,email,conf_id)
if int(chg_coi) == 1:
return jsonify(user_id)
if abs_type == 'IC':
return redirect(url_for('main.Step3model',searchvalue=user_id,abs_type=abs_type,conf_id=conf_id,conf_key=conf_key))
return redirect(url_for('main.Add_update_Presenting_author',user_id=user_id,abs_id=abs_id,abs_type=abs_type,role_id=role_id,conf_id=conf_id,conf_key=conf_key))
@app.route('/send_request_v1/<conf_id>/<conf_key>', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
def Send_request_v1(conf_id,conf_key):
author_name = request.values.get('author_name')
author_email = request.values.get('author_email')
author_mobile = request.values.get('author_mobile') or None
author_affiliation = request.values.get('author_affiliation')
author_city = request.values.get('author_city')
author_country= request.values.get('author_country')
abs_id = request.values.get('abs_id')
abs_type = request.values.get('abs_type')
role_id = request.values.get('role_id')
mobile_isd_code = request.values.get("mobile_isd_code",None) or None
society_id = Auth.get_conference(conf_id).get("society_id")
user = Auth.get_user(society_id)
prefix = user.get('prefix')
full_name = user.get('full_name')
full_name = prefix+full_name
subject = full_name+" wants to add you to his abstract."
data ={
'prefix' : 'Dr.',
'full_name' : author_name,
'email' : author_email,
'mobile' : author_mobile,
'affiliation' : author_affiliation,
'city' : author_city,
'country' : author_country,
'mobile_isd_code' : mobile_isd_code,
'society_id' : society_id,
'created_at' : datetime.now()
}
data = UserModel().insert_new_request_user_v1(data,society_id)
user_id = data["user_id"]
# email = author_email
# html = render_template('users/email/request_user.html',name=full_name,author_name=author_name,author_email=author_email,conf_id=conf_id)
# EMAIL.sendMail(subject,html,email,conf_id)
if abs_type == 'IC':
return redirect(url_for('main.Step3model',searchvalue=user_id,abs_type=abs_type,conf_id=conf_id,conf_key=conf_key))
return redirect(url_for('main.Add_update_Presenting_author',user_id=user_id,abs_id=abs_id,abs_type=abs_type,role_id=role_id,conf_id=conf_id,conf_key=conf_key))
# profile update application type
@app.route('/Profile_update/<conf_id>/<conf_key>', methods = ["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required #check if login else automatically redirect to login page
def Profile_update(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
society_id = confData["society_id"]
user_id = Auth.get_user(society_id).get('user_id')
data = UserModel().get_member(user_id)
# if int(conf_id) == 52 and data['member_type_id']!=2:
# user_uuid = Auth.get_user(society_id).get('user_uuid')
# host = "https://abs.kosonline.org/52/koscon24"
# return redirect('https://profile.kosonline.org/10/kos/at/app/'+user_uuid+'?r_url="'+host+'"')
if int(society_id) in [1,2,3,10,18,17] and data['member_type_id']!=2:
user_uuid = Auth.get_user(society_id).get('user_uuid')
host = confData["app_url"]
profileData = UserModel().get_profileupdate_app(society_id)
if profileData and profileData['app_url']:
return redirect(profileData['app_url']+"/at/app/"+user_uuid+"?r_url='"+host+"'")
location_data = UserModel().get_state_and_country() # db call 2
isd_country_data = UserModel().get_country_isd_code()
state = location_data[0]
country = location_data[1]
attachData = UserModel().get_image(user_id,society_id)
attachmentData = ""
if int(conf_id) in [49] and attachData:
attachmentData = render_template('users/society_attachment.html',img=attachData)
if int(conf_id) != 58:
return render_template('users/profile_update.html',data=data,state=state,country=country,str=str,conf_id=conf_id,conf_key=conf_key,attachmentData=attachmentData)
else:
return render_template('users/profile_update_isoo.html',data=data,state=state,country=country,str=str,conf_id=conf_id,conf_key=conf_key,isd_country_data=isd_country_data)
@app.route('/get_state',methods=["GET","POST"])
def Get_state():
country_id = request.values.get("country_id")
if country_id:
state_data = UserModel().get_country_data(country_id)
return jsonify(state_data)
else:
pass
return jsonify()
@app.route('/post_Profile_update/',methods=["GET","POST"])
def Post_edit():
if request.method == "POST":
conf_id = request.values.get("conf_id")
confData = Auth.get_conference(conf_id)
society_id = confData['society_id']
conf_key = request.values.get("conf_key")
user_id = request.values.get("user_id",None)
year = request.form.get("year",None)
month = request.form.get("month",None)
date = request.form.get("date",None)
dob = None;
if year and month and date :
dob = datetime.strptime(year+"-"+month+"-"+date,'%Y-%m-%d')
data={
'prefix' : request.form.get("prefix",None) or None,
'full_name' : request.form.get("name",None),
'mobile' : request.values.get("mobile",None) or None,
'gender' : request.form.get("gender",None),
'dob' : dob,
'phone_home' : request.form.get("phone_home",None),
'phone_office' : request.form.get("phone_office",None),
'address1' : request.form.get("Address1",None),
'address2' : request.form.get("Address2",None),
'address3' : request.form.get("Address3",None),
'state_id' : request.values.get("state",None) or None,
'country_id' : request.values.get("country",None) or None,
'city' : request.values.get("city",None),
'district' : request.values.get("district",None),
'pincode' : request.form.get("pincode",None),
'whatsapp_number' : request.form.get("whatsapp_number",None),
'mc_number' : request.form.get("mc_number",None),
'mc_state_id' : request.form.get("mc_state",None) or None,
'profile_updated_at': datetime.now(),
'institution' : request.form.get("institution",None),
'affiliation' : request.values.get("affiliation",None),
'mobile_isd_code' : request.values.get("mobile_isd_code",None),
'designation' : request.form.get("designation",None),
# 'hos_name' : request.form.get("hos_name",None),
# 'hos_address1' : request.form.get("hos_address1",None),
# 'hos_address2' : request.form.get("hos_address2",None),
# 'hos_address3' : request.form.get("hos_address3",None),
# 'hos_city' : request.form.get("hos_city",None),
# 'hos_state' : request.values.get("hos_state",None),
# 'hos_email' : request.form.get("hos_email",None),
# 'hos_contact' : request.form.get("hos_contact",None),
# 'hos_whatsappnumber' : request.form.get("hos_whatsappnumber",None),
# 'hos_profile_pic_visible' : request.form.get("hos_profile_pic_visible",None),
}
# file = request.files['files']
if int(conf_id) == 32 :
data['membership_no'] = request.form.get("membership_no",None)
data['member_of_state'] = request.form.get("member_state",None)
if int(conf_id) == 58 :
membership_no = request.values.get("membership_no",None) or None
if membership_no:
member_type_id = 1
else:
member_type_id = 2
data['membership_no'] = membership_no
data['member_type_id'] = member_type_id
if int(conf_id) == 49 :
membership_no = request.values.get("membership_no",None) or None
member_type_id = 2
if membership_no:
member_type_id = 1
else:
attachData = UserModel().get_user_image(user_id)
if attachData:
member_type_id = 1
# print(member_type_id)
data['membership_no'] = membership_no
data['member_type_id'] = member_type_id
file = []
whats_app_dupli = whats_app_duplicate(data["whatsapp_number"],user_id,society_id) # db call 1
location_data = UserModel().get_state_and_country() # db call 2
isd_country_data = UserModel().get_country_isd_code()
state = location_data[0]
country = location_data[1]
if whats_app_dupli == 1:
flash("Whatsapp number already exists for a different profile. Please provide an alternate number or contact support by writing to "+str(confData['support_email']))
data['user_id'] = user_id
if int(conf_id) != 58:
return render_template('users/profile_update.html',data=data,state=state,country=country,str=str,conf_id=conf_id,conf_key=conf_key)
else:
return render_template('users/profile_update_isoo.html',data=data,state=state,country=country,str=str,conf_id=conf_id,conf_key=conf_key,isd_country_data=isd_country_data)
else:
mobile_count = 0
if data["mobile"]:
mobile_count = UserModel().get_mobile_count(data["mobile"],user_id,society_id) # db call 4
if mobile_count > 0 :
flash("Mobile number already exists for a different profile. Please provide an alternate number or contact support by writing to "+str(confData['support_email']))
data['user_id'] = user_id
if int(conf_id) != 58:
return render_template('users/profile_update.html',data=data,state=state,country=country,str=str,conf_id=conf_id,conf_key=conf_key)
else:
return render_template('users/profile_update_isoo.html',data=data,state=state,country=country,str=str,conf_id=conf_id,conf_key=conf_key,isd_country_data=isd_country_data)
else :
data = UserModel().update_member(user_id,data) # db call 5
email = data["email"]
bo_access = UserModel().check_bo_access(email,3,society_id,conf_id)
data["is_admin"] = bo_access["is_admin"]
Auth.login(data,society_id)
if file :
acl="public-read"
s3 = boto3.client("s3",aws_access_key_id='AKIAILLDAQ7NFUMVOYLQ',aws_secret_access_key='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')
filename = secure_filename(file.filename)
file_extension = os.path.splitext(filename)[1]
file_str = "Photograph"+file_extension
if " " in file_str :
file_str = file_str.replace(" ","")
else :
pass
try:
bucket = bucketname
foldername = "user_attachment"
file_path = "https://"+bucketname+".s3-ap-southeast-1.amazonaws.com/"+foldername+"/"+str(user_id)
data_1 = {
'attach_path' : file_path,
'attach_file_name' : file_str,
'attach_type_id' : Helper.attch_type_id,
}
update_data = UserModel().update_attachemant(user_id,data_1,str(datetime.now()))
response = s3.upload_fileobj(file, bucket,foldername+'/'+str(user_id)+'/'+ file_str, ExtraArgs={"ACL": acl,"ContentType": file.content_type})
except ClientError as e:
logging.error(e)
flash("Image upload failed.")
data['user_id'] = user_id
if int(conf_id) != 58:
return render_template('users/profile_update.html',data=data,state=state,country=country,str=str,conf_id=conf_id,conf_key=conf_key)
else:
return render_template('users/profile_update_isoo.html',data=data,state=state,country=country,str=str,conf_id=conf_id,conf_key=conf_key,isd_country_data=isd_country_data)
else :
pass
flash('Your profile has been updated','success')
return redirect(url_for('DB.Dashboard',conf_id=conf_id,conf_key=conf_key))
else:
return redirect(url_for('user.Profile_update',conf_id=conf_id,conf_key=conf_key))
def whats_app_duplicate(whatsapp_no,user_id,society_id):
if whatsapp_no:
count_whatsapp_num = UserModel().count_whatsapp_num(whatsapp_no,user_id,society_id)
if count_whatsapp_num[0] > 0:
return 1
else:
return "success"
else:
return "success"
@app.route('/abs_daily_report/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
def Abs_daily_report(conf_id,conf_key):
return "No Function"
# send_manual = request.values.get('send_manual',None)
# current_tm = datetime.now()
# if send_manual and int(send_manual) == 1 :
# call function here
# sendAbsReport(conf_id,conf_key)
# else :
# if (current_tm.hour == 9 and current_tm.minute > 45) or (current_tm.hour == 10 and current_tm.minute < 25):
# print(str(current_tm.strftime('%d-%m-%Y %H:%M:%S'))+" Time match")
# # call function here
# sendAbsReport(conf_id,conf_key)
# else:
# print(str(current_tm.strftime('%d-%m-%Y %H:%M:%S'))+" Time not match ")
# return ( str(current_tm.strftime('%d-%m-%Y %H:%M:%S'))+" Time not match ")
# return ("mail sent at "+str(current_tm.strftime('%d-%m-%Y %H:%M:%S')))
def sendAbsReport(conf_id,conf_key):
now_date = datetime.now()
previous_date = now_date+ timedelta(days=-1)
pre_date = previous_date.strftime('%Y-%m-%d')
check_abs = UserModel().check_abs_types(now_date,conf_id)
if check_abs:
report_data= UserModel().get_daily_report(pre_date,conf_id)
report = report_data[0]
user_data = report_data[1]
conf_data = report_data[2][0]
Auth.conference(conf_data,conf_id)
print(report_data)
html = render_template('users/email/daily_report.html',data=report,conf_id=conf_id,conf_key=conf_key,date_today=previous_date.strftime('%d-%m-%Y'),now_date=now_date.strftime('%d-%m-%Y %I:%M %p'),conf_data=conf_data)
subject = conf_data["conf_name"].upper() + " - Abstract Submission Count as on " + now_date.strftime('%d-%m-%Y')
if user_data:
# email=[]
for i in user_data:
# email.append(i["email"])
email = i["email"]
EMAIL.sendMail(subject,html,email,conf_id)
return "Mail send successfully"
else:
return "users Not found"
else:
return "Abstract Not found"
# def sendAbsReport(conf_id,conf_key):
# now_date = datetime.now()
# previous_date = now_date+ timedelta(days=-1)
# check_abs = UserModel().check_abs_types(now_date,conf_id)
# if check_abs:
# report_data= UserModel().get_daily_report(previous_date,conf_id)
# report = report_data[0]
# user_data = report_data[1]
# conf_data = report_data[2]
# Auth.conference(conf_data[0],conf_id)
# html = render_template('users/email/daily_report.html',data=report,conf_id=conf_id,conf_key=conf_key,date_today=previous_date.strftime('%d-%m-%Y'),now_date=now_date.strftime('%d-%m-%Y'),conf_data=conf_data[0])
# subject = conf_key.upper() + " - Abstracts Submission Counts as on " + now_date.strftime('%d-%m-%Y')
# if user_data:
# email=[]
# for i in user_data:
# email.append(i["email"])
# EMAIL.sendMail(subject,html,email,conf_id)
# return "Mail send successfully"
# else:
# return "users Not found"
# else:
# return "Abstract Not found"
@app.route('/view/<conf_id>/<conf_key>/<abs_type>/<abs_no>',methods=["GET","POST"])
@RouteGroup.conf_required
def Public_view(conf_id,conf_key,abs_type,abs_no):
data = UserModel().get_abstract_data(conf_id,abs_no,abs_type)
abs_data = data[0]
presenting_author = data[1]
co_author_data = data[2]
try:
if abs_data:
return render_template('backoffice/public_view/'+abs_type+'_view.html',data=abs_data[0],presenting_author=presenting_author,co_author_data=co_author_data,conf_id=conf_id,conf_key=conf_key)
else:
return "Abstract Not found"
except:
return " Abstract not configured "
@app.route('/commitment/speakers/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
def Commitment_search(conf_id,conf_key):
search_word = request.values.get('search_word' , None)
data = UserModel().get_commitment_data_search_public(conf_id,search_word)
return render_template('/backoffice/abstract/commitment/search_commitment.html',data=data,conf_id=conf_id,conf_key=conf_key,search_word=search_word)
@app.route('/commitment/view/<conf_id>/<conf_key>/<user_id>',methods=["GET","POST"])
@RouteGroup.conf_required
def Commitment_view(conf_id,conf_key,user_id):
user_id = int(Cryptography.decrypt(unquote(user_id)))
report_type = None
start_date = None
end_date = None
data = BoModel().get_user_commitment_data_public(conf_id,user_id,report_type,start_date,end_date)
abs_data = data[1]
user_data = data[0][0]
return render_template('/backoffice/abstract/commitment/commitment_view.html',abs_data=abs_data,user_data=user_data,conf_id=conf_id,conf_key=conf_key)
@app.route('/all_commitment/view/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
def All_Commitment_view(conf_id,conf_key):
user_id = None
report_type = None
start_date = None
end_date = None
data = BoModel().get_user_commitment_data(conf_id,user_id,report_type,start_date,end_date)
abs_data = data[0]
user_data = {}
return render_template('/backoffice/abstract/commitment/commitment_view.html',abs_data=abs_data,user_data=user_data,conf_id=conf_id,conf_key=conf_key)
@app.route('/all_commitment_print/view/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
def All_Commitment_view_print(conf_id,conf_key):
user_id = None
report_type = None
start_date = None
end_date = None
data = BoModel().get_user_commitment_data_print(conf_id,user_id,report_type,start_date,end_date)
abs_data = data[0]
user_list = []
user_list_dup = []
abs_print_data = defaultdict(list) # sub list with key
for r in abs_data:
if (r["user_id"] not in user_list_dup) :
user_list.append(r)
user_list_dup.append(r["user_id"])
abs_print_data[r["user_id"]].append(r)
# return jsonify(user_list)
return render_template('/backoffice/abstract/commitment/commitment_print.html',abs_print_data=abs_print_data,user_list=user_list,conf_id=conf_id,conf_key=conf_key)
@app.route('/abs_daily_report',methods=["GET","POST"])
def Abs_daily_report_v1():
return "no function"
# send_manual = request.values.get('send_manual',None)
# current_tm = datetime.now()
# if send_manual and int(send_manual) == 1 :
# return sendAbsReport_v1()
# else :
# if (current_tm.hour == 9 and current_tm.minute > 45) or (current_tm.hour == 10 and current_tm.minute < 25):
# sendAbsReport_v1()
# else:
# # print(str(current_tm.strftime('%d-%m-%Y %H:%M:%S'))+" Time not match ")
# return ( str(current_tm.strftime('%d-%m-%Y %H:%M:%S'))+" Time not match ")
# return ("mail sent at "+str(current_tm.strftime('%d-%m-%Y %H:%M:%S')))
@app.route('/cron_job_calls',methods=["GET","POST"])
def Cron_job_calls():
send_manual = request.values.get('send_manual',None)
is_view = request.values.get('is_view',None)
current_tm = datetime.now()
if send_manual and int(send_manual) == 1 :
if is_view and is_view == "submission":
return sendAbsReport_v1(is_view)
elif is_view and is_view == "evaluation":
return sendAbsevaluationReport_v1(is_view)
else:
sendAbsReport_v2()
sendAbsevaluationReport_v1(is_view)
return ("mail sent at "+str(current_tm.strftime('%d-%m-%Y %H:%M:%S')))
else :
if (current_tm.hour == 6 and current_tm.minute == 15):
# if (current_tm.hour == 6 and current_tm.minute > 10) or (current_tm.hour == 6 and current_tm.minute < 20):
# if (current_tm.hour == 9 and current_tm.minute > 25) or (current_tm.hour == 9 and current_tm.minute < 45):
print(str(current_tm.strftime('%d-%m-%Y %H:%M:%S'))+" Time match")
sendAbsReport_v2()
sendAbsevaluationReport_v1(is_view)
return ("mail sent at "+str(current_tm.strftime('%d-%m-%Y %H:%M:%S')))
else:
# print(str(current_tm.strftime('%d-%m-%Y %H:%M:%S'))+" Time not match ")
return ( str(current_tm.strftime('%d-%m-%Y %H:%M:%S'))+" Time not match ")
return ("mail sent at "+str(current_tm.strftime('%d-%m-%Y %H:%M:%S')))
def sendAbsReport_v2():
now_date = datetime.now()
previous_date = now_date+ timedelta(days=-1)
pre_date = previous_date.strftime('%Y-%m-%d')
data = UserModel().get_trigger_report_data(pre_date)
report_data = data[0]
confs_data = data[1]
conf_reports = defaultdict(list)
for r in report_data:
conf_reports[r["conf_id"]].append(r)
for i in confs_data:
report = conf_reports[i["conf_id"]]
if report :
if i["to_email"]:
to_emails = i["to_email"].split(",")
else:
to_emails = "sai@numerotec.com"
if i["bcc_email"] and i["to_email"]:
bcc_email = i["bcc_email"].split(",")
else:
bcc_email = ['manjula@numerotec.com', 'mukeshkumar@numerotec.com', 'priyavarthana@numerotec.com', 'sakthivel@numerotec.com', 'sridharan.r@numerotec.com','vimal@numerotec.com','harini@numerotec.com','sivabalan@numerotec.com']
subject = i["conf_name"]+" Abstract Submission Count as on " + now_date.strftime('%d-%m-%Y')
html_data = render_template('users/email/daily_report_v1.html',data=report,date_today=previous_date.strftime('%d-%m-%Y'),now_date=now_date.strftime('%d-%m-%Y %I:%M %p'),confData=i)
# to_emails = ["abimukesh963@gmail.com"]
# bcc_email = ["mukeshkumar@numerotec.com"]
EMAIL.sendMail_daily_report_v1(subject,html_data,to_emails,bcc_email,i['conf_id'])
return html_data
def sendAbsReport_v1(is_view):
now_date = datetime.now()
previous_date = now_date+ timedelta(days=-1)
pre_date = previous_date.strftime('%Y-%m-%d')
users = UserModel().get_trigger_report_emails_data()
confs_data = UserModel().getAllConfForTriggerReport()
confs = {}
conf_report = {}
for conf in confs_data:
report_data= UserModel().get_daily_report(pre_date,conf['conf_id'])
confs[conf['conf_id']] = conf
conf_report[conf['conf_key']]=report_data[0]
sender_mail = []
if users:
for row in users:
html = []
email = row['email']
# email = "mukeshkumar@numerotec.com"
str_conf_id = row['conf_id']
lst_conf_id = str_conf_id.split(",")
html.clear()
for x in lst_conf_id:
confData = confs.get(int(x),None)
check_abs = UserModel().check_abs_types(now_date,confData['conf_id'])
if (check_abs and confData and confData['conf_key']) or is_view:
report = conf_report[confData['conf_key']]
html_data = render_template('users/email/daily_report_v1.html',data=report,date_today=previous_date.strftime('%d-%m-%Y'),now_date=now_date.strftime('%d-%m-%Y %I:%M %p'),confData=confData)
htmls = html_data.replace("\n", "")
html.append(htmls)
if html:
html_datas = str(html).replace("['", " ").replace("']", " ").replace(",", "").replace("' '", "")
html_tmp = render_template('users/email/abstract_report_mail_all.html',html=html_datas)
subject = " Abstract Submission Count as on " + now_date.strftime('%d-%m-%Y')
if is_view:
return html_tmp
else:
# EMAIL.sendMail_v1(subject,html_tmp,email,None,confData['conf_id'],confData)
EMAIL.sendMail_daily_report(subject,html_tmp,email,confData['conf_id'])
sender_mail.append(email)
return jsonify(sender_mail)
else :
pass
return "no users"
def sendAbsevaluationReport_v1(is_view):
now_date = datetime.now()
previous_date = now_date+ timedelta(days=-1)
pre_date = previous_date.strftime('%Y-%m-%d')
# users = UserModel().get_trigger_report_emails_data()
template_name = 'eva_daily_report_mail'
mailData = UserModel().get_daily_mail_templates(template_name)
confs_data = UserModel().getAllConfForTriggerReport()
for conf in confs_data:
check_abs = UserModel().check_eva_abs_types(previous_date,conf["conf_id"])
if check_abs:
for abs_type in check_abs:
remain_days = reduce(lambda x, y: (y-x).days, [now_date, abs_type["end_date"]])
report_data= BoModel().get_evaluators(abs_type["abs_type"],None,conf["conf_id"],0,100,"DESC")
report = report_data[0]
user_data = report_data[2]
conf_data = report_data[3][0]
count_data = report_data[4][0]
Auth.conference(conf_data,conf["conf_id"])
mail_data = {
'mail_content': mailData.mail_content,
'data' : report,
'conf_id' : conf["conf_id"],
'conf_key' : conf["conf_id"],
'date_today' : previous_date.strftime('%d-%m-%Y'),
'now_date' : now_date.strftime('%d-%m-%Y %I:%M %p'),
'conf_data' : conf_data,
'abs_type' : abs_type,
'count_data' : count_data,
'remain_days' : remain_days,
}
mail_content = Helper.convert_html_for_mail_screen(mail_data)
html = render_template('users/email/bo_mail_template.html',mail_content=mail_content)
sub_data = {
'conf_name': conf['conf_name'],
'eva_type' : abs_type["title"],
'now_date' : now_date.strftime('%d-%m-%Y')
}
subject = Helper.merge_tags(mailData.subject,sub_data)
if user_data:
for i in user_data:
email = i["email"]
# email = "mukesh@numerotec.com"
if is_view:
return html
else:
# EMAIL.sendMail_v1(subject,html,email,None,conf["conf_id"],conf)
EMAIL.sendMail_daily_report(subject,html,email,conf["conf_id"])
else:
pass
return "Mail send successfully"
else:
return "Abstract Not found"
@app.route('/programsheet/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
def programsheet(conf_id,conf_key):
conf_data = Auth.get_conference(conf_id)
start_date = conf_data['conf_start_dt']
end_date = conf_data['conf_end_dt']
confe_date = []
if start_date and end_date:
start_date = datetime.strptime(start_date, '%Y-%m-%d')
end_date = datetime.strptime(end_date,'%Y-%m-%d')
for dt in rrule(DAILY, dtstart=start_date, until=end_date):
confe_date.append(dt)
return render_template('backoffice/programsheet.html',confe_date=confe_date,conf_id=conf_id,conf_key=conf_key)
@app.route('/get_programsheet_data/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
def get_programsheet_data(conf_id,conf_key):
conf_date = request.values.get('conf_date')
data = UserModel().get_programsheet_data(conf_date,conf_id)
if data[0]:
program_data = data[0]
program_data = json.dumps(program_data)
return program_data
@app.route('/session_abs_view/<session_id>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
def Session_abs_view(session_id,conf_id,conf_key):
data = UserModel().get_session_view_data(session_id,conf_id)
return render_template('backoffice/session_view.html',data=data,conf_id=conf_id,conf_key=conf_key)
@app.route('/generate_sqlite',methods=['GET','POST'])
def generate_sqlite():
UserModel().session_data_InsertToSqlite_1()
return 'success'
@app.route('/generate_sqlite_merge_tag',methods=['GET','POST'])
def generate_sqlite_merge_tag():
UserModel().session_data_InsertToSqlite_MergeTag()
return 'success'
@app.route('/profile_creation/<user_id>/<conf_id>/<conf_key>', methods = ["GET"])
@RouteGroup.conf_required
def ProfileCreation(user_id,conf_id,conf_key,data=None):
encrypt_user_id = user_id
user_id = int(Cryptography.decrypt(unquote(user_id)))
if data is None:
userData = UserModel().get_member(user_id)
if userData and userData['reset_pwd_expire_on']:
now = datetime.now()
reset_pwd_expire_on = datetime.strptime(str(userData['reset_pwd_expire_on']),'%Y-%m-%d %H:%M:%S').strftime('%Y-%m-%d %H:%M:%S')
if str(now)>str(reset_pwd_expire_on):
flash("Expired!Link valid for 30 mintue")
return redirect (url_for('user.ForgetPwd',society_id=userData['society_id'],conf_id=conf_id,conf_key=conf_key))
else:
userData = data
return render_template('users/profile_creation.html',userData=userData,conf_id=conf_id,conf_key=conf_key,encrypt_user_id=encrypt_user_id)
@app.route('/post_profile_creation/<user_id>/<conf_id>/<conf_key>',methods=["POST"])
def postProfileCreation(user_id,conf_id,conf_key):
if request.method=="POST":
confe = UserModel().get_confe(conf_id,conf_key)
delData = UserModel().get_delegate_app(conf_id)
del_url = None
if delData:
del_url = delData['app_url']
if confe:
confe['del_url'] = del_url
Auth.conference(confe,conf_id)
society_id = request.values.get('society_id')
user_id = request.values.get('user_id')
prefix = request.values.get("prefix")
full_name = request.values.get("full_name")
email = request.values.get("hid_email")
mobile = request.values.get("mobile")
password = request.values.get('password')
confirm_password = request.values.get('confirm_password')
data = {'prefix':prefix,'full_name':full_name,'mobile':mobile,'pwd_difference' : password,'password' : password,'email':email,'user_id':user_id,'society_id':society_id,'updated_at':datetime.now(),'pwd_set_at':datetime.now()}
if int(conf_id) == 61:
data['profile_updated_at'] = datetime.now()
is_valid = True
if password == confirm_password :
is_valid = True
else:
flash("Password and confirm password mismatch",'errorMsg')
is_valid = False
mobile_count = UserModel().get_mobile_count(mobile,user_id,society_id) # db call 4
if mobile_count > 0 :
flash("Mobile number already exists for a different profile. Please provide an alternate number or contact support team.")
is_valid = False
if is_valid:
UserModel().update_member(user_id,data)
user_output = UserModel().get_users_email_data(email,society_id)
Auth.login(user_output,society_id)
return redirect(url_for('DB.Dashboard',conf_id = conf_id,conf_key=conf_key))
else:
encrypt_user_id = Cryptography.encrypt(int(user_id))
return ProfileCreation(encrypt_user_id,conf_id,conf_key,data)
else:
return redirect(url_for('user.ProfileCreation',user_id=user_id,conf_id=conf_id,conf_key=conf_key))
@app.route('/post_logins/<conf_id>/<conf_key>',methods = ["POST"])
@RouteGroup.conf_required
def PostLogins(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
email = request.values.get('email')
password = request.values.get('password')
society_id = confData['society_id']
user_output = UserModel().get_users_email_data(email,society_id)
if user_output :
if password == user_output['password']:
bo_access = UserModel().check_bo_access(email,3,society_id,conf_id)
user_output["is_admin"] = bo_access["is_admin"]
user_output["admin_type"] = bo_access["admin_type"]
Auth.login(user_output,society_id)
status = 1
msg = 'success'
else :
status = 2
msg = 'Passsword invalid. Please check the password.'
data={'status':status,'msg':msg}
return jsonify(data)
else:
status = 0
data={'status':status,'msg':''}
return jsonify(data)
@app.route('/get_userdata/<conf_id>/<conf_key>',methods = ["POST"])
@RouteGroup.conf_required
def getUserdata(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
email = request.values.get('email')
society_id = confData['society_id']
userData = UserModel().get_users_email_data(email,society_id)
if userData and userData['password']:
status = 1
user_id= Cryptography.encrypt(userData['user_id'])
else:
status=2
user_id =""
data={'status':status,'user_id':user_id}
return jsonify(data)
@app.route('/post_login_v1/<conf_id>/<conf_key>',methods = ["POST"])
@RouteGroup.conf_required
def PostLoginV1(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
email = request.values.get('email')
society_id = confData['society_id']
user_output = UserModel().get_users_email_data(email,society_id)
if user_output :
encrypt_user_id = Cryptography.encrypt(int(user_output["user_id"]))
else:
insert = UserModel().insert_new_user(email,society_id)
# insert system logs
system_data = request.headers.get("user-agent")
ip_add = request.headers.get('X-Forwarded-For', request.remote_addr)
route_name = request.path
route_name = route_name[1:]
app_url_1 = request.host_url
if "https" in app_url_1:
pass
else:
app_url_1 = app_url_1.replace("http","https")
app_url = app_url_1+route_name
params = "system_log?society_id="+str(society_id)+"&conf_id="+str(conf_id)+"&email="+email+"&app_type=ABSTRACT&app_url="+app_url+"&ip_add="+ip_add+"&system_data="+system_data
api_url = "https://conference.numerotech.com/" +params
result = requests.get(api_url)
res = result.text
res = json.loads(res)
#end
encrypt_user_id = Cryptography.encrypt(int(insert["user_id"]))
data = {'user_id':encrypt_user_id}
return jsonify(data)
@app.route('/forget_pwd/<society_id>/<conf_id>/<conf_key>',methods = ["GET", "POST"])
@RouteGroup.conf_required
def ForgetPwd(society_id,conf_id,conf_key):
return render_template('users/forget_pwd.html',society_id=society_id,conf_id=conf_id,conf_key=conf_key)
@app.route('/forget_pwd_mail/<society_id>/<conf_id>/<conf_key>',methods = ["GET", "POST"])
@RouteGroup.conf_required
def ForgetPwdMail(society_id,conf_id,conf_key):
if request.method == "POST" :
email = request.values.get('email')
output = UserModel().get_users_email_data(email,society_id)
if output :
SendResetPwdMail(output['user_id'],conf_id,conf_key)
return redirect(url_for('user.Login',conf_id=conf_id,conf_key=conf_key))
else :
flash("Please Enter Registered Email id","errorMsg")
return redirect (url_for('user.ForgetPwd',society_id=society_id,conf_id=conf_id,conf_key=conf_key))
else:
return redirect(url_for('user.Login',conf_id=conf_id,conf_key=conf_key))
def SendResetPwdMail(user_id,conf_id,conf_key):
now = datetime.now()
confData = UserModel().get_confe(conf_id,conf_key)
reset_pwd_expire_on = now + timedelta(minutes=30)
data = {'reset_pwd_expire_on' : reset_pwd_expire_on,'reset_pwd_sent_at':now}
output = UserModel().update_member(user_id,data)
if output :
subject = "Reset your password"
email = output['email']
encrypt_user_id = Cryptography.encrypt(user_id)
html = render_template('users/email/reset_password_mail.html',society_id=output['society_id'],conf_id=conf_id,conf_key=conf_key,confe=confData,output=output,encrypt_user_id=encrypt_user_id)
EMAIL.sendMailResetPassword(subject,html,email,confData)
flash('Reset link sent your registered email id to '+email,'successMsg')
return "success"
else :
return "fail"
@app.route('/post_amzon_upload/<society_id>/<society_key>/<conf_id>/<conf_key>', methods = ["GET","POST"])
@RouteGroup.conf_required
def PostAmazonUpload(society_id,society_key,conf_id,conf_key,acl="public-read"):
if request.method == 'POST':
user_id = request.values.get('user_id')
attach_id = request.values['attach_id']
attach_type_id = request.form['attach_type_id']
attach_type = request.values.get('attach_type')
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]
file_str = attach_type+file_extension
if " " in file_str :
file_str = file_str.replace(" ","")
try:
user_id = str(user_id)
bucket = 'common-application'
foldername = str(society_key)+"/user_attachment"
response = s3.upload_fileobj(file, bucket,foldername+'/'+user_id+'/'+ file_str, ExtraArgs={"ACL": acl,"ContentType": file.content_type})
data_1 = {'bucketname' :bucket,'foldername':foldername,'file_name':file_str+"?"+str(Helper.getcurrenttimestamp()),'msg':'Image successfully uploded','file_extension':file_extension,'status':1}
file_path = 'https://common-application.s3-ap-southeast-1.amazonaws.com/'+foldername+"/"+user_id
data = {
'user_id' : user_id,
'attach_type_id' : attach_type_id,
'attach_file_name' : file_str,
'attach_path' : file_path,
'created_at' : datetime.now(),
'updated_at' : datetime.now()
}
if (int(attach_id) > 0):
ua = UserModel().get_user_attach(attach_id,attach_type_id)
if ua:
data.pop("created_at")
data = UserModel().update_image(attach_id,data)
d = {}
d['attach_id'] = attach_id
data_1.update(d)
else :
attach_id_pk = UserModel().insert_image(data)
d = {}
d['attach_id'] = attach_id_pk
data_1.update(d)
return json.dumps(data_1)
except ClientError as e:
logging.error(e)
data_1 = {'msg':'Image upload failed .Please try again.','status':0}
json_data = json.dumps(data_1)
return json_data
# flash('Something Error .Please Try Again')
else :
flash("Please, Try again.","errorMsg")
return redirect(url_for('DB.Dashboard',conf_id=conf_id,conf_key=conf_key))
@app.route('/delete_amazon_image/<society_id>/<society_key>/<conf_id>/<conf_key>', methods = ["GET","POST"])
@RouteGroup.conf_required
def DeleteAmazonImage(society_id,society_key,conf_id,conf_key):
attach_id = request.form['attach_id']
attach_type_id = request.form['attach_type_id']
ua = UserModel().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('https://common-application.s3-ap-southeast-1.amazonaws.com/', "")
s3 = boto3.resource("s3",aws_access_key_id='AKIAILLDAQ7NFUMVOYLQ',aws_secret_access_key='EEudWCsWeCIt/J9/z5m5htmUdGFJNzWFPvNQBIp/')
response = s3.Object('common-application', foldername).delete()
UserModel().delete_image(attach_id,attach_type_id)
data = {'msg':'Deleted','status' : 1}
json_data = json.dumps(data)
return json_data
@app.route('/evaluation_consent_responce/<eva_id>/<consent_status_id>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
def evaluation_consent_responce(eva_id,consent_status_id,conf_id,conf_key):
eva_type = ""
data = UserModel().save_evaluation_consent_responce(eva_type,eva_id,conf_id,consent_status_id)
return render_template('users/evaluation_consent_responce.html',data=data,conf_id=conf_id,conf_key=conf_key)
@app.route('/change_pwd/<conf_id>/<conf_key>',methods = ["GET", "POST"])
@RouteGroup.login_required
@RouteGroup.conf_required
def ChangePwd(conf_id,conf_key):
return render_template('users/change_password.html',conf_id=conf_id,conf_key=conf_key)
@app.route('/post_change_pwd/<conf_id>/<conf_key>',methods = ["GET", "POST"])
@RouteGroup.conf_required
def PostChangePwd(conf_id,conf_key):
if request.method == "POST":
society_id = Auth.get_conference(conf_id).get("society_id")
user_id = Auth.get_user(society_id).get('user_id')
old_password = request.form['old_password']
old = UserModel().check_password(user_id)
old_password_db = old['password']
if old_password == old_password_db :
password = request.form['password']
confirm_password = request.form['confirm_password']
if password == confirm_password :
if old_password_db == password:
flash("Please enter a new password as you have entered your current password.","errorMsg")
user_id = Cryptography.encrypt(int(user_id))
return redirect (url_for('user.ChangePwd',conf_id=conf_id,conf_key=conf_key))
else:
data = {'password' : password,'pwd_difference' : password }
output = UserModel().update_member(user_id,data)
if output:
flash('Password Changed Successfully...','success')
user_id = Cryptography.encrypt(int(user_id))
return redirect(url_for('DB.Dashboard',conf_id=conf_id,conf_key=conf_key))
else:
flash("Password and confirm password mismatch","errorMsg")
user_id = Cryptography.encrypt(int(user_id))
return redirect (url_for('user.ChangePwd',conf_id=conf_id,conf_key=conf_key))
else:
flash("Your Old Password needs to be entered correctly. Please enter it again.","errorMsg")
user_id = Cryptography.encrypt(int(user_id))
return redirect (url_for('user.ChangePwd',conf_id=conf_id,conf_key=conf_key))
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists