2025-03-15 22:10:24 -04:00

83 lines
3.8 KiB
C#

namespace QuestShare.Services.API
{
internal class Authorize_Client
{
public static void HandleDispatch()
{
if (ClientState.LocalContentId == 0)
{
_ = ((ApiService)Plugin.GetService<ApiService>()).Disconnect();
return;
}
var knownCodes = ShareService.ShareCodes.Select(s => s).ToList();
if (HostService.ActiveSession != null)
{
knownCodes.Add(new Objects.ShareCode { CharacterId = HostService.ActiveSession.OwnerCharacterId, Code = HostService.ActiveSession.ShareCode });
}
var request = new Authorize.Request()
{
Token = ApiService.Token,
Version = Constants.Version,
ShareCodes = knownCodes,
};
((ApiService)Plugin.GetService<ApiService>()).Invoke(nameof(Authorize), request).ConfigureAwait(false);
}
public static Task HandleResponse(Authorize.Response response)
{
var share = (ShareService)Plugin.GetService<ShareService>();
if (response.Success)
{
ConfigurationManager.Instance.Token = response.Token;
foreach(var session in response.Sessions)
{
if (!session.IsValid)
{
Log.Warning("Session {ShareCode} is invalid.", session.ShareCode);
share.RemoveSession(session.ShareCode);
ShareService.RemoveKnownShareCode(session.ShareCode);
continue;
}
share.AddSession(session);
}
if (response.OwnedSession != null)
{
ConfigurationManager.Instance.OwnedSession = response.OwnedSession;
if (response.OwnedSession.Session != null)
{
Log.Debug("Setting active quest to {QuestId} - {QuestStep}", response.OwnedSession.Session.ActiveQuestId, response.OwnedSession.Session.ActiveQuestStep);
GameQuestManager.SetActiveFlag((uint)response.OwnedSession.Session.ActiveQuestId);
}
}
ConfigurationManager.Save();
ShareService.RecheckShareCodes();
}
else
{
Log.Error("Failed to authorize: {Error}", response.Error);
UiService.LastErrorMessage = $"Failed to authorize: {response.Error}";
_ = ((ApiService)Plugin.GetService<ApiService>()).Disconnect();
if (response.Error == Error.InvalidVersion)
{
UiService.LastServerMessage = "Invalid version detected, please update the plugin.";
((ApiService)Plugin.GetService<ApiService>()).IsLockedOut = true;
}
else if (response.Error == Error.InvalidToken)
{
UiService.LastServerMessage = "Invalid token detected, please reauthorize.";
((ApiService)Plugin.GetService<ApiService>()).IsLockedOut = true;
}
else if (response.Error == Error.BannedTooManyBadRequests)
{
UiService.LastServerMessage = "You are temporarily banned due to too many bad requests.";
((ApiService)Plugin.GetService<ApiService>()).IsLockedOut = true;
}
else if (response.Error == Error.ServerMaintenance)
{
UiService.LastServerMessage = "Server is currently undergoing maintenance. Please try again later.";
}
}
return Task.CompletedTask;
}
}
}