Поиск по этому блогу

C# Windows Form - CefSharpBrowser - Authentication Required

C# Windows Form - CefSharpBrowser - Authentication Required
using CefSharp;
using CefSharp.Handler;
using CefSharp.WinForms;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using System.Security.Cryptography.X509Certificates;
 
namespace CefSharpBrowser
{
    public partial class Form1 : Form
    {
        ChromiumWebBrowser browser = new ChromiumWebBrowser();
        public Form1()
        {
            InitializeComponent();
 
            // Создаём новую панель
            Panel panelBrowser = new Panel();
            panelBrowser.Name = "panelBrowser1";
            panelBrowser.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
            panelBrowser.Location = new Point(0, 0);
            panelBrowser.Size = new Size(this.Width, this.Height); // panelBrowser.Width = int; panels[0].Height = int;
            Controls.Add(panelBrowser);
            Controls.SetChildIndex(panelBrowser, 0);
 
            // Создание экземпляра ChromiumWebBrowser
            CefSettings settings = new CefSettings();
            Cef.Initialize(settings);
 
            // Повторяем несколько раз код ниже если хотим сделать несколько браузеров на одной форме
            browser.RequestHandler = new CustomRequestHandler();
            browser = new ChromiumWebBrowser("http://192.168.1.1/");
            browser.RequestHandler = new RequestHandler();
            panelBrowser.Controls.Add(browser);
            browser.Dock = DockStyle.Fill;
 
            // Выводим ошибки в окно
            browser.ConsoleMessage += (sender, e) =>
            {
                if (e.Level == LogSeverity.Error)
                {
                    MessageBox.Show($"[ERROR] {e.Message}");
                }
            };
        }
        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            System.Environment.Exit(0);
        }
 
    }
    
    internal class CustomRequestHandler : IRequestHandler
    {
        public bool AutoLigon = false;
        public bool GetAuthCredentials(IWebBrowser chromiumWebBrowser, IBrowser browser, string originUrl, bool isProxy, string host, int port, string realm, string scheme, IAuthCallback callback)
        {
            // Автоматический ввод логина и пароля
            // Можно эти данные загружать с login.txt
            if (AutoLigon)
            {
                callback.Continue("admin", "12345678");
            }
            else
            {
                // Вызываем форму Авторизации из LoginForm.cs
                //var loginForm = new LoginForm();
                //loginForm.SetAlert($"Host: {host}, {realm}");
                //if (loginForm.ShowDialog() == DialogResult.OK)
                //{
                //    var login = loginForm.Login;
                //    var password = loginForm.Password;
                //    callback.Continue(login, password);
                //    return true;
                //}
                
                // Создаём новое одноразовое окно Авторизации
                using (var loginForm = new Form())
                {
                    loginForm.Text = "Authentication Required";
                    loginForm.Size = new System.Drawing.Size(290, 195);
                    loginForm.StartPosition = FormStartPosition.CenterScreen;
                    loginForm.FormBorderStyle = FormBorderStyle.FixedDialog;
                    //loginForm.ControlBox = false;
                    loginForm.MinimizeBox = false; // Отключить кнопку "Свернуть"
                    loginForm.MaximizeBox = false; // Отключить кнопку "Развернуть"
                    loginForm.TopMost = true;
 
                    var label = new Label();
                    label.Text = $"The server: \"{host}\"\nasks for a Username and Password.\nThe server reports: \"{realm}\"";
                    label.Location = new System.Drawing.Point(10, 10);
                    label.AutoSize = true;
 
                    var usernameLabel = new Label();
                    usernameLabel.Text = "Username:";
                    usernameLabel.Location = new System.Drawing.Point(10, 61);
                    usernameLabel.AutoSize = true;
 
                    var usernameTextBox = new TextBox();
                    usernameTextBox.Location = new System.Drawing.Point(75, 59);
                    usernameTextBox.Size = new System.Drawing.Size(189, 20);
 
                    var passwordLabel = new Label();
                    passwordLabel.Text = "Password:";
                    passwordLabel.Location = new System.Drawing.Point(10, 93);
                    passwordLabel.AutoSize = true;
 
                    var passwordTextBox = new TextBox();
                    passwordTextBox.Location = new System.Drawing.Point(75, 91);
                    passwordTextBox.Size = new System.Drawing.Size(189, 20);
                    passwordTextBox.PasswordChar = '*';
 
                    var okButton = new Button();
                    okButton.Text = "OK";
                    okButton.Location = new System.Drawing.Point(110, 122);
                    okButton.Click += (sender, e) =>
                    {
                        var login = usernameTextBox.Text;
                        var password = passwordTextBox.Text;
 
                        callback.Continue(login, password);
                        loginForm.DialogResult = DialogResult.OK;
                        loginForm.Close();
                    };
 
                    var cancelButton = new Button();
                    cancelButton.Text = "Cancel";
                    cancelButton.Location = new System.Drawing.Point(190, 122);
                    cancelButton.Click += (sender, e) =>
                    {
                        loginForm.DialogResult = DialogResult.Cancel;
                        loginForm.Close();
                    };
 
                    loginForm.Controls.Add(label);
                    loginForm.Controls.Add(usernameLabel);
                    loginForm.Controls.Add(usernameTextBox);
                    loginForm.Controls.Add(passwordLabel);
                    loginForm.Controls.Add(passwordTextBox);
                    loginForm.Controls.Add(okButton);
                    loginForm.Controls.Add(cancelButton);
 
                    if (loginForm.ShowDialog() == DialogResult.OK)
                    {
                        return true;
                    }
                    else if (loginForm.DialogResult == DialogResult.Cancel)
                    {
                        callback.Cancel(); // Отменяем аутентификацию
                        return false;
                    }
                }
            }
            return true;
        }
 
        public IResourceRequestHandler GetResourceRequestHandler(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool isNavigation, bool isDownload, string requestInitiator, ref bool disableDefaultHandling)
        {
            return null;
        }
 
        public bool OnBeforeBrowse(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool userGesture, bool isRedirect)
        {
            return false;
        }
 
        public bool OnCertificateError(IWebBrowser chromiumWebBrowser, IBrowser browser, CefErrorCode errorCode, string requestUrl, ISslInfo sslInfo, IRequestCallback callback)
        {
            return false;
        }
 
        public void OnDocumentAvailableInMainFrame(IWebBrowser chromiumWebBrowser, IBrowser browser)
        {
        }
 
        public bool OnOpenUrlFromTab(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, string targetUrl, WindowOpenDisposition targetDisposition, bool userGesture)
        {
            return false;
        }
 
        public void OnRenderProcessTerminated(IWebBrowser chromiumWebBrowser, IBrowser browser, CefTerminationStatus status)
        {
        }
 
        public void OnRenderViewReady(IWebBrowser chromiumWebBrowser, IBrowser browser)
        {
        }
 
        public bool OnSelectClientCertificate(IWebBrowser chromiumWebBrowser, IBrowser browser, bool isProxy, string host, int port, X509Certificate2Collection certificates, ISelectClientCertificateCallback callback)
        {
            return false;
        }
    }
}