mirror of
https://github.com/Sonarr/Sonarr.git
synced 2024-12-16 11:37:58 +02:00
Fixed: Prevent series from being added with an invalid Profile ID
Closes #977
This commit is contained in:
parent
dc176a83b3
commit
d514699ab7
@ -10,11 +10,11 @@
|
|||||||
using NzbDrone.Core.Messaging.Events;
|
using NzbDrone.Core.Messaging.Events;
|
||||||
using NzbDrone.Core.SeriesStats;
|
using NzbDrone.Core.SeriesStats;
|
||||||
using NzbDrone.Core.Tv;
|
using NzbDrone.Core.Tv;
|
||||||
using NzbDrone.Api.Validation;
|
|
||||||
using NzbDrone.Api.Mapping;
|
using NzbDrone.Api.Mapping;
|
||||||
using NzbDrone.Core.Tv.Events;
|
using NzbDrone.Core.Tv.Events;
|
||||||
using NzbDrone.Core.Validation.Paths;
|
using NzbDrone.Core.Validation.Paths;
|
||||||
using NzbDrone.Core.DataAugmentation.Scene;
|
using NzbDrone.Core.DataAugmentation.Scene;
|
||||||
|
using NzbDrone.Core.Validation;
|
||||||
using NzbDrone.SignalR;
|
using NzbDrone.SignalR;
|
||||||
|
|
||||||
namespace NzbDrone.Api.Series
|
namespace NzbDrone.Api.Series
|
||||||
@ -43,7 +43,8 @@ public SeriesModule(IBroadcastSignalRMessage signalRBroadcaster,
|
|||||||
SeriesPathValidator seriesPathValidator,
|
SeriesPathValidator seriesPathValidator,
|
||||||
SeriesExistsValidator seriesExistsValidator,
|
SeriesExistsValidator seriesExistsValidator,
|
||||||
DroneFactoryValidator droneFactoryValidator,
|
DroneFactoryValidator droneFactoryValidator,
|
||||||
SeriesAncestorValidator seriesAncestorValidator
|
SeriesAncestorValidator seriesAncestorValidator,
|
||||||
|
ProfileExistsValidator profileExistsValidator
|
||||||
)
|
)
|
||||||
: base(signalRBroadcaster)
|
: base(signalRBroadcaster)
|
||||||
{
|
{
|
||||||
@ -59,7 +60,7 @@ SeriesAncestorValidator seriesAncestorValidator
|
|||||||
UpdateResource = UpdateSeries;
|
UpdateResource = UpdateSeries;
|
||||||
DeleteResource = DeleteSeries;
|
DeleteResource = DeleteSeries;
|
||||||
|
|
||||||
SharedValidator.RuleFor(s => s.ProfileId).ValidId();
|
Validation.RuleBuilderExtensions.ValidId(SharedValidator.RuleFor(s => s.ProfileId));
|
||||||
|
|
||||||
SharedValidator.RuleFor(s => s.Path)
|
SharedValidator.RuleFor(s => s.Path)
|
||||||
.Cascade(CascadeMode.StopOnFirstFailure)
|
.Cascade(CascadeMode.StopOnFirstFailure)
|
||||||
@ -70,6 +71,8 @@ SeriesAncestorValidator seriesAncestorValidator
|
|||||||
.SetValidator(seriesAncestorValidator)
|
.SetValidator(seriesAncestorValidator)
|
||||||
.When(s => !s.Path.IsNullOrWhiteSpace());
|
.When(s => !s.Path.IsNullOrWhiteSpace());
|
||||||
|
|
||||||
|
SharedValidator.RuleFor(s => s.ProfileId).SetValidator(profileExistsValidator);
|
||||||
|
|
||||||
PostValidator.RuleFor(s => s.Path).IsValidPath().When(s => s.RootFolderPath.IsNullOrWhiteSpace());
|
PostValidator.RuleFor(s => s.Path).IsValidPath().When(s => s.RootFolderPath.IsNullOrWhiteSpace());
|
||||||
PostValidator.RuleFor(s => s.RootFolderPath).IsValidPath().When(s => s.Path.IsNullOrWhiteSpace());
|
PostValidator.RuleFor(s => s.RootFolderPath).IsValidPath().When(s => s.Path.IsNullOrWhiteSpace());
|
||||||
PostValidator.RuleFor(s => s.Title).NotEmpty();
|
PostValidator.RuleFor(s => s.Title).NotEmpty();
|
||||||
|
@ -1004,6 +1004,7 @@
|
|||||||
<Compile Include="Validation\Paths\SeriesAncestorValidator.cs" />
|
<Compile Include="Validation\Paths\SeriesAncestorValidator.cs" />
|
||||||
<Compile Include="Validation\Paths\SeriesExistsValidator.cs" />
|
<Compile Include="Validation\Paths\SeriesExistsValidator.cs" />
|
||||||
<Compile Include="Validation\Paths\SeriesPathValidator.cs" />
|
<Compile Include="Validation\Paths\SeriesPathValidator.cs" />
|
||||||
|
<Compile Include="Validation\ProfileExistsValidator.cs" />
|
||||||
<Compile Include="Validation\RuleBuilderExtensions.cs" />
|
<Compile Include="Validation\RuleBuilderExtensions.cs" />
|
||||||
<Compile Include="Validation\UrlValidator.cs" />
|
<Compile Include="Validation\UrlValidator.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
@ -5,7 +5,7 @@ namespace NzbDrone.Core.Profiles
|
|||||||
{
|
{
|
||||||
public interface IProfileRepository : IBasicRepository<Profile>
|
public interface IProfileRepository : IBasicRepository<Profile>
|
||||||
{
|
{
|
||||||
|
bool Exists(int id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ProfileRepository : BasicRepository<Profile>, IProfileRepository
|
public class ProfileRepository : BasicRepository<Profile>, IProfileRepository
|
||||||
@ -14,5 +14,10 @@ public ProfileRepository(IMainDatabase database, IEventAggregator eventAggregato
|
|||||||
: base(database, eventAggregator)
|
: base(database, eventAggregator)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool Exists(int id)
|
||||||
|
{
|
||||||
|
return DataMapper.Query<Profile>().Where(p => p.Id == id).GetRowCount() == 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,7 @@ public interface IProfileService
|
|||||||
void Delete(int id);
|
void Delete(int id);
|
||||||
List<Profile> All();
|
List<Profile> All();
|
||||||
Profile Get(int id);
|
Profile Get(int id);
|
||||||
|
bool Exists(int id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ProfileService : IProfileService, IHandle<ApplicationStartedEvent>
|
public class ProfileService : IProfileService, IHandle<ApplicationStartedEvent>
|
||||||
@ -61,6 +62,11 @@ public Profile Get(int id)
|
|||||||
return _profileRepository.Get(id);
|
return _profileRepository.Get(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool Exists(int id)
|
||||||
|
{
|
||||||
|
return _profileRepository.Exists(id);
|
||||||
|
}
|
||||||
|
|
||||||
private Profile AddDefaultProfile(string name, Quality cutoff, params Quality[] allowed)
|
private Profile AddDefaultProfile(string name, Quality cutoff, params Quality[] allowed)
|
||||||
{
|
{
|
||||||
var items = Quality.DefaultQualityDefinitions
|
var items = Quality.DefaultQualityDefinitions
|
||||||
|
23
src/NzbDrone.Core/Validation/ProfileExistsValidator.cs
Normal file
23
src/NzbDrone.Core/Validation/ProfileExistsValidator.cs
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
using FluentValidation.Validators;
|
||||||
|
using NzbDrone.Core.Profiles;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.Validation
|
||||||
|
{
|
||||||
|
public class ProfileExistsValidator : PropertyValidator
|
||||||
|
{
|
||||||
|
private readonly IProfileService _profileService;
|
||||||
|
|
||||||
|
public ProfileExistsValidator(IProfileService profileService)
|
||||||
|
: base("Profile does not exist")
|
||||||
|
{
|
||||||
|
_profileService = profileService;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override bool IsValid(PropertyValidatorContext context)
|
||||||
|
{
|
||||||
|
if (context.PropertyValue == null) return true;
|
||||||
|
|
||||||
|
return _profileService.Exists((int)context.PropertyValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user