using System; using System.Threading.Tasks; using System.Net; using System.Threading; using TMDbLib.Objects.Authentication; using TMDbLib.Rest; namespace TMDbLib.Client { public partial class TMDbClient { public async Task AuthenticationCreateGuestSessionAsync(CancellationToken cancellationToken = default) { RestRequest request = _client.Create("authentication/guest_session/new"); //{ // DateFormat = "yyyy-MM-dd HH:mm:ss UTC" //}; GuestSession response = await request.GetOfT(cancellationToken).ConfigureAwait(false); return response; } public async Task AuthenticationGetUserSessionAsync(string initialRequestToken, CancellationToken cancellationToken = default) { RestRequest request = _client.Create("authentication/session/new"); request.AddParameter("request_token", initialRequestToken); using RestResponse response = await request.Get(cancellationToken).ConfigureAwait(false); if (response.StatusCode == HttpStatusCode.Unauthorized) throw new UnauthorizedAccessException(); return await response.GetDataObject().ConfigureAwait(false); } /// /// Conveniance method combining 'AuthenticationRequestAutenticationTokenAsync', 'AuthenticationValidateUserTokenAsync' and 'AuthenticationGetUserSessionAsync' /// /// A valid TMDb username /// The passoword for the provided login /// A cancellation token public async Task AuthenticationGetUserSessionAsync(string username, string password, CancellationToken cancellationToken = default) { Token token = await AuthenticationRequestAutenticationTokenAsync(cancellationToken).ConfigureAwait(false); await AuthenticationValidateUserTokenAsync(token.RequestToken, username, password, cancellationToken).ConfigureAwait(false); return await AuthenticationGetUserSessionAsync(token.RequestToken, cancellationToken).ConfigureAwait(false); } public async Task AuthenticationRequestAutenticationTokenAsync(CancellationToken cancellationToken = default) { RestRequest request = _client.Create("authentication/token/new"); using RestResponse response = await request.Get(cancellationToken).ConfigureAwait(false); Token token = await response.GetDataObject().ConfigureAwait(false); token.AuthenticationCallback = response.GetHeader("Authentication-Callback"); return token; } public async Task AuthenticationValidateUserTokenAsync(string initialRequestToken, string username, string password, CancellationToken cancellationToken = default) { RestRequest request = _client.Create("authentication/token/validate_with_login"); request.AddParameter("request_token", initialRequestToken); request.AddParameter("username", username); request.AddParameter("password", password); RestResponse response; try { response = await request.Get(cancellationToken).ConfigureAwait(false); } catch (AggregateException ex) { throw ex.InnerException; } using RestResponse _ = response; if (response.StatusCode == HttpStatusCode.Unauthorized) { throw new UnauthorizedAccessException("Call to TMDb returned unauthorized. Most likely the provided user credentials are invalid."); } } } }