diff options
Diffstat (limited to 'Software/Visual_Studio/Tango.Web/TangoWebClient.cs')
| -rw-r--r-- | Software/Visual_Studio/Tango.Web/TangoWebClient.cs | 82 |
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() |
