Panel http error 500 after uninstalling blueprint plugin

I uninstalled a plugin called catpuccindactyl and following this, my panel shows error 500. The pterodactyl logs showed a fatal error in .../pterodactyl/routes/blueprint.php and after checking, the php file ends abruptly.
[2024-09-09 14:20:58] production.ERROR: Unclosed '{' on line 17 {"exception":"[object] (ParseError(code: 0): Unclosed '{' on lin
e 17 at /var/www/pterodactyl/routes/blueprint.php:33)
[2024-09-09 14:20:58] production.ERROR: Unclosed '{' on line 17 {"exception":"[object] (ParseError(code: 0): Unclosed '{' on lin
e 17 at /var/www/pterodactyl/routes/blueprint.php:33)
<?php

use Illuminate\Support\Facades\Route;
use Pterodactyl\Http\Controllers\Admin;

/*
|--------------------------------------------------------------------------
| Blueprint Extensions
|--------------------------------------------------------------------------
|
| Endpoint: /admin/extensions
|
*/
Route::group(['prefix' => 'extensions'], function () {
Route::get('/', [Admin\ExtensionsController::class, 'index'])->name('admin.extensions');
});
Route::group(['prefix' => 'extensions/blueprint'], function () {
/* Blueprint admin page */
Route::get('/', [Admin\Extensions\Blueprint\BlueprintExtensionController::class, 'index'])->name('admin.extensions.blueprint.index');
Route::patch('/', [Admin\Extensions\Blueprint\BlueprintExtensionController::class, 'update']);

/* Extension permissions endpoint */
Route::patch('/config', [Pterodactyl\BlueprintFramework\Controllers\ExtensionConfigurationController::class, 'update']);
// simplefavicons:start
Route::group(['prefix' => 'extensions/simplefavicons'], function () {
Route::get('/', [Admin\Extensions\simplefavicons\simplefaviconsExtensionController::class, 'index'])->name('admin.extensions.simplefavicons.index');
Route::patch('/', [Admin\Extensions\simplefavicons\simplefaviconsExtensionController::class, 'update'])->name('admin.extensions.simplefavicons.patch');
Route::post('/', [Admin\Extensions\simplefavicons\simplefaviconsExtensionController::class, 'post'])->name('admin.extensions.simplefavicons.post');
Route::put('/', [Admin\Extensions\simplefavicons\simplefaviconsExtensionController::class, 'put'])->name('admin.extensions.simplefavicons.put');
Route::delete('/{target}/{id}', [Admin\Extensions\simplefavicons\simplefaviconsExtensionController::class, 'delete'])->name('admin.extensions.simplefavicons.delete');
});
// simplefavicons:stop
<?php

use Illuminate\Support\Facades\Route;
use Pterodactyl\Http\Controllers\Admin;

/*
|--------------------------------------------------------------------------
| Blueprint Extensions
|--------------------------------------------------------------------------
|
| Endpoint: /admin/extensions
|
*/
Route::group(['prefix' => 'extensions'], function () {
Route::get('/', [Admin\ExtensionsController::class, 'index'])->name('admin.extensions');
});
Route::group(['prefix' => 'extensions/blueprint'], function () {
/* Blueprint admin page */
Route::get('/', [Admin\Extensions\Blueprint\BlueprintExtensionController::class, 'index'])->name('admin.extensions.blueprint.index');
Route::patch('/', [Admin\Extensions\Blueprint\BlueprintExtensionController::class, 'update']);

/* Extension permissions endpoint */
Route::patch('/config', [Pterodactyl\BlueprintFramework\Controllers\ExtensionConfigurationController::class, 'update']);
// simplefavicons:start
Route::group(['prefix' => 'extensions/simplefavicons'], function () {
Route::get('/', [Admin\Extensions\simplefavicons\simplefaviconsExtensionController::class, 'index'])->name('admin.extensions.simplefavicons.index');
Route::patch('/', [Admin\Extensions\simplefavicons\simplefaviconsExtensionController::class, 'update'])->name('admin.extensions.simplefavicons.patch');
Route::post('/', [Admin\Extensions\simplefavicons\simplefaviconsExtensionController::class, 'post'])->name('admin.extensions.simplefavicons.post');
Route::put('/', [Admin\Extensions\simplefavicons\simplefaviconsExtensionController::class, 'put'])->name('admin.extensions.simplefavicons.put');
Route::delete('/{target}/{id}', [Admin\Extensions\simplefavicons\simplefaviconsExtensionController::class, 'delete'])->name('admin.extensions.simplefavicons.delete');
});
// simplefavicons:stop
3 Replies
Princess Nuvie ᓚᘏᗢ
For now I fixed it by comparing the above code block with the blueprint.php file on github here: https://github.com/BlueprintFramework/framework/blob/main/routes/blueprint.php I added the missing }); and it works now. i suspect the happy little culprit is in lines 95-101 in https://github.com/BlueprintFramework/framework/blob/main/scripts/commands/extensions/remove.sh#L95 But i'm not awake enough to dig deeper
# Remove admin routes
PRINT INFO "Removing admin routes.."
sed -n -i "/\/\/ $identifier:start/{p; :a; N; /\/\/ $identifier:stop/!ba; s/.*\n//}; p" "routes/blueprint.php"
sed -i \
-e "/\/\/ $identifier:start/d" \
-e "/\/\/ $identifier:stop/d" \
"routes/blueprint.php"
# Remove admin routes
PRINT INFO "Removing admin routes.."
sed -n -i "/\/\/ $identifier:start/{p; :a; N; /\/\/ $identifier:stop/!ba; s/.*\n//}; p" "routes/blueprint.php"
sed -i \
-e "/\/\/ $identifier:start/d" \
-e "/\/\/ $identifier:stop/d" \
"routes/blueprint.php"
wild guess: the plugin i uninstalled was the first one i tried installing. perhaps it tossed the comment line for the plugin start section at the end of the }); instead of making a new line.
Neo
Neo11mo ago
This happened to me as well, thank you for showing the fix, lifesaver 🙏
Emma
Emma11mo ago
@Princess Nuvie ᓚᘏᗢ Thank you so much for your detailed explanation and I'm so sorry for missing this entire thread. This has been fixed for the next version of Blueprint. It only happens when removing the first installed extension afaik.

Did you find this page helpful?