Spaces:
Running
Running
File size: 3,176 Bytes
9697624 843bda3 a04e1ac 79d7ca9 10399f1 79d7ca9 10399f1 79d7ca9 9697624 10f29f7 9697624 843bda3 9697624 10f29f7 843bda3 54d0fdb 843bda3 fb44d11 a04e1ac 9146dbe a04e1ac 9697624 10399f1 9697624 |
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 |
from fastapi import HTTPException, UploadFile, File, Form
from typing import Optional
import bcrypt
import os
import shutil
from ..utils import get_user_cropped_image_from_photo
# Registrering a face
async def register_user(db, email: str, name: str, role: str, file: UploadFile = File(...)):
"""
Processes and stores the image uploaded into vectordb as image embeddings.
:param db: The vector db collection handle to which the image embedding with email id as key will be upserted
:param email: The email id of the user being registered, this is assumed to be unique per user record
:param name: The user name (different from email) for display
:param role: The role associated with the user, it can only be student or teacher
:param file: The facial image of the user being registered, the first recognized face image would be used.
:return: email
"""
unique_filename = f"{email}.jpg" # Use the email as the filename
file_path = f"/home/user/data/tmp/{unique_filename}" # Specify our upload directory
# Ensure the directory exists
os.makedirs(os.path.dirname(file_path), exist_ok=True)
# Then, proceed to open the file
with open(file_path, "wb") as buffer:
contents = await file.read()
buffer.write(contents)
# Process the image to extract the face
cropped_face = get_user_cropped_image_from_photo(file_path)
if cropped_face is not None:
# Here we can store the embeddings along with user details in ChromaDB
# chroma_db.save_embeddings(user_id, embeddings)
db.upsert(images=[cropped_face], ids=[email], metadatas=[{"name":name, "role":role}])
return {"status": "User registered successfully", "image": cropped_face}
else:
return {"error": "No faces detected"}
#os.remove(file_path) # Optionally remove the file after processing, if not needed
# Admin Authentication
def verify_admin_password(submitted_user: str, submitted_password: str) -> bool:
"""
Verifies the submitted password against the stored hash.
:param submitted_user: The username submitted by the user.
:param submitted_password: The password submitted by the user.
:return: True if the password is correct, False otherwise.
"""
if submitted_user == "admin":
# Retrieve the stored hash from environment variable
stored_password_hash = os.getenv("EC_ADMIN_PWD", "").encode('utf-8')
print(stored_password_hash)
# Directly compare the submitted password with the stored hash
return bcrypt.checkpw(submitted_password.encode('utf-8'), stored_password_hash)
return False
def get_disk_usage(path="/home/user/data"):
total, used, free = shutil.disk_usage(path)
# Convert bytes to MB by dividing by 2^20
return {
"total": total / (2**20),
"used": used / (2**20),
"free": free / (2**20)
}
# Additional Admin Functions
# we could include other administrative functionalities here, such as:
# - Listing all registered users.
# - Moderating chat messages or viewing chat history.
# - Managing system settings or configurations.
|