aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Tango.Web/TangoWebClient.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Visual_Studio/Tango.Web/TangoWebClient.cs')
-rw-r--r--Software/Visual_Studio/Tango.Web/TangoWebClient.cs82
1 files changed, 37 insertions, 45 deletions
diff --git a/Software/Visual_Studio/Tango.Web/TangoWebClient.cs b/Software/Visual_Studio/Tango.Web/TangoWebClient.cs
index bb943533a..42a9d801c 100644
--- a/Software/Visual_Studio/Tango.Web/TangoWebClient.cs
+++ b/Software/Visual_Studio/Tango.Web/TangoWebClient.cs
@@ -15,8 +15,8 @@ namespace Tango.Web
private bool _disposed;
private TLoginRequest _lastLoginRequest;
- private DeploymentSlot _environment;
- public DeploymentSlot Environment
+ private DeploymentSlot? _environment;
+ public DeploymentSlot? Environment
{
get { return _environment; }
set
@@ -31,26 +31,40 @@ namespace Tango.Web
}
}
+ public String Address { get; set; }
public String Controller { get; private set; }
+ public String Token { get; private set; }
public WebToken WebToken { get; private set; }
public bool IsAuthenticated { get; private set; }
public TangoWebClient(DeploymentSlot environment, String controller)
{
+ _client = new WebTransportClient();
Controller = controller;
Environment = environment;
- _client = new WebTransportClient();
}
- public TangoWebClient(DeploymentSlot environment, String controller, WebToken token) : this(environment, controller)
+ public TangoWebClient(DeploymentSlot environment, String controller, String token) : this(environment, controller)
{
- WebToken = token;
+ Token = token;
+ }
+
+ public TangoWebClient(String address, String controller, String token)
+ {
+ _client = new WebTransportClient();
+ Address = address;
+ Controller = controller;
+ Token = token;
}
public async Task<TLoginResponse> Login(TLoginRequest request)
{
var response = await _client.PostJson<TLoginRequest, TLoginResponse>(GetActionAddress("Login"), request);
- WebToken = response.WebToken;
+ Token = response.AccessToken;
+ _client.AuthenticationToken = Token;
+
+ WebToken = WebToken.FromToken(Token);
+
_lastLoginRequest = request;
IsAuthenticated = true;
return response;
@@ -58,27 +72,11 @@ namespace Tango.Web
protected virtual async Task<TResponse> Post<TRequest, TResponse>(String action, TRequest request) where TRequest : class, IWebRequestMessage where TResponse : class, IWebResponseMessage
{
- bool has_own_token = false;
-
- if (request is WebRequestSecureMessage)
+ if (IsAuthenticated)
{
- has_own_token = (request as WebRequestSecureMessage).AccessToken != null;
-
- if (!has_own_token)
+ if (DateTime.UtcNow >= WebToken.Expiration)
{
- if (IsAuthenticated)
- {
- if (DateTime.UtcNow >= WebToken.Expiration)
- {
- await Login(_lastLoginRequest);
- }
- }
- else
- {
- throw new AuthenticationException("This tango web client has not been authenticated with the service. Please use the login method to authenticate.");
- }
-
- (request as WebRequestSecureMessage).AccessToken = WebToken.AccessToken;
+ await Login(_lastLoginRequest);
}
}
@@ -87,28 +85,15 @@ namespace Tango.Web
var response = await _client.PostJson<TRequest, TResponse>(GetActionAddress(action), request);
return response;
}
- catch (SessionExpiredException)
+ catch (TokenExpiredException)
{
- if (!has_own_token)
+ try
{
- try
- {
- await Login(_lastLoginRequest);
-
- if (request is WebRequestSecureMessage)
- {
- (request as WebRequestSecureMessage).AccessToken = WebToken.AccessToken;
- }
-
- var response = await _client.PostJson<TRequest, TResponse>(GetActionAddress(action), request);
- return response;
- }
- catch
- {
- throw;
- }
+ await Login(_lastLoginRequest);
+ var response = await _client.PostJson<TRequest, TResponse>(GetActionAddress(action), request);
+ return response;
}
- else
+ catch
{
throw;
}
@@ -126,7 +111,14 @@ namespace Tango.Web
protected virtual String GetServiceAddress()
{
- return Environment.ToAddress() + $"/api/{Controller}/";
+ if (Environment != null)
+ {
+ return Environment.Value.ToAddress() + $"/api/{Controller}/";
+ }
+ else
+ {
+ return Address + $"/api/{Controller}/";
+ }
}
public virtual void Dispose()