diff --git a/.env.example b/.env.example
index 047b7ed..0f22481 100644
--- a/.env.example
+++ b/.env.example
@@ -1,4 +1,4 @@
-APP_NAME=Laravel
+APP_NAME=Webapps
APP_ENV=local
APP_KEY=
APP_DEBUG=true
diff --git a/app/Actions/AuthenticatePortainer.php b/app/Actions/AuthenticatePortainer.php
new file mode 100644
index 0000000..3d412ef
--- /dev/null
+++ b/app/Actions/AuthenticatePortainer.php
@@ -0,0 +1,43 @@
+ $username,
+ 'password' => $password,
+ ]
+ );
+
+ $jwt = $auth->json('jwt');
+
+ $endpoints = Http::withToken($jwt)
+ ->get("{$portainerUrl}/api/endpoints")
+ ->json();
+ $endpointId = $endpoints[0]['Id'];
+
+ return [
+ 'jwt' => $jwt,
+ 'endpointId' => $endpointId
+ ];
+ }
+}
diff --git a/app/Actions/GenerateComposeYml.php b/app/Actions/GenerateComposeYml.php
new file mode 100644
index 0000000..fd72a5d
--- /dev/null
+++ b/app/Actions/GenerateComposeYml.php
@@ -0,0 +1,48 @@
+appVariables;
+ $environment = [];
+ foreach ($env_variables as $env_variable):
+ $environment[$env_variable->imageVariable->name] = $env_variable->value;
+ endforeach;
+
+ $composeArray = [
+ 'services' => [
+ 'app' => [
+ 'image' => "{$dockerImage->path}:{$dockerImage->tag}",
+ 'restart' => 'unless-stopped',
+ 'ports' => ['8888:80'],
+ 'environment' => $environment,
+ 'entrypoint' => [
+ 'sh',
+ '-c',
+ 'php artisan migrate --force && exec apache2-foreground'
+ ]
+ ]
+ ]
+ ];
+
+ $composeYaml = Yaml::dump($composeArray, 4, 2);
+ $composeYaml = str_replace("'-c'", "-c", $composeYaml);
+
+ return $composeYaml;
+ }
+}
diff --git a/app/Actions/GetGwmariadbPayload.php b/app/Actions/GetGwmariadbPayload.php
new file mode 100644
index 0000000..23f8744
--- /dev/null
+++ b/app/Actions/GetGwmariadbPayload.php
@@ -0,0 +1,30 @@
+ $action
+ ];
+ else:
+ $payload = [
+ 'action' => $action,
+ 'nome' => $siteName
+ ];
+ endif;
+
+ return $payload;
+ }
+}
diff --git a/app/Actions/SendGwmariadbRequest.php b/app/Actions/SendGwmariadbRequest.php
new file mode 100644
index 0000000..9409111
--- /dev/null
+++ b/app/Actions/SendGwmariadbRequest.php
@@ -0,0 +1,25 @@
+ env('GWMARIADB_TOKEN'),
+ ])->post(env('GWMARIADB_URL'), $payload);
+
+ return $response;
+ }
+}
diff --git a/app/Actions/StoreAppVariablesOnImageSelection.php b/app/Actions/StoreAppVariablesOnImageSelection.php
new file mode 100644
index 0000000..c12d1c5
--- /dev/null
+++ b/app/Actions/StoreAppVariablesOnImageSelection.php
@@ -0,0 +1,27 @@
+ $imageVariable->id,
+ 'app_id' => $webapp->id,
+ 'value' => null
+ ]);
+ }
+}
diff --git a/app/Http/Controllers/Bucket/BucketController.php b/app/Http/Controllers/Bucket/BucketController.php
new file mode 100644
index 0000000..bfd8246
--- /dev/null
+++ b/app/Http/Controllers/Bucket/BucketController.php
@@ -0,0 +1,11 @@
+getAllDockerImages();
+ return view('dockerimages.index', [
+ 'docker_images' => $dockerImages
+ ]);
+ }
+
+ public function show(DockerImage $dockerimage)
+ {
+ return view('dockerimages.show', [
+ 'docker_image' => $dockerimage
+ ]);
+ }
+
+ public function create()
+ {
+ return view('dockerimages.create');
+ }
+
+ public function store(DockerImageRequest $request)
+ {
+ $dockerImage = (new DockerImageService())->createDockerImage($request->validated());
+ return redirect("/dockerimages/{$dockerImage->id}");
+ }
+
+ public function edit(DockerImage $dockerimage)
+ {
+ return view('dockerimages.edit', [
+ 'docker_image' => $dockerimage
+ ]);
+ }
+
+ public function update(DockerImageUpdateRequest $request, DockerImage $dockerimage)
+ {
+ $dockerImage = (new DockerImageService())->updateDockerImage($dockerimage, $request->validated());
+ return redirect("/dockerimages/{$dockerImage->id}");
+ }
+
+ public function destroy(DockerImage $dockerimage)
+ {
+ $deleted = (new DockerImageService())->destroyDockerImage($dockerimage);
+
+ if($deleted) {
+ return redirect("/dockerimages");
+ }
+ }
+
+ public function storeImageVariable(string $imageId, StoreImageVariableRequest $request)
+ {
+
+ (new ImageVariableService())->storeVariable($imageId, $request->validated());
+
+ return redirect("/dockerimages/{$imageId}");
+ }
+}
diff --git a/app/Http/Controllers/Dockerimage/ImageVariableController.php b/app/Http/Controllers/Dockerimage/ImageVariableController.php
new file mode 100644
index 0000000..2e77b3f
--- /dev/null
+++ b/app/Http/Controllers/Dockerimage/ImageVariableController.php
@@ -0,0 +1,30 @@
+image->id;
+
+ (new ImageVariableService())->updateVariable($variable, $request->validated());
+
+ return redirect("/dockerimages/{$imageId}");
+ }
+
+ public function destroy(string $variableId)
+ {
+ $variable = (new ImageVariableService())->getImageVariableById($variableId);
+ $imageId = $variable->image->id;
+ $variable->delete();
+
+ return redirect("/dockerimages/{$imageId}");
+ }
+}
diff --git a/app/Http/Controllers/Gwmariadb/TestGwmariadbConnectionController.php b/app/Http/Controllers/Gwmariadb/TestGwmariadbConnectionController.php
new file mode 100644
index 0000000..0d0e1a2
--- /dev/null
+++ b/app/Http/Controllers/Gwmariadb/TestGwmariadbConnectionController.php
@@ -0,0 +1,22 @@
+ env('GWMARIADB_TOKEN'),
+ ])->get(env('GWMARIADB_URL'));
+
+ return json_encode($response->json());
+ }
+}
diff --git a/app/Http/Controllers/GwmariadbController.php b/app/Http/Controllers/GwmariadbController.php
new file mode 100644
index 0000000..aebeb96
--- /dev/null
+++ b/app/Http/Controllers/GwmariadbController.php
@@ -0,0 +1,79 @@
+listarDatabase();
+
+ dd($response);
+ }
+
+ /**
+ * Show the form for creating a new resource.
+ */
+ public function create()
+ {
+ //
+ }
+
+ /**
+ * Store a newly created resource in storage.
+ */
+ public function store(string $appId)
+ {
+ $webapp = (new WebappService())->getWebappById($appId);
+ $siteName = $webapp->name;
+
+ $response = (new GwmariadbService($siteName))->storeDatabase();
+
+ return var_dump($response->json());
+ }
+
+ /**
+ * Display the specified resource.
+ */
+ public function show(string $id)
+ {
+ //
+ }
+
+ /**
+ * Show the form for editing the specified resource.
+ */
+ public function edit(string $appId) {
+
+ return view('gwmariadb.edit');
+ }
+
+ /**
+ * Update the specified resource in storage.
+ */
+ public function update(Request $request, string $appId)
+ {
+ $webapp = (new WebappService())->getWebappById($appId);
+ $siteName = $webapp->name;
+
+ $response = (new GwmariadbService($siteName))->trocarSenhaUsuario();
+
+ return $response;
+ }
+
+ /**
+ * Remove the specified resource from storage.
+ */
+ public function destroy(string $id)
+ {
+ //
+ }
+}
diff --git a/app/Http/Controllers/PortainerController.php b/app/Http/Controllers/PortainerController.php
new file mode 100644
index 0000000..3914931
--- /dev/null
+++ b/app/Http/Controllers/PortainerController.php
@@ -0,0 +1,95 @@
+getWebappById(1);
+ $dockerImage = $webapp->dockerImage;
+
+ $composeYml = GenerateComposeYml::execute($dockerImage, $webapp);
+ dd($composeYml);
+ }
+
+ /**
+ * Show the form for creating a new resource.
+ */
+ public function create()
+ {
+ //
+ }
+
+ /**
+ * Store a newly created resource in storage.
+ */
+ public function store(string $webappId)
+ {
+ $webapp = (new WebappService())->getWebappById($webappId);
+ $dockerImage = $webapp->dockerImage;
+ $composeYml = GenerateComposeYml::execute($dockerImage, $webapp);
+
+ $response = (new PortainerService())->createStack($webapp->name, $composeYml);
+
+ $webapp->status = "Publicado";
+ $webapp->stack = $response['Id'];
+ $webapp->save();
+
+ return redirect("/webapps/{$webapp->id}");
+
+ //dd($response->status(), $response->json() ?: $response->body());
+ }
+
+ /**
+ * Display the specified resource.
+ */
+ public function show(string $id)
+ {
+ //
+ }
+
+ /**
+ * Show the form for editing the specified resource.
+ */
+ public function edit(string $id)
+ {
+ //
+ }
+
+ /**
+ * Update the specified resource in storage.
+ */
+ public function update(string $webappId)
+ {
+ $webapp = (new WebappService())->getWebappById($webappId);
+ $dockerImage = $webapp->dockerImage;
+ $stackId = $webapp->stack;
+
+ $composeYml = GenerateComposeYml::execute($dockerImage, $webapp);
+
+ $response = (new PortainerService())->updateStack($webapp->name, $composeYml, $stackId);
+
+ return redirect("/webapps/{$webapp->id}");
+
+ dd(
+ $response->status(),
+ $response->json() ?: $response->body()
+ );
+ }
+
+ /**
+ * Remove the specified resource from storage.
+ */
+ public function destroy(string $id)
+ {
+ //
+ }
+}
diff --git a/app/Http/Controllers/ReuniaoController.php b/app/Http/Controllers/ReuniaoController.php
index a2f7b8b..5fb670a 100644
--- a/app/Http/Controllers/ReuniaoController.php
+++ b/app/Http/Controllers/ReuniaoController.php
@@ -20,7 +20,6 @@ public function gwmariadb()
])->post(env('GWMARIADB_URL'), $payload);
dd($response->json());
-
}
public function rustfs($app)
@@ -40,7 +39,6 @@ public function rustfs($app)
$s3Client->createBucket([
'Bucket' => $app,
]);
-
}
public function portainer()
@@ -65,10 +63,10 @@ public function portainer()
$endpointId = $endpoints[0]['Id'];
-$yaml = <<<'YAML'
+ $yaml = <<status(),
$response->json() ?: $response->body()
);
-
-
}
}
diff --git a/app/Http/Controllers/WebappController.php b/app/Http/Controllers/WebappController.php
index 3e7c198..1e27227 100644
--- a/app/Http/Controllers/WebappController.php
+++ b/app/Http/Controllers/WebappController.php
@@ -3,33 +3,57 @@
namespace App\Http\Controllers;
use App\Http\Requests\WebappRequest;
+use App\Http\Requests\AppUpdateRequest;
use App\Models\Webapp;
-use Illuminate\Http\Client\RequestException;
+use App\Services\WebappService;
class WebappController extends Controller
{
- public function index(){
+ public function index()
+ {
$webapps = Webapp::all();
return view('webapps.index', ['webapps' => $webapps]);
}
-
- public function show(Webapp $webapp){
- return view('webapps.show', ['webapp' => $webapp]);
+
+ public function show(Webapp $webapp)
+ {
+ //dd(($webapp->envVariables()->whereNotNull('value')->get()->isEmpty()));
+ if ($webapp->image_id == NULL):
+ $dockerStatus = 'not_configured';
+ else:
+ $dockerStatus = 'configured';
+ endif;
+
+ $dockerStatus;
+ return view('webapps.show', [
+ 'webapp' => $webapp,
+ 'dockerStatus' => $dockerStatus
+ ]);
}
- public function create(Webapp $webapp){
+ public function create(Webapp $webapp)
+ {
return view('webapps.create', ['webapp' => $webapp]);
}
- public function store(WebappRequest $request){
+ public function store(WebappRequest $request)
+ {
$validated = $request->validated();
$validated['user_id'] = auth()->user()->id;
+ $validated['dominio'] = $validated['name'] . '.fflch.usp.br';
$webapp = Webapp::create($validated);
-
- session()->flash('alert-success','Solicitação enviada com sucesso. Aguarde a análise de um administrador');
+
+ session()->flash('alert-success', 'Solicitação enviada com sucesso. Aguarde a análise de um administrador');
return redirect('/');
}
+
+ public function updateImage(AppUpdateRequest $request, Webapp $webapp)
+ {
+ $webapp = (new WebappService()->updateImage($webapp, $request->validated()));
+
+ return redirect("/webapps/{$webapp->id}");
+ }
}
diff --git a/app/Http/Controllers/Webapps/EditWebappImageController.php b/app/Http/Controllers/Webapps/EditWebappImageController.php
new file mode 100644
index 0000000..7fb8823
--- /dev/null
+++ b/app/Http/Controllers/Webapps/EditWebappImageController.php
@@ -0,0 +1,21 @@
+getAllDockerImages();
+ return view('webapps.dockerimage', [
+ 'webapp' => $webapp,
+ 'docker_images' => $dockerImages
+ ]);
+ }
+}
diff --git a/app/Http/Controllers/Webapps/ShowWebappVariablesController.php b/app/Http/Controllers/Webapps/ShowWebappVariablesController.php
new file mode 100644
index 0000000..3699fb6
--- /dev/null
+++ b/app/Http/Controllers/Webapps/ShowWebappVariablesController.php
@@ -0,0 +1,21 @@
+ $webapp,
+ 'env_variables' => $webapp->appVariables
+ ]);
+ }
+}
diff --git a/app/Http/Controllers/Webapps/UpdateWebappVariablesController.php b/app/Http/Controllers/Webapps/UpdateWebappVariablesController.php
new file mode 100644
index 0000000..c9d2803
--- /dev/null
+++ b/app/Http/Controllers/Webapps/UpdateWebappVariablesController.php
@@ -0,0 +1,22 @@
+storeAppVariables($variable, $request->validated());
+
+ return redirect("/webapps/{$variable->app_id}/variables");
+ }
+}
diff --git a/app/Http/Requests/AppUpdateRequest.php b/app/Http/Requests/AppUpdateRequest.php
new file mode 100644
index 0000000..fd3de97
--- /dev/null
+++ b/app/Http/Requests/AppUpdateRequest.php
@@ -0,0 +1,29 @@
+|string>
+ */
+ public function rules(): array
+ {
+ return [
+ 'image' => 'required'
+ ];
+ }
+}
diff --git a/app/Http/Requests/DockerImageRequest.php b/app/Http/Requests/DockerImageRequest.php
new file mode 100644
index 0000000..5e4e649
--- /dev/null
+++ b/app/Http/Requests/DockerImageRequest.php
@@ -0,0 +1,39 @@
+|string>
+ */
+ public function rules(): array
+ {
+ return [
+ 'name' => 'required|string',
+ 'path' => 'required|string',
+ 'tag' => 'required|string'
+ ];
+ }
+
+ public function messages(){
+ return [
+ 'name.required' => 'O nome da imagem é obrigatório.',
+ 'path.required' => 'A tag docker é obrigatória.',
+ 'tag.required' => 'A versão da tag é obrigatória.'
+ ];
+ }
+}
diff --git a/app/Http/Requests/DockerImageUpdateRequest.php b/app/Http/Requests/DockerImageUpdateRequest.php
new file mode 100644
index 0000000..8ec19e3
--- /dev/null
+++ b/app/Http/Requests/DockerImageUpdateRequest.php
@@ -0,0 +1,39 @@
+|string>
+ */
+ public function rules(): array
+ {
+ return [
+ 'path' => 'required|string',
+ 'tag' => 'required|string',
+ 'env_variables' => 'required|string'
+ ];
+ }
+
+ public function messages(){
+ return [
+ 'path.required' => 'A tag docker é obrigatória.',
+ 'tag.required' => 'A versão da tag é obrigatória.',
+ 'env_variables.required' => 'As variáveis de ambiente são obrigatórias.',
+ ];
+ }
+}
diff --git a/app/Http/Requests/StoreImageVariableRequest.php b/app/Http/Requests/StoreImageVariableRequest.php
new file mode 100644
index 0000000..7f279de
--- /dev/null
+++ b/app/Http/Requests/StoreImageVariableRequest.php
@@ -0,0 +1,29 @@
+|string>
+ */
+ public function rules(): array
+ {
+ return [
+ 'name' => 'string|required'
+ ];
+ }
+}
diff --git a/app/Http/Requests/UpdateAppVariableRequest.php b/app/Http/Requests/UpdateAppVariableRequest.php
new file mode 100644
index 0000000..e45afac
--- /dev/null
+++ b/app/Http/Requests/UpdateAppVariableRequest.php
@@ -0,0 +1,29 @@
+|string>
+ */
+ public function rules(): array
+ {
+ return [
+ 'value' => 'string|required'
+ ];
+ }
+}
diff --git a/app/Http/Requests/WebappDockerImageRequest.php b/app/Http/Requests/WebappDockerImageRequest.php
new file mode 100644
index 0000000..2ecc507
--- /dev/null
+++ b/app/Http/Requests/WebappDockerImageRequest.php
@@ -0,0 +1,29 @@
+|string>
+ */
+ public function rules(): array
+ {
+ return [
+ 'docker_image' => 'required'
+ ];
+ }
+}
diff --git a/app/Http/Requests/WebappDockerRequest.php b/app/Http/Requests/WebappDockerRequest.php
new file mode 100644
index 0000000..7b8b2af
--- /dev/null
+++ b/app/Http/Requests/WebappDockerRequest.php
@@ -0,0 +1,35 @@
+|string>
+ */
+ public function rules(): array
+ {
+ return [
+ 'env_variables' => 'required|string'
+ ];
+ }
+
+ public function messages(){
+ return [
+ 'env_variables.required' => 'As variáveis de ambiente são obrigatórias.',
+ ];
+ }
+}
diff --git a/app/Http/Requests/WebappRequest.php b/app/Http/Requests/WebappRequest.php
index e083dcc..453e800 100644
--- a/app/Http/Requests/WebappRequest.php
+++ b/app/Http/Requests/WebappRequest.php
@@ -23,21 +23,17 @@ public function authorize(): bool
public function rules(): array
{
return [
- 'dominio' => 'required',
- 'url_github' => ['nullable','url','starts_with:https://github.com/fflch'],
+ 'name' => 'required',
'justificativa' => 'required',
'tipo' => 'required',
-
];
}
public function messages(){
return [
- 'dominio.required' => 'O domínio é obrigatório',
+ 'name.required' => 'O domínio é obrigatório',
'justificativa.required' => 'A justificativa é obrigatória',
'tipo.required' => 'O tipo é obrigatório',
- 'url_github.url' => 'A Url precisa começar com https://',
- 'url_github.starts_with' => 'A URL inserida não pertence a fflch'
];
}
diff --git a/app/Models/AppDatabase.php b/app/Models/AppDatabase.php
new file mode 100644
index 0000000..c6c0fa9
--- /dev/null
+++ b/app/Models/AppDatabase.php
@@ -0,0 +1,15 @@
+belongsTo(Webapp::class, 'app_id', 'id');
+ }
+}
diff --git a/app/Models/AppVariable.php b/app/Models/AppVariable.php
new file mode 100644
index 0000000..4007fde
--- /dev/null
+++ b/app/Models/AppVariable.php
@@ -0,0 +1,20 @@
+belongsTo(Webapp::class, 'app_id', 'id');
+ }
+
+ public function imageVariable()
+ {
+ return $this->belongsTo(ImageVariable::class);
+ }
+}
diff --git a/app/Models/Bucket.php b/app/Models/Bucket.php
new file mode 100644
index 0000000..6394a5e
--- /dev/null
+++ b/app/Models/Bucket.php
@@ -0,0 +1,15 @@
+belongsTo(Webapp::class, 'app_id', 'id');
+ }
+}
diff --git a/app/Models/DockerImage.php b/app/Models/DockerImage.php
new file mode 100644
index 0000000..7bc2e9d
--- /dev/null
+++ b/app/Models/DockerImage.php
@@ -0,0 +1,27 @@
+hasMany(Webapp::class);
+ }
+
+ public function imageVariables()
+ {
+ return $this->hasMany(ImageVariable::class, 'image_id', 'id');
+ }
+}
diff --git a/app/Models/ImageVariable.php b/app/Models/ImageVariable.php
new file mode 100644
index 0000000..23985fd
--- /dev/null
+++ b/app/Models/ImageVariable.php
@@ -0,0 +1,20 @@
+belongsTo(DockerImage::class, 'image_id', 'id');
+ }
+
+ public function appVariables()
+ {
+ return $this->hasMany(AppVariable::class);
+ }
+}
diff --git a/app/Models/Webapp.php b/app/Models/Webapp.php
index 7ab8413..983d434 100644
--- a/app/Models/Webapp.php
+++ b/app/Models/Webapp.php
@@ -6,10 +6,37 @@
class Webapp extends Model
{
+ /**
+ * The table associated with the model.
+ *
+ * @var string
+ */
+ protected $table = 'apps';
+
protected $guarded = ['id'];
-
- public function user(){
- return $this->belongsTo(User::class, 'user_id');
+
+ public function user()
+ {
+ return $this->belongsTo(User::class);
}
+ public function appVariables()
+ {
+ return $this->hasMany(AppVariable::class, 'app_id', 'id');
+ }
+
+ public function dockerImage()
+ {
+ return $this->belongsTo(DockerImage::class, 'image_id', 'id');
+ }
+
+ public function Bucket()
+ {
+ return $this->hasMany(Bucket::class, 'app_id', 'id');
+ }
+
+ public function AppDatabase()
+ {
+ return $this->hasOne(AppDatabase::class, 'app_id', 'id');
+ }
}
diff --git a/app/Services/AppDatabaseService.php b/app/Services/AppDatabaseService.php
new file mode 100644
index 0000000..e4bc003
--- /dev/null
+++ b/app/Services/AppDatabaseService.php
@@ -0,0 +1,41 @@
+ $requestData['name'],
+ 'username' => $requestData['name'],
+ 'password' => $requestData['password'],
+ 'app_id' => $webapp->id
+ ]);
+ return $appDatabase;
+ }
+
+ public function updateDatabasePassword(AppDatabase $appDatabase, array $requestData): AppDatabase
+ {
+ $appDatabase->password = $requestData['new_password'];
+ $appDatabase->save();
+
+ return $appDatabase;
+ }
+}
diff --git a/app/Services/BucketService.php b/app/Services/BucketService.php
new file mode 100644
index 0000000..cedb3ac
--- /dev/null
+++ b/app/Services/BucketService.php
@@ -0,0 +1,33 @@
+ $requestData['name'],
+ 'key' => $requestData['key'],
+ 'secret' => $requestData['secret']
+ ]);
+
+ return $bucket;
+ }
+
+ public function deleteBucket(Bucket $bucket)
+ {
+
+ }
+}
diff --git a/app/Services/DockerImageService.php b/app/Services/DockerImageService.php
new file mode 100644
index 0000000..502203c
--- /dev/null
+++ b/app/Services/DockerImageService.php
@@ -0,0 +1,67 @@
+getImageById($image_id);
+ $variables = [];
+ foreach($image->imageVariables as $variable) {
+ $variables[] = [
+ 'name' => $variable->name,
+ 'value' => null
+ ];
+ }
+ return $variables;
+ }
+
+ function createDockerImage(array $dockerImageData)
+ {
+ $dockerImage = new DockerImage();
+ $dockerImage->name = $dockerImageData['name'];
+ $dockerImage->path = $dockerImageData['path'];
+ $dockerImage->tag = $dockerImageData['tag'];
+ $dockerImage->save();
+
+ return $dockerImage;
+ }
+
+ function updateDockerImage(DockerImage $dockerImage, array $dockerImageData): DockerImage
+ {
+ $dockerImage->update([
+ 'path' => $dockerImageData['path'],
+ 'tag' => $dockerImageData['tag'],
+ 'env_variables' => $dockerImageData['env_variables']
+ ]);
+
+ return $dockerImage;
+ }
+
+
+ function destroyDockerImage(DockerImage $dockerImage)
+ {
+ $dockerImage->delete();
+
+ return true;
+ }
+
+ function storeImageVariable() {
+
+ }
+}
diff --git a/app/Services/GwmariadbService.php b/app/Services/GwmariadbService.php
new file mode 100644
index 0000000..614dd11
--- /dev/null
+++ b/app/Services/GwmariadbService.php
@@ -0,0 +1,134 @@
+siteName = $siteName;
+ }
+
+ public function listarDatabase()
+ {
+ $action = 'listar_databases';
+ $payload = GetGwmariadbPayload::execute($action);
+ $response = SendGwmariadbRequest::execute($payload);
+
+ return $response->json();
+ }
+
+ public function listarUsuarios()
+ {
+ $action = 'listar_usuarios';
+ $payload = GetGwmariadbPayload::execute($action);
+ $response = SendGwmariadbRequest::execute($payload);
+
+ return $response;
+ }
+
+ public function storeDatabase()
+ {
+ if(!$this->userExists() && !$this->databaseExists()) {
+ $response = $this->criarDatabaseUsuarioPrivilegio();
+
+ return $response;
+ }
+
+ if(!$this->userExists() && $this->databaseExists()) {
+ $response = $this->criarDatabase();
+ $this->concederPrivilegios();
+
+ return $response;
+ }
+
+ if($this->userExists() && !$this->databaseExists()) {
+ $response = $this->criarUsuario();
+ $this->concederPrivilegios();
+
+ return $response;
+ }
+ }
+
+ public function criarDatabase()
+ {
+ $action = 'criar_database';
+ $payload = GetGwmariadbPayload::execute($action, $this->siteName);
+ $response = SendGwmariadbRequest::execute($payload);
+
+ return $response->json();
+ }
+
+ public function trocarSenhaUsuario()
+ {
+ $action = 'trocar_senha';
+ $payload = GetGwmariadbPayload::execute($action, $this->siteName);
+ $response = SendGwmariadbRequest::execute($payload);
+
+ return $response->json();
+ }
+
+ public function criarUsuario()
+ {
+ $action = 'criar_usuario';
+ $payload = GetGwmariadbPayload::execute($action, $this->siteName);
+ $response = SendGwmariadbRequest::execute($payload);
+
+ return $response;
+ }
+
+ public function criarDatabaseUsuario()
+ {
+ $action = 'criar_database_usuario';
+ $payload = GetGwmariadbPayload::execute($action, $this->siteName);
+ $response = SendGwmariadbRequest::execute($payload);
+
+ return $response;
+ }
+
+ public function criarDatabaseUsuarioPrivilegio()
+ {
+ $action = 'criar_database_usuario_privilegio';
+ $payload = GetGwmariadbPayload::execute($action, $this->siteName);
+ $response = SendGwmariadbRequest::execute($payload);
+
+ return $response;
+ }
+
+ public function concederPrivilegios()
+ {
+ $action = 'conceder_privilegios';
+ $payload = GetGwmariadbPayload::execute($action, $this->siteName);
+ $response = SendGwmariadbRequest::execute($payload);
+
+ return $response;
+ }
+
+ protected function databaseExists()
+ {
+ $action = 'database_existe';
+ $payload = GetGwmariadbPayload::execute($action, $this->siteName);
+ $response = SendGwmariadbRequest::execute($payload);
+
+ dd($response->json());
+
+ return true;
+ }
+
+ protected function userExists()
+ {
+ $action = 'usuario_existe';
+ $payload = GetGwmariadbPayload::execute($action, $this->siteName);
+ $response = SendGwmariadbRequest::execute($payload);
+
+ dd($response->json());
+
+ return true;
+ }
+}
diff --git a/app/Services/ImageVariableService.php b/app/Services/ImageVariableService.php
new file mode 100644
index 0000000..636f598
--- /dev/null
+++ b/app/Services/ImageVariableService.php
@@ -0,0 +1,36 @@
+ $imageId,
+ 'name' => $requestData['name']
+ ]);
+ }
+
+ public function updateVariable(ImageVariable $variable, array $requestData)
+ {
+ $variable->name = $requestData['name'];
+ $variable->save();
+ }
+}
diff --git a/app/Services/PortainerService.php b/app/Services/PortainerService.php
new file mode 100644
index 0000000..6add8b8
--- /dev/null
+++ b/app/Services/PortainerService.php
@@ -0,0 +1,58 @@
+jwt = $auth['jwt'];
+ $this->endpointId = $auth['endpointId'];
+ $this->portainerUrl = env('PORTAINER_URL');
+ }
+
+ public function createStack(string $webappName, string $yaml)
+ {
+ $response = Http::withToken($this->jwt)
+ ->post(
+ "{$this->portainerUrl}/api/stacks/create/standalone/string?endpointId={$this->endpointId}",
+ [
+ 'Name' => $webappName,
+ 'StackFileContent' => $yaml,
+ ]
+ );
+
+ return $response->json();
+ }
+
+ public function updateStack(string $webappName, string $yaml, string $stack)
+ {
+ $response = Http::withToken($this->jwt)
+ ->put(
+ "{$this->portainerUrl}/api/stacks/{$stack}?endpointId={$this->endpointId}",
+ [
+ 'Name' => $webappName,
+ 'StackFileContent' => $yaml,
+ ]
+ );
+
+ return $response->json();
+ }
+
+ public function deleteStack()
+ {
+
+ }
+}
diff --git a/app/Services/WebappService.php b/app/Services/WebappService.php
new file mode 100644
index 0000000..96bdad1
--- /dev/null
+++ b/app/Services/WebappService.php
@@ -0,0 +1,39 @@
+getImageById($requestData['image']);
+ foreach ($image->imageVariables as $variable) {
+ StoreAppVariablesOnImageSelection::execute($webapp, $variable);
+ }
+
+ $webapp->image_id = $requestData['image'];
+ $webapp->save();
+
+ return $webapp;
+ }
+
+ function storeAppVariables(AppVariable $appVariable, array $requestData)
+ {
+ $appVariable->value = $requestData['value'];
+ $appVariable->save();
+
+ return $appVariable;
+ }
+}
diff --git a/composer.json b/composer.json
index 69eb2de..380d318 100644
--- a/composer.json
+++ b/composer.json
@@ -15,6 +15,7 @@
},
"require-dev": {
"fakerphp/faker": "^1.23",
+ "laravel/dusk": "^8.6",
"laravel/pail": "^1.2.2",
"laravel/pint": "^1.24",
"laravel/sail": "^1.41",
diff --git a/composer.lock b/composer.lock
index cdbaf5f..ec34f44 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "dbeae0e5802d07751c2eb33c29126205",
+ "content-hash": "ee44a3977b47a8aee987e2ceaa0cdde9",
"packages": [
{
"name": "aws/aws-crt-php",
@@ -62,16 +62,16 @@
},
{
"name": "aws/aws-sdk-php",
- "version": "3.384.0",
+ "version": "3.384.5",
"source": {
"type": "git",
"url": "https://github.com/aws/aws-sdk-php.git",
- "reference": "6de1120aa6138e8f007c3537be86c0e64337c53b"
+ "reference": "c7d34f2d60515bd0c307e462268f75877842da4a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/6de1120aa6138e8f007c3537be86c0e64337c53b",
- "reference": "6de1120aa6138e8f007c3537be86c0e64337c53b",
+ "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/c7d34f2d60515bd0c307e462268f75877842da4a",
+ "reference": "c7d34f2d60515bd0c307e462268f75877842da4a",
"shasum": ""
},
"require": {
@@ -153,9 +153,9 @@
"support": {
"forum": "https://github.com/aws/aws-sdk-php/discussions",
"issues": "https://github.com/aws/aws-sdk-php/issues",
- "source": "https://github.com/aws/aws-sdk-php/tree/3.384.0"
+ "source": "https://github.com/aws/aws-sdk-php/tree/3.384.5"
},
- "time": "2026-06-02T18:23:32+00:00"
+ "time": "2026-06-08T18:25:02+00:00"
},
{
"name": "brick/math",
@@ -818,12 +818,12 @@
"version": "v7.0.5",
"source": {
"type": "git",
- "url": "https://github.com/firebase/php-jwt.git",
+ "url": "https://github.com/googleapis/php-jwt.git",
"reference": "47ad26bab5e7c70ae8a6f08ed25ff83631121380"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/firebase/php-jwt/zipball/47ad26bab5e7c70ae8a6f08ed25ff83631121380",
+ "url": "https://api.github.com/repos/googleapis/php-jwt/zipball/47ad26bab5e7c70ae8a6f08ed25ff83631121380",
"reference": "47ad26bab5e7c70ae8a6f08ed25ff83631121380",
"shasum": ""
},
@@ -872,8 +872,8 @@
"php"
],
"support": {
- "issues": "https://github.com/firebase/php-jwt/issues",
- "source": "https://github.com/firebase/php-jwt/tree/v7.0.5"
+ "issues": "https://github.com/googleapis/php-jwt/issues",
+ "source": "https://github.com/googleapis/php-jwt/tree/v7.0.5"
},
"time": "2026-04-01T20:38:03+00:00"
},
@@ -1012,25 +1012,26 @@
},
{
"name": "guzzlehttp/guzzle",
- "version": "7.10.0",
+ "version": "7.11.1",
"source": {
"type": "git",
"url": "https://github.com/guzzle/guzzle.git",
- "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4"
+ "reference": "5af96f374e0ab4ebd747b8310888c99d3adb0a8c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b51ac707cfa420b7bfd4e4d5e510ba8008e822b4",
- "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4",
+ "url": "https://api.github.com/repos/guzzle/guzzle/zipball/5af96f374e0ab4ebd747b8310888c99d3adb0a8c",
+ "reference": "5af96f374e0ab4ebd747b8310888c99d3adb0a8c",
"shasum": ""
},
"require": {
"ext-json": "*",
- "guzzlehttp/promises": "^2.3",
- "guzzlehttp/psr7": "^2.8",
+ "guzzlehttp/promises": "^2.5",
+ "guzzlehttp/psr7": "^2.11",
"php": "^7.2.5 || ^8.0",
"psr/http-client": "^1.0",
- "symfony/deprecation-contracts": "^2.2 || ^3.0"
+ "symfony/deprecation-contracts": "^2.5 || ^3.0",
+ "symfony/polyfill-php80": "^1.24"
},
"provide": {
"psr/http-client-implementation": "1.0"
@@ -1039,8 +1040,9 @@
"bamarni/composer-bin-plugin": "^1.8.2",
"ext-curl": "*",
"guzzle/client-integration-tests": "3.0.2",
+ "guzzlehttp/test-server": "^0.5",
"php-http/message-factory": "^1.1",
- "phpunit/phpunit": "^8.5.39 || ^9.6.20",
+ "phpunit/phpunit": "^8.5.52 || ^9.6.34",
"psr/log": "^1.1 || ^2.0 || ^3.0"
},
"suggest": {
@@ -1118,7 +1120,7 @@
],
"support": {
"issues": "https://github.com/guzzle/guzzle/issues",
- "source": "https://github.com/guzzle/guzzle/tree/7.10.0"
+ "source": "https://github.com/guzzle/guzzle/tree/7.11.1"
},
"funding": [
{
@@ -1134,28 +1136,29 @@
"type": "tidelift"
}
],
- "time": "2025-08-23T22:36:01+00:00"
+ "time": "2026-06-07T22:54:06+00:00"
},
{
"name": "guzzlehttp/promises",
- "version": "2.3.0",
+ "version": "2.5.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/promises.git",
- "reference": "481557b130ef3790cf82b713667b43030dc9c957"
+ "reference": "4360e982f87f5f258bf872d094647791db2f4c8e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/promises/zipball/481557b130ef3790cf82b713667b43030dc9c957",
- "reference": "481557b130ef3790cf82b713667b43030dc9c957",
+ "url": "https://api.github.com/repos/guzzle/promises/zipball/4360e982f87f5f258bf872d094647791db2f4c8e",
+ "reference": "4360e982f87f5f258bf872d094647791db2f4c8e",
"shasum": ""
},
"require": {
- "php": "^7.2.5 || ^8.0"
+ "php": "^7.2.5 || ^8.0",
+ "symfony/deprecation-contracts": "^2.5 || ^3.0"
},
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2",
- "phpunit/phpunit": "^8.5.44 || ^9.6.25"
+ "phpunit/phpunit": "^8.5.52 || ^9.6.34"
},
"type": "library",
"extra": {
@@ -1201,7 +1204,7 @@
],
"support": {
"issues": "https://github.com/guzzle/promises/issues",
- "source": "https://github.com/guzzle/promises/tree/2.3.0"
+ "source": "https://github.com/guzzle/promises/tree/2.5.0"
},
"funding": [
{
@@ -1217,27 +1220,29 @@
"type": "tidelift"
}
],
- "time": "2025-08-22T14:34:08+00:00"
+ "time": "2026-06-02T12:23:43+00:00"
},
{
"name": "guzzlehttp/psr7",
- "version": "2.9.0",
+ "version": "2.11.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
- "reference": "7d0ed42f28e42d61352a7a79de682e5e67fec884"
+ "reference": "bbb5e61349fa5cb822b3e87842b951088b76b81f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/psr7/zipball/7d0ed42f28e42d61352a7a79de682e5e67fec884",
- "reference": "7d0ed42f28e42d61352a7a79de682e5e67fec884",
+ "url": "https://api.github.com/repos/guzzle/psr7/zipball/bbb5e61349fa5cb822b3e87842b951088b76b81f",
+ "reference": "bbb5e61349fa5cb822b3e87842b951088b76b81f",
"shasum": ""
},
"require": {
"php": "^7.2.5 || ^8.0",
"psr/http-factory": "^1.0",
"psr/http-message": "^1.1 || ^2.0",
- "ralouphie/getallheaders": "^3.0"
+ "ralouphie/getallheaders": "^3.0",
+ "symfony/deprecation-contracts": "^2.5 || ^3.0",
+ "symfony/polyfill-php80": "^1.24"
},
"provide": {
"psr/http-factory-implementation": "1.0",
@@ -1245,9 +1250,9 @@
},
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2",
- "http-interop/http-factory-tests": "0.9.0",
+ "http-interop/http-factory-tests": "1.1.0",
"jshttp/mime-db": "1.54.0.1",
- "phpunit/phpunit": "^8.5.44 || ^9.6.25"
+ "phpunit/phpunit": "^8.5.52 || ^9.6.34"
},
"suggest": {
"laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
@@ -1318,7 +1323,7 @@
],
"support": {
"issues": "https://github.com/guzzle/psr7/issues",
- "source": "https://github.com/guzzle/psr7/tree/2.9.0"
+ "source": "https://github.com/guzzle/psr7/tree/2.11.0"
},
"funding": [
{
@@ -1334,20 +1339,20 @@
"type": "tidelift"
}
],
- "time": "2026-03-10T16:41:02+00:00"
+ "time": "2026-06-02T12:30:48+00:00"
},
{
"name": "guzzlehttp/uri-template",
- "version": "v1.0.5",
+ "version": "v1.0.6",
"source": {
"type": "git",
"url": "https://github.com/guzzle/uri-template.git",
- "reference": "4f4bbd4e7172148801e76e3decc1e559bdee34e1"
+ "reference": "eef7f87bab6f204eba3c39224d8075c70c637946"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/uri-template/zipball/4f4bbd4e7172148801e76e3decc1e559bdee34e1",
- "reference": "4f4bbd4e7172148801e76e3decc1e559bdee34e1",
+ "url": "https://api.github.com/repos/guzzle/uri-template/zipball/eef7f87bab6f204eba3c39224d8075c70c637946",
+ "reference": "eef7f87bab6f204eba3c39224d8075c70c637946",
"shasum": ""
},
"require": {
@@ -1356,7 +1361,7 @@
},
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2",
- "phpunit/phpunit": "^8.5.44 || ^9.6.25",
+ "phpunit/phpunit": "^8.5.52 || ^9.6.34",
"uri-template/tests": "1.0.0"
},
"type": "library",
@@ -1404,7 +1409,7 @@
],
"support": {
"issues": "https://github.com/guzzle/uri-template/issues",
- "source": "https://github.com/guzzle/uri-template/tree/v1.0.5"
+ "source": "https://github.com/guzzle/uri-template/tree/v1.0.6"
},
"funding": [
{
@@ -1420,7 +1425,7 @@
"type": "tidelift"
}
],
- "time": "2025-08-22T14:27:06+00:00"
+ "time": "2026-05-23T22:00:21+00:00"
},
{
"name": "kyslik/column-sortable",
@@ -1485,16 +1490,16 @@
},
{
"name": "laravel/framework",
- "version": "v12.56.0",
+ "version": "v12.61.1",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
- "reference": "dac16d424b59debb2273910dde88eb7050a2a709"
+ "reference": "e8472ca9774452fe50841d9bdced060679f4d58d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/framework/zipball/dac16d424b59debb2273910dde88eb7050a2a709",
- "reference": "dac16d424b59debb2273910dde88eb7050a2a709",
+ "url": "https://api.github.com/repos/laravel/framework/zipball/e8472ca9774452fe50841d9bdced060679f4d58d",
+ "reference": "e8472ca9774452fe50841d9bdced060679f4d58d",
"shasum": ""
},
"require": {
@@ -1535,8 +1540,8 @@
"symfony/mailer": "^7.2.0",
"symfony/mime": "^7.2.0",
"symfony/polyfill-php83": "^1.33",
- "symfony/polyfill-php84": "^1.33",
- "symfony/polyfill-php85": "^1.33",
+ "symfony/polyfill-php84": "^1.34",
+ "symfony/polyfill-php85": "^1.34",
"symfony/process": "^7.2.0",
"symfony/routing": "^7.2.0",
"symfony/uid": "^7.2.0",
@@ -1703,20 +1708,20 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
- "time": "2026-03-26T14:51:54+00:00"
+ "time": "2026-06-04T14:22:52+00:00"
},
{
"name": "laravel/prompts",
- "version": "v0.3.16",
+ "version": "v0.3.18",
"source": {
"type": "git",
"url": "https://github.com/laravel/prompts.git",
- "reference": "11e7d5f93803a2190b00e145142cb00a33d17ad2"
+ "reference": "a19af51bb144bf87f08397921fa619f85c7d4e72"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/prompts/zipball/11e7d5f93803a2190b00e145142cb00a33d17ad2",
- "reference": "11e7d5f93803a2190b00e145142cb00a33d17ad2",
+ "url": "https://api.github.com/repos/laravel/prompts/zipball/a19af51bb144bf87f08397921fa619f85c7d4e72",
+ "reference": "a19af51bb144bf87f08397921fa619f85c7d4e72",
"shasum": ""
},
"require": {
@@ -1760,22 +1765,22 @@
"description": "Add beautiful and user-friendly forms to your command-line applications.",
"support": {
"issues": "https://github.com/laravel/prompts/issues",
- "source": "https://github.com/laravel/prompts/tree/v0.3.16"
+ "source": "https://github.com/laravel/prompts/tree/v0.3.18"
},
- "time": "2026-03-23T14:35:33+00:00"
+ "time": "2026-05-19T00:47:18+00:00"
},
{
"name": "laravel/serializable-closure",
- "version": "v2.0.10",
+ "version": "v2.0.13",
"source": {
"type": "git",
"url": "https://github.com/laravel/serializable-closure.git",
- "reference": "870fc81d2f879903dfc5b60bf8a0f94a1609e669"
+ "reference": "b566ee0dd251f3c4078bed003a7ce015f5ea6dce"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/870fc81d2f879903dfc5b60bf8a0f94a1609e669",
- "reference": "870fc81d2f879903dfc5b60bf8a0f94a1609e669",
+ "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/b566ee0dd251f3c4078bed003a7ce015f5ea6dce",
+ "reference": "b566ee0dd251f3c4078bed003a7ce015f5ea6dce",
"shasum": ""
},
"require": {
@@ -1823,20 +1828,20 @@
"issues": "https://github.com/laravel/serializable-closure/issues",
"source": "https://github.com/laravel/serializable-closure"
},
- "time": "2026-02-20T19:59:49+00:00"
+ "time": "2026-04-16T14:03:50+00:00"
},
{
"name": "laravel/socialite",
- "version": "v5.26.1",
+ "version": "v5.27.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/socialite.git",
- "reference": "db6ec2ee967b7f06412c3a0cf1daaf072f4752a4"
+ "reference": "40e0757a75637c7b2dff05d3286b0d8fc25e5c0e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/socialite/zipball/db6ec2ee967b7f06412c3a0cf1daaf072f4752a4",
- "reference": "db6ec2ee967b7f06412c3a0cf1daaf072f4752a4",
+ "url": "https://api.github.com/repos/laravel/socialite/zipball/40e0757a75637c7b2dff05d3286b0d8fc25e5c0e",
+ "reference": "40e0757a75637c7b2dff05d3286b0d8fc25e5c0e",
"shasum": ""
},
"require": {
@@ -1895,7 +1900,7 @@
"issues": "https://github.com/laravel/socialite/issues",
"source": "https://github.com/laravel/socialite"
},
- "time": "2026-03-29T14:50:53+00:00"
+ "time": "2026-04-24T14:05:47+00:00"
},
{
"name": "laravel/tinker",
@@ -2154,16 +2159,16 @@
},
{
"name": "league/flysystem",
- "version": "3.33.0",
+ "version": "3.34.0",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/flysystem.git",
- "reference": "570b8871e0ce693764434b29154c54b434905350"
+ "reference": "2daaac3b0d4c83ea7ed5d8586e786f5d00f3540e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/570b8871e0ce693764434b29154c54b434905350",
- "reference": "570b8871e0ce693764434b29154c54b434905350",
+ "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/2daaac3b0d4c83ea7ed5d8586e786f5d00f3540e",
+ "reference": "2daaac3b0d4c83ea7ed5d8586e786f5d00f3540e",
"shasum": ""
},
"require": {
@@ -2231,9 +2236,9 @@
],
"support": {
"issues": "https://github.com/thephpleague/flysystem/issues",
- "source": "https://github.com/thephpleague/flysystem/tree/3.33.0"
+ "source": "https://github.com/thephpleague/flysystem/tree/3.34.0"
},
- "time": "2026-03-25T07:59:30+00:00"
+ "time": "2026-05-14T10:28:08+00:00"
},
{
"name": "league/flysystem-local",
@@ -2769,16 +2774,16 @@
},
{
"name": "nesbot/carbon",
- "version": "3.11.3",
+ "version": "3.11.4",
"source": {
"type": "git",
"url": "https://github.com/CarbonPHP/carbon.git",
- "reference": "6a7e652845bb018c668220c2a545aded8594fbbf"
+ "reference": "e890471a3494740f7d9326d72ce6a8c559ffee60"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/6a7e652845bb018c668220c2a545aded8594fbbf",
- "reference": "6a7e652845bb018c668220c2a545aded8594fbbf",
+ "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/e890471a3494740f7d9326d72ce6a8c559ffee60",
+ "reference": "e890471a3494740f7d9326d72ce6a8c559ffee60",
"shasum": ""
},
"require": {
@@ -2870,7 +2875,7 @@
"type": "tidelift"
}
],
- "time": "2026-03-11T17:23:39+00:00"
+ "time": "2026-04-07T09:57:54+00:00"
},
{
"name": "nette/schema",
@@ -2941,16 +2946,16 @@
},
{
"name": "nette/utils",
- "version": "v4.1.3",
+ "version": "v4.1.4",
"source": {
"type": "git",
"url": "https://github.com/nette/utils.git",
- "reference": "bb3ea637e3d131d72acc033cfc2746ee893349fe"
+ "reference": "7da6c396d7ebe142bc857c20479d5e70a5e1aac7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nette/utils/zipball/bb3ea637e3d131d72acc033cfc2746ee893349fe",
- "reference": "bb3ea637e3d131d72acc033cfc2746ee893349fe",
+ "url": "https://api.github.com/repos/nette/utils/zipball/7da6c396d7ebe142bc857c20479d5e70a5e1aac7",
+ "reference": "7da6c396d7ebe142bc857c20479d5e70a5e1aac7",
"shasum": ""
},
"require": {
@@ -3026,9 +3031,9 @@
],
"support": {
"issues": "https://github.com/nette/utils/issues",
- "source": "https://github.com/nette/utils/tree/v4.1.3"
+ "source": "https://github.com/nette/utils/tree/v4.1.4"
},
- "time": "2026-02-13T03:05:33+00:00"
+ "time": "2026-05-11T20:49:54+00:00"
},
{
"name": "nikic/php-parser",
@@ -3371,16 +3376,16 @@
},
{
"name": "phpseclib/phpseclib",
- "version": "3.0.50",
+ "version": "3.0.52",
"source": {
"type": "git",
"url": "https://github.com/phpseclib/phpseclib.git",
- "reference": "aa6ad8321ed103dc3624fb600a25b66ebf78ec7b"
+ "reference": "2adaefc83df2ec548558307690f376dd7d4f4fce"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/aa6ad8321ed103dc3624fb600a25b66ebf78ec7b",
- "reference": "aa6ad8321ed103dc3624fb600a25b66ebf78ec7b",
+ "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/2adaefc83df2ec548558307690f376dd7d4f4fce",
+ "reference": "2adaefc83df2ec548558307690f376dd7d4f4fce",
"shasum": ""
},
"require": {
@@ -3461,7 +3466,7 @@
],
"support": {
"issues": "https://github.com/phpseclib/phpseclib/issues",
- "source": "https://github.com/phpseclib/phpseclib/tree/3.0.50"
+ "source": "https://github.com/phpseclib/phpseclib/tree/3.0.52"
},
"funding": [
{
@@ -3477,7 +3482,7 @@
"type": "tidelift"
}
],
- "time": "2026-03-19T02:57:58+00:00"
+ "time": "2026-04-27T07:02:15+00:00"
},
{
"name": "psr/cache",
@@ -3942,16 +3947,16 @@
},
{
"name": "psy/psysh",
- "version": "v0.12.22",
+ "version": "v0.12.23",
"source": {
"type": "git",
"url": "https://github.com/bobthecow/psysh.git",
- "reference": "3be75d5b9244936dd4ac62ade2bfb004d13acf0f"
+ "reference": "4dcc0f08047d52bbde475eda481146fd8e27e1a4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/bobthecow/psysh/zipball/3be75d5b9244936dd4ac62ade2bfb004d13acf0f",
- "reference": "3be75d5b9244936dd4ac62ade2bfb004d13acf0f",
+ "url": "https://api.github.com/repos/bobthecow/psysh/zipball/4dcc0f08047d52bbde475eda481146fd8e27e1a4",
+ "reference": "4dcc0f08047d52bbde475eda481146fd8e27e1a4",
"shasum": ""
},
"require": {
@@ -4015,9 +4020,9 @@
],
"support": {
"issues": "https://github.com/bobthecow/psysh/issues",
- "source": "https://github.com/bobthecow/psysh/tree/v0.12.22"
+ "source": "https://github.com/bobthecow/psysh/tree/v0.12.23"
},
- "time": "2026-03-22T23:03:24+00:00"
+ "time": "2026-05-23T13:41:31+00:00"
},
{
"name": "ralouphie/getallheaders",
@@ -4293,16 +4298,16 @@
},
{
"name": "spatie/laravel-package-tools",
- "version": "1.93.0",
+ "version": "1.93.1",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-package-tools.git",
- "reference": "0d097bce95b2bf6802fb1d83e1e753b0f5a948e7"
+ "reference": "d5552849801f2642aea710557463234b59ef65eb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/0d097bce95b2bf6802fb1d83e1e753b0f5a948e7",
- "reference": "0d097bce95b2bf6802fb1d83e1e753b0f5a948e7",
+ "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/d5552849801f2642aea710557463234b59ef65eb",
+ "reference": "d5552849801f2642aea710557463234b59ef65eb",
"shasum": ""
},
"require": {
@@ -4342,7 +4347,7 @@
],
"support": {
"issues": "https://github.com/spatie/laravel-package-tools/issues",
- "source": "https://github.com/spatie/laravel-package-tools/tree/1.93.0"
+ "source": "https://github.com/spatie/laravel-package-tools/tree/1.93.1"
},
"funding": [
{
@@ -4350,20 +4355,20 @@
"type": "github"
}
],
- "time": "2026-02-21T12:49:54+00:00"
+ "time": "2026-05-19T14:06:37+00:00"
},
{
"name": "spatie/laravel-permission",
- "version": "7.2.4",
+ "version": "7.4.2",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-permission.git",
- "reference": "0a8ab4b84dc5efe23be9ddcd77951e10030c452d"
+ "reference": "15a9daf02ba02d3ae77aaa6da582708231ef999b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/laravel-permission/zipball/0a8ab4b84dc5efe23be9ddcd77951e10030c452d",
- "reference": "0a8ab4b84dc5efe23be9ddcd77951e10030c452d",
+ "url": "https://api.github.com/repos/spatie/laravel-permission/zipball/15a9daf02ba02d3ae77aaa6da582708231ef999b",
+ "reference": "15a9daf02ba02d3ae77aaa6da582708231ef999b",
"shasum": ""
},
"require": {
@@ -4371,7 +4376,7 @@
"illuminate/container": "^12.0|^13.0",
"illuminate/contracts": "^12.0|^13.0",
"illuminate/database": "^12.0|^13.0",
- "php": "^8.4",
+ "php": "^8.3",
"spatie/laravel-package-tools": "^1.0"
},
"require-dev": {
@@ -4429,7 +4434,7 @@
],
"support": {
"issues": "https://github.com/spatie/laravel-permission/issues",
- "source": "https://github.com/spatie/laravel-permission/tree/7.2.4"
+ "source": "https://github.com/spatie/laravel-permission/tree/7.4.2"
},
"funding": [
{
@@ -4437,24 +4442,24 @@
"type": "github"
}
],
- "time": "2026-03-17T22:57:08+00:00"
+ "time": "2026-05-30T19:21:26+00:00"
},
{
"name": "symfony/clock",
- "version": "v8.0.8",
+ "version": "v8.1.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/clock.git",
- "reference": "b55a638b189a6faa875e0ccdb00908fb87af95b3"
+ "reference": "701ef4de9705d6c32292ebee5e8044094a09fbf6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/clock/zipball/b55a638b189a6faa875e0ccdb00908fb87af95b3",
- "reference": "b55a638b189a6faa875e0ccdb00908fb87af95b3",
+ "url": "https://api.github.com/repos/symfony/clock/zipball/701ef4de9705d6c32292ebee5e8044094a09fbf6",
+ "reference": "701ef4de9705d6c32292ebee5e8044094a09fbf6",
"shasum": ""
},
"require": {
- "php": ">=8.4",
+ "php": ">=8.4.1",
"psr/clock": "^1.0"
},
"provide": {
@@ -4494,7 +4499,7 @@
"time"
],
"support": {
- "source": "https://github.com/symfony/clock/tree/v8.0.8"
+ "source": "https://github.com/symfony/clock/tree/v8.1.0"
},
"funding": [
{
@@ -4514,20 +4519,20 @@
"type": "tidelift"
}
],
- "time": "2026-03-30T15:14:47+00:00"
+ "time": "2026-05-29T05:06:50+00:00"
},
{
"name": "symfony/console",
- "version": "v7.4.8",
+ "version": "v7.4.13",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "1e92e39c51f95b88e3d66fa2d9f06d1fb45dd707"
+ "reference": "85095d2573eaefaf35e40b9513a9bf09f72cd217"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/1e92e39c51f95b88e3d66fa2d9f06d1fb45dd707",
- "reference": "1e92e39c51f95b88e3d66fa2d9f06d1fb45dd707",
+ "url": "https://api.github.com/repos/symfony/console/zipball/85095d2573eaefaf35e40b9513a9bf09f72cd217",
+ "reference": "85095d2573eaefaf35e40b9513a9bf09f72cd217",
"shasum": ""
},
"require": {
@@ -4592,7 +4597,7 @@
"terminal"
],
"support": {
- "source": "https://github.com/symfony/console/tree/v7.4.8"
+ "source": "https://github.com/symfony/console/tree/v7.4.13"
},
"funding": [
{
@@ -4612,24 +4617,24 @@
"type": "tidelift"
}
],
- "time": "2026-03-30T13:54:39+00:00"
+ "time": "2026-05-24T08:56:14+00:00"
},
{
"name": "symfony/css-selector",
- "version": "v8.0.8",
+ "version": "v8.1.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
- "reference": "8db1c00226a94d8ab6aa89d9224eeee91e2ea2ed"
+ "reference": "dc0e2be45c9b5588c82414f02ac574b4b986abcd"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/css-selector/zipball/8db1c00226a94d8ab6aa89d9224eeee91e2ea2ed",
- "reference": "8db1c00226a94d8ab6aa89d9224eeee91e2ea2ed",
+ "url": "https://api.github.com/repos/symfony/css-selector/zipball/dc0e2be45c9b5588c82414f02ac574b4b986abcd",
+ "reference": "dc0e2be45c9b5588c82414f02ac574b4b986abcd",
"shasum": ""
},
"require": {
- "php": ">=8.4"
+ "php": ">=8.4.1"
},
"type": "library",
"autoload": {
@@ -4661,7 +4666,7 @@
"description": "Converts CSS selectors to XPath expressions",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/css-selector/tree/v8.0.8"
+ "source": "https://github.com/symfony/css-selector/tree/v8.1.0"
},
"funding": [
{
@@ -4681,20 +4686,20 @@
"type": "tidelift"
}
],
- "time": "2026-03-30T15:14:47+00:00"
+ "time": "2026-05-29T05:06:50+00:00"
},
{
"name": "symfony/deprecation-contracts",
- "version": "v3.6.0",
+ "version": "v3.7.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/deprecation-contracts.git",
- "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62"
+ "reference": "50f59d1f3ca46d41ac911f97a78626b6756af35b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62",
- "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62",
+ "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/50f59d1f3ca46d41ac911f97a78626b6756af35b",
+ "reference": "50f59d1f3ca46d41ac911f97a78626b6756af35b",
"shasum": ""
},
"require": {
@@ -4707,7 +4712,7 @@
"name": "symfony/contracts"
},
"branch-alias": {
- "dev-main": "3.6-dev"
+ "dev-main": "3.7-dev"
}
},
"autoload": {
@@ -4732,7 +4737,7 @@
"description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0"
+ "source": "https://github.com/symfony/deprecation-contracts/tree/v3.7.0"
},
"funding": [
{
@@ -4743,12 +4748,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-09-25T14:21:43+00:00"
+ "time": "2026-04-13T15:52:40+00:00"
},
{
"name": "symfony/error-handler",
@@ -4834,20 +4843,21 @@
},
{
"name": "symfony/event-dispatcher",
- "version": "v8.0.8",
+ "version": "v8.1.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
- "reference": "f662acc6ab22a3d6d716dcb44c381c6002940df6"
+ "reference": "f249ae3f680958b6f1f9dd76e5747cf0695b4102"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/f662acc6ab22a3d6d716dcb44c381c6002940df6",
- "reference": "f662acc6ab22a3d6d716dcb44c381c6002940df6",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/f249ae3f680958b6f1f9dd76e5747cf0695b4102",
+ "reference": "f249ae3f680958b6f1f9dd76e5747cf0695b4102",
"shasum": ""
},
"require": {
- "php": ">=8.4",
+ "php": ">=8.4.1",
+ "symfony/deprecation-contracts": "^2.5|^3",
"symfony/event-dispatcher-contracts": "^2.5|^3"
},
"conflict": {
@@ -4895,7 +4905,7 @@
"description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/event-dispatcher/tree/v8.0.8"
+ "source": "https://github.com/symfony/event-dispatcher/tree/v8.1.0"
},
"funding": [
{
@@ -4915,20 +4925,20 @@
"type": "tidelift"
}
],
- "time": "2026-03-30T15:14:47+00:00"
+ "time": "2026-05-29T05:06:50+00:00"
},
{
"name": "symfony/event-dispatcher-contracts",
- "version": "v3.6.0",
+ "version": "v3.7.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher-contracts.git",
- "reference": "59eb412e93815df44f05f342958efa9f46b1e586"
+ "reference": "ccba7060602b7fed0b03c85bf025257f76d9ef32"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586",
- "reference": "59eb412e93815df44f05f342958efa9f46b1e586",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/ccba7060602b7fed0b03c85bf025257f76d9ef32",
+ "reference": "ccba7060602b7fed0b03c85bf025257f76d9ef32",
"shasum": ""
},
"require": {
@@ -4942,7 +4952,7 @@
"name": "symfony/contracts"
},
"branch-alias": {
- "dev-main": "3.6-dev"
+ "dev-main": "3.7-dev"
}
},
"autoload": {
@@ -4975,7 +4985,7 @@
"standards"
],
"support": {
- "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.6.0"
+ "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.7.0"
},
"funding": [
{
@@ -4986,12 +4996,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-09-25T14:21:43+00:00"
+ "time": "2026-01-05T13:30:16+00:00"
},
{
"name": "symfony/filesystem",
@@ -5134,16 +5148,16 @@
},
{
"name": "symfony/http-foundation",
- "version": "v7.4.8",
+ "version": "v7.4.13",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
- "reference": "9381209597ec66c25be154cbf2289076e64d1eab"
+ "reference": "bc354f47c62301e990b7874fa662326368508e2c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-foundation/zipball/9381209597ec66c25be154cbf2289076e64d1eab",
- "reference": "9381209597ec66c25be154cbf2289076e64d1eab",
+ "url": "https://api.github.com/repos/symfony/http-foundation/zipball/bc354f47c62301e990b7874fa662326368508e2c",
+ "reference": "bc354f47c62301e990b7874fa662326368508e2c",
"shasum": ""
},
"require": {
@@ -5192,7 +5206,7 @@
"description": "Defines an object-oriented layer for the HTTP specification",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/http-foundation/tree/v7.4.8"
+ "source": "https://github.com/symfony/http-foundation/tree/v7.4.13"
},
"funding": [
{
@@ -5212,20 +5226,20 @@
"type": "tidelift"
}
],
- "time": "2026-03-24T13:12:05+00:00"
+ "time": "2026-05-24T11:20:33+00:00"
},
{
"name": "symfony/http-kernel",
- "version": "v7.4.8",
+ "version": "v7.4.13",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
- "reference": "017e76ad089bac281553389269e259e155935e1a"
+ "reference": "9df847980c436451f4f51d1284491bb4356dd989"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-kernel/zipball/017e76ad089bac281553389269e259e155935e1a",
- "reference": "017e76ad089bac281553389269e259e155935e1a",
+ "url": "https://api.github.com/repos/symfony/http-kernel/zipball/9df847980c436451f4f51d1284491bb4356dd989",
+ "reference": "9df847980c436451f4f51d1284491bb4356dd989",
"shasum": ""
},
"require": {
@@ -5311,7 +5325,7 @@
"description": "Provides a structured process for converting a Request into a Response",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/http-kernel/tree/v7.4.8"
+ "source": "https://github.com/symfony/http-kernel/tree/v7.4.13"
},
"funding": [
{
@@ -5331,20 +5345,20 @@
"type": "tidelift"
}
],
- "time": "2026-03-31T20:57:01+00:00"
+ "time": "2026-05-27T08:31:43+00:00"
},
{
"name": "symfony/mailer",
- "version": "v7.4.8",
+ "version": "v7.4.12",
"source": {
"type": "git",
"url": "https://github.com/symfony/mailer.git",
- "reference": "f6ea532250b476bfc1b56699b388a1bdbf168f62"
+ "reference": "5cefb712a25f320579615ba9e1942abaeade7dff"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/mailer/zipball/f6ea532250b476bfc1b56699b388a1bdbf168f62",
- "reference": "f6ea532250b476bfc1b56699b388a1bdbf168f62",
+ "url": "https://api.github.com/repos/symfony/mailer/zipball/5cefb712a25f320579615ba9e1942abaeade7dff",
+ "reference": "5cefb712a25f320579615ba9e1942abaeade7dff",
"shasum": ""
},
"require": {
@@ -5395,7 +5409,7 @@
"description": "Helps sending emails",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/mailer/tree/v7.4.8"
+ "source": "https://github.com/symfony/mailer/tree/v7.4.12"
},
"funding": [
{
@@ -5415,20 +5429,20 @@
"type": "tidelift"
}
],
- "time": "2026-03-24T13:12:05+00:00"
+ "time": "2026-05-20T07:20:23+00:00"
},
{
"name": "symfony/mime",
- "version": "v7.4.8",
+ "version": "v7.4.13",
"source": {
"type": "git",
"url": "https://github.com/symfony/mime.git",
- "reference": "6df02f99998081032da3407a8d6c4e1dcb5d4379"
+ "reference": "a845722765c4f6b2ce88beaf4f4479975b186770"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/mime/zipball/6df02f99998081032da3407a8d6c4e1dcb5d4379",
- "reference": "6df02f99998081032da3407a8d6c4e1dcb5d4379",
+ "url": "https://api.github.com/repos/symfony/mime/zipball/a845722765c4f6b2ce88beaf4f4479975b186770",
+ "reference": "a845722765c4f6b2ce88beaf4f4479975b186770",
"shasum": ""
},
"require": {
@@ -5484,7 +5498,7 @@
"mime-type"
],
"support": {
- "source": "https://github.com/symfony/mime/tree/v7.4.8"
+ "source": "https://github.com/symfony/mime/tree/v7.4.13"
},
"funding": [
{
@@ -5504,20 +5518,20 @@
"type": "tidelift"
}
],
- "time": "2026-03-30T14:11:46+00:00"
+ "time": "2026-05-23T16:22:37+00:00"
},
{
"name": "symfony/polyfill-ctype",
- "version": "v1.33.0",
+ "version": "v1.37.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
- "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638"
+ "reference": "141046a8f9477948ff284fa65be2095baafb94f2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638",
- "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/141046a8f9477948ff284fa65be2095baafb94f2",
+ "reference": "141046a8f9477948ff284fa65be2095baafb94f2",
"shasum": ""
},
"require": {
@@ -5567,7 +5581,7 @@
"portable"
],
"support": {
- "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0"
+ "source": "https://github.com/symfony/polyfill-ctype/tree/v1.37.0"
},
"funding": [
{
@@ -5587,20 +5601,20 @@
"type": "tidelift"
}
],
- "time": "2024-09-09T11:45:10+00:00"
+ "time": "2026-04-10T16:19:22+00:00"
},
{
"name": "symfony/polyfill-intl-grapheme",
- "version": "v1.33.0",
+ "version": "v1.38.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-grapheme.git",
- "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70"
+ "reference": "e9247d281d694a5120554d9afaf54e070e88a603"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70",
- "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/e9247d281d694a5120554d9afaf54e070e88a603",
+ "reference": "e9247d281d694a5120554d9afaf54e070e88a603",
"shasum": ""
},
"require": {
@@ -5649,7 +5663,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0"
+ "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.38.1"
},
"funding": [
{
@@ -5669,20 +5683,20 @@
"type": "tidelift"
}
],
- "time": "2025-06-27T09:58:17+00:00"
+ "time": "2026-05-26T05:58:03+00:00"
},
{
"name": "symfony/polyfill-intl-idn",
- "version": "v1.33.0",
+ "version": "v1.38.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-idn.git",
- "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3"
+ "reference": "dc21118016c039a66235cf93d96b435ffb282412"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/9614ac4d8061dc257ecc64cba1b140873dce8ad3",
- "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/dc21118016c039a66235cf93d96b435ffb282412",
+ "reference": "dc21118016c039a66235cf93d96b435ffb282412",
"shasum": ""
},
"require": {
@@ -5736,7 +5750,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.33.0"
+ "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.38.1"
},
"funding": [
{
@@ -5756,20 +5770,20 @@
"type": "tidelift"
}
],
- "time": "2024-09-10T14:38:51+00:00"
+ "time": "2026-05-25T15:22:23+00:00"
},
{
"name": "symfony/polyfill-intl-normalizer",
- "version": "v1.33.0",
+ "version": "v1.38.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
- "reference": "3833d7255cc303546435cb650316bff708a1c75c"
+ "reference": "2d446c214bdbe5b71bde5011b060a05fece3ae6b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c",
- "reference": "3833d7255cc303546435cb650316bff708a1c75c",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/2d446c214bdbe5b71bde5011b060a05fece3ae6b",
+ "reference": "2d446c214bdbe5b71bde5011b060a05fece3ae6b",
"shasum": ""
},
"require": {
@@ -5821,7 +5835,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0"
+ "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.38.0"
},
"funding": [
{
@@ -5841,20 +5855,20 @@
"type": "tidelift"
}
],
- "time": "2024-09-09T11:45:10+00:00"
+ "time": "2026-05-25T13:48:31+00:00"
},
{
"name": "symfony/polyfill-mbstring",
- "version": "v1.33.0",
+ "version": "v1.38.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493"
+ "reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493",
- "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6",
+ "reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6",
"shasum": ""
},
"require": {
@@ -5906,7 +5920,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0"
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.38.2"
},
"funding": [
{
@@ -5926,20 +5940,20 @@
"type": "tidelift"
}
],
- "time": "2024-12-23T08:48:59+00:00"
+ "time": "2026-05-27T06:59:30+00:00"
},
{
"name": "symfony/polyfill-php80",
- "version": "v1.33.0",
+ "version": "v1.37.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php80.git",
- "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608"
+ "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608",
- "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608",
+ "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dfb55726c3a76ea3b6459fcfda1ec2d80a682411",
+ "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411",
"shasum": ""
},
"require": {
@@ -5990,7 +6004,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php80/tree/v1.33.0"
+ "source": "https://github.com/symfony/polyfill-php80/tree/v1.37.0"
},
"funding": [
{
@@ -6010,20 +6024,20 @@
"type": "tidelift"
}
],
- "time": "2025-01-02T08:10:11+00:00"
+ "time": "2026-04-10T16:19:22+00:00"
},
{
"name": "symfony/polyfill-php83",
- "version": "v1.33.0",
+ "version": "v1.38.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php83.git",
- "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5"
+ "reference": "796a26abb75ce49f3a84433cd81bf1009d73d5f8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/17f6f9a6b1735c0f163024d959f700cfbc5155e5",
- "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5",
+ "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/796a26abb75ce49f3a84433cd81bf1009d73d5f8",
+ "reference": "796a26abb75ce49f3a84433cd81bf1009d73d5f8",
"shasum": ""
},
"require": {
@@ -6070,7 +6084,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php83/tree/v1.33.0"
+ "source": "https://github.com/symfony/polyfill-php83/tree/v1.38.2"
},
"funding": [
{
@@ -6090,20 +6104,20 @@
"type": "tidelift"
}
],
- "time": "2025-07-08T02:45:35+00:00"
+ "time": "2026-05-27T06:51:48+00:00"
},
{
"name": "symfony/polyfill-php84",
- "version": "v1.33.0",
+ "version": "v1.38.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php84.git",
- "reference": "d8ced4d875142b6a7426000426b8abc631d6b191"
+ "reference": "f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/d8ced4d875142b6a7426000426b8abc631d6b191",
- "reference": "d8ced4d875142b6a7426000426b8abc631d6b191",
+ "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa",
+ "reference": "f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa",
"shasum": ""
},
"require": {
@@ -6150,7 +6164,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php84/tree/v1.33.0"
+ "source": "https://github.com/symfony/polyfill-php84/tree/v1.38.1"
},
"funding": [
{
@@ -6170,20 +6184,20 @@
"type": "tidelift"
}
],
- "time": "2025-06-24T13:30:11+00:00"
+ "time": "2026-05-26T12:51:13+00:00"
},
{
"name": "symfony/polyfill-php85",
- "version": "v1.33.0",
+ "version": "v1.38.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php85.git",
- "reference": "d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91"
+ "reference": "ba2ba04f3352cfa2dcbbcb90aee13ed967f505b1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91",
- "reference": "d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91",
+ "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/ba2ba04f3352cfa2dcbbcb90aee13ed967f505b1",
+ "reference": "ba2ba04f3352cfa2dcbbcb90aee13ed967f505b1",
"shasum": ""
},
"require": {
@@ -6230,7 +6244,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php85/tree/v1.33.0"
+ "source": "https://github.com/symfony/polyfill-php85/tree/v1.38.1"
},
"funding": [
{
@@ -6250,20 +6264,20 @@
"type": "tidelift"
}
],
- "time": "2025-06-23T16:12:55+00:00"
+ "time": "2026-05-26T02:25:22+00:00"
},
{
"name": "symfony/polyfill-uuid",
- "version": "v1.33.0",
+ "version": "v1.37.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-uuid.git",
- "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2"
+ "reference": "26dfec253c4cf3e51b541b52ddf7e42cb0908e94"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/21533be36c24be3f4b1669c4725c7d1d2bab4ae2",
- "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2",
+ "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/26dfec253c4cf3e51b541b52ddf7e42cb0908e94",
+ "reference": "26dfec253c4cf3e51b541b52ddf7e42cb0908e94",
"shasum": ""
},
"require": {
@@ -6313,7 +6327,7 @@
"uuid"
],
"support": {
- "source": "https://github.com/symfony/polyfill-uuid/tree/v1.33.0"
+ "source": "https://github.com/symfony/polyfill-uuid/tree/v1.37.0"
},
"funding": [
{
@@ -6333,20 +6347,20 @@
"type": "tidelift"
}
],
- "time": "2024-09-09T11:45:10+00:00"
+ "time": "2026-04-10T16:19:22+00:00"
},
{
"name": "symfony/process",
- "version": "v7.4.8",
+ "version": "v7.4.13",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
- "reference": "60f19cd3badc8de688421e21e4305eba50f8089a"
+ "reference": "f5804be144caceb570f6747519999636b664f24c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/60f19cd3badc8de688421e21e4305eba50f8089a",
- "reference": "60f19cd3badc8de688421e21e4305eba50f8089a",
+ "url": "https://api.github.com/repos/symfony/process/zipball/f5804be144caceb570f6747519999636b664f24c",
+ "reference": "f5804be144caceb570f6747519999636b664f24c",
"shasum": ""
},
"require": {
@@ -6378,7 +6392,7 @@
"description": "Executes commands in sub-processes",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/process/tree/v7.4.8"
+ "source": "https://github.com/symfony/process/tree/v7.4.13"
},
"funding": [
{
@@ -6398,20 +6412,20 @@
"type": "tidelift"
}
],
- "time": "2026-03-24T13:12:05+00:00"
+ "time": "2026-05-23T16:05:06+00:00"
},
{
"name": "symfony/routing",
- "version": "v7.4.8",
+ "version": "v7.4.13",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
- "reference": "9608de9873ec86e754fb6c0a0fa7e5f1a960eb6b"
+ "reference": "3a162171bb008e5e0f15dce6581373a4c0e8390d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/routing/zipball/9608de9873ec86e754fb6c0a0fa7e5f1a960eb6b",
- "reference": "9608de9873ec86e754fb6c0a0fa7e5f1a960eb6b",
+ "url": "https://api.github.com/repos/symfony/routing/zipball/3a162171bb008e5e0f15dce6581373a4c0e8390d",
+ "reference": "3a162171bb008e5e0f15dce6581373a4c0e8390d",
"shasum": ""
},
"require": {
@@ -6463,7 +6477,7 @@
"url"
],
"support": {
- "source": "https://github.com/symfony/routing/tree/v7.4.8"
+ "source": "https://github.com/symfony/routing/tree/v7.4.13"
},
"funding": [
{
@@ -6483,20 +6497,20 @@
"type": "tidelift"
}
],
- "time": "2026-03-24T13:12:05+00:00"
+ "time": "2026-05-24T11:20:33+00:00"
},
{
"name": "symfony/service-contracts",
- "version": "v3.6.1",
+ "version": "v3.7.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/service-contracts.git",
- "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43"
+ "reference": "d25d82433a80eba6aa0e6c24b61d7370d99e444a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/service-contracts/zipball/45112560a3ba2d715666a509a0bc9521d10b6c43",
- "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d25d82433a80eba6aa0e6c24b61d7370d99e444a",
+ "reference": "d25d82433a80eba6aa0e6c24b61d7370d99e444a",
"shasum": ""
},
"require": {
@@ -6514,7 +6528,7 @@
"name": "symfony/contracts"
},
"branch-alias": {
- "dev-main": "3.6-dev"
+ "dev-main": "3.7-dev"
}
},
"autoload": {
@@ -6550,7 +6564,7 @@
"standards"
],
"support": {
- "source": "https://github.com/symfony/service-contracts/tree/v3.6.1"
+ "source": "https://github.com/symfony/service-contracts/tree/v3.7.0"
},
"funding": [
{
@@ -6570,24 +6584,24 @@
"type": "tidelift"
}
],
- "time": "2025-07-15T11:30:57+00:00"
+ "time": "2026-03-28T09:44:51+00:00"
},
{
"name": "symfony/string",
- "version": "v8.0.8",
+ "version": "v8.1.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
- "reference": "ae9488f874d7603f9d2dfbf120203882b645d963"
+ "reference": "afd5944f4005862d961efb85c8bbd5c523c4e3c9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/string/zipball/ae9488f874d7603f9d2dfbf120203882b645d963",
- "reference": "ae9488f874d7603f9d2dfbf120203882b645d963",
+ "url": "https://api.github.com/repos/symfony/string/zipball/afd5944f4005862d961efb85c8bbd5c523c4e3c9",
+ "reference": "afd5944f4005862d961efb85c8bbd5c523c4e3c9",
"shasum": ""
},
"require": {
- "php": ">=8.4",
+ "php": ">=8.4.1",
"symfony/polyfill-ctype": "^1.8",
"symfony/polyfill-intl-grapheme": "^1.33",
"symfony/polyfill-intl-normalizer": "^1.0",
@@ -6640,7 +6654,7 @@
"utf8"
],
"support": {
- "source": "https://github.com/symfony/string/tree/v8.0.8"
+ "source": "https://github.com/symfony/string/tree/v8.1.0"
},
"funding": [
{
@@ -6660,24 +6674,24 @@
"type": "tidelift"
}
],
- "time": "2026-03-30T15:14:47+00:00"
+ "time": "2026-05-29T05:06:50+00:00"
},
{
"name": "symfony/translation",
- "version": "v8.0.8",
+ "version": "v8.1.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
- "reference": "27c03ae3940de24ba2f71cfdbac824f2aa1fdf2f"
+ "reference": "b2bd012ca28c4acae830ee1206a5b6e35dd99693"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/translation/zipball/27c03ae3940de24ba2f71cfdbac824f2aa1fdf2f",
- "reference": "27c03ae3940de24ba2f71cfdbac824f2aa1fdf2f",
+ "url": "https://api.github.com/repos/symfony/translation/zipball/b2bd012ca28c4acae830ee1206a5b6e35dd99693",
+ "reference": "b2bd012ca28c4acae830ee1206a5b6e35dd99693",
"shasum": ""
},
"require": {
- "php": ">=8.4",
+ "php": ">=8.4.1",
"symfony/polyfill-mbstring": "^1.0",
"symfony/translation-contracts": "^3.6.1"
},
@@ -6733,7 +6747,7 @@
"description": "Provides tools to internationalize your application",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/translation/tree/v8.0.8"
+ "source": "https://github.com/symfony/translation/tree/v8.1.0"
},
"funding": [
{
@@ -6753,20 +6767,20 @@
"type": "tidelift"
}
],
- "time": "2026-03-30T15:14:47+00:00"
+ "time": "2026-05-29T05:06:50+00:00"
},
{
"name": "symfony/translation-contracts",
- "version": "v3.6.1",
+ "version": "v3.7.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation-contracts.git",
- "reference": "65a8bc82080447fae78373aa10f8d13b38338977"
+ "reference": "0ab302977a952b42fd51475c4ebac81f8da0a95d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/65a8bc82080447fae78373aa10f8d13b38338977",
- "reference": "65a8bc82080447fae78373aa10f8d13b38338977",
+ "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/0ab302977a952b42fd51475c4ebac81f8da0a95d",
+ "reference": "0ab302977a952b42fd51475c4ebac81f8da0a95d",
"shasum": ""
},
"require": {
@@ -6779,7 +6793,7 @@
"name": "symfony/contracts"
},
"branch-alias": {
- "dev-main": "3.6-dev"
+ "dev-main": "3.7-dev"
}
},
"autoload": {
@@ -6815,7 +6829,7 @@
"standards"
],
"support": {
- "source": "https://github.com/symfony/translation-contracts/tree/v3.6.1"
+ "source": "https://github.com/symfony/translation-contracts/tree/v3.7.0"
},
"funding": [
{
@@ -6835,20 +6849,20 @@
"type": "tidelift"
}
],
- "time": "2025-07-15T13:41:35+00:00"
+ "time": "2026-01-05T13:30:16+00:00"
},
{
"name": "symfony/uid",
- "version": "v7.4.8",
+ "version": "v7.4.9",
"source": {
"type": "git",
"url": "https://github.com/symfony/uid.git",
- "reference": "6883ebdf7bf6a12b37519dbc0df62b0222401b56"
+ "reference": "2676b524340abcfe4d6151ec698463cebafee439"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/uid/zipball/6883ebdf7bf6a12b37519dbc0df62b0222401b56",
- "reference": "6883ebdf7bf6a12b37519dbc0df62b0222401b56",
+ "url": "https://api.github.com/repos/symfony/uid/zipball/2676b524340abcfe4d6151ec698463cebafee439",
+ "reference": "2676b524340abcfe4d6151ec698463cebafee439",
"shasum": ""
},
"require": {
@@ -6893,7 +6907,7 @@
"uuid"
],
"support": {
- "source": "https://github.com/symfony/uid/tree/v7.4.8"
+ "source": "https://github.com/symfony/uid/tree/v7.4.9"
},
"funding": [
{
@@ -6913,7 +6927,7 @@
"type": "tidelift"
}
],
- "time": "2026-03-24T13:12:05+00:00"
+ "time": "2026-04-30T15:19:22+00:00"
},
{
"name": "symfony/var-dumper",
@@ -7059,16 +7073,16 @@
},
{
"name": "uspdev/cadastros-auxiliares-client",
- "version": "1.0.2",
+ "version": "1.0.3",
"source": {
"type": "git",
"url": "https://github.com/uspdev/cadastros-auxiliares-client.git",
- "reference": "d0c8d057b73cb48ff483c24982996a7d201ceeaa"
+ "reference": "a809913f1f484306c9219056b2aa31c19a711ece"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/uspdev/cadastros-auxiliares-client/zipball/d0c8d057b73cb48ff483c24982996a7d201ceeaa",
- "reference": "d0c8d057b73cb48ff483c24982996a7d201ceeaa",
+ "url": "https://api.github.com/repos/uspdev/cadastros-auxiliares-client/zipball/a809913f1f484306c9219056b2aa31c19a711ece",
+ "reference": "a809913f1f484306c9219056b2aa31c19a711ece",
"shasum": ""
},
"require": {
@@ -7097,22 +7111,22 @@
"description": "Laravel client for cadastros-auxiliares webservice endpoints",
"support": {
"issues": "https://github.com/uspdev/cadastros-auxiliares-client/issues",
- "source": "https://github.com/uspdev/cadastros-auxiliares-client/tree/1.0.2"
+ "source": "https://github.com/uspdev/cadastros-auxiliares-client/tree/1.0.3"
},
- "time": "2026-03-25T19:47:58+00:00"
+ "time": "2026-04-02T19:55:48+00:00"
},
{
"name": "uspdev/laravel-usp-theme",
- "version": "2.8.27",
+ "version": "2.8.31",
"source": {
"type": "git",
"url": "https://github.com/uspdev/laravel-usp-theme.git",
- "reference": "75f09e02929d5588bd26f9ccad8f7b5300cb7162"
+ "reference": "b92895d08cd3caf36fc5e4b73cadcc424919ee10"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/uspdev/laravel-usp-theme/zipball/75f09e02929d5588bd26f9ccad8f7b5300cb7162",
- "reference": "75f09e02929d5588bd26f9ccad8f7b5300cb7162",
+ "url": "https://api.github.com/repos/uspdev/laravel-usp-theme/zipball/b92895d08cd3caf36fc5e4b73cadcc424919ee10",
+ "reference": "b92895d08cd3caf36fc5e4b73cadcc424919ee10",
"shasum": ""
},
"require": {
@@ -7150,9 +7164,9 @@
"description": "usp theme for laravel",
"support": {
"issues": "https://github.com/uspdev/laravel-usp-theme/issues",
- "source": "https://github.com/uspdev/laravel-usp-theme/tree/2.8.27"
+ "source": "https://github.com/uspdev/laravel-usp-theme/tree/2.8.31"
},
- "time": "2026-03-27T14:35:42+00:00"
+ "time": "2026-06-03T19:05:14+00:00"
},
{
"name": "uspdev/senhaunica-socialite",
@@ -7297,23 +7311,23 @@
},
{
"name": "voku/portable-ascii",
- "version": "2.0.3",
+ "version": "2.1.1",
"source": {
"type": "git",
"url": "https://github.com/voku/portable-ascii.git",
- "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d"
+ "reference": "8e1051fe39379367aecf014f41744ce7539a856f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b1d923f88091c6bf09699efcd7c8a1b1bfd7351d",
- "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d",
+ "url": "https://api.github.com/repos/voku/portable-ascii/zipball/8e1051fe39379367aecf014f41744ce7539a856f",
+ "reference": "8e1051fe39379367aecf014f41744ce7539a856f",
"shasum": ""
},
"require": {
- "php": ">=7.0.0"
+ "php": ">=7.1.0"
},
"require-dev": {
- "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0"
+ "phpunit/phpunit": "~8.5 || ~9.6 || ~10.5 || ~11.5"
},
"suggest": {
"ext-intl": "Use Intl for transliterator_transliterate() support"
@@ -7343,7 +7357,7 @@
],
"support": {
"issues": "https://github.com/voku/portable-ascii/issues",
- "source": "https://github.com/voku/portable-ascii/tree/2.0.3"
+ "source": "https://github.com/voku/portable-ascii/tree/2.1.1"
},
"funding": [
{
@@ -7367,7 +7381,7 @@
"type": "tidelift"
}
],
- "time": "2024-11-21T01:49:47+00:00"
+ "time": "2026-04-26T05:33:54+00:00"
}
],
"packages-dev": [
@@ -7556,18 +7570,92 @@
},
"time": "2025-04-30T06:54:44+00:00"
},
+ {
+ "name": "laravel/dusk",
+ "version": "v8.6.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laravel/dusk.git",
+ "reference": "e7fd48762c6a82ad2cd311db07587aa2a97ce143"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laravel/dusk/zipball/e7fd48762c6a82ad2cd311db07587aa2a97ce143",
+ "reference": "e7fd48762c6a82ad2cd311db07587aa2a97ce143",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "ext-zip": "*",
+ "guzzlehttp/guzzle": "^7.5",
+ "illuminate/console": "^10.0|^11.0|^12.0|^13.0",
+ "illuminate/support": "^10.0|^11.0|^12.0|^13.0",
+ "php": "^8.1",
+ "php-webdriver/webdriver": "^1.15.2",
+ "symfony/console": "^6.2|^7.0|^8.0",
+ "symfony/finder": "^6.2|^7.0|^8.0",
+ "symfony/process": "^6.2|^7.0|^8.0",
+ "vlucas/phpdotenv": "^5.2"
+ },
+ "require-dev": {
+ "laravel/framework": "^10.0|^11.0|^12.0|^13.0",
+ "mockery/mockery": "^1.6",
+ "orchestra/testbench-core": "^8.19|^9.17|^10.8|^11.0",
+ "phpstan/phpstan": "^1.10",
+ "phpunit/phpunit": "^10.1|^11.0|^12.0.1",
+ "psy/psysh": "^0.11.12|^0.12",
+ "symfony/yaml": "^6.2|^7.0|^8.0"
+ },
+ "suggest": {
+ "ext-pcntl": "Used to gracefully terminate Dusk when tests are running."
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Laravel\\Dusk\\DuskServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Laravel\\Dusk\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "Laravel Dusk provides simple end-to-end testing and browser automation.",
+ "keywords": [
+ "laravel",
+ "testing",
+ "webdriver"
+ ],
+ "support": {
+ "issues": "https://github.com/laravel/dusk/issues",
+ "source": "https://github.com/laravel/dusk/tree/v8.6.0"
+ },
+ "time": "2026-04-15T14:50:40+00:00"
+ },
{
"name": "laravel/pail",
- "version": "v1.2.6",
+ "version": "v1.2.7",
"source": {
"type": "git",
"url": "https://github.com/laravel/pail.git",
- "reference": "aa71a01c309e7f66bc2ec4fb1a59291b82eb4abf"
+ "reference": "2f7d27dada8effc48b8c424445a69cca7007daaa"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/pail/zipball/aa71a01c309e7f66bc2ec4fb1a59291b82eb4abf",
- "reference": "aa71a01c309e7f66bc2ec4fb1a59291b82eb4abf",
+ "url": "https://api.github.com/repos/laravel/pail/zipball/2f7d27dada8effc48b8c424445a69cca7007daaa",
+ "reference": "2f7d27dada8effc48b8c424445a69cca7007daaa",
"shasum": ""
},
"require": {
@@ -7634,20 +7722,20 @@
"issues": "https://github.com/laravel/pail/issues",
"source": "https://github.com/laravel/pail"
},
- "time": "2026-02-09T13:44:54+00:00"
+ "time": "2026-05-20T22:24:57+00:00"
},
{
"name": "laravel/pint",
- "version": "v1.29.0",
+ "version": "v1.29.1",
"source": {
"type": "git",
"url": "https://github.com/laravel/pint.git",
- "reference": "bdec963f53172c5e36330f3a400604c69bf02d39"
+ "reference": "0770e9b7fafd50d4586881d456d6eb41c9247a80"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/pint/zipball/bdec963f53172c5e36330f3a400604c69bf02d39",
- "reference": "bdec963f53172c5e36330f3a400604c69bf02d39",
+ "url": "https://api.github.com/repos/laravel/pint/zipball/0770e9b7fafd50d4586881d456d6eb41c9247a80",
+ "reference": "0770e9b7fafd50d4586881d456d6eb41c9247a80",
"shasum": ""
},
"require": {
@@ -7658,14 +7746,14 @@
"php": "^8.2.0"
},
"require-dev": {
- "friendsofphp/php-cs-fixer": "^3.94.2",
- "illuminate/view": "^12.54.1",
- "larastan/larastan": "^3.9.3",
- "laravel-zero/framework": "^12.0.5",
+ "friendsofphp/php-cs-fixer": "^3.95.1",
+ "illuminate/view": "^12.56.0",
+ "larastan/larastan": "^3.9.6",
+ "laravel-zero/framework": "^12.1.0",
"mockery/mockery": "^1.6.12",
"nunomaduro/termwind": "^2.4.0",
"pestphp/pest": "^3.8.6",
- "shipfastlabs/agent-detector": "^1.1.0"
+ "shipfastlabs/agent-detector": "^1.1.3"
},
"bin": [
"builds/pint"
@@ -7702,20 +7790,20 @@
"issues": "https://github.com/laravel/pint/issues",
"source": "https://github.com/laravel/pint"
},
- "time": "2026-03-12T15:51:39+00:00"
+ "time": "2026-04-20T15:26:14+00:00"
},
{
"name": "laravel/sail",
- "version": "v1.56.0",
+ "version": "v1.62.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/sail.git",
- "reference": "f43426bb42a1cb7a51a3861d9138063e54766d28"
+ "reference": "3aaeefc979f8ba6586fbc5b6e0b1b3638058f98e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/sail/zipball/f43426bb42a1cb7a51a3861d9138063e54766d28",
- "reference": "f43426bb42a1cb7a51a3861d9138063e54766d28",
+ "url": "https://api.github.com/repos/laravel/sail/zipball/3aaeefc979f8ba6586fbc5b6e0b1b3638058f98e",
+ "reference": "3aaeefc979f8ba6586fbc5b6e0b1b3638058f98e",
"shasum": ""
},
"require": {
@@ -7765,7 +7853,7 @@
"issues": "https://github.com/laravel/sail/issues",
"source": "https://github.com/laravel/sail"
},
- "time": "2026-04-01T15:17:32+00:00"
+ "time": "2026-05-27T04:02:01+00:00"
},
{
"name": "mockery/mockery",
@@ -7912,23 +8000,23 @@
},
{
"name": "nunomaduro/collision",
- "version": "v8.9.2",
+ "version": "v8.9.4",
"source": {
"type": "git",
"url": "https://github.com/nunomaduro/collision.git",
- "reference": "6eb16883e74fd725ac64dbe81544c961ab448ba5"
+ "reference": "716af8f95a470e9094cfca09ed897b023be191a5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nunomaduro/collision/zipball/6eb16883e74fd725ac64dbe81544c961ab448ba5",
- "reference": "6eb16883e74fd725ac64dbe81544c961ab448ba5",
+ "url": "https://api.github.com/repos/nunomaduro/collision/zipball/716af8f95a470e9094cfca09ed897b023be191a5",
+ "reference": "716af8f95a470e9094cfca09ed897b023be191a5",
"shasum": ""
},
"require": {
"filp/whoops": "^2.18.4",
"nunomaduro/termwind": "^2.4.0",
"php": "^8.2.0",
- "symfony/console": "^7.4.8 || ^8.0.4"
+ "symfony/console": "^7.4.8 || ^8.0.8"
},
"conflict": {
"laravel/framework": "<11.48.0 || >=14.0.0",
@@ -7936,12 +8024,12 @@
},
"require-dev": {
"brianium/paratest": "^7.8.5",
- "larastan/larastan": "^3.9.3",
- "laravel/framework": "^11.48.0 || ^12.56.0 || ^13.2.0",
- "laravel/pint": "^1.29.0",
- "orchestra/testbench-core": "^9.12.0 || ^10.12.1 || ^11.0.0",
+ "larastan/larastan": "^3.9.6",
+ "laravel/framework": "^11.48.0 || ^12.56.0 || ^13.5.0",
+ "laravel/pint": "^1.29.1",
+ "orchestra/testbench-core": "^9.12.0 || ^10.12.1 || ^11.2.1",
"pestphp/pest": "^3.8.5 || ^4.4.3 || ^5.0.0",
- "sebastian/environment": "^7.2.1 || ^8.0.4 || ^9.0.0"
+ "sebastian/environment": "^7.2.1 || ^8.0.4 || ^9.3.0"
},
"type": "library",
"extra": {
@@ -8004,7 +8092,7 @@
"type": "patreon"
}
],
- "time": "2026-03-31T21:51:27+00:00"
+ "time": "2026-04-21T14:04:20+00:00"
},
{
"name": "phar-io/manifest",
@@ -8124,6 +8212,72 @@
},
"time": "2022-02-21T01:04:05+00:00"
},
+ {
+ "name": "php-webdriver/webdriver",
+ "version": "1.16.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-webdriver/php-webdriver.git",
+ "reference": "ac0662863aa120b4f645869f584013e4c4dba46a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-webdriver/php-webdriver/zipball/ac0662863aa120b4f645869f584013e4c4dba46a",
+ "reference": "ac0662863aa120b4f645869f584013e4c4dba46a",
+ "shasum": ""
+ },
+ "require": {
+ "ext-curl": "*",
+ "ext-json": "*",
+ "ext-zip": "*",
+ "php": "^7.3 || ^8.0",
+ "symfony/polyfill-mbstring": "^1.12",
+ "symfony/process": "^5.0 || ^6.0 || ^7.0 || ^8.0"
+ },
+ "replace": {
+ "facebook/webdriver": "*"
+ },
+ "require-dev": {
+ "ergebnis/composer-normalize": "^2.20.0",
+ "ondram/ci-detector": "^4.0",
+ "php-coveralls/php-coveralls": "^2.4",
+ "php-mock/php-mock-phpunit": "^2.0",
+ "php-parallel-lint/php-parallel-lint": "^1.2",
+ "phpunit/phpunit": "^9.3",
+ "squizlabs/php_codesniffer": "^3.5",
+ "symfony/var-dumper": "^5.0 || ^6.0 || ^7.0 || ^8.0"
+ },
+ "suggest": {
+ "ext-simplexml": "For Firefox profile creation"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "lib/Exception/TimeoutException.php"
+ ],
+ "psr-4": {
+ "Facebook\\WebDriver\\": "lib/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A PHP client for Selenium WebDriver. Previously facebook/webdriver.",
+ "homepage": "https://github.com/php-webdriver/php-webdriver",
+ "keywords": [
+ "Chromedriver",
+ "geckodriver",
+ "php",
+ "selenium",
+ "webdriver"
+ ],
+ "support": {
+ "issues": "https://github.com/php-webdriver/php-webdriver/issues",
+ "source": "https://github.com/php-webdriver/php-webdriver/tree/1.16.0"
+ },
+ "time": "2025-12-28T23:57:40+00:00"
+ },
{
"name": "phpunit/php-code-coverage",
"version": "11.0.12",
@@ -9621,27 +9775,28 @@
},
{
"name": "symfony/yaml",
- "version": "v8.0.8",
+ "version": "v8.1.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
- "reference": "54174ab48c0c0f9e21512b304be17f8150ccf8f1"
+ "reference": "efb42bd2c6f4f3ccfd4683583449938b5fc146b0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/yaml/zipball/54174ab48c0c0f9e21512b304be17f8150ccf8f1",
- "reference": "54174ab48c0c0f9e21512b304be17f8150ccf8f1",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/efb42bd2c6f4f3ccfd4683583449938b5fc146b0",
+ "reference": "efb42bd2c6f4f3ccfd4683583449938b5fc146b0",
"shasum": ""
},
"require": {
- "php": ">=8.4",
+ "php": ">=8.4.1",
"symfony/polyfill-ctype": "^1.8"
},
"conflict": {
"symfony/console": "<7.4"
},
"require-dev": {
- "symfony/console": "^7.4|^8.0"
+ "symfony/console": "^7.4|^8.0",
+ "yaml/yaml-test-suite": "*"
},
"bin": [
"Resources/bin/yaml-lint"
@@ -9672,7 +9827,7 @@
"description": "Loads and dumps YAML files",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/yaml/tree/v8.0.8"
+ "source": "https://github.com/symfony/yaml/tree/v8.1.0"
},
"funding": [
{
@@ -9692,7 +9847,7 @@
"type": "tidelift"
}
],
- "time": "2026-03-30T15:14:47+00:00"
+ "time": "2026-05-29T05:06:50+00:00"
},
{
"name": "theseer/tokenizer",
@@ -9754,5 +9909,5 @@
"php": "^8.2"
},
"platform-dev": {},
- "plugin-api-version": "2.6.0"
+ "plugin-api-version": "2.9.0"
}
diff --git a/config/laravel-usp-theme.php b/config/laravel-usp-theme.php
index fa68f26..c9e5479 100644
--- a/config/laravel-usp-theme.php
+++ b/config/laravel-usp-theme.php
@@ -1,5 +1,31 @@
'Imagens',
+ 'url' => '/dockerimages',
+ 'can' => 'user'
+ ],
+ [
+ 'text' => 'Cadastrar nova imagem',
+ 'url' => '/dockerimages/create',
+ 'can' => 'user'
+ ]
+];
+
+$appsMenu = [
+ [
+ 'text' => 'Meus Apps',
+ 'url' => config('app.url') . '/webapps',
+ 'can' => 'user'
+ ],
+ [
+ 'text' => 'Cadastrar App',
+ 'url' => config('app.url') . '/webapps/create',
+ 'can' => 'user'
+ ]
+];
+
$menu = [
[
'text' => ' Home',
@@ -10,15 +36,15 @@
'key' => 'menu_dinamico',
],
[
- 'text' => 'Meus Apps',
- 'url' => config('app.url') . '/webapps',
+ 'text' => 'Apps',
'can' => 'user',
+ 'submenu' => $appsMenu
],
[
- 'text' => 'Cadastrar App',
- 'url' => config('app.url') . '/webapps/create', // com caminho absoluto
+ 'text' => 'Docker',
'can' => 'user',
- ],
+ 'submenu' => $dockerMenu
+ ]
];
diff --git a/database/migrations/2026_04_02_152155_create_webapps_table.php b/database/migrations/2026_06_19_130007_create_apps_table.php
similarity index 58%
rename from database/migrations/2026_04_02_152155_create_webapps_table.php
rename to database/migrations/2026_06_19_130007_create_apps_table.php
index 62c1226..077573d 100644
--- a/database/migrations/2026_04_02_152155_create_webapps_table.php
+++ b/database/migrations/2026_06_19_130007_create_apps_table.php
@@ -11,20 +11,16 @@
*/
public function up(): void
{
- Schema::create('webapps', function (Blueprint $table) {
+ Schema::create('apps', function (Blueprint $table) {
$table->id();
+ $table->string('name');
$table->string('dominio');
- $table->string('url_github')->nullable();
$table->string('justificativa');
$table->string('tipo');
$table->string('status')->default('Solicitado');
$table->foreignId('user_id')->constrained();
- $table->string('database_username')->nullable();
- $table->string('database_name')->nullable();
- $table->string('database_password')->nullable();
- $table->string('bucket_username')->nullable();
- $table->string('bucket_password')->nullable();
- $table->string('bucket_name')->nullable();
+ $table->foreignId('image_id')->nullable();
+ $table->string('stack')->nullable()->unique();
$table->string('version')->nullable();
$table->timestamps();
});
@@ -35,6 +31,6 @@ public function up(): void
*/
public function down(): void
{
- Schema::dropIfExists('webapps');
+ Schema::dropIfExists('apps');
}
};
diff --git a/database/migrations/2026_06_19_130014_create_images_table.php b/database/migrations/2026_06_19_130014_create_images_table.php
new file mode 100644
index 0000000..b62e06c
--- /dev/null
+++ b/database/migrations/2026_06_19_130014_create_images_table.php
@@ -0,0 +1,30 @@
+id();
+ $table->string('name')->unique();
+ $table->string('path');
+ $table->string('tag');
+ $table->timestamps();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ public function down(): void
+ {
+ Schema::dropIfExists('images');
+ }
+};
diff --git a/database/migrations/2026_06_19_130033_create_image_variables_table.php b/database/migrations/2026_06_19_130033_create_image_variables_table.php
new file mode 100644
index 0000000..64b4471
--- /dev/null
+++ b/database/migrations/2026_06_19_130033_create_image_variables_table.php
@@ -0,0 +1,29 @@
+id();
+ $table->foreignId('image_id')->constrained();
+ $table->string('name');
+ $table->timestamps();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ public function down(): void
+ {
+ Schema::dropIfExists('image_variables');
+ }
+};
diff --git a/database/migrations/2026_06_19_130047_create_app_variables_table.php b/database/migrations/2026_06_19_130047_create_app_variables_table.php
new file mode 100644
index 0000000..ea0b216
--- /dev/null
+++ b/database/migrations/2026_06_19_130047_create_app_variables_table.php
@@ -0,0 +1,30 @@
+id();
+ $table->foreignId('app_id')->constrained();
+ $table->foreignId('image_variable_id')->constrained();
+ $table->string('value')->nullable();
+ $table->timestamps();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ public function down(): void
+ {
+ Schema::dropIfExists('app_variables');
+ }
+};
diff --git a/database/migrations/2026_06_25_133240_create_app_databases_table.php b/database/migrations/2026_06_25_133240_create_app_databases_table.php
new file mode 100644
index 0000000..06630ce
--- /dev/null
+++ b/database/migrations/2026_06_25_133240_create_app_databases_table.php
@@ -0,0 +1,31 @@
+id();
+ $table->foreignId('app_id')->constrained();
+ $table->string('name');
+ $table->string('username');
+ $table->string('password');
+ $table->timestamps();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ public function down(): void
+ {
+ Schema::dropIfExists('app_databases');
+ }
+};
diff --git a/database/migrations/2026_06_25_133250_create_buckets_table.php b/database/migrations/2026_06_25_133250_create_buckets_table.php
new file mode 100644
index 0000000..41724c7
--- /dev/null
+++ b/database/migrations/2026_06_25_133250_create_buckets_table.php
@@ -0,0 +1,31 @@
+id();
+ $table->foreignId('app_id')->constrained();
+ $table->string('name');
+ $table->string('key');
+ $table->string('secret');
+ $table->timestamps();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ public function down(): void
+ {
+ Schema::dropIfExists('buckets');
+ }
+};
diff --git a/docker-compose.yml b/docker-compose.yml
index 2267126..498b3c8 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -25,10 +25,21 @@ services:
MYSQL_ROOT_PASSWORD: webapps
networks:
- webapps-network
+ volumes:
+ - ./docker/db/init.sql:/docker-entrypoint-initdb.d/init.sql
+
+ selenium:
+ image: selenium/standalone-chrome
+ container_name: webapps_selenium
+ ports:
+ - "7900:7900" # VNC (pra ver o browser rodando)
+ networks:
+ - webapps-network
+ shm_size: 2gb
senhaunica-faker:
image: uspdev/senhaunica-faker
- container_name: cursolaravel_senhaunica-faker
+ container_name: webapps_senhaunica-faker
ports:
- "3141:3141"
environment:
@@ -38,15 +49,6 @@ services:
aliases:
- auth.local
- selenium:
- image: selenium/standalone-chrome
- container_name: webapps_selenium
- ports:
- - "7900:7900" # VNC (pra ver o browser rodando)
- networks:
- - webapps-network
- shm_size: 2gb
-
gwmariadb:
image: ghcr.io/fflch/gwmariadb:latest
container_name: webapps_gwmariadb
@@ -57,27 +59,27 @@ services:
environment:
TOKEN: 123
DB_HOST: mariadb
- DB_NAME: webapps
- DB_USER: webapps
- DB_PASS: webapps
+ DB_NAME: admin
+ DB_USER: admin
+ DB_PASS: admin
DB_PORT: 3306
rustfs:
- image: rustfs/rustfs:latest
- container_name: webapps_rustfs
- ports:
- - "9100:9000" # API S3 (para enviar arquivos com PHP)
- - "9101:9001" # Console Web
- environment:
- - RUSTFS_VOLUMES=/data
- - RUSTFS_ADDRESS=0.0.0.0:9000
- - RUSTFS_CONSOLE_ADDRESS=0.0.0.0:9001
- - RUSTFS_CONSOLE_ENABLE=true
- # Defina aqui as chaves de acesso para a API e o Console
- - RUSTFS_ACCESS_KEY=rustfsadmin
- - RUSTFS_SECRET_KEY=rustfsadmin123
- networks:
- - webapps-network
+ image: rustfs/rustfs:latest
+ container_name: webapps_rustfs
+ ports:
+ - "9100:9000" # API S3 (para enviar arquivos com PHP)
+ - "9101:9001" # Console Web
+ environment:
+ - RUSTFS_VOLUMES=/data
+ - RUSTFS_ADDRESS=0.0.0.0:9000
+ - RUSTFS_CONSOLE_ADDRESS=0.0.0.0:9001
+ - RUSTFS_CONSOLE_ENABLE=true
+ # Defina aqui as chaves de acesso para a API e o Console
+ - RUSTFS_ACCESS_KEY=rustfsadmin
+ - RUSTFS_SECRET_KEY=rustfsadmin123
+ networks:
+ - webapps-network
networks:
webapps-network:
\ No newline at end of file
diff --git a/docker/db/init.sql b/docker/db/init.sql
new file mode 100644
index 0000000..eed4f13
--- /dev/null
+++ b/docker/db/init.sql
@@ -0,0 +1,3 @@
+CREATE USER 'admin'@'%' IDENTIFIED BY 'admin';
+GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;
+FLUSH PRIVILEGES;
\ No newline at end of file
diff --git a/resources/views/dockerimages/create.blade.php b/resources/views/dockerimages/create.blade.php
new file mode 100644
index 0000000..78b3137
--- /dev/null
+++ b/resources/views/dockerimages/create.blade.php
@@ -0,0 +1,27 @@
+@extends('laravel-usp-theme::master')
+@section('content')
+
+
+
Adicionar nova imagem:
+
+
+
+@endsection
diff --git a/resources/views/dockerimages/edit.blade.php b/resources/views/dockerimages/edit.blade.php
new file mode 100644
index 0000000..c58618c
--- /dev/null
+++ b/resources/views/dockerimages/edit.blade.php
@@ -0,0 +1,25 @@
+@extends('laravel-usp-theme::master')
+@section('content')
+
+
+
Atualize a imagem: {{ $docker_image->name }}
+
+
+
+@endsection
diff --git a/resources/views/dockerimages/index.blade.php b/resources/views/dockerimages/index.blade.php
new file mode 100644
index 0000000..5b5cd59
--- /dev/null
+++ b/resources/views/dockerimages/index.blade.php
@@ -0,0 +1,16 @@
+@extends('laravel-usp-theme::master')
+@section('content')
+
+
+@endsection
\ No newline at end of file
diff --git a/resources/views/dockerimages/show.blade.php b/resources/views/dockerimages/show.blade.php
new file mode 100644
index 0000000..f2c9f7c
--- /dev/null
+++ b/resources/views/dockerimages/show.blade.php
@@ -0,0 +1,67 @@
+@extends('laravel-usp-theme::master')
+@section('content')
+
+
+
{{ $docker_image->name }}
+
+
+
+
+
+
Variáveis de ambiente da imagem:
+
+
+
+
+
+ Nome
+
+
+
+ @if ($docker_image->imageVariables)
+ @foreach ($docker_image->imageVariables as $variable)
+
+
+
+
+
+ @endforeach
+ @endif
+
+
+
+
+
+
+
+
+
+@endsection
diff --git a/resources/views/gwmariadb/edit.blade.php b/resources/views/gwmariadb/edit.blade.php
new file mode 100644
index 0000000..e69de29
diff --git a/resources/views/webapps/dockerimage.blade.php b/resources/views/webapps/dockerimage.blade.php
new file mode 100644
index 0000000..ece6ae6
--- /dev/null
+++ b/resources/views/webapps/dockerimage.blade.php
@@ -0,0 +1,35 @@
+@extends('laravel-usp-theme::master')
+@section('content')
+
+
+
{{ $webapp->dominio }}
+
Configurar docker:
+
+
+
+@endsection
+
+@section('javascripts_bottom')
+
+@endsection('javascripts_bottom')
diff --git a/resources/views/webapps/editvariables.blade.php b/resources/views/webapps/editvariables.blade.php
new file mode 100644
index 0000000..0322a6e
--- /dev/null
+++ b/resources/views/webapps/editvariables.blade.php
@@ -0,0 +1,69 @@
+@extends('laravel-usp-theme::master')
+@section('content')
+
+
+
{{ $webapp->dominio }}
+
Configure as variáveis de ambiente da aplicação:
+
+
+
+ @if ($env_variables)
+
+
+
+ Nome
+ Valor
+
+
+
+ @foreach ($env_variables as $env_variable)
+
+
+ {{ $env_variable->imageVariable->name }}
+
+
+
+
+
+ @endforeach
+
+
+ @endif
+
+
+
+@endsection
+
+@section('javascripts_bottom')
+
+@endsection('javascripts_bottom')
diff --git a/resources/views/webapps/partials/form.blade.php b/resources/views/webapps/partials/form.blade.php
index f21a958..0da8195 100644
--- a/resources/views/webapps/partials/form.blade.php
+++ b/resources/views/webapps/partials/form.blade.php
@@ -1,7 +1,11 @@
@@ -12,23 +16,17 @@
-
-
- Repositório github
-
-
-
-
@@ -38,33 +36,9 @@
-
-@section('javascripts_bottom')
-
-@endsection
\ No newline at end of file
+
diff --git a/resources/views/webapps/show.blade.php b/resources/views/webapps/show.blade.php
index 3c56859..82fcf1f 100644
--- a/resources/views/webapps/show.blade.php
+++ b/resources/views/webapps/show.blade.php
@@ -1,8 +1,7 @@
@extends('laravel-usp-theme::master')
-@section("content")
+@section('content')
+ {{ $webapp->dominio }}
-{{ $webapp->dominio }}
-
Justificativa:
{{ $webapp->justificativa }}
Tipo de solicitação:
@@ -10,24 +9,59 @@
@if ($webapp->url_github)
Repositório Github:
{{ $webapp->url_github }} Tag:
- {{ $webapp->version ?? 'não informado'}}
+ {{ $webapp->version ?? 'não informado' }}
@endif
Status:
{{ $webapp->status }}
Solicitante:
{{ $webapp->user->name }}
- Bancos de dados (Mônica)
-
- Implementar: 1) Criar um banco de dados para o dominio, 2) Criar um usuário, 3) Criar uma senha para esse usuário e guardar localmente, 4) Conceder as permissões necessárias para o usuário acessar o banco de dados criado 5) Testar a conexão do app com o banco de dados criado. 6) opção de deletar o banco de dados
+ @switch($dockerStatus)
+ @case('not_configured')
+ Cadastre a imagem docker antes de configurar banco de dados, bucket e publicar a aplicação.
+ Adicionar imagem docker
+ @break
- Configurar Bucket (Ricardo)
- Implementar: 1) Criar um bucket para o dominio (ok), 2) Criar um usuário, 3) Criar uma senha para esse usuário e guardar localmente, 4) Conceder as permissões necessárias para o usuário acessar o bucket criado 5) Testar a conexão do app com o bucket criado. 6) opção de deletar o bucket
-
+ @case('configured')
+
+
Cirar bancos de dados
+
Ver banco de dados
+
Testar conexão
+
+ Implementar: 1) Criar um banco de dados para o dominio, 2) Criar um usuário, 3) Criar uma senha para esse usuário e
+ guardar localmente, 4) Conceder as permissões necessárias para o usuário acessar o banco de dados criado 5) Testar a
+ conexão do app com o banco de dados criado. 6) opção de deletar o banco de dados
+
+
+
Criar Bucket
+
Ver dados bucket
+
Excluir bucket
+
+ Implementar: 1) Criar um bucket para o dominio (ok), 2) Criar um usuário, 3) Criar uma senha para esse usuário e
+ guardar localmente, 4) Conceder as permissões necessárias para o usuário acessar o bucket criado 5) Testar a conexão
+ do app com o bucket criado. 6) opção de deletar o bucket
+
+
-
- Configurar Docker (Augusto)
- Implementar: 1) Model para variavéis de ambiente, 2) Escolher a tag do deploy 3) Configurar o serviço para usar as variáveis de ambiente necessárias
-
-@endsection
\ No newline at end of file
+ @default
+ @endswitch
+ @endsection
diff --git a/routes/web.php b/routes/web.php
index 86f8ad9..543b8e0 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -1,24 +1,70 @@
group(function() {
+ Route::get('/', [WebappController::class, 'index']);
+ Route::get('/create', [WebappController::class, 'create']);
+ Route::post('/store', [WebappController::class, 'store']);
+ Route::get('/{webapp}', [WebappController::class, 'show']);
+ Route::get('/{webapp}/dockerimage', EditWebappImageController::class);
+ Route::get('/{webapp}/variables', ShowWebappVariablesController::class);
+ Route::get('/{webapp}/database/store', [GwmariadbController::class, 'store']);
+ Route::get('/{webapp}/bucket/store', [BucketController::class, 'store']);
+ Route::put('/{webapp}/dockerimage', [WebappController::class, 'updateImage']);
+ Route::put('/{webapp}/variables/{variable}', UpdateWebappVariablesController::class);
+});
+Route::prefix('dockerimages')->group(function() {
+ Route::get('/', [DockerImageController::class, 'index']);
+ Route::get('/create', [DockerImageController::class, 'create']);
+ Route::get('/{dockerimage}', [DockerImageController::class, 'show']);
+ Route::get('/{dockerimage}/edit', [DockerImageController::class, 'edit']);
+ Route::post('/', [DockerImageController::class, 'store']);
+ Route::post('/{dockerimage}/variables/store', [DockerImageController::class, 'storeImageVariable']);
+ Route::put('/{dockerimage}', [DockerImageController::class, 'update']);
+ Route::delete('/{dockerimage}', [DockerImageController::class, 'destroy']);
+});
-# reunião
-Route::get('/portainer', [ReuniaoController::class, 'portainer']);
-Route::get('/gwmariadb', [ReuniaoController::class, 'gwmariadb']);
-Route::get('/rustfs/{app}', [ReuniaoController::class, 'rustfs']);
+Route::prefix('imagevariables')->group(function () {
+ Route::put('/{imagevariable}', [ImageVariableController::class, 'update']);
+ Route::delete('/{imagevariable}', [ImageVariableController::class, 'destroy']);
+});
+Route::prefix('gwmariadb')->group(function () {
+ Route::get('/', [GwmariadbController::class, 'index']);
+ Route::get('/testconnection', TestGwmariadbConnectionController::class);
+ Route::get('/{appdatabase}', [GwmariadbController::class, 'show']);
+ Route::put('/{appdatabase}', [GwmariadbController::class, 'update']);
+ Route::delete('/{appdatabase}', [GwmariadbController::class, 'destroy']);
+});
+Route::prefix('bucket')->group(function() {
+ Route::get('/test', TestConnectionBucketController::class);
+ Route::get('/{bucket}', [BucketController::class, 'show']);
+ Route::delete('/{bucket}', [BucketController::class, 'destroy']);
+});
+Route::prefix('portainer')->group(function() {
+ Route::get('/', [PortainerController::class, 'index']);
+ Route::get('/{webapp}/store', [PortainerController::class, 'store']);
+ Route::get('/{webapp}/update', [PortainerController::class, 'update']);
+});
\ No newline at end of file
diff --git a/tests/Browser/ExampleTest.php b/tests/Browser/ExampleTest.php
new file mode 100644
index 0000000..2d451fc
--- /dev/null
+++ b/tests/Browser/ExampleTest.php
@@ -0,0 +1,21 @@
+browse(function (Browser $browser) {
+ $browser->visit('/')
+ ->assertSee('Laravel');
+ });
+ }
+}
diff --git a/tests/Browser/IndexTest.php b/tests/Browser/IndexTest.php
new file mode 100644
index 0000000..c509e9a
--- /dev/null
+++ b/tests/Browser/IndexTest.php
@@ -0,0 +1,21 @@
+browse(function (Browser $browser) {
+ $browser->visit('/')
+ ->assertSee('Webapps');
+ });
+ }
+}
diff --git a/tests/Browser/Pages/HomePage.php b/tests/Browser/Pages/HomePage.php
new file mode 100644
index 0000000..45d9283
--- /dev/null
+++ b/tests/Browser/Pages/HomePage.php
@@ -0,0 +1,36 @@
+
+ */
+ public function elements(): array
+ {
+ return [
+ '@element' => '#selector',
+ ];
+ }
+}
diff --git a/tests/Browser/Pages/Page.php b/tests/Browser/Pages/Page.php
new file mode 100644
index 0000000..eb9a2de
--- /dev/null
+++ b/tests/Browser/Pages/Page.php
@@ -0,0 +1,20 @@
+
+ */
+ public static function siteElements(): array
+ {
+ return [
+ '@element' => '#selector',
+ ];
+ }
+}
diff --git a/tests/Browser/console/.gitignore b/tests/Browser/console/.gitignore
new file mode 100644
index 0000000..d6b7ef3
--- /dev/null
+++ b/tests/Browser/console/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
diff --git a/tests/Browser/screenshots/.gitignore b/tests/Browser/screenshots/.gitignore
new file mode 100644
index 0000000..d6b7ef3
--- /dev/null
+++ b/tests/Browser/screenshots/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
diff --git a/tests/Browser/source/.gitignore b/tests/Browser/source/.gitignore
new file mode 100644
index 0000000..d6b7ef3
--- /dev/null
+++ b/tests/Browser/source/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
diff --git a/tests/DuskTestCase.php b/tests/DuskTestCase.php
new file mode 100644
index 0000000..020699d
--- /dev/null
+++ b/tests/DuskTestCase.php
@@ -0,0 +1,48 @@
+addArguments(collect([
+ $this->shouldStartMaximized() ? '--start-maximized' : '--window-size=1920,1080',
+ '--disable-search-engine-choice-screen',
+ '--disable-smooth-scrolling',
+ ])->unless($this->hasHeadlessDisabled(), function (Collection $items) {
+ return $items->merge([
+ '--disable-gpu',
+ '--headless=new',
+ ]);
+ })->all());
+
+ return RemoteWebDriver::create(
+ $_ENV['DUSK_DRIVER_URL'] ?? env('DUSK_DRIVER_URL') ?? 'http://localhost:9515',
+ DesiredCapabilities::chrome()->setCapability(
+ ChromeOptions::CAPABILITY, $options
+ )
+ );
+ }
+}