feat: Add Excel, PDF export, and user generation modules
- Implemented `excel_export.py` for generating library item exports in Excel format. - Created `pdf_export.py` for generating audit reports compliant with DIN 5008 standards, including detailed event tables and signature blocks. - Developed `generate_user.py` for interactive user creation with validation for usernames and passwords. - Introduced `module_registry.py` for managing module states and path matching. - Added a basic `__init__.py` in the `terminplaner` module for initialization.
This commit is contained in:
Executable
+103
@@ -0,0 +1,103 @@
|
||||
'''
|
||||
Copyright 2025-2026 AIIrondev
|
||||
|
||||
Licensed under the Inventarsystem EULA (Endbenutzer-Lizenzvertrag).
|
||||
See Legal/LICENSE for the full license text.
|
||||
Unauthorized commercial use, SaaS hosting, or removal of branding is prohibited.
|
||||
For commercial licensing inquiries: https://github.com/AIIrondev
|
||||
'''
|
||||
import Web.modules.database.user as user
|
||||
import sys
|
||||
import getpass
|
||||
import re
|
||||
|
||||
def is_valid_username(username):
|
||||
"""Check if username follows valid pattern (letters, numbers, underscore)"""
|
||||
return bool(re.match(r'^[a-zA-Z0-9_]+$', username))
|
||||
|
||||
def is_valid_password(password):
|
||||
"""Check if password meets minimum requirements"""
|
||||
if len(password) < 8:
|
||||
return False, "Password must be at least 8 characters long"
|
||||
return True, ""
|
||||
|
||||
def generate_user_interactive():
|
||||
print("========================================")
|
||||
print(" User Generation Interface ")
|
||||
print("========================================")
|
||||
|
||||
# Get username
|
||||
while True:
|
||||
username = input("Enter username: ").strip()
|
||||
if not username:
|
||||
print("Error: Username cannot be empty")
|
||||
continue
|
||||
if not is_valid_username(username):
|
||||
print("Error: Username can only contain letters, numbers, and underscores")
|
||||
continue
|
||||
break
|
||||
|
||||
# Get password
|
||||
while True:
|
||||
password = getpass.getpass("Enter password: ")
|
||||
if not password:
|
||||
print("Error: Password cannot be empty")
|
||||
continue
|
||||
|
||||
valid, message = is_valid_password(password)
|
||||
if not valid:
|
||||
print(f"Error: {message}")
|
||||
continue
|
||||
|
||||
confirm_password = getpass.getpass("Confirm password: ")
|
||||
if password != confirm_password:
|
||||
print("Error: Passwords do not match")
|
||||
continue
|
||||
|
||||
break
|
||||
|
||||
# Ask if admin
|
||||
while True:
|
||||
admin_input = input("Make this user an admin? (y/n): ").lower().strip()
|
||||
if admin_input in ['y', 'yes']:
|
||||
is_admin = True
|
||||
break
|
||||
elif admin_input in ['n', 'no']:
|
||||
is_admin = False
|
||||
break
|
||||
else:
|
||||
print("Please enter 'y' or 'n'")
|
||||
|
||||
while True:
|
||||
name_input = input("Enter a first name for the user:")
|
||||
if not name_input:
|
||||
print("You have to provide a name!")
|
||||
else:
|
||||
break
|
||||
|
||||
while True:
|
||||
last_name_input = input("Enter a last name for the user:")
|
||||
if not last_name_input:
|
||||
print("You have to provide a name!")
|
||||
else:
|
||||
break
|
||||
|
||||
|
||||
# Add the user
|
||||
added = user.add_user(username, password, name_input, last_name_input)
|
||||
|
||||
if added:
|
||||
print(f"User '{username}' created successfully.")
|
||||
if is_admin:
|
||||
admin_result = user.make_admin(username)
|
||||
if admin_result:
|
||||
print(f"User '{username}' has been given administrator privileges.")
|
||||
else:
|
||||
print(f"Warning: Failed to make user '{username}' an administrator.")
|
||||
else:
|
||||
print(f"Error: Failed to create user '{username}'. Username may already exist.")
|
||||
|
||||
return added
|
||||
|
||||
if __name__ == "__main__":
|
||||
generate_user_interactive()
|
||||
Reference in New Issue
Block a user