File: /home/xedaptot/be.naniguide.com/app/Http/Controllers/Api/PluginController.php
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Model\Plugin;
use Illuminate\Http\Request;
class PluginController extends Controller
{
/**
* Install a plugin from a public download URL (mirrors the web UI upload flow).
* Auth: api_token; admin must have 'install' permission on Plugin.
*/
public function install(Request $request)
{
$user = \Auth::guard('api')->user();
if (!$user || !$user->admin || !$user->admin->can('install', Plugin::class)) {
return response()->json(['status' => 'error', 'message' => 'Unauthorized'], 401);
}
$url = $request->input('url');
if (empty($url)) {
return response()->json([
'status' => 'error',
'message' => "'url' parameter is required",
], 422);
}
try {
$overwrite = filter_var($request->input('overwrite', false), FILTER_VALIDATE_BOOLEAN);
$shouldActivate = filter_var($request->input('activate', false), FILTER_VALIDATE_BOOLEAN);
$name = Plugin::installFromUrl($url, $overwrite);
Plugin::register($name);
$plugin = Plugin::getByName($name);
if ($shouldActivate && $plugin) {
$plugin->activate();
$plugin->refresh();
}
return response()->json([
'status' => 'success',
'plugin' => [
'uid' => $plugin->uid,
'name' => $plugin->name,
'title' => $plugin->title,
'version' => $plugin->version,
'status' => $plugin->status,
],
'source' => $url,
]);
} catch (\Exception $e) {
return response()->json(['status' => 'error', 'message' => $e->getMessage()], 400);
}
}
}