@ -1,15 +1,13 @@
using NzbDrone.Common.Http ;
using System ;
using System.Collections.Generic ;
using System.Net ;
using System.IO ;
using Newtonsoft.Json.Linq ;
using NzbDrone.Common.Serializer ;
using NzbDrone.Core.Configuration ;
namespace NzbDrone.Core.NetImport.Trakt
{
public class r efreshRequestResponse
public class R efreshRequestResponse
{
public string access_token { get ; set ; }
public string token_type { get ; set ; }
@ -21,8 +19,15 @@ namespace NzbDrone.Core.NetImport.Trakt
public class TraktRequestGenerator : INetImportRequestGenerator
{
public IConfigService _configService ;
public IHttpClient HttpClient { get ; set ; }
public TraktSettings Settings { get ; set ; }
public string RadarrTraktUrl { get ; set ; }
public TraktRequestGenerator ( )
{
RadarrTraktUrl = "http://radarr.aeonlucid.com/v1/trakt/refresh?refresh=" ;
}
public virtual NetImportPageableRequestChain GetMovies ( )
{
var pageableRequests = new NetImportPageableRequestChain ( ) ;
@ -32,6 +37,52 @@ namespace NzbDrone.Core.NetImport.Trakt
return pageableRequests ;
}
private void Authenticate ( )
{
if ( _configService . TraktRefreshToken ! = string . Empty )
{
//tokens were overwritten with something other than nothing
if ( _configService . NewTraktTokenExpiry > _configService . TraktTokenExpiry )
{
//but our refreshedTokens are more current
_configService . TraktAuthToken = _configService . NewTraktAuthToken ;
_configService . TraktRefreshToken = _configService . NewTraktRefreshToken ;
_configService . TraktTokenExpiry = _configService . NewTraktTokenExpiry ;
}
var unixTime = ( int ) DateTime . UtcNow . Subtract ( new DateTime ( 1970 , 1 , 1 ) ) . TotalSeconds ;
if ( unixTime > _configService . TraktTokenExpiry )
{
var requestBuilder = new HttpRequestBuilder ( $"{RadarrTraktUrl + _configService.TraktRefreshToken}" )
{
LogResponseContent = true
} ;
requestBuilder . Method = HttpMethod . GET ;
var authLoginRequest = requestBuilder
. SetHeader ( "Content-Type" , "application/json" )
. Accept ( HttpAccept . Json )
. Build ( ) ;
var response = HttpClient . Execute ( authLoginRequest ) ;
var result = Json . Deserialize < RefreshRequestResponse > ( response . Content ) ;
_configService . TraktAuthToken = result . access_token ;
_configService . TraktRefreshToken = result . refresh_token ;
//lets have it expire in 8 weeks (4838400 seconds)
_configService . TraktTokenExpiry = unixTime + 4838400 ;
//store the refreshed tokens in case they get overwritten by an old set of tokens
_configService . NewTraktAuthToken = _configService . TraktAuthToken ;
_configService . NewTraktRefreshToken = _configService . TraktRefreshToken ;
_configService . NewTraktTokenExpiry = _configService . TraktTokenExpiry ;
}
}
}
private IEnumerable < NetImportRequest > GetMovies ( string searchParameters )
{
var link = Settings . Link . Trim ( ) ;
@ -74,44 +125,8 @@ namespace NzbDrone.Core.NetImport.Trakt
link = link + "/movies/watched/all" + filters ;
break ;
}
if ( _configService . TraktRefreshToken ! = string . Empty )
{
//tokens were overwritten with something other than nothing
if ( _configService . NewTraktTokenExpiry > _configService . TraktTokenExpiry )
{
//but our refreshedTokens are more current
_configService . TraktAuthToken = _configService . NewTraktAuthToken ;
_configService . TraktRefreshToken = _configService . NewTraktRefreshToken ;
_configService . TraktTokenExpiry = _configService . NewTraktTokenExpiry ;
}
Int32 unixTime = ( Int32 ) ( DateTime . UtcNow . Subtract ( new DateTime ( 1970 , 1 , 1 ) ) ) . TotalSeconds ;
if ( unixTime > _configService . TraktTokenExpiry )
{
var url = "http://radarr.aeonlucid.com/v1/trakt/refresh?refresh=" + _configService . TraktRefreshToken ;
HttpWebRequest rquest = ( HttpWebRequest ) WebRequest . Create ( url ) ;
string rsponseString = string . Empty ;
using ( HttpWebResponse rsponse = ( HttpWebResponse ) rquest . GetResponse ( ) )
using ( Stream stream = rsponse . GetResponseStream ( ) )
using ( StreamReader reader = new StreamReader ( stream ) )
{
rsponseString = reader . ReadToEnd ( ) ;
}
refreshRequestResponse j1 = Newtonsoft . Json . JsonConvert . DeserializeObject < refreshRequestResponse > ( rsponseString ) ;
_configService . TraktAuthToken = j1 . access_token ;
_configService . TraktRefreshToken = j1 . refresh_token ;
//lets have it expire in 8 weeks (4838400 seconds)
_configService . TraktTokenExpiry = unixTime + 4838400 ;
//store the refreshed tokens in case they get overwritten by an old set of tokens
_configService . NewTraktAuthToken = _configService . TraktAuthToken ;
_configService . NewTraktRefreshToken = _configService . TraktRefreshToken ;
_configService . NewTraktTokenExpiry = _configService . TraktTokenExpiry ;
}
}
Authenticate ( ) ;
var request = new NetImportRequest ( $"{link}" , HttpAccept . Json ) ;
request . HttpRequest . Headers . Add ( "trakt-api-version" , "2" ) ;