Spaces:
Running
Running
| import os | |
| import hashlib | |
| import json | |
| import argparse | |
| from dotenv import load_dotenv | |
| # Function to deterministically hash emails | |
| def deterministic_hash(email, salt): | |
| return hashlib.pbkdf2_hmac("sha256", email.encode(), salt, 100000).hex() | |
| def main(args): | |
| # Load the .env file | |
| load_dotenv() | |
| # Get the encryption key (salt) | |
| encryption_salt = os.getenv("EMAIL_ENCRYPTION_KEY").encode() | |
| # Load emails from the specified JSON file | |
| with open(args.students_file, "r") as file: | |
| emails = json.load(file) | |
| # Replace emails with deterministic hashed emails, {hashed_email: [roles]} | |
| hashed_emails = { | |
| deterministic_hash(email, encryption_salt): roles | |
| for email, roles in emails.items() | |
| } | |
| # Save hashed emails to the specified encrypted JSON file | |
| with open(args.encrypted_students_file, "w") as file: | |
| json.dump(hashed_emails, file) | |
| if __name__ == "__main__": | |
| parser = argparse.ArgumentParser( | |
| description="Encrypt student emails in a JSON file." | |
| ) | |
| parser.add_argument( | |
| "--students-file", | |
| type=str, | |
| default="private/students.json", | |
| help="Path to the students JSON file", | |
| ) | |
| parser.add_argument( | |
| "--encrypted-students-file", | |
| type=str, | |
| default="public/files/students_encrypted.json", | |
| help="Path to save the encrypted students JSON file", | |
| ) | |
| args = parser.parse_args() | |
| main(args) | |