You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
135 lines
5.0 KiB
135 lines
5.0 KiB
8 months ago
|
#if !BESTHTTP_DISABLE_SIGNALR
|
||
|
#if !BESTHTTP_DISABLE_COOKIES && (!UNITY_WEBGL || UNITY_EDITOR)
|
||
|
|
||
|
using System;
|
||
|
|
||
|
using BestHTTP.Cookies;
|
||
|
using BestHTTP.SignalR.Transports;
|
||
|
|
||
|
namespace BestHTTP.SignalR.Authentication
|
||
|
{
|
||
|
public sealed class SampleCookieAuthentication : IAuthenticationProvider
|
||
|
{
|
||
|
#region Public Properties
|
||
|
|
||
|
public Uri AuthUri { get; private set; }
|
||
|
public string UserName { get; private set; }
|
||
|
public string Password { get; private set; }
|
||
|
public string UserRoles { get; private set; }
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region IAuthenticationProvider properties
|
||
|
|
||
|
public bool IsPreAuthRequired { get; private set; }
|
||
|
|
||
|
public event OnAuthenticationSuccededDelegate OnAuthenticationSucceded;
|
||
|
public event OnAuthenticationFailedDelegate OnAuthenticationFailed;
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region Privates
|
||
|
|
||
|
private HTTPRequest AuthRequest;
|
||
|
private Cookie Cookie;
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
public SampleCookieAuthentication(Uri authUri, string user, string passwd, string roles)
|
||
|
{
|
||
|
this.AuthUri = authUri;
|
||
|
this.UserName = user;
|
||
|
this.Password = passwd;
|
||
|
this.UserRoles = roles;
|
||
|
this.IsPreAuthRequired = true;
|
||
|
}
|
||
|
|
||
|
#region IAuthenticationProvider Implementation
|
||
|
|
||
|
public void StartAuthentication()
|
||
|
{
|
||
|
AuthRequest = new HTTPRequest(AuthUri, HTTPMethods.Post, OnAuthRequestFinished);
|
||
|
|
||
|
// Setup the form
|
||
|
AuthRequest.AddField("userName", UserName);
|
||
|
AuthRequest.AddField("Password", Password); // not used in the sample
|
||
|
AuthRequest.AddField("roles", UserRoles);
|
||
|
|
||
|
AuthRequest.Send();
|
||
|
}
|
||
|
|
||
|
public void PrepareRequest(HTTPRequest request, RequestTypes type)
|
||
|
{
|
||
|
// Adding the cookie to the request is not required, as it's managed by the plugin automatically,
|
||
|
// but for now, we want to be really sure that it's added
|
||
|
request.Cookies.Add(Cookie);
|
||
|
}
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region Request Handler
|
||
|
|
||
|
void OnAuthRequestFinished(HTTPRequest req, HTTPResponse resp)
|
||
|
{
|
||
|
AuthRequest = null;
|
||
|
string failReason = string.Empty;
|
||
|
|
||
|
switch (req.State)
|
||
|
{
|
||
|
// The request finished without any problem.
|
||
|
case HTTPRequestStates.Finished:
|
||
|
if (resp.IsSuccess)
|
||
|
{
|
||
|
Cookie = resp.Cookies != null ? resp.Cookies.Find(c => c.Name.Equals(".ASPXAUTH")) : null;
|
||
|
|
||
|
if (Cookie != null)
|
||
|
{
|
||
|
HTTPManager.Logger.Information("CookieAuthentication", "Auth. Cookie found!");
|
||
|
|
||
|
if (OnAuthenticationSucceded != null)
|
||
|
OnAuthenticationSucceded(this);
|
||
|
|
||
|
// return now, all other paths are authentication failures
|
||
|
return;
|
||
|
}
|
||
|
else
|
||
|
HTTPManager.Logger.Warning("CookieAuthentication", failReason = "Auth. Cookie NOT found!");
|
||
|
}
|
||
|
else
|
||
|
HTTPManager.Logger.Warning("CookieAuthentication", failReason = string.Format("Request Finished Successfully, but the server sent an error. Status Code: {0}-{1} Message: {2}",
|
||
|
resp.StatusCode,
|
||
|
resp.Message,
|
||
|
resp.DataAsText));
|
||
|
break;
|
||
|
|
||
|
// The request finished with an unexpected error. The request's Exception property may contain more info about the error.
|
||
|
case HTTPRequestStates.Error:
|
||
|
HTTPManager.Logger.Warning("CookieAuthentication", failReason = "Request Finished with Error! " + (req.Exception != null ? (req.Exception.Message + "\n" + req.Exception.StackTrace) : "No Exception"));
|
||
|
break;
|
||
|
|
||
|
// The request aborted, initiated by the user.
|
||
|
case HTTPRequestStates.Aborted:
|
||
|
HTTPManager.Logger.Warning("CookieAuthentication", failReason = "Request Aborted!");
|
||
|
break;
|
||
|
|
||
|
// Connecting to the server is timed out.
|
||
|
case HTTPRequestStates.ConnectionTimedOut:
|
||
|
HTTPManager.Logger.Error("CookieAuthentication", failReason = "Connection Timed Out!");
|
||
|
break;
|
||
|
|
||
|
// The request didn't finished in the given time.
|
||
|
case HTTPRequestStates.TimedOut:
|
||
|
HTTPManager.Logger.Error("CookieAuthentication", failReason = "Processing the request Timed Out!");
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
if (OnAuthenticationFailed != null)
|
||
|
OnAuthenticationFailed(this, failReason);
|
||
|
}
|
||
|
|
||
|
#endregion
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#endif
|
||
|
#endif
|