using System.Collections.Generic; using FluentValidation; using Lidarr.Http; using Lidarr.Http.REST; using Lidarr.Http.REST.Attributes; using Microsoft.AspNetCore.Mvc; using NzbDrone.Core.RemotePathMappings; using NzbDrone.Core.Validation.Paths; namespace Lidarr.Api.V1.RemotePathMappings { [V1ApiController] public class RemotePathMappingController : RestController { private readonly IRemotePathMappingService _remotePathMappingService; public RemotePathMappingController(IRemotePathMappingService remotePathMappingService, PathExistsValidator pathExistsValidator, MappedNetworkDriveValidator mappedNetworkDriveValidator) { _remotePathMappingService = remotePathMappingService; SharedValidator.RuleFor(c => c.Host) .NotEmpty(); // We cannot use IsValidPath here, because it's a remote path, possibly other OS. SharedValidator.RuleFor(c => c.RemotePath) .NotEmpty(); SharedValidator.RuleFor(c => c.LocalPath) .Cascade(CascadeMode.Stop) .IsValidPath() .SetValidator(mappedNetworkDriveValidator) .SetValidator(pathExistsValidator); } public override RemotePathMappingResource GetResourceById(int id) { return _remotePathMappingService.Get(id).ToResource(); } [RestPostById] [Consumes("application/json")] public ActionResult CreateMapping(RemotePathMappingResource resource) { var model = resource.ToModel(); return Created(_remotePathMappingService.Add(model).Id); } [HttpGet] [Produces("application/json")] public List GetMappings() { return _remotePathMappingService.All().ToResource(); } [RestDeleteById] public void DeleteMapping(int id) { _remotePathMappingService.Remove(id); } [RestPutById] public ActionResult UpdateMapping(RemotePathMappingResource resource) { var mapping = resource.ToModel(); return Accepted(_remotePathMappingService.Update(mapping)); } } }