Fixed: Can now specify a cookie for BitMeTv.
This commit is contained in:
parent
d1ce1bf218
commit
96469be7f0
|
@ -59,6 +59,15 @@ namespace NzbDrone.Common.Http
|
||||||
AddRequestHeaders(webRequest, request.Headers);
|
AddRequestHeaders(webRequest, request.Headers);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (request.Cookies.Count != 0)
|
||||||
|
{
|
||||||
|
webRequest.CookieContainer = new CookieContainer();
|
||||||
|
foreach (var pair in request.Cookies)
|
||||||
|
{
|
||||||
|
webRequest.CookieContainer.Add(new Cookie(pair.Key, pair.Value, "/", request.Url.Host));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!request.Body.IsNullOrWhiteSpace())
|
if (!request.Body.IsNullOrWhiteSpace())
|
||||||
{
|
{
|
||||||
var bytes = request.Headers.GetEncodingFromContentType().GetBytes(request.Body.ToCharArray());
|
var bytes = request.Headers.GetEncodingFromContentType().GetBytes(request.Body.ToCharArray());
|
||||||
|
|
|
@ -14,6 +14,7 @@ namespace NzbDrone.Common.Http
|
||||||
Headers = new HttpHeader();
|
Headers = new HttpHeader();
|
||||||
_segments = new Dictionary<string, string>();
|
_segments = new Dictionary<string, string>();
|
||||||
AllowAutoRedirect = true;
|
AllowAutoRedirect = true;
|
||||||
|
Cookies = new Dictionary<string, string>();
|
||||||
|
|
||||||
if (httpAccept != null)
|
if (httpAccept != null)
|
||||||
{
|
{
|
||||||
|
@ -44,6 +45,7 @@ namespace NzbDrone.Common.Http
|
||||||
public NetworkCredential NetworkCredential { get; set; }
|
public NetworkCredential NetworkCredential { get; set; }
|
||||||
public bool SuppressHttpError { get; set; }
|
public bool SuppressHttpError { get; set; }
|
||||||
public bool AllowAutoRedirect { get; set; }
|
public bool AllowAutoRedirect { get; set; }
|
||||||
|
public Dictionary<string, string> Cookies { get; private set; }
|
||||||
|
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
{
|
{
|
||||||
|
@ -66,5 +68,20 @@ namespace NzbDrone.Common.Http
|
||||||
|
|
||||||
_segments.Add(key, value);
|
_segments.Add(key, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void AddCookie(string key, string value)
|
||||||
|
{
|
||||||
|
Cookies[key] = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddCookie(string cookies)
|
||||||
|
{
|
||||||
|
foreach (var pair in cookies.Split(';'))
|
||||||
|
{
|
||||||
|
var split = pair.Split('=');
|
||||||
|
|
||||||
|
Cookies[split[0].Trim()] = split[1].Trim();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -20,7 +20,7 @@ namespace NzbDrone.Core.Test.IndexerTests.BitMeTvTests
|
||||||
Subject.Definition = new IndexerDefinition()
|
Subject.Definition = new IndexerDefinition()
|
||||||
{
|
{
|
||||||
Name = "BitMeTV",
|
Name = "BitMeTV",
|
||||||
Settings = new BitMeTvSettings()
|
Settings = new BitMeTvSettings() { Cookie = "uid=123" }
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ namespace NzbDrone.Core.Indexers.BitMeTv
|
||||||
{
|
{
|
||||||
var pageableRequests = new List<IEnumerable<IndexerRequest>>();
|
var pageableRequests = new List<IEnumerable<IndexerRequest>>();
|
||||||
|
|
||||||
pageableRequests.AddIfNotNull(GetRssRequests(null));
|
pageableRequests.AddIfNotNull(GetRssRequests());
|
||||||
|
|
||||||
return pageableRequests;
|
return pageableRequests;
|
||||||
}
|
}
|
||||||
|
@ -44,9 +44,13 @@ namespace NzbDrone.Core.Indexers.BitMeTv
|
||||||
return new List<IEnumerable<IndexerRequest>>();
|
return new List<IEnumerable<IndexerRequest>>();
|
||||||
}
|
}
|
||||||
|
|
||||||
private IEnumerable<IndexerRequest> GetRssRequests(String searchParameters)
|
private IEnumerable<IndexerRequest> GetRssRequests()
|
||||||
{
|
{
|
||||||
yield return new IndexerRequest(String.Format("{0}/rss.php?uid={1}&passkey={2}{3}", Settings.BaseUrl.Trim().TrimEnd('/'), Settings.UserId, Settings.RssPasskey, searchParameters), HttpAccept.Html);
|
var request = new IndexerRequest(String.Format("{0}/rss.php?uid={1}&passkey={2}", Settings.BaseUrl.Trim().TrimEnd('/'), Settings.UserId, Settings.RssPasskey), HttpAccept.Html);
|
||||||
|
|
||||||
|
request.HttpRequest.AddCookie(Settings.Cookie);
|
||||||
|
|
||||||
|
yield return request;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
using FluentValidation;
|
using FluentValidation;
|
||||||
using FluentValidation.Results;
|
using FluentValidation.Results;
|
||||||
using NzbDrone.Core.Annotations;
|
using NzbDrone.Core.Annotations;
|
||||||
|
@ -14,6 +15,13 @@ namespace NzbDrone.Core.Indexers.BitMeTv
|
||||||
RuleFor(c => c.BaseUrl).ValidRootUrl();
|
RuleFor(c => c.BaseUrl).ValidRootUrl();
|
||||||
RuleFor(c => c.UserId).NotEmpty();
|
RuleFor(c => c.UserId).NotEmpty();
|
||||||
RuleFor(c => c.RssPasskey).NotEmpty();
|
RuleFor(c => c.RssPasskey).NotEmpty();
|
||||||
|
|
||||||
|
RuleFor(c => c.Cookie).NotEmpty();
|
||||||
|
|
||||||
|
RuleFor(c => c.Cookie)
|
||||||
|
.Matches(@"pass=[0-9a-f]{32}", RegexOptions.IgnoreCase)
|
||||||
|
.WithMessage("Wrong pattern")
|
||||||
|
.AsWarning();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,7 +31,7 @@ namespace NzbDrone.Core.Indexers.BitMeTv
|
||||||
|
|
||||||
public BitMeTvSettings()
|
public BitMeTvSettings()
|
||||||
{
|
{
|
||||||
BaseUrl = "http://www.bitmetv.org";
|
BaseUrl = "https://www.bitmetv.org";
|
||||||
}
|
}
|
||||||
|
|
||||||
[FieldDefinition(0, Label = "Website URL")]
|
[FieldDefinition(0, Label = "Website URL")]
|
||||||
|
@ -35,6 +43,9 @@ namespace NzbDrone.Core.Indexers.BitMeTv
|
||||||
[FieldDefinition(2, Label = "RSS Passkey")]
|
[FieldDefinition(2, Label = "RSS Passkey")]
|
||||||
public String RssPasskey { get; set; }
|
public String RssPasskey { get; set; }
|
||||||
|
|
||||||
|
[FieldDefinition(3, Label = "Cookie", HelpText = "BitMeTv uses a login cookie needed to access the rss, you'll have to retrieve it via a browser.")]
|
||||||
|
public String Cookie { get; set; }
|
||||||
|
|
||||||
public ValidationResult Validate()
|
public ValidationResult Validate()
|
||||||
{
|
{
|
||||||
return validator.Validate(this);
|
return validator.Validate(this);
|
||||||
|
|
Loading…
Reference in New Issue