184 lines
6.2 KiB
C#
184 lines
6.2 KiB
C#
using System;
|
|
using System.IO;
|
|
using UnityEngine;
|
|
using UnityEngine.Networking;
|
|
using Supabase.Gotrue;
|
|
using Supabase.Gotrue.Exceptions;
|
|
using Client = Supabase.Client;
|
|
using Cysharp.Threading.Tasks;
|
|
using TMPro;
|
|
|
|
namespace GhostSystem
|
|
{
|
|
public class SupabaseManager : MonoBehaviour
|
|
{
|
|
public static SupabaseManager instance { get; private set; }
|
|
|
|
public const string subabaseUrl = "https://cezghxztvyggwgunyhmq.supabase.co";
|
|
public const string supabaseAnonKey = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImNlemdoeHp0dnlnZ3dndW55aG1xIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NDcyMTk5MzcsImV4cCI6MjA2Mjc5NTkzN30.vr6-3X3Ux_DjcCiw_CqG-VKP8BiBXtmCzAXjYTiA_vY";
|
|
|
|
public Client supabase { get; private set; }
|
|
public string userId => supabase?.Auth?.CurrentUser?.Id;
|
|
|
|
private string email;
|
|
private string password;
|
|
private const string authFileName = "auth.txt";
|
|
|
|
public static event Action OnSuperbaseReady;
|
|
|
|
public TMP_Text textbox;
|
|
|
|
private void Start()
|
|
{
|
|
Initialize().Forget();
|
|
}
|
|
|
|
|
|
private async UniTask Initialize()
|
|
{
|
|
if (instance == null)
|
|
{
|
|
instance = this;
|
|
DontDestroyOnLoad(gameObject);
|
|
}
|
|
else
|
|
{
|
|
Destroy(gameObject);
|
|
return;
|
|
}
|
|
|
|
Debug.Log("🌐 Starting Supabase setup...");
|
|
await RunDiagnostics();
|
|
|
|
await InitSupabaseAsync();
|
|
OnSuperbaseReady?.Invoke();
|
|
}
|
|
|
|
private async UniTask InitSupabaseAsync()
|
|
{
|
|
if (supabase != null)
|
|
return;
|
|
|
|
string path = Path.Combine(Application.persistentDataPath, authFileName);
|
|
|
|
if (File.Exists(path))
|
|
{
|
|
string[] lines = await UniTask.Run(() => File.ReadAllLines(path));
|
|
email = lines[0];
|
|
password = lines[1];
|
|
}
|
|
else
|
|
{
|
|
email = string.IsNullOrEmpty(SystemInfo.deviceUniqueIdentifier)
|
|
? $"{Guid.NewGuid()}@device.local" // Fallback, generiert theoretisch bei jeder Neuinstallation der App einen anderen User.
|
|
: $"{SystemInfo.deviceUniqueIdentifier}@device.local";
|
|
|
|
password = email; // selbe GUID, damit das Passwort sich nicht pro App-Version verändern kann.
|
|
|
|
await UniTask.Run(() => File.WriteAllLines(path, new[] { email, password }));
|
|
}
|
|
|
|
Debug.Log($"📧 Using Email: {email}, Password: {password}");
|
|
|
|
supabase = new Client(subabaseUrl, supabaseAnonKey);
|
|
|
|
try
|
|
{
|
|
await supabase.InitializeAsync();
|
|
textbox.text += "\n\rSupabase initialized.";
|
|
Debug.Log("✅ Supabase initialized.");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Debug.LogError($"❌ Initialization failed: {ex}");
|
|
textbox.text += "\n\rInitialization failed";
|
|
}
|
|
|
|
await AuthenticateAsync(email, password);
|
|
Debug.Log($"👤 Authenticated user ID: {userId}");
|
|
}
|
|
|
|
public async UniTask AuthenticateAsync(string email, string password)
|
|
{
|
|
try
|
|
{
|
|
await supabase.Auth.SignIn(email, password);
|
|
textbox.text += "\n\rSign-in successful";
|
|
Debug.Log("🔓 Sign-in successful");
|
|
}
|
|
catch (Exception authEx)
|
|
{
|
|
Debug.LogWarning($"Sign-in failed, trying sign-up: {authEx.Message}");
|
|
try
|
|
{
|
|
await supabase.Auth.SignUp(email, password);
|
|
textbox.text += "\n\rSign-up successful";
|
|
Debug.Log("🆕 Sign-up successful");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
textbox.text += "\n\rAuthentication failed";
|
|
Debug.LogError($"❌ Authentication failed: {ex}");
|
|
}
|
|
}
|
|
}
|
|
|
|
private async UniTask RunDiagnostics()
|
|
{
|
|
await UniTask.WhenAll(CheckSupabaseHealthAsync(), CheckGoogleConnectionAsync());
|
|
}
|
|
|
|
private async UniTask CheckSupabaseHealthAsync()
|
|
{
|
|
using var www = UnityWebRequest.Get($"{subabaseUrl}/auth/v1/health");
|
|
www.SetRequestHeader("apikey", supabaseAnonKey);
|
|
await www.SendWebRequest();
|
|
|
|
if (www.result == UnityWebRequest.Result.Success)
|
|
{
|
|
//textbox.text += $"\n\rSupabase health: {www.downloadHandler.text}";
|
|
Debug.Log($"✅ Supabase health: {www.downloadHandler.text}");
|
|
}
|
|
else
|
|
{
|
|
//textbox.text += $"\n\rSupabase health check failed: {www.error}";
|
|
Debug.LogError($"❌ Supabase health check failed: {www.error}");
|
|
}
|
|
}
|
|
|
|
private async UniTask CheckGoogleConnectionAsync()
|
|
{
|
|
using var www = UnityWebRequest.Get("https://www.google.com");
|
|
await www.SendWebRequest();
|
|
|
|
if (www.result == UnityWebRequest.Result.Success)
|
|
{
|
|
//textbox.text += "\n\rGoogle request succeeded.";
|
|
Debug.Log("✅ Google request succeeded.");
|
|
}
|
|
else
|
|
{
|
|
textbox.text += $"\n\rGoogle connection failed: {www.error}";
|
|
Debug.LogError($"❌ Google connection failed: {www.error}");
|
|
}
|
|
}
|
|
|
|
private async UniTask CheckApacheConnectionAsync()
|
|
{
|
|
using var www = UnityWebRequest.Get("http://192.168.0.85/test/index.html");
|
|
await www.SendWebRequest();
|
|
|
|
if (www.result == UnityWebRequest.Result.Success)
|
|
{
|
|
textbox.text += "\n\rApache request succeeded.";
|
|
Debug.Log("Apache request succeeded.");
|
|
}
|
|
else
|
|
{
|
|
textbox.text += $"\n\rApache connection failed: {www.error}";
|
|
Debug.LogError($"❌ Apache connection failed: {www.error}");
|
|
}
|
|
}
|
|
}
|
|
}
|