Skip to content

Instantly share code, notes, and snippets.

@include
Created October 2, 2025 15:02
Show Gist options
  • Save include/0f12a37751e80595379cf5665b6c1e8d to your computer and use it in GitHub Desktop.
Save include/0f12a37751e80595379cf5665b6c1e8d to your computer and use it in GitHub Desktop.
nginx proxy manager fix admin - migrate ALL things from past admins to the new active admin
#!/bin/bash
# NPM Ownership Transfer Script
# Transfers all Nginx Proxy Manager resources from deleted users to active admin
DB_PATH="${1:-database.sqlite}"
if [ ! -f "$DB_PATH" ]; then
echo "Error: Database file not found: $DB_PATH"
exit 1
fi
# Get the active (non-deleted) admin user ID
ACTIVE_ADMIN=$(sqlite3 "$DB_PATH" "SELECT id FROM user WHERE is_deleted=0 ORDER BY id LIMIT 1;")
if [ -z "$ACTIVE_ADMIN" ]; then
echo "Error: No active admin user found"
exit 1
fi
echo "Active admin user ID: $ACTIVE_ADMIN"
echo "Transferring ownership of all resources..."
# Transfer ownership of all resource types
sqlite3 "$DB_PATH" <<EOF
UPDATE proxy_host SET owner_user_id=$ACTIVE_ADMIN WHERE owner_user_id IN (SELECT id FROM user WHERE is_deleted=1) AND is_deleted=0;
UPDATE certificate SET owner_user_id=$ACTIVE_ADMIN WHERE owner_user_id IN (SELECT id FROM user WHERE is_deleted=1) AND is_deleted=0;
UPDATE redirection_host SET owner_user_id=$ACTIVE_ADMIN WHERE owner_user_id IN (SELECT id FROM user WHERE is_deleted=1) AND is_deleted=0;
UPDATE dead_host SET owner_user_id=$ACTIVE_ADMIN WHERE owner_user_id IN (SELECT id FROM user WHERE is_deleted=1) AND is_deleted=0;
UPDATE stream SET owner_user_id=$ACTIVE_ADMIN WHERE owner_user_id IN (SELECT id FROM user WHERE is_deleted=1) AND is_deleted=0;
UPDATE access_list SET owner_user_id=$ACTIVE_ADMIN WHERE owner_user_id IN (SELECT id FROM user WHERE is_deleted=1) AND is_deleted=0;
EOF
echo ""
echo "Ownership transfer complete. Summary:"
echo "----------------------------------------"
sqlite3 "$DB_PATH" <<EOF
.mode column
SELECT 'Proxy Hosts' as Resource, COUNT(*) as Count FROM proxy_host WHERE owner_user_id=$ACTIVE_ADMIN AND is_deleted=0
UNION ALL
SELECT 'Certificates', COUNT(*) FROM certificate WHERE owner_user_id=$ACTIVE_ADMIN AND is_deleted=0
UNION ALL
SELECT 'Redirections', COUNT(*) FROM redirection_host WHERE owner_user_id=$ACTIVE_ADMIN AND is_deleted=0
UNION ALL
SELECT 'Dead Hosts', COUNT(*) FROM dead_host WHERE owner_user_id=$ACTIVE_ADMIN AND is_deleted=0
UNION ALL
SELECT 'Streams', COUNT(*) FROM stream WHERE owner_user_id=$ACTIVE_ADMIN AND is_deleted=0
UNION ALL
SELECT 'Access Lists', COUNT(*) FROM access_list WHERE owner_user_id=$ACTIVE_ADMIN AND is_deleted=0;
EOF
echo ""
echo "All resources now owned by user ID: $ACTIVE_ADMIN"
Usage: ./transfer_npm_ownership.sh [path/to/database.sqlite]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment