mirror of
https://github.com/Finsys/dockhand.git
synced 2026-06-17 19:09:33 +03:00
105 lines
3.3 KiB
Bash
Executable File
105 lines
3.3 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# SQLite: Emergency script to create an admin user
|
|
# Use this if you're locked out of Dockhand and need to create a new admin
|
|
#
|
|
# Usage:
|
|
# docker exec -it dockhand /app/scripts/emergency/sqlite/create-admin.sh
|
|
#
|
|
# Default credentials: admin / admin123
|
|
# CHANGE THE PASSWORD IMMEDIATELY after logging in!
|
|
#
|
|
|
|
set -e
|
|
|
|
echo "========================================"
|
|
echo " Dockhand - Create Admin User (SQLite)"
|
|
echo "========================================"
|
|
echo ""
|
|
echo "This script will create an admin user with:"
|
|
echo " Username: admin"
|
|
echo " Password: admin123"
|
|
echo ""
|
|
echo "If user 'admin' already exists, password will"
|
|
echo "be reset and admin privileges restored."
|
|
echo ""
|
|
|
|
# Default database path
|
|
DB_PATH="${DOCKHAND_DB:-/app/data/db/dockhand.db}"
|
|
|
|
# Check if running locally (not in Docker)
|
|
if [ ! -f "$DB_PATH" ] && [ -f "./data/db/dockhand.db" ]; then
|
|
DB_PATH="./data/db/dockhand.db"
|
|
fi
|
|
|
|
if [ ! -f "$DB_PATH" ]; then
|
|
echo "Error: Database not found at $DB_PATH"
|
|
echo "Set DOCKHAND_DB environment variable to specify the database path"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Database: $DB_PATH"
|
|
echo ""
|
|
printf "Continue? [y/N]: "
|
|
read CONFIRM
|
|
|
|
case "$CONFIRM" in
|
|
[yY]|[yY][eE][sS])
|
|
;;
|
|
*)
|
|
echo "Aborted."
|
|
exit 0
|
|
;;
|
|
esac
|
|
|
|
# Username and password
|
|
USERNAME="admin"
|
|
# Password: admin123
|
|
# This is an argon2id hash of "admin123" - generated with default argon2 settings
|
|
PASSWORD_HASH='$argon2id$v=19$m=65536,t=3,p=4$Jq4am2SfyYKmc0PAHe+yzg$cq/27vK/Qg2eZb/jMDy0ExLDhOG+58cKAximxpG5Dss'
|
|
|
|
echo ""
|
|
echo "Creating admin user..."
|
|
|
|
# Check if admin user already exists
|
|
EXISTING=$(sqlite3 "$DB_PATH" "SELECT COUNT(*) FROM users WHERE username='$USERNAME';")
|
|
|
|
if [ "$EXISTING" -gt "0" ]; then
|
|
echo "User '$USERNAME' already exists."
|
|
echo "Resetting password and ensuring active status..."
|
|
sqlite3 "$DB_PATH" "UPDATE users SET password_hash='$PASSWORD_HASH', is_active=1 WHERE username='$USERNAME';"
|
|
USER_ID=$(sqlite3 "$DB_PATH" "SELECT id FROM users WHERE username='$USERNAME';")
|
|
else
|
|
echo "Creating new admin user..."
|
|
sqlite3 "$DB_PATH" "INSERT INTO users (username, password_hash, is_active, auth_provider, created_at, updated_at) VALUES ('$USERNAME', '$PASSWORD_HASH', 1, 'local', datetime('now'), datetime('now'));"
|
|
USER_ID=$(sqlite3 "$DB_PATH" "SELECT id FROM users WHERE username='$USERNAME';")
|
|
echo "Admin user created successfully."
|
|
fi
|
|
|
|
# Get the Admin role ID (it's a system role)
|
|
ADMIN_ROLE_ID=$(sqlite3 "$DB_PATH" "SELECT id FROM roles WHERE name='Admin';")
|
|
|
|
if [ -z "$ADMIN_ROLE_ID" ]; then
|
|
echo "Warning: Admin role not found in database."
|
|
echo "The user was created but may not have admin privileges."
|
|
echo "Please check Settings > Auth > Roles after logging in."
|
|
else
|
|
# Check if user already has Admin role
|
|
HAS_ROLE=$(sqlite3 "$DB_PATH" "SELECT COUNT(*) FROM user_roles WHERE user_id=$USER_ID AND role_id=$ADMIN_ROLE_ID;")
|
|
|
|
if [ "$HAS_ROLE" -eq "0" ]; then
|
|
echo "Assigning Admin role..."
|
|
sqlite3 "$DB_PATH" "INSERT INTO user_roles (user_id, role_id, created_at) VALUES ($USER_ID, $ADMIN_ROLE_ID, datetime('now'));"
|
|
echo "Admin role assigned."
|
|
else
|
|
echo "User already has Admin role."
|
|
fi
|
|
fi
|
|
|
|
echo ""
|
|
echo "Credentials:"
|
|
echo " Username: admin"
|
|
echo " Password: admin123"
|
|
echo ""
|
|
echo "WARNING: Change the password immediately after logging in!"
|