68 lines
2.0 KiB
C#
68 lines
2.0 KiB
C#
using Dinah.Core;
|
|
using Microsoft.Web.WebView2.WinForms;
|
|
using System;
|
|
using System.Windows.Forms;
|
|
|
|
namespace LibationWinForms.Login
|
|
{
|
|
public partial class WebLoginDialog : Form
|
|
{
|
|
public string ResponseUrl { get; private set; }
|
|
private readonly string loginUrl;
|
|
private readonly string accountID;
|
|
private readonly WebView2 webView = new();
|
|
public WebLoginDialog()
|
|
{
|
|
InitializeComponent();
|
|
webView.Dock = DockStyle.Fill;
|
|
Controls.Add(webView);
|
|
Shown += WebLoginDialog_Shown;
|
|
this.SetLibationIcon();
|
|
}
|
|
|
|
public WebLoginDialog(string accountID, string loginUrl) : this()
|
|
{
|
|
this.accountID = ArgumentValidator.EnsureNotNullOrWhiteSpace(accountID, nameof(accountID));
|
|
this.loginUrl = ArgumentValidator.EnsureNotNullOrWhiteSpace(loginUrl, nameof(loginUrl));
|
|
}
|
|
|
|
private async void WebLoginDialog_Shown(object sender, EventArgs e)
|
|
{
|
|
await webView.EnsureCoreWebView2Async();
|
|
webView.CoreWebView2.NavigationStarting += CoreWebView2_NavigationStarting;
|
|
webView.CoreWebView2.DOMContentLoaded += CoreWebView2_DOMContentLoaded;
|
|
webView.CoreWebView2.Navigate(loginUrl);
|
|
}
|
|
|
|
private async void CoreWebView2_DOMContentLoaded(object sender, Microsoft.Web.WebView2.Core.CoreWebView2DOMContentLoadedEventArgs e)
|
|
{
|
|
await webView.CoreWebView2.ExecuteScriptAsync(getScript(accountID));
|
|
}
|
|
|
|
private static string getScript(string accountID) => $$"""
|
|
(function() {
|
|
var inputs = document.getElementsByTagName('input');
|
|
for (index = 0; index < inputs.length; ++index) {
|
|
if (inputs[index].name.includes('email')) {
|
|
inputs[index].value = '{{accountID}}';
|
|
}
|
|
if (inputs[index].name.includes('password')) {
|
|
inputs[index].focus();
|
|
}
|
|
}
|
|
})()
|
|
""";
|
|
|
|
private void CoreWebView2_NavigationStarting(object sender, Microsoft.Web.WebView2.Core.CoreWebView2NavigationStartingEventArgs e)
|
|
{
|
|
if (new Uri(e.Uri).AbsolutePath.Contains("/ap/maplanding"))
|
|
{
|
|
ResponseUrl = e.Uri;
|
|
e.Cancel = true;
|
|
DialogResult = DialogResult.OK;
|
|
Close();
|
|
}
|
|
}
|
|
}
|
|
}
|