Skip to content

Commit 1786f20

Browse files
committed
Email implementation
1 parent ac728f1 commit 1786f20

4 files changed

Lines changed: 43 additions & 24 deletions

File tree

app/api/web_api.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ def api_get_user_permissions():
8585
@web_api.route("/api/users", methods=["POST"])
8686
def api_add_user():
8787
user_data = request.get_json()
88-
user = User(user_data["name"], user_data["key"])
88+
user = User(user_data["name"], user_data["key"], user_data["email"])
8989

9090
number_of_new_user_added = user.save()
9191

app/models/user.py

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33

44

55
class User:
6-
def __init__(self, name, key, slack_id=None):
6+
def __init__(self, name, key, email=None):
77
self.name = name
88
self.key = key
9-
self.slack_id = slack_id
9+
self.email = email
1010

1111
@classmethod
1212
def get_by_key(cls, key):
@@ -34,14 +34,14 @@ def save(self):
3434
if existing_user:
3535
# Update existing user data
3636
cursor.execute(
37-
"UPDATE users SET name = ?, slack_id = ? WHERE key = ?",
38-
(self.name, self.slack_id, self.key),
37+
"UPDATE users SET name = ?, key = ? WHERE email = ?",
38+
(self.name, self.key, self.email if self.email else None),
3939
)
4040
else:
4141
# Create new user
4242
cursor.execute(
43-
"INSERT INTO users (name, key, slack_id) VALUES (?, ?, ?)",
44-
(self.name, self.key, self.slack_id),
43+
"INSERT INTO users (name, key, email) VALUES (?, ?, ?)",
44+
(self.name, self.key, self.email if self.email else None),
4545
)
4646
number_of_new_user = 1
4747
conn.commit()
@@ -79,7 +79,7 @@ def get_permissions(cls, user_key=None):
7979
if user_key:
8080
cursor.execute(
8181
"""
82-
SELECT users.name, users.key,
82+
SELECT users.name, users.key, users.email,
8383
(SELECT operation_time
8484
FROM event_logs
8585
WHERE user_key = users.key
@@ -93,7 +93,7 @@ def get_permissions(cls, user_key=None):
9393
else:
9494
cursor.execute(
9595
"""
96-
SELECT users.name, users.key,
96+
SELECT users.name, users.key, users.email,
9797
(SELECT operation_time
9898
FROM event_logs
9999
WHERE user_key = users.key
@@ -106,7 +106,9 @@ def get_permissions(cls, user_key=None):
106106
for row in cursor.fetchall():
107107
user_name = row[0]
108108
user_key = row[1]
109-
latest_activity = row[2]
109+
user_email = row[2] if row[2] else None # Handle email being None
110+
latest_activity = row[3]
111+
110112

111113
# Get device permissions for the current user
112114
device_permissions = []
@@ -138,14 +140,16 @@ def get_permissions(cls, user_key=None):
138140
user_record = {
139141
"user_name": user_name,
140142
"user_key": user_key,
143+
"user_email": user_email,
141144
"permissions": device_permissions,
142145
"latest_activity": latest_activity,
143146
}
144147
user_data.append(user_record)
145148

146149
# Close the database connection
147150
conn.close()
148-
151+
152+
print(f"User data fetched: {user_data}") # Debugging output
149153
return user_data
150154

151155
def has_permission_for_device(self, device_id):

app/schema.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ CREATE TABLE IF NOT EXISTS users
88
(
99
name TEXT NOT NULL,
1010
key TEXT NOT NULL,
11-
slack_id TEXT DEFAULT NULL
11+
email TEXT NOT NULL
1212
);
1313
CREATE TABLE IF NOT EXISTS permissions
1414
(

app/templates/prismo/users.html

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@
66
<div class="card-body">
77
<h5 class="card-title">Add last used RFID card as new user: <span id="used-key-at"></span></h5>
88
<div class="input-group mb-3">
9-
<button class="btn btn-primary" type="submit" onclick="addUser(document.getElementById('user_name').value)" ><i class="bi bi-person-add"></i> Add User</button>
9+
<button class="btn btn-primary" type="submit" onclick="addUser(document.getElementById('user_name').value, document.getElementById('user_email').value)" ><i class="bi bi-person-add"></i> Add User</button>
1010
<input type="text" class="form-control" id="user_name" placeholder="User Name">
11+
<input type="email" class="form-control ms-2" id="user_email" placeholder="Email">
1112
</div>
1213
</div>
1314
</div>
@@ -46,8 +47,9 @@ <h5 class="card-title">Add last used RFID card as new user: <span id="used-key-a
4647
return null; // Or throw an error
4748
}
4849
}
49-
50-
async function addUser(name) {
50+
// Example curl request to add a new user:
51+
// curl -X POST -H "Content-Type: application/json" -d '{"name":"John Doe","email":"john@example.com","key":"RFID_KEY"}' http://localhost:5000/api/users
52+
async function addUser(name, email) {
5153
try {
5254
const latestKey = await getLatestKey(); // Wait for API call
5355

@@ -58,7 +60,7 @@ <h5 class="card-title">Add last used RFID card as new user: <span id="used-key-a
5860
headers: {
5961
'Content-Type': 'application/json'
6062
},
61-
body: JSON.stringify({ name, key })
63+
body: JSON.stringify({ name, email, key })
6264
});
6365

6466
if (!response.ok) {
@@ -107,6 +109,7 @@ <h5 class="card-title">Add last used RFID card as new user: <span id="used-key-a
107109
return acc
108110
}, {}),
109111
latestActivity: user.latest_activity,
112+
email: user.user_email,
110113
operation: '<button class="btn btn-sm btn-danger" onclick="deleteUser(\'' + user.user_key + '\')">Delete</button>'
111114
}
112115
})
@@ -135,14 +138,26 @@ <h5 class="card-title">Add last used RFID card as new user: <span id="used-key-a
135138
}
136139

137140
const getColumns = (data) => {
138-
return Object.keys(data[0]).map(key => ({
139-
data: (row) => {
140-
const value = row[key]
141-
return typeof value === 'string' ? value : `<input type="checkbox" ${value?.allowed && "checked"} onchange="updatePermissions('${row.key}', '${value?.device_id}', ${value?.allowed})">`
142-
},
143-
visible: key !== 'key',
144-
title: key.charAt(0).toUpperCase() + key.slice(1)
145-
}))
141+
return Object.keys(data[0]).map(key => {
142+
// Force the email column to be visible and render as plain text
143+
if (key === 'email') {
144+
return {
145+
data: row => row.email || '',
146+
visible: true,
147+
title: 'Email'
148+
}
149+
}
150+
return {
151+
data: (row) => {
152+
const value = row[key]
153+
return typeof value === 'string'
154+
? value
155+
: `<input type="checkbox" ${value?.allowed ? "checked" : ""} onchange="updatePermissions('${row.key}', '${value?.device_id}', ${value?.allowed})">`
156+
},
157+
visible: key !== 'key',
158+
title: key.charAt(0).toUpperCase() + key.slice(1)
159+
}
160+
})
146161
}
147162

148163
async function initializeDataTable() {

0 commit comments

Comments
 (0)