This repository has been archived by the owner on Nov 24, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
GH-78: Add new authentication module
- Loading branch information
1 parent
f21a34c
commit 23d9fb6
Showing
4 changed files
with
474 additions
and
52 deletions.
There are no files selected for viewing
194 changes: 194 additions & 0 deletions
194
Source/Lib/TraktApiSharp/Modules/TraktAuthenticationModule.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | ||
} | ||
} | ||
} |
Oops, something went wrong.