// ========================================================================== // Squidex Headless CMS // ========================================================================== // Copyright (c) Squidex UG (haftungsbeschraenkt) // All rights reserved. Licensed under the MIT license. // ========================================================================== using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Squidex.Areas.Api.Controllers.Backups.Models; using Squidex.Domain.Apps.Entities.Backup; using Squidex.Infrastructure.Commands; using Squidex.Infrastructure.Security; using Squidex.Shared; using Squidex.Web; namespace Squidex.Areas.Api.Controllers.Backups { /// /// Manages backups for apps. /// [ApiExplorerSettings(GroupName = nameof(Backups))] public class RestoreController : ApiController { private readonly IBackupService backupService; public RestoreController(ICommandBus commandBus, IBackupService backupService) : base(commandBus) { this.backupService = backupService; } /// /// Get current restore status. /// /// /// 200 => Status returned. /// [HttpGet] [Route("apps/restore/")] [ProducesResponseType(typeof(RestoreJobDto), 200)] [ApiPermission(Permissions.AdminRestore)] public async Task GetRestoreJob() { var job = await backupService.GetRestoreAsync(); if (job == null) { return NotFound(); } var response = RestoreJobDto.FromJob(job); return Ok(response); } /// /// Restore a backup. /// /// The backup to restore. /// /// 204 => Restore operation started. /// [HttpPost] [Route("apps/restore/")] [ApiPermission(Permissions.AdminRestore)] public async Task PostRestoreJob([FromBody] RestoreRequestDto request) { await backupService.StartRestoreAsync(User.Token()!, request.Url, request.Name); return NoContent(); } } }