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.

Revisions

  1. include created this gist Oct 2, 2025.
    55 changes: 55 additions & 0 deletions npm-fix.sh
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,55 @@
    #!/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]