diff --git a/ogWebconsole/src/app/app.module.ts b/ogWebconsole/src/app/app.module.ts
index 824c555..ef79fbe 100644
--- a/ogWebconsole/src/app/app.module.ts
+++ b/ogWebconsole/src/app/app.module.ts
@@ -163,6 +163,7 @@ import { ScrollToTopComponent } from './shared/scroll-to-top/scroll-to-top.compo
import { CreateTagModalComponent } from './components/repositories/show-git-images/create-tag-modal/create-tag-modal.component';
import { CreateBranchModalComponent } from './components/repositories/show-git-images/create-branch-modal/create-branch-modal.component';
import { ClientLogsModalComponent } from './components/groups/shared/client-logs-modal/client-logs-modal.component';
+import { BackupRepositoryModalComponent } from './components/repositories/show-git-images/backup-repository-modal/backup-repository-modal.component';
export function HttpLoaderFactory(http: HttpClient) {
return new TranslateHttpLoader(http, './locale/', '.json');
@@ -282,7 +283,8 @@ registerLocaleData(localeEs, 'es-ES');
CreateTagModalComponent,
CreateBranchModalComponent,
ClientLogsModalComponent,
- SafePipe
+ SafePipe,
+ BackupRepositoryModalComponent
],
bootstrap: [AppComponent],
imports: [BrowserModule,
diff --git a/ogWebconsole/src/app/components/repositories/show-git-images/backup-repository-modal/backup-repository-modal.component.css b/ogWebconsole/src/app/components/repositories/show-git-images/backup-repository-modal/backup-repository-modal.component.css
new file mode 100644
index 0000000..22a00e7
--- /dev/null
+++ b/ogWebconsole/src/app/components/repositories/show-git-images/backup-repository-modal/backup-repository-modal.component.css
@@ -0,0 +1,68 @@
+.dialog-content {
+ min-width: 500px;
+ max-width: 600px;
+}
+
+.repository-info {
+ background-color: #f5f5f5;
+ padding: 15px;
+ border-radius: 5px;
+ margin-bottom: 20px;
+ border-left: 4px solid #3f51b5;
+}
+
+.repository-info p {
+ margin: 0;
+ color: #333;
+}
+
+.backup-form {
+ display: flex;
+ flex-direction: column;
+ gap: 20px;
+}
+
+.form-field {
+ width: 100%;
+}
+
+.action-container {
+ display: flex;
+ justify-content: flex-end;
+ gap: 10px;
+ margin-top: 20px;
+ padding: 0 24px 24px 24px;
+}
+
+.ordinary-button {
+ background-color: #6c757d;
+ color: white;
+ border: none;
+ padding: 10px 20px;
+ border-radius: 4px;
+ cursor: pointer;
+ font-size: 14px;
+}
+
+.ordinary-button:hover {
+ background-color: #5a6268;
+}
+
+.submit-button {
+ background-color: #28a745;
+ color: white;
+ border: none;
+ padding: 10px 20px;
+ border-radius: 4px;
+ cursor: pointer;
+ font-size: 14px;
+}
+
+.submit-button:hover:not(:disabled) {
+ background-color: #218838;
+}
+
+.submit-button:disabled {
+ background-color: #6c757d;
+ cursor: not-allowed;
+}
diff --git a/ogWebconsole/src/app/components/repositories/show-git-images/backup-repository-modal/backup-repository-modal.component.html b/ogWebconsole/src/app/components/repositories/show-git-images/backup-repository-modal/backup-repository-modal.component.html
new file mode 100644
index 0000000..ed5687b
--- /dev/null
+++ b/ogWebconsole/src/app/components/repositories/show-git-images/backup-repository-modal/backup-repository-modal.component.html
@@ -0,0 +1,66 @@
+
+
+
Crear Backup del Repositorio
+
+
+
+
Repositorio: {{ data.repositoryName }}
+
+
+
+
+
+
+
+
+
diff --git a/ogWebconsole/src/app/components/repositories/show-git-images/backup-repository-modal/backup-repository-modal.component.ts b/ogWebconsole/src/app/components/repositories/show-git-images/backup-repository-modal/backup-repository-modal.component.ts
new file mode 100644
index 0000000..93f7faa
--- /dev/null
+++ b/ogWebconsole/src/app/components/repositories/show-git-images/backup-repository-modal/backup-repository-modal.component.ts
@@ -0,0 +1,66 @@
+import { Component, Inject } from '@angular/core';
+import { FormBuilder, FormGroup, Validators } from '@angular/forms';
+import { HttpClient } from '@angular/common/http';
+import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
+import { ToastrService } from 'ngx-toastr';
+import { ConfigService } from '@services/config.service';
+
+@Component({
+ selector: 'app-backup-repository-modal',
+ templateUrl: './backup-repository-modal.component.html',
+ styleUrl: './backup-repository-modal.component.css'
+})
+export class BackupRepositoryModalComponent {
+ backupForm: FormGroup;
+ loading: boolean = false;
+ baseUrl: string;
+
+ constructor(
+ private fb: FormBuilder,
+ private http: HttpClient,
+ public dialogRef: MatDialogRef,
+ private toastService: ToastrService,
+ private configService: ConfigService,
+ @Inject(MAT_DIALOG_DATA) public data: { repositoryName: string, repositoryUuid: string }
+ ) {
+ this.baseUrl = this.configService.apiUrl;
+ this.backupForm = this.fb.group({
+ ssh_server: ['', [Validators.required, Validators.pattern(/^[a-zA-Z0-9.-]+$/)]],
+ ssh_port: ['22', [Validators.required, Validators.min(1), Validators.max(65535)]],
+ ssh_user: ['', [Validators.required, Validators.pattern(/^[a-zA-Z0-9._-]+$/)]],
+ filename: ['', [Validators.required, Validators.pattern(/\.(tar\.gz|zip|tar)$/)]]
+ });
+ }
+
+ createBackup(): void {
+ if (this.backupForm.valid) {
+ this.loading = true;
+ const payload = {
+ repository: this.data.repositoryName,
+ sshServer: this.backupForm.value.ssh_server,
+ sshPort: parseInt(this.backupForm.value.ssh_port),
+ sshUser: this.backupForm.value.ssh_user,
+ filename: this.backupForm.value.filename
+ };
+
+ const url = `${this.baseUrl}/image-repositories/server/git/${this.data.repositoryUuid}/create-backup`;
+
+ this.http.post(url, payload).subscribe({
+ next: (response) => {
+ this.toastService.success('Backup iniciado correctamente');
+ this.dialogRef.close(response);
+ },
+ error: (error) => {
+ this.toastService.error(error.error?.message || 'Error al iniciar el backup');
+ this.loading = false;
+ }
+ });
+ } else {
+ this.toastService.error('Por favor, complete todos los campos requeridos correctamente');
+ }
+ }
+
+ close(): void {
+ this.dialogRef.close();
+ }
+}
diff --git a/ogWebconsole/src/app/components/repositories/show-git-images/show-git-images.component.html b/ogWebconsole/src/app/components/repositories/show-git-images/show-git-images.component.html
index 2f53ce2..0510216 100644
--- a/ogWebconsole/src/app/components/repositories/show-git-images/show-git-images.component.html
+++ b/ogWebconsole/src/app/components/repositories/show-git-images/show-git-images.component.html
@@ -10,6 +10,7 @@
+
diff --git a/ogWebconsole/src/app/components/repositories/show-git-images/show-git-images.component.ts b/ogWebconsole/src/app/components/repositories/show-git-images/show-git-images.component.ts
index 407c318..77268a1 100644
--- a/ogWebconsole/src/app/components/repositories/show-git-images/show-git-images.component.ts
+++ b/ogWebconsole/src/app/components/repositories/show-git-images/show-git-images.component.ts
@@ -10,6 +10,7 @@ import {Router} from "@angular/router";
import {ServerInfoDialogComponent} from "../../ogdhcp/server-info-dialog/server-info-dialog.component";
import {CreateTagModalComponent} from "./create-tag-modal/create-tag-modal.component";
import {CreateBranchModalComponent} from "./create-branch-modal/create-branch-modal.component";
+import { BackupRepositoryModalComponent } from './backup-repository-modal/backup-repository-modal.component';
@Component({
selector: 'app-show-git-commits',
@@ -267,12 +268,33 @@ export class ShowGitCommitsComponent implements OnInit{
dialogRef.afterClosed().subscribe(result => {
if (result) {
- // Recargar los datos para mostrar el nuevo tag
+
this.loadData();
}
});
}
+ openBackupDialog() {
+ if (!this.selectedRepository) {
+ this.toastService.warning('Por favor, selecciona un repositorio primero');
+ return;
+ }
+
+ const dialogRef = this.dialog.open(BackupRepositoryModalComponent, {
+ width: '600px',
+ data: {
+ repositoryName: this.selectedRepository,
+ repositoryUuid: this.data.repositoryUuid
+ }
+ });
+
+ dialogRef.afterClosed().subscribe(result => {
+ if (result) {
+ this.toastService.success('Backup iniciado correctamente');
+ }
+ });
+ }
+
openCreateBranchDialog(commit: any) {
const dialogRef = this.dialog.open(CreateBranchModalComponent, {
width: '500px',
@@ -285,7 +307,6 @@ export class ShowGitCommitsComponent implements OnInit{
dialogRef.afterClosed().subscribe(result => {
if (result) {
- // Recargar los datos para mostrar la nueva rama
this.loadBranches();
this.loadData();
}