https and auth token rollover
This commit is contained in:
@@ -7,7 +7,8 @@ public static class Cupid
|
||||
{
|
||||
private static string serverAddress;
|
||||
public static string ServerAddress => serverAddress;
|
||||
public static string CupidURI => "http://" + serverAddress + ":" + port;
|
||||
private static string cupidBaseUri;
|
||||
public static string CupidURI => cupidBaseUri;
|
||||
|
||||
private static int port;
|
||||
public static int Port => port;
|
||||
@@ -24,10 +25,16 @@ public static class Cupid
|
||||
public static int RoomPort = -1;
|
||||
|
||||
|
||||
public static async Task Init(string _serverAddress, int _port, string _bearerToken)
|
||||
public static async Task Init(string _serverAddress, int _port, string _bearerToken, string _settingsPassword)
|
||||
{
|
||||
serverAddress = _serverAddress;
|
||||
port = _port;
|
||||
if (!TryBuildEndpoints(_serverAddress, _port, out serverAddress, out cupidBaseUri, out port))
|
||||
{
|
||||
Logger.Log("Cupid: invalid or empty server address.");
|
||||
bearerToken = _bearerToken ?? "";
|
||||
settings = null;
|
||||
return;
|
||||
}
|
||||
|
||||
bearerToken = _bearerToken ?? "";
|
||||
|
||||
if (string.IsNullOrEmpty(bearerToken))
|
||||
@@ -37,7 +44,9 @@ public static class Cupid
|
||||
return;
|
||||
}
|
||||
|
||||
using (UnityWebRequest www = UnityWebRequest.Get(CupidURI + "/settings"))
|
||||
string settingsPassword = _settingsPassword ?? "";
|
||||
string settingsUrl = CupidURI + "/settings?password=" + UnityWebRequest.EscapeURL(settingsPassword);
|
||||
using (UnityWebRequest www = UnityWebRequest.Get(settingsUrl))
|
||||
{
|
||||
www.SetRequestHeader("Authorization", "Bearer " + bearerToken);
|
||||
var operation = www.SendWebRequest();
|
||||
@@ -63,6 +72,13 @@ public static class Cupid
|
||||
return;
|
||||
}
|
||||
|
||||
if (body.Trim() == "403 Unauthorized")
|
||||
{
|
||||
Logger.Log("Cupid settings: wrong or missing password query (server rejected /settings).");
|
||||
settings = null;
|
||||
return;
|
||||
}
|
||||
|
||||
settings = JsonUtility.FromJson<CupidSettings>(body);
|
||||
if (settings == null) { throw new NullReferenceException(); }
|
||||
Logger.Log("Cupid init success");
|
||||
@@ -76,6 +92,40 @@ public static class Cupid
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Plain host/IP + HTTP port, or an absolute URL (https://host with no port uses 443).
|
||||
/// Sets <paramref name="hostOnly"/> for game client transport; <paramref name="baseUri"/> has no trailing slash.
|
||||
/// </summary>
|
||||
static bool TryBuildEndpoints(string input, int fallbackHttpPort, out string hostOnly, out string baseUri, out int resolvedPort)
|
||||
{
|
||||
hostOnly = "";
|
||||
baseUri = "";
|
||||
resolvedPort = fallbackHttpPort;
|
||||
input = (input ?? "").Trim();
|
||||
if (string.IsNullOrEmpty(input))
|
||||
return false;
|
||||
|
||||
if (input.IndexOf("://", StringComparison.Ordinal) >= 0
|
||||
&& Uri.TryCreate(input, UriKind.Absolute, out Uri uri)
|
||||
&& (uri.Scheme == Uri.UriSchemeHttp || uri.Scheme == Uri.UriSchemeHttps))
|
||||
{
|
||||
hostOnly = uri.Host;
|
||||
string authority = uri.GetLeftPart(UriPartial.Authority);
|
||||
string path = uri.AbsolutePath;
|
||||
if (!string.IsNullOrEmpty(path) && path != "/")
|
||||
baseUri = authority.TrimEnd('/') + path.TrimEnd('/');
|
||||
else
|
||||
baseUri = authority;
|
||||
resolvedPort = uri.Port;
|
||||
return true;
|
||||
}
|
||||
|
||||
hostOnly = input;
|
||||
baseUri = "http://" + input + ":" + fallbackHttpPort;
|
||||
resolvedPort = fallbackHttpPort;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
public static string RandomUsername{
|
||||
get{
|
||||
|
||||
Reference in New Issue
Block a user