58 lines
1.7 KiB
Bash
Executable File
58 lines
1.7 KiB
Bash
Executable File
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
# Initialize first admin user if database is empty
|
|
# Usage: ./init-admin.sh [username] [password] [first_name] [last_name]
|
|
# Default: admin / admin123456 / Admin / User
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
cd "$SCRIPT_DIR"
|
|
|
|
USERNAME="${1:-admin}"
|
|
PASSWORD="${2:-admin123456}"
|
|
FIRST_NAME="${3:-Admin}"
|
|
LAST_NAME="${4:-User}"
|
|
|
|
# Wait for MongoDB to be ready
|
|
echo "Waiting for MongoDB to be ready..."
|
|
for i in {1..30}; do
|
|
if docker exec inventarsystem-mongodb mongosh --eval "db.adminCommand('ping')" >/dev/null 2>&1; then
|
|
echo "MongoDB is ready."
|
|
break
|
|
fi
|
|
if [ $i -eq 30 ]; then
|
|
echo "Error: MongoDB did not start in time."
|
|
exit 1
|
|
fi
|
|
sleep 1
|
|
done
|
|
|
|
# Check if any users already exist
|
|
USER_COUNT=$(docker exec inventarsystem-mongodb mongosh --quiet --eval "db.users.countDocuments({})" Inventarsystem 2>/dev/null || echo "0")
|
|
|
|
if [ "$USER_COUNT" -eq 0 ]; then
|
|
echo "Database is empty. Creating initial admin user: $USERNAME"
|
|
|
|
# Hash the password
|
|
PASSWORD_HASH=$(python3 -c "import hashlib; print(hashlib.sha512(b'$PASSWORD').hexdigest())")
|
|
|
|
# Insert admin user
|
|
docker exec inventarsystem-mongodb mongosh --eval "
|
|
db.users.insertOne({
|
|
Username: '$USERNAME',
|
|
Password: '$PASSWORD_HASH',
|
|
Admin: true,
|
|
active_ausleihung: null,
|
|
name: '$FIRST_NAME',
|
|
last_name: '$LAST_NAME',
|
|
favorites: []
|
|
})
|
|
" Inventarsystem
|
|
|
|
echo "✓ Admin user '$USERNAME' created successfully."
|
|
echo " Username: $USERNAME"
|
|
echo " Password: $PASSWORD"
|
|
else
|
|
echo "Database already has $USER_COUNT user(s). Skipping initialization."
|
|
fi
|