Files
App/OwnChar.App.Desktop/UI/MainTabs/TabLoginView.cs
2024-06-11 07:37:13 +02:00

81 lines
2.5 KiB
C#

using OwnChar.App.Desktop.Api;
using OwnChar.App.Desktop.LangRes;
using OwnChar.Data;
using Pilz.Cryptography;
using Pilz.Plugins.Advanced;
using Pilz.UI;
using System;
using System.Drawing;
using System.Windows.Forms;
using Telerik.WinControls;
using Telerik.WinControls.UI;
namespace OwnChar.App.Desktop.UI.MainTabs;
public partial class TabLoginView : UserControl, ILoadContent
{
private readonly IMainWindowApi mainApi;
private IDataManager? dataManager;
public TabLoginView(IMainWindowApi mainApi)
{
this.mainApi = mainApi;
InitializeComponent();
}
public void LoadContent()
{
LoadProvidersList();
}
private void LoadProvidersList()
{
radDropDownList_LoginProvider.BeginUpdate();
foreach (var feat in PluginFeatureController.Instance.Features.Get(FeatureCodes.LoginProvider))
{
if (feat is LoginProvider provider)
{
var item = new RadListDataItem(feat.Name, provider)
{
SvgImage = feat.Icon as RadSvgImage,
Image = feat.Icon as Image,
};
radDropDownList_LoginProvider.Items.Add(item);
}
}
radDropDownList_LoginProvider.EndUpdate();
if (radDropDownList_LoginProvider.Items.Count > 0)
radDropDownList_LoginProvider.SelectedIndex = 0;
}
private void RadDropDownList_LoginProvider_SelectedValueChanged(object sender, EventArgs e)
{
if (radDropDownList_LoginProvider.SelectedValue is LoginProvider provider)
dataManager = provider.GetDefault(mainApi);
}
private void RadButton_Login_Click(object sender, EventArgs e)
{
var username = radTextBoxControl_Username.Text.Trim();
var password = (SecureString)radTextBoxControl_Password.Text;
if (mainApi.Manager?.Login(dataManager, username, password) is not bool success || !success)
{
RadMessageBox.Show(LoginPageLangRes.MsgBox_LoginFailed, LoginPageLangRes.MsgBox_LoginFailed_Title, MessageBoxButtons.OK, RadMessageIcon.Exclamation);
return;
}
mainApi.OpenTab(new TabUserView(mainApi, mainApi.Manager.CurrentUser), mainApi.Manager.CurrentUser!.Username!);
mainApi.CloseTab(this);
}
private void RadButton_ConfigureProvider_Click(object sender, EventArgs e)
{
if (radDropDownList_LoginProvider.SelectedValue is LoginProvider provider)
provider.Configure(mainApi, ref dataManager);
}
}