mirror of
https://github.com/vitodeploy/vito.git
synced 2025-07-01 05:56:16 +00:00
User management (#185)
This commit is contained in:
@ -22,6 +22,8 @@ class ApplicationController extends Controller
|
||||
{
|
||||
public function deploy(Server $server, Site $site): HtmxResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
try {
|
||||
app(Deploy::class)->run($site);
|
||||
|
||||
@ -41,11 +43,15 @@ public function deploy(Server $server, Site $site): HtmxResponse
|
||||
|
||||
public function showDeploymentLog(Server $server, Site $site, Deployment $deployment): RedirectResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
return back()->with('content', $deployment->log?->getContent());
|
||||
}
|
||||
|
||||
public function updateDeploymentScript(Server $server, Site $site, Request $request): RedirectResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
app(UpdateDeploymentScript::class)->update($site, $request->input());
|
||||
|
||||
Toast::success('Deployment script updated!');
|
||||
@ -55,6 +61,8 @@ public function updateDeploymentScript(Server $server, Site $site, Request $requ
|
||||
|
||||
public function updateBranch(Server $server, Site $site, Request $request): RedirectResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
app(UpdateBranch::class)->update($site, $request->input());
|
||||
|
||||
Toast::success('Branch updated!');
|
||||
@ -64,11 +72,15 @@ public function updateBranch(Server $server, Site $site, Request $request): Redi
|
||||
|
||||
public function getEnv(Server $server, Site $site): RedirectResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
return back()->with('env', $site->getEnv());
|
||||
}
|
||||
|
||||
public function updateEnv(Server $server, Site $site, Request $request): RedirectResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
app(UpdateEnv::class)->update($site, $request->input());
|
||||
|
||||
Toast::success('Env updated!');
|
||||
@ -78,6 +90,8 @@ public function updateEnv(Server $server, Site $site, Request $request): Redirec
|
||||
|
||||
public function enableAutoDeployment(Server $server, Site $site): HtmxResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
if (! $site->isAutoDeployment()) {
|
||||
try {
|
||||
$site->enableAutoDeployment();
|
||||
@ -101,6 +115,8 @@ public function enableAutoDeployment(Server $server, Site $site): HtmxResponse
|
||||
|
||||
public function disableAutoDeployment(Server $server, Site $site): HtmxResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
if ($site->isAutoDeployment()) {
|
||||
try {
|
||||
$site->disableAutoDeployment();
|
||||
|
@ -11,6 +11,8 @@ class ConsoleController extends Controller
|
||||
{
|
||||
public function index(Server $server): View
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
return view('console.index', [
|
||||
'server' => $server,
|
||||
]);
|
||||
@ -18,6 +20,8 @@ public function index(Server $server): View
|
||||
|
||||
public function run(Server $server, Request $request)
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
$this->validate($request, [
|
||||
'user' => [
|
||||
'required',
|
||||
|
@ -16,6 +16,8 @@ class CronjobController extends Controller
|
||||
{
|
||||
public function index(Server $server): View
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
return view('cronjobs.index', [
|
||||
'server' => $server,
|
||||
'cronjobs' => $server->cronJobs,
|
||||
@ -24,6 +26,8 @@ public function index(Server $server): View
|
||||
|
||||
public function store(Server $server, Request $request): HtmxResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
app(CreateCronJob::class)->create($server, $request->input());
|
||||
|
||||
Toast::success('Cronjob created successfully.');
|
||||
@ -33,6 +37,8 @@ public function store(Server $server, Request $request): HtmxResponse
|
||||
|
||||
public function destroy(Server $server, CronJob $cronJob): RedirectResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
app(DeleteCronJob::class)->delete($server, $cronJob);
|
||||
|
||||
Toast::success('Cronjob deleted successfully.');
|
||||
|
@ -18,6 +18,8 @@ class DatabaseBackupController extends Controller
|
||||
{
|
||||
public function show(Server $server, Backup $backup): View
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
return view('databases.backups', [
|
||||
'server' => $server,
|
||||
'databases' => $server->databases,
|
||||
@ -28,6 +30,8 @@ public function show(Server $server, Backup $backup): View
|
||||
|
||||
public function run(Server $server, Backup $backup): RedirectResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
app(RunBackup::class)->run($backup);
|
||||
|
||||
Toast::success('Backup is running.');
|
||||
@ -37,6 +41,8 @@ public function run(Server $server, Backup $backup): RedirectResponse
|
||||
|
||||
public function store(Server $server, Request $request): HtmxResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
app(CreateBackup::class)->create('database', $server, $request->input());
|
||||
|
||||
Toast::success('Backup created successfully.');
|
||||
@ -46,6 +52,8 @@ public function store(Server $server, Request $request): HtmxResponse
|
||||
|
||||
public function destroy(Server $server, Backup $backup): RedirectResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
$backup->delete();
|
||||
|
||||
Toast::success('Backup deleted successfully.');
|
||||
@ -55,6 +63,8 @@ public function destroy(Server $server, Backup $backup): RedirectResponse
|
||||
|
||||
public function restore(Server $server, Backup $backup, BackupFile $backupFile, Request $request): HtmxResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
app(RestoreBackup::class)->restore($backupFile, $request->input());
|
||||
|
||||
Toast::success('Backup restored successfully.');
|
||||
@ -64,6 +74,8 @@ public function restore(Server $server, Backup $backup, BackupFile $backupFile,
|
||||
|
||||
public function destroyFile(Server $server, Backup $backup, BackupFile $backupFile): RedirectResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
$backupFile->delete();
|
||||
|
||||
Toast::success('Backup file deleted successfully.');
|
||||
|
@ -17,6 +17,8 @@ class DatabaseController extends Controller
|
||||
{
|
||||
public function index(Server $server): View
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
return view('databases.index', [
|
||||
'server' => $server,
|
||||
'databases' => $server->databases,
|
||||
@ -27,6 +29,8 @@ public function index(Server $server): View
|
||||
|
||||
public function store(Server $server, Request $request): HtmxResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
$database = app(CreateDatabase::class)->create($server, $request->input());
|
||||
|
||||
if ($request->input('user')) {
|
||||
@ -40,6 +44,8 @@ public function store(Server $server, Request $request): HtmxResponse
|
||||
|
||||
public function destroy(Server $server, Database $database): RedirectResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
app(DeleteDatabase::class)->delete($server, $database);
|
||||
|
||||
Toast::success('Database deleted successfully.');
|
||||
|
@ -16,6 +16,8 @@ class DatabaseUserController extends Controller
|
||||
{
|
||||
public function store(Server $server, Request $request): HtmxResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
$database = app(CreateDatabaseUser::class)->create($server, $request->input());
|
||||
|
||||
if ($request->input('user')) {
|
||||
@ -29,6 +31,8 @@ public function store(Server $server, Request $request): HtmxResponse
|
||||
|
||||
public function destroy(Server $server, DatabaseUser $databaseUser): RedirectResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
app(DeleteDatabaseUser::class)->delete($server, $databaseUser);
|
||||
|
||||
Toast::success('User deleted successfully.');
|
||||
@ -38,6 +42,8 @@ public function destroy(Server $server, DatabaseUser $databaseUser): RedirectRes
|
||||
|
||||
public function password(Server $server, DatabaseUser $databaseUser): RedirectResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
return back()->with([
|
||||
'password' => $databaseUser->password,
|
||||
]);
|
||||
@ -45,6 +51,8 @@ public function password(Server $server, DatabaseUser $databaseUser): RedirectRe
|
||||
|
||||
public function link(Server $server, DatabaseUser $databaseUser, Request $request): HtmxResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
app(LinkUser::class)->link($databaseUser, $request->input());
|
||||
|
||||
Toast::success('Database linked successfully.');
|
||||
|
@ -16,6 +16,8 @@ class FirewallController extends Controller
|
||||
{
|
||||
public function index(Server $server): View
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
return view('firewall.index', [
|
||||
'server' => $server,
|
||||
'rules' => $server->firewallRules,
|
||||
@ -24,6 +26,8 @@ public function index(Server $server): View
|
||||
|
||||
public function store(Server $server, Request $request): HtmxResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
app(CreateRule::class)->create($server, $request->input());
|
||||
|
||||
Toast::success('Firewall rule created!');
|
||||
@ -33,6 +37,8 @@ public function store(Server $server, Request $request): HtmxResponse
|
||||
|
||||
public function destroy(Server $server, FirewallRule $firewallRule): RedirectResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
app(DeleteRule::class)->delete($server, $firewallRule);
|
||||
|
||||
Toast::success('Firewall rule deleted!');
|
||||
|
@ -15,6 +15,8 @@ class MetricController extends Controller
|
||||
{
|
||||
public function index(Server $server, Request $request): View|RedirectResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
$this->checkIfMonitoringServiceInstalled($server);
|
||||
|
||||
return view('metrics.index', [
|
||||
@ -26,6 +28,8 @@ public function index(Server $server, Request $request): View|RedirectResponse
|
||||
|
||||
public function settings(Server $server, Request $request): HtmxResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
$this->checkIfMonitoringServiceInstalled($server);
|
||||
|
||||
app(UpdateMetricSettings::class)->update($server, $request->input());
|
||||
@ -37,6 +41,8 @@ public function settings(Server $server, Request $request): HtmxResponse
|
||||
|
||||
private function checkIfMonitoringServiceInstalled(Server $server): void
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
if (! $server->monitoring()) {
|
||||
abort(404, 'Monitoring service is not installed on this server');
|
||||
}
|
||||
|
@ -20,6 +20,8 @@ class PHPController extends Controller
|
||||
{
|
||||
public function index(Server $server): View
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
return view('php.index', [
|
||||
'server' => $server,
|
||||
'phps' => $server->services()->where('type', 'php')->get(),
|
||||
@ -29,6 +31,8 @@ public function index(Server $server): View
|
||||
|
||||
public function install(Server $server, Request $request): HtmxResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
try {
|
||||
app(InstallNewPHP::class)->install($server, $request->input());
|
||||
|
||||
@ -42,6 +46,8 @@ public function install(Server $server, Request $request): HtmxResponse
|
||||
|
||||
public function installExtension(Server $server, Request $request): HtmxResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
app(InstallPHPExtension::class)->install($server, $request->input());
|
||||
|
||||
Toast::success('PHP extension is being installed! Check the logs');
|
||||
@ -51,6 +57,8 @@ public function installExtension(Server $server, Request $request): HtmxResponse
|
||||
|
||||
public function defaultCli(Server $server, Request $request): HtmxResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
app(ChangeDefaultCli::class)->change($server, $request->input());
|
||||
|
||||
Toast::success('Default PHP CLI is being changed!');
|
||||
@ -60,6 +68,8 @@ public function defaultCli(Server $server, Request $request): HtmxResponse
|
||||
|
||||
public function getIni(Server $server, Request $request): RedirectResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
$ini = app(GetPHPIni::class)->getIni($server, $request->input());
|
||||
|
||||
return back()->with('ini', $ini);
|
||||
@ -67,6 +77,8 @@ public function getIni(Server $server, Request $request): RedirectResponse
|
||||
|
||||
public function updateIni(Server $server, Request $request): RedirectResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
app(UpdatePHPIni::class)->update($server, $request->input());
|
||||
|
||||
Toast::success('PHP ini updated!');
|
||||
@ -78,6 +90,8 @@ public function updateIni(Server $server, Request $request): RedirectResponse
|
||||
|
||||
public function uninstall(Server $server, Request $request): RedirectResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
app(UninstallPHP::class)->uninstall($server, $request->input());
|
||||
|
||||
Toast::success('PHP is being uninstalled!');
|
||||
|
@ -1,11 +1,10 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Settings;
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Actions\User\UpdateUserPassword;
|
||||
use App\Actions\User\UpdateUserProfileInformation;
|
||||
use App\Facades\Toast;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Http\Request;
|
||||
@ -14,7 +13,7 @@ class ProfileController extends Controller
|
||||
{
|
||||
public function index(): View
|
||||
{
|
||||
return view('settings.profile.index');
|
||||
return view('profile.index');
|
||||
}
|
||||
|
||||
public function info(Request $request): RedirectResponse
|
@ -19,6 +19,8 @@ class QueueController extends Controller
|
||||
{
|
||||
public function index(Server $server, Site $site): View
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
return view('queues.index', [
|
||||
'server' => $server,
|
||||
'site' => $site,
|
||||
@ -28,6 +30,8 @@ public function index(Server $server, Site $site): View
|
||||
|
||||
public function store(Server $server, Site $site, Request $request): HtmxResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
app(CreateQueue::class)->create($site, $request->input());
|
||||
|
||||
Toast::success('Queue is being created.');
|
||||
@ -37,6 +41,8 @@ public function store(Server $server, Site $site, Request $request): HtmxRespons
|
||||
|
||||
public function action(Server $server, Site $site, Queue $queue, string $action): HtmxResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
app(ManageQueue::class)->{$action}($queue);
|
||||
|
||||
Toast::success('Queue is about to '.$action);
|
||||
@ -46,6 +52,8 @@ public function action(Server $server, Site $site, Queue $queue, string $action)
|
||||
|
||||
public function destroy(Server $server, Site $site, Queue $queue): RedirectResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
app(DeleteQueue::class)->delete($queue);
|
||||
|
||||
Toast::success('Queue is being deleted.');
|
||||
@ -55,6 +63,8 @@ public function destroy(Server $server, Site $site, Queue $queue): RedirectRespo
|
||||
|
||||
public function logs(Server $server, Site $site, Queue $queue): RedirectResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
return back()->with('content', app(GetQueueLogs::class)->getLogs($queue));
|
||||
}
|
||||
}
|
||||
|
@ -17,6 +17,8 @@ class SSHKeyController extends Controller
|
||||
{
|
||||
public function index(Server $server): View
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
return view('server-ssh-keys.index', [
|
||||
'server' => $server,
|
||||
'keys' => $server->sshKeys,
|
||||
@ -25,6 +27,8 @@ public function index(Server $server): View
|
||||
|
||||
public function store(Server $server, Request $request): HtmxResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
/** @var \App\Models\SshKey $key */
|
||||
$key = app(CreateSshKey::class)->create(
|
||||
$request->user(),
|
||||
@ -38,6 +42,8 @@ public function store(Server $server, Request $request): HtmxResponse
|
||||
|
||||
public function destroy(Server $server, SshKey $sshKey): RedirectResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
app(DeleteKeyFromServer::class)->delete($server, $sshKey);
|
||||
|
||||
Toast::success('SSH Key has been deleted.');
|
||||
@ -47,6 +53,8 @@ public function destroy(Server $server, SshKey $sshKey): RedirectResponse
|
||||
|
||||
public function deploy(Server $server, Request $request): HtmxResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
app(DeployKeyToServer::class)->deploy(
|
||||
$request->user(),
|
||||
$server,
|
||||
|
@ -17,6 +17,8 @@ class SSLController extends Controller
|
||||
{
|
||||
public function index(Server $server, Site $site): View
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
return view('ssls.index', [
|
||||
'server' => $server,
|
||||
'site' => $site,
|
||||
@ -26,6 +28,8 @@ public function index(Server $server, Site $site): View
|
||||
|
||||
public function store(Server $server, Site $site, Request $request): HtmxResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
app(CreateSSL::class)->create($site, $request->input());
|
||||
|
||||
Toast::success('SSL certificate is being created.');
|
||||
@ -35,6 +39,8 @@ public function store(Server $server, Site $site, Request $request): HtmxRespons
|
||||
|
||||
public function destroy(Server $server, Site $site, Ssl $ssl): RedirectResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
app(DeleteSSL::class)->delete($ssl);
|
||||
|
||||
Toast::success('SSL certificate has been deleted.');
|
||||
|
@ -4,6 +4,7 @@
|
||||
|
||||
use App\Models\Server;
|
||||
use App\Models\Site;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
@ -23,10 +24,22 @@ public function search(Request $request): JsonResponse
|
||||
$query->where('name', 'like', '%'.$request->input('q').'%')
|
||||
->orWhere('ip', 'like', '%'.$request->input('q').'%');
|
||||
})
|
||||
->whereHas('project', function (Builder $projectQuery) {
|
||||
$projectQuery->whereHas('users', function (Builder $userQuery) {
|
||||
$userQuery->where('user_id', auth()->user()->id);
|
||||
});
|
||||
})
|
||||
->get();
|
||||
|
||||
$sites = Site::query()
|
||||
->where('domain', 'like', '%'.$request->input('q').'%')
|
||||
->whereHas('server', function (Builder $serverQuery) {
|
||||
$serverQuery->whereHas('project', function (Builder $projectQuery) {
|
||||
$projectQuery->whereHas('users', function (Builder $userQuery) {
|
||||
$userQuery->where('user_id', auth()->user()->id);
|
||||
});
|
||||
});
|
||||
})
|
||||
->get();
|
||||
|
||||
$result = [];
|
||||
|
@ -19,6 +19,9 @@ public function index(): View
|
||||
{
|
||||
/** @var User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
$this->authorize('viewAny', [Server::class, $user->currentProject]);
|
||||
|
||||
$servers = $user->currentProject->servers()->orderByDesc('created_at')->get();
|
||||
|
||||
return view('servers.index', compact('servers'));
|
||||
@ -26,6 +29,11 @@ public function index(): View
|
||||
|
||||
public function create(Request $request): View
|
||||
{
|
||||
/** @var User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
$this->authorize('create', [Server::class, $user->currentProject]);
|
||||
|
||||
$provider = $request->query('provider', old('provider', \App\Enums\ServerProvider::CUSTOM));
|
||||
$serverProviders = ServerProvider::query()->where('provider', $provider)->get();
|
||||
|
||||
@ -40,8 +48,13 @@ public function create(Request $request): View
|
||||
*/
|
||||
public function store(Request $request): HtmxResponse
|
||||
{
|
||||
/** @var User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
$this->authorize('create', [Server::class, $user->currentProject]);
|
||||
|
||||
$server = app(CreateServer::class)->create(
|
||||
$request->user(),
|
||||
$user,
|
||||
$request->input()
|
||||
);
|
||||
|
||||
@ -52,6 +65,8 @@ public function store(Request $request): HtmxResponse
|
||||
|
||||
public function show(Server $server): View
|
||||
{
|
||||
$this->authorize('view', $server);
|
||||
|
||||
return view('servers.show', [
|
||||
'server' => $server,
|
||||
]);
|
||||
@ -59,6 +74,8 @@ public function show(Server $server): View
|
||||
|
||||
public function delete(Server $server): RedirectResponse
|
||||
{
|
||||
$this->authorize('delete', $server);
|
||||
|
||||
$server->delete();
|
||||
|
||||
Toast::success('Server deleted successfully.');
|
||||
|
@ -14,6 +14,8 @@ class ServerLogController extends Controller
|
||||
{
|
||||
public function index(Server $server): View
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
return view('server-logs.index', [
|
||||
'server' => $server,
|
||||
'pageTitle' => __('Vito Logs'),
|
||||
@ -22,6 +24,8 @@ public function index(Server $server): View
|
||||
|
||||
public function show(Server $server, ServerLog $serverLog): RedirectResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
if ($server->id != $serverLog->server_id) {
|
||||
abort(404);
|
||||
}
|
||||
@ -33,6 +37,8 @@ public function show(Server $server, ServerLog $serverLog): RedirectResponse
|
||||
|
||||
public function remote(Server $server): View
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
return view('server-logs.remote-logs', [
|
||||
'server' => $server,
|
||||
'remote' => true,
|
||||
@ -42,6 +48,8 @@ public function remote(Server $server): View
|
||||
|
||||
public function store(Server $server, Request $request): \App\Helpers\HtmxResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
app(CreateServerLog::class)->create($server, $request->input());
|
||||
|
||||
Toast::success('Log added successfully.');
|
||||
@ -51,6 +59,8 @@ public function store(Server $server, Request $request): \App\Helpers\HtmxRespon
|
||||
|
||||
public function destroy(Server $server, ServerLog $serverLog): RedirectResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
$serverLog->delete();
|
||||
|
||||
Toast::success('Remote log deleted successfully.');
|
||||
|
@ -15,11 +15,15 @@ class ServerSettingController extends Controller
|
||||
{
|
||||
public function index(Server $server): View
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
return view('server-settings.index', compact('server'));
|
||||
}
|
||||
|
||||
public function checkConnection(Server $server): RedirectResponse|HtmxResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
$oldStatus = $server->status;
|
||||
|
||||
$server = $server->checkConnection();
|
||||
@ -41,6 +45,8 @@ public function checkConnection(Server $server): RedirectResponse|HtmxResponse
|
||||
|
||||
public function reboot(Server $server): HtmxResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
app(RebootServer::class)->reboot($server);
|
||||
|
||||
Toast::info('Server is rebooting.');
|
||||
@ -50,6 +56,8 @@ public function reboot(Server $server): HtmxResponse
|
||||
|
||||
public function edit(Request $request, Server $server): RedirectResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
app(EditServer::class)->edit($server, $request->input());
|
||||
|
||||
Toast::success('Server updated.');
|
||||
|
@ -16,6 +16,8 @@ class ServiceController extends Controller
|
||||
{
|
||||
public function index(Server $server): View
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
return view('services.index', [
|
||||
'server' => $server,
|
||||
'services' => $server->services,
|
||||
@ -24,6 +26,8 @@ public function index(Server $server): View
|
||||
|
||||
public function start(Server $server, Service $service): RedirectResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
$service->start();
|
||||
|
||||
Toast::success('Service is being started!');
|
||||
@ -33,6 +37,8 @@ public function start(Server $server, Service $service): RedirectResponse
|
||||
|
||||
public function stop(Server $server, Service $service): RedirectResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
$service->stop();
|
||||
|
||||
Toast::success('Service is being stopped!');
|
||||
@ -42,6 +48,8 @@ public function stop(Server $server, Service $service): RedirectResponse
|
||||
|
||||
public function restart(Server $server, Service $service): RedirectResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
$service->restart();
|
||||
|
||||
Toast::success('Service is being restarted!');
|
||||
@ -51,6 +59,8 @@ public function restart(Server $server, Service $service): RedirectResponse
|
||||
|
||||
public function enable(Server $server, Service $service): RedirectResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
$service->enable();
|
||||
|
||||
Toast::success('Service is being enabled!');
|
||||
@ -60,6 +70,8 @@ public function enable(Server $server, Service $service): RedirectResponse
|
||||
|
||||
public function disable(Server $server, Service $service): RedirectResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
$service->disable();
|
||||
|
||||
Toast::success('Service is being disabled!');
|
||||
@ -69,6 +81,8 @@ public function disable(Server $server, Service $service): RedirectResponse
|
||||
|
||||
public function install(Server $server, Request $request): HtmxResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
app(Install::class)->install($server, $request->input());
|
||||
|
||||
Toast::success('Service is being installed!');
|
||||
@ -78,6 +92,8 @@ public function install(Server $server, Request $request): HtmxResponse
|
||||
|
||||
public function uninstall(Server $server, Service $service): HtmxResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
app(Uninstall::class)->uninstall($service);
|
||||
|
||||
Toast::success('Service is being uninstalled!');
|
||||
|
@ -29,7 +29,7 @@ public function add(Request $request): HtmxResponse
|
||||
|
||||
Toast::success('Channel added successfully');
|
||||
|
||||
return htmx()->redirect(route('notification-channels'));
|
||||
return htmx()->redirect(route('settings.notification-channels'));
|
||||
}
|
||||
|
||||
public function delete(int $id): RedirectResponse
|
||||
@ -40,6 +40,6 @@ public function delete(int $id): RedirectResponse
|
||||
|
||||
Toast::success('Channel deleted successfully');
|
||||
|
||||
return redirect()->route('notification-channels');
|
||||
return redirect()->route('settings.notification-channels');
|
||||
}
|
||||
}
|
||||
|
@ -20,7 +20,7 @@ class ProjectController extends Controller
|
||||
public function index(): View
|
||||
{
|
||||
return view('settings.projects.index', [
|
||||
'projects' => auth()->user()->projects,
|
||||
'projects' => Project::all(),
|
||||
]);
|
||||
}
|
||||
|
||||
@ -30,7 +30,7 @@ public function create(Request $request): HtmxResponse
|
||||
|
||||
Toast::success('Project created.');
|
||||
|
||||
return htmx()->redirect(route('projects'));
|
||||
return htmx()->redirect(route('settings.projects'));
|
||||
}
|
||||
|
||||
public function update(Request $request, Project $project): HtmxResponse
|
||||
@ -42,7 +42,7 @@ public function update(Request $request, Project $project): HtmxResponse
|
||||
|
||||
Toast::success('Project updated.');
|
||||
|
||||
return htmx()->redirect(route('projects'));
|
||||
return htmx()->redirect(route('settings.projects'));
|
||||
}
|
||||
|
||||
public function delete(Project $project): RedirectResponse
|
||||
@ -74,6 +74,8 @@ public function switch($projectId): RedirectResponse
|
||||
/** @var Project $project */
|
||||
$project = $user->projects()->findOrFail($projectId);
|
||||
|
||||
$this->authorize('view', $project);
|
||||
|
||||
$user->current_project_id = $project->id;
|
||||
$user->save();
|
||||
|
||||
|
@ -29,7 +29,7 @@ public function add(Request $request): HtmxResponse
|
||||
|
||||
Toast::success('SSH Key added');
|
||||
|
||||
return htmx()->redirect(route('ssh-keys'));
|
||||
return htmx()->redirect(route('settings.ssh-keys'));
|
||||
}
|
||||
|
||||
public function delete(int $id): RedirectResponse
|
||||
@ -40,6 +40,6 @@ public function delete(int $id): RedirectResponse
|
||||
|
||||
Toast::success('SSH Key deleted');
|
||||
|
||||
return redirect()->route('ssh-keys');
|
||||
return redirect()->route('settings.ssh-keys');
|
||||
}
|
||||
}
|
||||
|
@ -30,7 +30,7 @@ public function connect(Request $request): HtmxResponse
|
||||
|
||||
Toast::success('Server provider connected.');
|
||||
|
||||
return htmx()->redirect(route('server-providers'));
|
||||
return htmx()->redirect(route('settings.server-providers'));
|
||||
}
|
||||
|
||||
public function delete(ServerProvider $serverProvider): RedirectResponse
|
||||
|
@ -29,7 +29,7 @@ public function connect(Request $request): HtmxResponse
|
||||
|
||||
Toast::success('Source control connected.');
|
||||
|
||||
return htmx()->redirect(route('source-controls'));
|
||||
return htmx()->redirect(route('settings.source-controls'));
|
||||
}
|
||||
|
||||
public function delete(SourceControl $sourceControl): RedirectResponse
|
||||
@ -44,6 +44,6 @@ public function delete(SourceControl $sourceControl): RedirectResponse
|
||||
|
||||
Toast::success('Source control deleted.');
|
||||
|
||||
return redirect()->route('source-controls');
|
||||
return redirect()->route('settings.source-controls');
|
||||
}
|
||||
}
|
||||
|
@ -30,7 +30,7 @@ public function connect(Request $request): HtmxResponse
|
||||
|
||||
Toast::success('Storage provider connected.');
|
||||
|
||||
return htmx()->redirect(route('storage-providers'));
|
||||
return htmx()->redirect(route('settings.storage-providers'));
|
||||
}
|
||||
|
||||
public function delete(StorageProvider $storageProvider): RedirectResponse
|
||||
|
78
app/Http/Controllers/Settings/UserController.php
Normal file
78
app/Http/Controllers/Settings/UserController.php
Normal file
@ -0,0 +1,78 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Settings;
|
||||
|
||||
use App\Actions\User\CreateUser;
|
||||
use App\Actions\User\UpdateUser;
|
||||
use App\Facades\Toast;
|
||||
use App\Helpers\HtmxResponse;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\User;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class UserController extends Controller
|
||||
{
|
||||
public function index(): View
|
||||
{
|
||||
$users = User::query()->paginate(20);
|
||||
|
||||
return view('settings.users.index', compact('users'));
|
||||
}
|
||||
|
||||
public function store(Request $request): HtmxResponse
|
||||
{
|
||||
$user = app(CreateUser::class)->create($request->input());
|
||||
|
||||
return htmx()->redirect(route('settings.users.show', $user));
|
||||
}
|
||||
|
||||
public function show(User $user): View
|
||||
{
|
||||
return view('settings.users.show', [
|
||||
'user' => $user,
|
||||
]);
|
||||
}
|
||||
|
||||
public function update(User $user, Request $request): RedirectResponse
|
||||
{
|
||||
app(UpdateUser::class)->update($user, $request->input());
|
||||
|
||||
Toast::success('User updated successfully');
|
||||
|
||||
return back();
|
||||
}
|
||||
|
||||
public function updateProjects(User $user, Request $request): HtmxResponse
|
||||
{
|
||||
$this->validate($request, [
|
||||
'projects.*' => [
|
||||
'required',
|
||||
Rule::exists('projects', 'id'),
|
||||
],
|
||||
]);
|
||||
|
||||
$user->projects()->sync($request->projects);
|
||||
|
||||
Toast::success('Projects updated successfully');
|
||||
|
||||
return htmx()->redirect(route('settings.users.show', $user));
|
||||
}
|
||||
|
||||
public function destroy(User $user): RedirectResponse
|
||||
{
|
||||
if ($user->is(request()->user())) {
|
||||
Toast::error('You cannot delete your own account');
|
||||
|
||||
return back();
|
||||
}
|
||||
|
||||
$user->delete();
|
||||
|
||||
Toast::success('User deleted successfully');
|
||||
|
||||
return redirect()->route('settings.users.index');
|
||||
}
|
||||
}
|
@ -19,6 +19,8 @@ class SiteController extends Controller
|
||||
{
|
||||
public function index(Server $server): View
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
return view('sites.index', [
|
||||
'server' => $server,
|
||||
'sites' => $server->sites()->orderByDesc('id')->get(),
|
||||
@ -27,6 +29,8 @@ public function index(Server $server): View
|
||||
|
||||
public function store(Server $server, Request $request): HtmxResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
$site = app(CreateSite::class)->create($server, $request->input());
|
||||
|
||||
Toast::success('Site created');
|
||||
@ -36,6 +40,8 @@ public function store(Server $server, Request $request): HtmxResponse
|
||||
|
||||
public function create(Server $server): View
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
return view('sites.create', [
|
||||
'server' => $server,
|
||||
'type' => old('type', request()->query('type', SiteType::LARAVEL)),
|
||||
@ -45,6 +51,8 @@ public function create(Server $server): View
|
||||
|
||||
public function show(Server $server, Site $site, Request $request): View|RedirectResponse|HtmxResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
if (in_array($site->status, [SiteStatus::INSTALLING, SiteStatus::INSTALLATION_FAILED])) {
|
||||
if ($request->hasHeader('HX-Request')) {
|
||||
return htmx()->redirect(route('servers.sites.installing', [$server, $site]));
|
||||
@ -61,6 +69,8 @@ public function show(Server $server, Site $site, Request $request): View|Redirec
|
||||
|
||||
public function installing(Server $server, Site $site, Request $request): View|RedirectResponse|HtmxResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
if (! in_array($site->status, [SiteStatus::INSTALLING, SiteStatus::INSTALLATION_FAILED])) {
|
||||
if ($request->hasHeader('HX-Request')) {
|
||||
return htmx()->redirect(route('servers.sites.show', [$server, $site]));
|
||||
@ -77,6 +87,8 @@ public function installing(Server $server, Site $site, Request $request): View|R
|
||||
|
||||
public function destroy(Server $server, Site $site): RedirectResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
app(DeleteSite::class)->delete($site);
|
||||
|
||||
Toast::success('Site is being deleted');
|
||||
|
@ -10,6 +10,8 @@ class SiteLogController extends Controller
|
||||
{
|
||||
public function index(Server $server, Site $site): View
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
return view('site-logs.index', [
|
||||
'server' => $server,
|
||||
'site' => $site,
|
||||
|
@ -18,6 +18,8 @@ class SiteSettingController extends Controller
|
||||
{
|
||||
public function index(Server $server, Site $site): View
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
return view('site-settings.index', [
|
||||
'server' => $server,
|
||||
'site' => $site,
|
||||
@ -26,6 +28,8 @@ public function index(Server $server, Site $site): View
|
||||
|
||||
public function getVhost(Server $server, Site $site): RedirectResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
/** @var Webserver $handler */
|
||||
$handler = $server->webserver()->handler();
|
||||
|
||||
@ -34,6 +38,8 @@ public function getVhost(Server $server, Site $site): RedirectResponse
|
||||
|
||||
public function updateVhost(Server $server, Site $site, Request $request): RedirectResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
$this->validate($request, [
|
||||
'vhost' => 'required|string',
|
||||
]);
|
||||
@ -53,6 +59,8 @@ public function updateVhost(Server $server, Site $site, Request $request): Redir
|
||||
|
||||
public function updatePHPVersion(Server $server, Site $site, Request $request): HtmxResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
$this->validate($request, [
|
||||
'version' => [
|
||||
'required',
|
||||
@ -73,6 +81,8 @@ public function updatePHPVersion(Server $server, Site $site, Request $request):
|
||||
|
||||
public function updateSourceControl(Server $server, Site $site, Request $request): HtmxResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
$site = app(UpdateSourceControl::class)->update($site, $request->input());
|
||||
|
||||
Toast::success('Source control updated successfully!');
|
||||
|
Reference in New Issue
Block a user