404
+Page not found
+Sorry, we couldn’t find the page you’re looking for.
+ +diff --git a/app/Http/Controllers/ApplicationController.php b/app/Http/Controllers/ApplicationController.php index 1da769023..29d9cc152 100644 --- a/app/Http/Controllers/ApplicationController.php +++ b/app/Http/Controllers/ApplicationController.php @@ -3,11 +3,14 @@ namespace App\Http\Controllers; use App\Models\ApplicationDeploymentQueue; +use Illuminate\Foundation\Auth\Access\AuthorizesRequests; +use Illuminate\Foundation\Validation\ValidatesRequests; use Illuminate\Http\Request; use Spatie\Activitylog\Models\Activity; class ApplicationController extends Controller { + use AuthorizesRequests, ValidatesRequests; public function configuration() { $project = session('currentTeam')->load(['projects'])->projects->where('uuid', request()->route('project_uuid'))->first(); diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index 77ec359ab..a623fe429 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -2,6 +2,9 @@ namespace App\Http\Controllers; +use App\Models\InstanceSettings; +use App\Models\Project; +use App\Models\Server; use Illuminate\Foundation\Auth\Access\AuthorizesRequests; use Illuminate\Foundation\Validation\ValidatesRequests; use Illuminate\Routing\Controller as BaseController; @@ -9,4 +12,32 @@ use Illuminate\Routing\Controller as BaseController; class Controller extends BaseController { use AuthorizesRequests, ValidatesRequests; + + public function dashboard() + { + $projects = Project::ownedByCurrentTeam()->get(); + $servers = Server::ownedByCurrentTeam()->get(); + + $resources = 0; + foreach ($projects as $project) { + $resources += $project->applications->count(); + } + + return view('dashboard', [ + 'servers' => $servers->count(), + 'projects' => $projects->count(), + 'resources' => $resources, + ]); + } + public function settings() + { + if (auth()->user()->isAdmin()) { + $settings = InstanceSettings::get(); + return view('settings', [ + 'settings' => $settings + ]); + } else { + return redirect()->route('dashboard'); + } + } } diff --git a/app/Http/Controllers/MagicController.php b/app/Http/Controllers/MagicController.php new file mode 100644 index 000000000..b5a254c96 --- /dev/null +++ b/app/Http/Controllers/MagicController.php @@ -0,0 +1,57 @@ +json([ + 'servers' => Server::validated()->get() + ]); + } + public function destinations() + { + return response()->json([ + 'destinations' => Server::destinationsByServer(request()->query('server_id'))->sortBy('name') + ]); + } + public function projects() + { + return response()->json([ + 'projects' => Project::ownedByCurrentTeam()->get() + ]); + } + public function environments() + { + return response()->json([ + 'environments' => Project::ownedByCurrentTeam()->whereUuid(request()->query('project_uuid'))->first()->environments + ]); + } + public function new_project() + { + $project = Project::firstOrCreate( + ['name' => request()->query('name') ?? generate_random_name()], + ['team_id' => session('currentTeam')->id] + ); + ray($project); + return response()->json([ + 'project_uuid' => $project->uuid + ]); + } + public function new_environment() + { + $environment = Environment::firstOrCreate( + ['name' => request()->query('name') ?? generate_random_name()], + ['project_id' => Project::ownedByCurrentTeam()->whereUuid(request()->query('project_uuid'))->firstOrFail()->id] + ); + return response()->json([ + 'environment_name' => $environment->name, + ]); + } +} diff --git a/app/Http/Controllers/ServerController.php b/app/Http/Controllers/ServerController.php new file mode 100644 index 000000000..d21ad89be --- /dev/null +++ b/app/Http/Controllers/ServerController.php @@ -0,0 +1,34 @@ + Server::ownedByCurrentTeam()->get() + ]); + } + public function create() + { + return view('server.create', [ + 'private_keys' => PrivateKey::ownedByCurrentTeam()->get(), + ]); + } + public function show() + { + return view('server.show', [ + 'server' => Server::ownedByCurrentTeam()->whereUuid(request()->server_uuid)->firstOrFail(), + ]); + } + public function proxy() + { + return view('server.proxy', [ + 'server' => Server::ownedByCurrentTeam()->whereUuid(request()->server_uuid)->firstOrFail(), + ]); + } +} diff --git a/app/Http/Livewire/PrivateKey/Create.php b/app/Http/Livewire/PrivateKey/Create.php index ef6c969b6..b12a0a04c 100644 --- a/app/Http/Livewire/PrivateKey/Create.php +++ b/app/Http/Livewire/PrivateKey/Create.php @@ -26,7 +26,7 @@ class Create extends Component 'team_id' => session('currentTeam')->id ]); if ($this->from === 'server') { - return redirect()->route('server.new'); + return redirect()->route('server.create'); } return redirect()->route('private-key.show', ['private_key_uuid' => $private_key->uuid]); } diff --git a/app/Models/PrivateKey.php b/app/Models/PrivateKey.php index fc7407ca4..c2954201e 100644 --- a/app/Models/PrivateKey.php +++ b/app/Models/PrivateKey.php @@ -2,6 +2,7 @@ namespace App\Models; + class PrivateKey extends BaseModel { protected $fillable = [ @@ -10,6 +11,10 @@ class PrivateKey extends BaseModel 'private_key', 'team_id', ]; + static public function ownedByCurrentTeam() + { + return PrivateKey::whereTeamId(session('currentTeam')->id); + } public function servers() { return $this->hasMany(Server::class); diff --git a/app/Models/Project.php b/app/Models/Project.php index 1ab08db17..68b594067 100644 --- a/app/Models/Project.php +++ b/app/Models/Project.php @@ -22,6 +22,11 @@ class Project extends BaseModel 'team_id', 'project_id' ]; + static public function ownedByCurrentTeam() + { + return Project::whereTeamId(session('currentTeam')->id); + } + public function environments() { return $this->hasMany(Environment::class); diff --git a/app/Models/Server.php b/app/Models/Server.php index 3b0c26436..bde034a86 100644 --- a/app/Models/Server.php +++ b/app/Models/Server.php @@ -53,28 +53,21 @@ class Server extends BaseModel { return $this->hasOne(ServerSetting::class); } + static public function ownedByCurrentTeam() + { + return Server::whereTeamId(session('currentTeam')->id); + } static public function validated() { - return Server::where('team_id', session('currentTeam')->id)->whereRelation('settings', 'is_validated', true)->get(); + return Server::ownedByCurrentTeam()->whereRelation('settings', 'is_validated', true); } - static public function destinations(string|null $server_id = null) + static public function destinationsByServer(string $server_id) { - if ($server_id) { - $server = Server::where('team_id', session('currentTeam')->id)->where('id', $server_id)->firstOrFail(); - $standaloneDocker = collect($server->standaloneDockers->all()); - $swarmDocker = collect($server->swarmDockers->all()); - return $standaloneDocker->concat($swarmDocker); - } else { - $servers = Server::where('team_id', session('currentTeam')->id)->get(); - $standaloneDocker = $servers->map(function ($server) { - return $server->standaloneDockers; - })->flatten(); - $swarmDocker = $servers->map(function ($server) { - return $server->swarmDockers; - })->flatten(); - return $standaloneDocker->concat($swarmDocker); - } + $server = Server::ownedByCurrentTeam()->get()->where('id', $server_id)->firstOrFail(); + $standaloneDocker = collect($server->standaloneDockers->all()); + $swarmDocker = collect($server->swarmDockers->all()); + return $standaloneDocker->concat($swarmDocker); } } diff --git a/app/Models/User.php b/app/Models/User.php index 53d6f289a..85fc5564d 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -34,7 +34,7 @@ class User extends Authenticatable $model->uuid = (string) new Cuid2(7); }); } - public function isPartOfRootTeam() + public function isAdmin() { $found_root_team = auth()->user()->teams->filter(function ($team) { if ($team->id == 0) { diff --git a/resources/js/components/MagicBar.vue b/resources/js/components/MagicBar.vue index 41111099e..c07cd1465 100644 --- a/resources/js/components/MagicBar.vue +++ b/resources/js/components/MagicBar.vue @@ -24,34 +24,48 @@ d="M9 3.5a5.5 5.5 0 100 11 5.5 5.5 0 000-11zM2 9a7 7 0 1112.452 4.391l3.328 3.329a.75.75 0 11-1.06 1.06l-3.329-3.328A7 7 0 012 9z" clip-rule="evenodd" /> - -