Skip to content
This repository has been archived by the owner on Nov 24, 2020. It is now read-only.

Commit

Permalink
GH-78: Add new authentication module
Browse files Browse the repository at this point in the history
  • Loading branch information
henrikfroehling committed Oct 22, 2017
1 parent f21a34c commit 23d9fb6
Show file tree
Hide file tree
Showing 4 changed files with 474 additions and 52 deletions.
194 changes: 194 additions & 0 deletions Source/Lib/TraktApiSharp/Modules/TraktAuthenticationModule.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,194 @@
namespace TraktApiSharp.Modules
{
using Objects.Authentication.Implementations;
using Requests.Authentication;
using Requests.Handler;
using Responses;
using System;
using System.Threading;
using System.Threading.Tasks;
using Utils;

public class TraktAuthenticationModule : ITraktModule
{
private const string DEFAULT_REDIRECT_URI = "urn:ietf:wg:oauth:2.0:oob";

private TraktAuthorization _authorization;
private TraktDevice _device;
private readonly AuthenticationRequestHandler _requestHandler;

internal TraktAuthenticationModule(TraktClient client)
{
Client = client;
_requestHandler = new AuthenticationRequestHandler(client);
}

/// <summary>Gets a reference to the associated <see cref="TraktClient" /> instance.</summary>
public TraktClient Client { get; }

public string OAuthAuthorizationCode { get; set; }

public TraktAuthorization Authorization
{
get { return _authorization = _authorization ?? new TraktAuthorization(); }
set { _authorization = value; }
}

public TraktDevice Device
{
get { return _device = _device ?? new TraktDevice(); }
set { _device = value; }
}

public string AntiForgeryToken { get; } = Guid.NewGuid().ToString();

public string ClientId { get; set; }

public string ClientSecret { get; set; }

public string RedirectUri { get; set; } = DEFAULT_REDIRECT_URI;

public bool IsAuthorized => Authorization != null && !Authorization.IsExpired;

public Task<Pair<bool, TraktResponse<TraktAuthorization>>> CheckIfAuthorizationIsExpiredOrWasRevokedAsync(bool autoRefresh = false, CancellationToken cancellationToken = default(CancellationToken))
=> _requestHandler.CheckIfAuthorizationIsExpiredOrWasRevokedAsync(autoRefresh, cancellationToken);

public Task<Pair<bool, TraktResponse<TraktAuthorization>>> CheckIfAuthorizationIsExpiredOrWasRevokedAsync(TraktAuthorization authorization, bool autoRefresh = false, CancellationToken cancellationToken = default(CancellationToken))
=> _requestHandler.CheckIfAuthorizationIsExpiredOrWasRevokedAsync(authorization, autoRefresh, cancellationToken);

public Task<bool> CheckIfAccessTokenWasRevokedOrIsNotValidAsync(string accessToken, CancellationToken cancellationToken = default(CancellationToken))
=> _requestHandler.CheckIfAccessTokenWasRevokedOrIsNotValidAsync(accessToken, cancellationToken);

public string CreateAuthorizationUrl() => CreateAuthorizationUrl(ClientId);

public string CreateAuthorizationUrl(string clientId) => CreateAuthorizationUrl(clientId, RedirectUri);

public string CreateAuthorizationUrl(string clientId, string redirectUri)
=> CreateAuthorizationUrl(clientId, redirectUri, AntiForgeryToken);

public string CreateAuthorizationUrl(string clientId, string redirectUri, string state)
=> _requestHandler.CreateAuthorizationUrl(clientId, redirectUri, state);

public string CreateAuthorizationUrlWithDefaultState() => CreateAuthorizationUrlWithDefaultState(ClientId);

public string CreateAuthorizationUrlWithDefaultState(string clientId) => CreateAuthorizationUrlWithDefaultState(clientId, RedirectUri);

public string CreateAuthorizationUrlWithDefaultState(string clientId, string redirectUri)
=> _requestHandler.CreateAuthorizationUrlWithDefaultState(clientId, redirectUri);

public Task<TraktResponse<TraktAuthorization>> GetAuthorizationAsync(CancellationToken cancellationToken = default(CancellationToken))
=> GetAuthorizationAsync(OAuthAuthorizationCode, cancellationToken);

public Task<TraktResponse<TraktAuthorization>> GetAuthorizationAsync(string code, CancellationToken cancellationToken = default(CancellationToken))
=> GetAuthorizationAsync(code, ClientId, cancellationToken);

public Task<TraktResponse<TraktAuthorization>> GetAuthorizationAsync(string code, string clientId, CancellationToken cancellationToken = default(CancellationToken))
=> GetAuthorizationAsync(code, clientId, ClientSecret, cancellationToken);

public Task<TraktResponse<TraktAuthorization>> GetAuthorizationAsync(string code, string clientId, string clientSecret, CancellationToken cancellationToken = default(CancellationToken))
=> GetAuthorizationAsync(code, clientId, clientSecret, RedirectUri, cancellationToken);

public async Task<TraktResponse<TraktAuthorization>> GetAuthorizationAsync(string code, string clientId, string clientSecret, string redirectUri, CancellationToken cancellationToken = default(CancellationToken))
{
var request = new AuthorizationRequest
{
RequestBody = new AuthorizationRequestBody
{
ClientId = clientId,
ClientSecret = clientSecret,
Code = code,
RedirectUri = redirectUri
}
};

return await _requestHandler.GetAuthorizationAsync(request, cancellationToken);
}

public Task<TraktResponse<TraktDevice>> GenerateDeviceAsync(CancellationToken cancellationToken = default(CancellationToken))
=> GenerateDeviceAsync(ClientId, cancellationToken);

public async Task<TraktResponse<TraktDevice>> GenerateDeviceAsync(string clientId, CancellationToken cancellationToken = default(CancellationToken))
{
var request = new DeviceRequest
{
RequestBody = new DeviceRequestBody
{
ClientId = clientId
}
};

return await _requestHandler.GetDeviceAsync(request, cancellationToken);
}

public Task<TraktResponse<TraktAuthorization>> PollForAuthorizationAsync(CancellationToken cancellationToken = default(CancellationToken))
=> PollForAuthorizationAsync(Device, cancellationToken);

public Task<TraktResponse<TraktAuthorization>> PollForAuthorizationAsync(TraktDevice device, CancellationToken cancellationToken = default(CancellationToken))
=> PollForAuthorizationAsync(device, ClientId, cancellationToken);

public Task<TraktResponse<TraktAuthorization>> PollForAuthorizationAsync(TraktDevice device, string clientId, CancellationToken cancellationToken = default(CancellationToken))
=> PollForAuthorizationAsync(device, clientId, ClientSecret, cancellationToken);

public async Task<TraktResponse<TraktAuthorization>> PollForAuthorizationAsync(TraktDevice device, string clientId, string clientSecret, CancellationToken cancellationToken = default(CancellationToken))
{
var request = new AuthorizationPollRequest
{
RequestBody = new AuthorizationPollRequestBody
{
ClientId = clientId,
ClientSecret = clientSecret,
Device = device
}
};

return await _requestHandler.PollForAuthorizationAsync(request, cancellationToken);
}

public Task<TraktResponse<TraktAuthorization>> RefreshAuthorizationAsync(CancellationToken cancellationToken = default(CancellationToken))
=> RefreshAuthorizationAsync(Authorization.RefreshToken, cancellationToken);

public Task<TraktResponse<TraktAuthorization>> RefreshAuthorizationAsync(string refreshToken, CancellationToken cancellationToken = default(CancellationToken))
=> RefreshAuthorizationAsync(refreshToken, ClientId, cancellationToken);

public Task<TraktResponse<TraktAuthorization>> RefreshAuthorizationAsync(string refreshToken, string clientId, CancellationToken cancellationToken = default(CancellationToken))
=> RefreshAuthorizationAsync(refreshToken, clientId, ClientSecret, cancellationToken);

public Task<TraktResponse<TraktAuthorization>> RefreshAuthorizationAsync(string refreshToken, string clientId, string clientSecret, CancellationToken cancellationToken = default(CancellationToken))
=> RefreshAuthorizationAsync(refreshToken, clientId, clientSecret, RedirectUri, cancellationToken);

public async Task<TraktResponse<TraktAuthorization>> RefreshAuthorizationAsync(string refreshToken, string clientId, string clientSecret, string redirectUri, CancellationToken cancellationToken = default(CancellationToken))
{
var request = new AuthorizationRefreshRequest
{
RequestBody = new AuthorizationRefreshRequestBody
{
ClientId = clientId,
ClientSecret = clientSecret,
RedirectUri = redirectUri,
RefreshToken = refreshToken
}
};

return await _requestHandler.RefreshAuthorizationAsync(request, cancellationToken);
}

public Task<TraktNoContentResponse> RevokeAuthorizationAsync(CancellationToken cancellationToken = default(CancellationToken))
=> RevokeAuthorizationAsync(Authorization.AccessToken, cancellationToken);

public Task<TraktNoContentResponse> RevokeAuthorizationAsync(string accessToken, CancellationToken cancellationToken = default(CancellationToken))
=> RevokeAuthorizationAsync(accessToken, ClientId, cancellationToken);

public async Task<TraktNoContentResponse> RevokeAuthorizationAsync(string accessToken, string clientId, CancellationToken cancellationToken = default(CancellationToken))
{
var request = new AuthorizationRevokeRequest
{
RequestBody = new AuthorizationRevokeRequestBody
{
AccessToken = accessToken
}
};

return await _requestHandler.RevokeAuthorizationAsync(request, clientId, cancellationToken);
}
}
}
Loading

0 comments on commit 23d9fb6

Please sign in to comment.