-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathapp.py
131 lines (88 loc) · 2.89 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
125
126
127
128
129
130
131
from flask import Flask, request, jsonify, send_file
from psycopg2 import connect, extras
from cryptography.fernet import Fernet
from dotenv import load_dotenv
from os import environ
load_dotenv()
app = Flask(__name__)
key = Fernet.generate_key()
host = environ.get('DB_HOST')
port = environ.get('DB_PORT')
dbname = environ.get('DB_NAME')
user = environ.get('DB_USER')
password = environ.get('DB_PASSWORD')
def get_connection():
conn = connect(host=host, port=port, dbname=dbname,
user=user, password=password)
return conn
@app.get("/api/users")
def get_users():
conn = get_connection()
cur = conn.cursor(cursor_factory=extras.RealDictCursor)
cur.execute("SELECT * FROM users")
users = cur.fetchall()
cur.close()
conn.close()
return jsonify(users)
@app.get("/api/users/<id>")
def get_user(id):
conn = get_connection()
cur = conn.cursor(cursor_factory=extras.RealDictCursor)
cur.execute("SELECT * FROM users WHERE id = %s", (id,))
user = cur.fetchone()
cur.close()
conn.close()
if(user is None):
return jsonify({"message": "User not found"}), 404
return jsonify(user)
@app.post("/api/users")
def create_user():
newUser = request.get_json()
userName = newUser["username"]
email = newUser["email"]
password = Fernet(key).encrypt(bytes(newUser["password"], "utf-8"))
conn = get_connection()
cur = conn.cursor(cursor_factory=extras.RealDictCursor)
cur.execute(
"INSERT INTO users (username, email, password) VALUES (%s, %s, %s) RETURNING *", (
userName, email, password),
)
newCreatedUser = cur.fetchone()
conn.commit()
cur.close()
conn.close()
return jsonify(newCreatedUser)
@app.delete("/api/users/<id>")
def delete_user(id):
conn = get_connection()
cur = conn.cursor(cursor_factory=extras.RealDictCursor)
cur.execute("DELETE FROM users WHERE id = %s RETURNING *", (id,))
user = cur.fetchone()
conn.commit()
cur.close()
conn.close()
if(user is None):
return jsonify({"message": "User not found"}), 404
return jsonify(user)
@app.put("/api/users/<id>")
def update_user(id):
conn = get_connection()
cur = conn.cursor(cursor_factory=extras.RealDictCursor)
newUser = request.get_json()
userName = newUser["username"]
email = newUser["email"]
password = Fernet(key).encrypt(bytes(newUser["password"], "utf-8"))
cur.execute("UPDATE users SET username = %s, email = %s, password = %s WHERE id = %s RETURNING *",
(userName, email, password, id))
updatedUser = cur.fetchone()
conn.commit()
cur.close()
conn.close()
if(updatedUser is None):
return jsonify({"message": "User not found"}), 404
return jsonify(updatedUser)
@app.get('/')
def home():
return send_file('static/index.html')
if __name__ == "__main__":
app.run(debug=True)