2024-05-31 13:16:09 +00:00
|
|
|
using Microsoft.AspNetCore.Components;
|
|
|
|
|
using Microsoft.AspNetCore.Components.Authorization;
|
|
|
|
|
using System.Diagnostics;
|
|
|
|
|
using System.Web;
|
2024-06-05 12:41:08 +00:00
|
|
|
using Microsoft.Extensions.Configuration;
|
|
|
|
|
|
2024-05-31 13:16:09 +00:00
|
|
|
|
|
|
|
|
namespace Neighbourhood.omg.lol;
|
|
|
|
|
|
|
|
|
|
public partial class LoginWebViewPage : ContentPage
|
|
|
|
|
{
|
|
|
|
|
private AuthenticationStateProvider AuthStateProvider { get; set; }
|
2024-06-01 04:38:12 +00:00
|
|
|
private NavigatorService NavigatorService { get; set; }
|
2024-06-05 12:41:08 +00:00
|
|
|
private IConfiguration Configuration { get; set; }
|
2024-06-14 07:20:04 +00:00
|
|
|
private RestService api { get; set; }
|
2024-06-05 12:41:08 +00:00
|
|
|
|
|
|
|
|
private string? client_id;
|
|
|
|
|
private string? client_secret;
|
|
|
|
|
private string? redirect_uri;
|
2024-05-31 13:16:09 +00:00
|
|
|
|
2024-06-14 07:20:04 +00:00
|
|
|
public LoginWebViewPage(AuthenticationStateProvider authStateProvider, NavigatorService navigatorService, IConfiguration configuration, RestService restService)
|
2024-05-31 13:16:09 +00:00
|
|
|
{
|
2024-06-05 12:41:08 +00:00
|
|
|
this.AuthStateProvider = authStateProvider;
|
2024-06-01 04:38:12 +00:00
|
|
|
this.NavigatorService = navigatorService;
|
2024-06-05 12:41:08 +00:00
|
|
|
this.Configuration = configuration;
|
2024-06-14 07:20:04 +00:00
|
|
|
this.api = restService;
|
2024-05-31 13:16:09 +00:00
|
|
|
InitializeComponent();
|
2024-06-05 12:41:08 +00:00
|
|
|
client_id = configuration.GetValue<string>("client_id");
|
|
|
|
|
client_secret = configuration.GetValue<string>("client_secret");
|
|
|
|
|
redirect_uri = configuration.GetValue<string>("redirect_uri");
|
2024-05-31 13:16:09 +00:00
|
|
|
|
2024-06-05 12:41:08 +00:00
|
|
|
// make sure they're all not null first.
|
|
|
|
|
if ( client_id != null
|
|
|
|
|
&& client_secret != null
|
|
|
|
|
&& redirect_uri != null) {
|
|
|
|
|
this.loginwebview.Source = $"https://home.omg.lol/oauth/authorize?client_id={client_id}&scope=everything&redirect_uri={redirect_uri}&response_type=code";
|
|
|
|
|
}
|
2024-05-31 13:16:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public async void loginwebview_Navigating(object sender, WebNavigatingEventArgs e) {
|
2024-06-05 12:41:08 +00:00
|
|
|
if ( client_id != null
|
|
|
|
|
&& client_secret != null
|
|
|
|
|
&& redirect_uri != null
|
|
|
|
|
&& e.Url.StartsWith(redirect_uri))
|
|
|
|
|
{
|
2024-05-31 13:16:09 +00:00
|
|
|
Uri uri = new Uri(e.Url);
|
|
|
|
|
var query = HttpUtility.ParseQueryString(uri.Query);
|
|
|
|
|
string? code = query.Get("code");
|
|
|
|
|
if (!string.IsNullOrEmpty(code)) {
|
2024-06-05 12:41:08 +00:00
|
|
|
string? token = await api.OAuth(code, client_id, client_secret, redirect_uri);
|
2024-05-31 13:16:09 +00:00
|
|
|
if (!string.IsNullOrEmpty(token)) {
|
|
|
|
|
await ((CustomAuthenticationStateProvider)this.AuthStateProvider).Login(token);
|
2024-06-01 04:38:12 +00:00
|
|
|
NavigatorService.NavigationManager.NavigateTo(NavigatorService.NavigationManager.Uri, forceLoad: true);
|
2024-05-31 13:16:09 +00:00
|
|
|
await Shell.Current.GoToAsync("..");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|