diff --git a/src/Squidex.Web/ResourceLink.cs b/src/Squidex.Web/ResourceLink.cs index ef54bfa98..d1caffc8d 100644 --- a/src/Squidex.Web/ResourceLink.cs +++ b/src/Squidex.Web/ResourceLink.cs @@ -19,7 +19,6 @@ namespace Squidex.Web [Display(Description = "The link method.")] public string Method { get; set; } - [Required] [Display(Description = "Additional data about the link.")] public string Metadata { get; set; } } diff --git a/src/Squidex/Areas/Api/Controllers/Backups/Models/BackupJobDto.cs b/src/Squidex/Areas/Api/Controllers/Backups/Models/BackupJobDto.cs index 8f39a7140..5e0163380 100644 --- a/src/Squidex/Areas/Api/Controllers/Backups/Models/BackupJobDto.cs +++ b/src/Squidex/Areas/Api/Controllers/Backups/Models/BackupJobDto.cs @@ -62,6 +62,8 @@ namespace Squidex.Areas.Api.Controllers.Backups.Models AddDeleteLink("delete", controller.Url(x => nameof(x.DeleteBackup), values)); } + AddGetLink("download", controller.Url(x => nameof(x.GetBackupContent), values)); + return this; } } diff --git a/src/Squidex/Areas/Api/Controllers/Backups/Models/RestoreRequest.cs b/src/Squidex/Areas/Api/Controllers/Backups/Models/RestoreRequestDto.cs similarity index 95% rename from src/Squidex/Areas/Api/Controllers/Backups/Models/RestoreRequest.cs rename to src/Squidex/Areas/Api/Controllers/Backups/Models/RestoreRequestDto.cs index a6b103a05..f51bc342b 100644 --- a/src/Squidex/Areas/Api/Controllers/Backups/Models/RestoreRequest.cs +++ b/src/Squidex/Areas/Api/Controllers/Backups/Models/RestoreRequestDto.cs @@ -10,7 +10,7 @@ using System.ComponentModel.DataAnnotations; namespace Squidex.Areas.Api.Controllers.Backups.Models { - public sealed class RestoreRequest + public sealed class RestoreRequestDto { /// /// The name of the app. diff --git a/src/Squidex/Areas/Api/Controllers/Backups/RestoreController.cs b/src/Squidex/Areas/Api/Controllers/Backups/RestoreController.cs index 4426330de..8a5a5c4d1 100644 --- a/src/Squidex/Areas/Api/Controllers/Backups/RestoreController.cs +++ b/src/Squidex/Areas/Api/Controllers/Backups/RestoreController.cs @@ -68,7 +68,7 @@ namespace Squidex.Areas.Api.Controllers.Backups [HttpPost] [Route("apps/restore/")] [ApiPermission(Permissions.AdminRestore)] - public async Task PostRestore([FromBody] RestoreRequest request) + public async Task PostRestore([FromBody] RestoreRequestDto request) { var restoreGrain = grainFactory.GetGrain(SingleGrain.Id); diff --git a/src/Squidex/Areas/Api/Controllers/Rules/Models/RuleActionProcessor.cs b/src/Squidex/Areas/Api/Controllers/Rules/Models/RuleActionProcessor.cs index b0337ed42..7bd538707 100644 --- a/src/Squidex/Areas/Api/Controllers/Rules/Models/RuleActionProcessor.cs +++ b/src/Squidex/Areas/Api/Controllers/Rules/Models/RuleActionProcessor.cs @@ -55,7 +55,7 @@ namespace Squidex.Areas.Api.Controllers.Rules.Models if (oldName != null) { context.Document.Definitions.Remove(oldName); - context.Document.Definitions.Add(action.Key, derivedSchema); + context.Document.Definitions.Add($"{action.Key}RuleActionDto", derivedSchema); } } diff --git a/src/Squidex/Areas/Api/Controllers/Schemas/SchemasController.cs b/src/Squidex/Areas/Api/Controllers/Schemas/SchemasController.cs index 192c8fc87..036999da6 100644 --- a/src/Squidex/Areas/Api/Controllers/Schemas/SchemasController.cs +++ b/src/Squidex/Areas/Api/Controllers/Schemas/SchemasController.cs @@ -114,7 +114,7 @@ namespace Squidex.Areas.Api.Controllers.Schemas /// [HttpPost] [Route("apps/{app}/schemas/")] - [ProducesResponseType(typeof(SchemaDetailsDto), 200)] + [ProducesResponseType(typeof(SchemaDetailsDto), 201)] [ApiPermission(Permissions.AppSchemasCreate)] [ApiCosts(1)] public async Task PostSchema(string app, [FromBody] CreateSchemaDto request) diff --git a/src/Squidex/Areas/IdentityServer/Config/LazyClientStore.cs b/src/Squidex/Areas/IdentityServer/Config/LazyClientStore.cs index 2df7efe1c..e07e6d059 100644 --- a/src/Squidex/Areas/IdentityServer/Config/LazyClientStore.cs +++ b/src/Squidex/Areas/IdentityServer/Config/LazyClientStore.cs @@ -176,7 +176,7 @@ namespace Squidex.Areas.IdentityServer.Config }, Claims = new List { - new Claim(SquidexClaimTypes.Permissions, Permissions.Admin) + new Claim(SquidexClaimTypes.Permissions, Permissions.All) } }; } diff --git a/src/Squidex/app/features/settings/module.ts b/src/Squidex/app/features/settings/module.ts index d77bf3601..031f1a72e 100644 --- a/src/Squidex/app/features/settings/module.ts +++ b/src/Squidex/app/features/settings/module.ts @@ -16,7 +16,6 @@ import { } from '@app/shared'; import { - BackupDownloadUrlPipe, BackupDurationPipe, BackupsPageComponent, ClientComponent, @@ -199,7 +198,6 @@ const routes: Routes = [ RouterModule.forChild(routes) ], declarations: [ - BackupDownloadUrlPipe, BackupDurationPipe, BackupsPageComponent, ClientComponent, diff --git a/src/Squidex/app/features/settings/pages/backups/backups-page.component.html b/src/Squidex/app/features/settings/pages/backups/backups-page.component.html index 94ade6d25..f55d7a783 100644 --- a/src/Squidex/app/features/settings/pages/backups/backups-page.component.html +++ b/src/Squidex/app/features/settings/pages/backups/backups-page.component.html @@ -72,7 +72,7 @@
Download: - + Ready
diff --git a/src/Squidex/app/features/settings/pages/backups/backups-page.component.ts b/src/Squidex/app/features/settings/pages/backups/backups-page.component.ts index 9a0f1b700..13c0ce496 100644 --- a/src/Squidex/app/features/settings/pages/backups/backups-page.component.ts +++ b/src/Squidex/app/features/settings/pages/backups/backups-page.component.ts @@ -10,6 +10,7 @@ import { timer } from 'rxjs'; import { onErrorResumeNext, switchMap } from 'rxjs/operators'; import { + ApiUrlConfig, AppsState, BackupDto, BackupsState, @@ -23,6 +24,7 @@ import { }) export class BackupsPageComponent extends ResourceOwner implements OnInit { constructor( + public readonly apiUrl: ApiUrlConfig, public readonly appsState: AppsState, public readonly backupsState: BackupsState ) { diff --git a/src/Squidex/app/features/settings/pages/backups/pipes.ts b/src/Squidex/app/features/settings/pages/backups/pipes.ts index 7351ce9a6..d73192f42 100644 --- a/src/Squidex/app/features/settings/pages/backups/pipes.ts +++ b/src/Squidex/app/features/settings/pages/backups/pipes.ts @@ -7,12 +7,7 @@ import { Pipe, PipeTransform } from '@angular/core'; -import { - ApiUrlConfig, - AppsState, - BackupDto, - Duration -} from '@app/shared'; +import { BackupDto, Duration } from '@app/shared'; @Pipe({ name: 'sqxBackupDuration', @@ -22,20 +17,4 @@ export class BackupDurationPipe implements PipeTransform { public transform(backup: BackupDto) { return Duration.create(backup.started, backup.stopped!).toString(); } -} - -@Pipe({ - name: 'sqxBackupDownloadUrl', - pure: true -}) -export class BackupDownloadUrlPipe implements PipeTransform { - constructor( - private readonly apiUrl: ApiUrlConfig, - private readonly appsState: AppsState - ) { - } - - public transform(backup: BackupDto) { - return this.apiUrl.buildUrl(`api/apps/${this.appsState.appName}/backups/${backup.id}`); - } } \ No newline at end of file diff --git a/src/Squidex/app/shared/services/backups.service.ts b/src/Squidex/app/shared/services/backups.service.ts index 3af49a2c7..9ecf9a270 100644 --- a/src/Squidex/app/shared/services/backups.service.ts +++ b/src/Squidex/app/shared/services/backups.service.ts @@ -41,6 +41,8 @@ export class BackupDto { public readonly canDelete: boolean; + public readonly downloadUrl: string; + constructor( links: ResourceLinks, public readonly id: string, @@ -53,6 +55,8 @@ export class BackupDto { this._links = links; this.canDelete = hasAnyLink(links, 'delete'); + + this.downloadUrl = links['download'].href; } }