-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.py
124 lines (109 loc) · 4.31 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
import threading
from flask import Flask,render_template,request,redirect,url_for,make_response
from flask_sqlalchemy import SQLAlchemy
import random,string
from notify import *
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db'
db = SQLAlchemy(app)
# Returns the landing page of the website
@app.route("/")
def hello_world():
return render_template("index.html")
# Returns the File a Complain page
@app.route("/complain")
def complain():
return render_template("complain.html")
# After clicking submit button on file a complain page
# All the data is send to /complainSubmission end point in POST method
# The Funtions performs:
# Generate a Random Token number
# Insert the all data into Database
# Send a mail to the user in seprate thread
@app.route("/complainSubmission",methods=['POST'])
def complainSubmission():
# Fetching the data from POST request
name = request.form['name']
email =request.form['email']
phone =request.form['phone']
aadhar =request.form['aadhar']
station =request.form['station']
complaint =request.form['complain']
# Generating a random token number
token = ''.join(random.choices(string.ascii_uppercase + string.digits, k=20))
# Inserting data into database
complain = Complains(name=name,email=email,phone=phone,aadhar=aadhar,station=station,complain=complaint,status=0,token=token)
db.session.add(complain)
db.session.commit()
# Sending a mail using a thread
t1 = threading.Thread(target=notify,args=(phone,email,name,token,0))
t1.start()
return render_template("token.html",token=token)
@app.route("/checkstatus")
def checkStatus():
return render_template("checkStatus.html")
@app.route("/status",methods=['POST'])
def check():
token = request.form['token']
complain = Complains.query.filter_by(token=token).first()
return render_template("status.html",status=complain.status)
@app.route("/admin")
def admin():
if(isAdmin()):
return redirect(url_for('dashboard'))
return render_template("admin.html")
@app.route("/login",methods=['POST'])
def login():
username = request.form['username']
password = request.form['password']
admin = Admin.query.filter_by(username=username,password=password).first()
if(admin!=None):
resp = make_response(redirect(url_for('dashboard')))
resp.set_cookie('username', username,max_age=86400)
return resp
else:
return render_template("admin.html",error=True)
@app.route("/dashboard")
def dashboard():
if(isAdmin()):
data = Complains.query.filter_by().all()
return render_template("dashboard.html",data=data)
else:
return redirect(url_for("admin"))
@app.route("/updatestatus",methods=['GET'])
def updateStatus():
token = request.args.get('token')
status = request.args.get('status')
print(status)
complain = Complains.query.filter_by(token=token).first()
complain.status=status
db.session.commit()
t1 = threading.Thread(target=sendMail,args=(complain.email,complain.name,token,status))
t1.start()
return ""
# Utility Function
def isAdmin():
username = request.cookies.get('username')
return True if Admin.query.filter_by(username=username).first() !=None else False
app.jinja_env.globals.update(isAdmin=isAdmin)
# Database
class Complains(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), nullable=False)
email = db.Column(db.String(120), nullable=False)
phone = db.Column(db.String(120), nullable=False)
aadhar = db.Column(db.Integer, nullable=False)
station = db.Column(db.String(120), nullable=False)
complain = db.Column(db.Text, nullable=False)
status = db.Column(db.Integer,nullable=False)
token = db.Column(db.String(120),unique=True, nullable=False)
def __repr__(self):
return f' ({self.id} - {self.name} - {self.email} - {self.phone} - {self.station} - {self.complain} - {self.status} - {self.token})'
class Admin(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80),unique=True, nullable=False)
password = db.Column(db.String(80), nullable=False)
def __repr__(self):
return f' ({self.username} - {self.password})'
if __name__=="__main__":
app.run(host="0.0.0.0",port=80,debug=True)