...
 
Commits (2)
<metro:MetroWindow x:Class="Main.About"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Main"
xmlns:metro="http://metro.mahapps.com/winfx/xaml/controls"
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
mc:Ignorable="d"
TextElement.Foreground="{DynamicResource MaterialDesignBody}"
TextElement.FontWeight="Regular"
TextElement.FontSize="13"
TextOptions.TextFormattingMode="Ideal"
TextOptions.TextRenderingMode="Auto"
Background="{DynamicResource MaterialDesignPaper}"
FontFamily="{DynamicResource MaterialDesignFont}"
NonActiveWindowTitleBrush="{DynamicResource PrimaryHueDarkBrush}"
WindowTitleBrush="{DynamicResource PrimaryHueDarkBrush}"
BorderBrush="{DynamicResource PrimaryHueMidBrush}"
BorderThickness="1"
WindowStartupLocation="CenterScreen"
TitleCaps="False"
ShowIconOnTitleBar="False"
ResizeMode="NoResize"
Height="345" Width="800"
ShowTitleBar="False"
ShowInTaskbar="False">
<Grid>
<Image HorizontalAlignment="Left" Margin="35,35,0,35" Width="200" Source="Assets\favicon.png"/>
<TextBlock HorizontalAlignment="Left" Margin="260,30,0,0" TextWrapping="Wrap" Text="{x:Static local:App.Name}" VerticalAlignment="Top" FontSize="36" FontWeight="Bold"/>
<TextBlock Margin="260,90,0,10" TextWrapping="WrapWithOverflow" FontSize="14" xml:space="preserve" HorizontalAlignment="Left" Width="466"><Hyperlink Foreground="White" Click="Website_Click"><TextBlock Text="{x:Static local:App.Name}"/></Hyperlink> wird entwickelt und gestaltet von <Hyperlink Foreground="White" Click="DeveloperWebsite_Click"><TextBlock Text="{x:Static local:App.Developer}"/></Hyperlink>.<LineBreak/><LineBreak/>Dieses Projekt benutzt das <Hyperlink Foreground="White" Click="MainProgramm_Click">Main Programm</Hyperlink> von <Hyperlink Foreground="White" Click="RHUtensils_Click">RH Utensils</Hyperlink>, für ein vereinfachtes Account Management, für eine vereinfachte Update auslieferung und für eine einfache darstellung des Programmes.<LineBreak/><LineBreak/>Weitere Informationen zum Source Code sowie zur Lizenzierung findest du<LineBreak/> fürs Main Programm auf der <Hyperlink Foreground="White" Click="MainProgramm_Click">GitLab Seite</Hyperlink> von RH Utensils<LineBreak/> für <TextBlock Text="{x:Static local:App.Name}"/> auf unserer <Hyperlink Foreground="White" Click="SourceCode_Click">Projekt Seite</Hyperlink><LineBreak/><LineBreak/>Main Programm Copyright © <TextBlock Text="{Binding Source={x:Static sys:DateTime.Now}, StringFormat=yyyy}"/> <Hyperlink Foreground="White" Click="HampisProjekte_Click">Hampis Projekte</Hyperlink><LineBreak/><TextBlock Text="{x:Static local:App.Name}"/> Copyright © <TextBlock Text="{Binding Source={x:Static sys:DateTime.Now}, StringFormat=yyyy}"/> <Hyperlink Foreground="White" Click="Copyright_Click"><TextBlock Text="{x:Static local:App.Copyright}"/></Hyperlink></TextBlock>
</Grid>
</metro:MetroWindow>
using MahApps.Metro.Controls;
using System.Windows;
namespace Main
{
public partial class About : MetroWindow
{
public About()
{
InitializeComponent();
}
private void Website_Click(object sender, RoutedEventArgs e)
{
System.Diagnostics.Process.Start(App.Website);
}
private void DeveloperWebsite_Click(object sender, RoutedEventArgs e)
{
System.Diagnostics.Process.Start(App.DeveloperWebsite);
}
private void MainProgramm_Click(object sender, RoutedEventArgs e)
{
System.Diagnostics.Process.Start("https://gitlab.com/hampis-projekte/rh-utensils/main");
}
private void RHUtensils_Click(object sender, RoutedEventArgs e)
{
System.Diagnostics.Process.Start("https://rh-utensils.hampoelz.net/");
}
private void SourceCode_Click(object sender, RoutedEventArgs e)
{
System.Diagnostics.Process.Start(App.SourceCode);
}
private void Copyright_Click(object sender, RoutedEventArgs e)
{
System.Diagnostics.Process.Start(App.CopyrightWebsite);
}
private void HampisProjekte_Click(object sender, RoutedEventArgs e)
{
System.Diagnostics.Process.Start("https://hampoelz.net/");
}
}
}
......@@ -10,15 +10,12 @@
</startup>
<userSettings>
<Main.Properties.Settings>
<setting name="Username" serializeAs="String">
<value />
</setting>
<setting name="Password" serializeAs="String">
<value />
</setting>
<setting name="SkipLogin" serializeAs="String">
<value>False</value>
</setting>
<setting name="Login" serializeAs="String">
<value>False</value>
</setting>
</Main.Properties.Settings>
</userSettings>
<runtime>
......@@ -27,6 +24,30 @@
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.IdentityModel.Tokens" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.4.0.0" newVersion="5.4.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.IdentityModel.Logging" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.4.0.0" newVersion="5.4.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Extensions.Logging.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.2.0.0" newVersion="2.2.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="IdentityModel" publicKeyToken="e7877f4675df049f" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.10.6.0" newVersion="3.10.6.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Extensions.Logging" publicKeyToken="adb9793829ddae60" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.2.0.0" newVersion="2.2.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
\ No newline at end of file
This diff is collapsed.
......@@ -8,9 +8,6 @@ using System.Windows.Controls;
namespace Main
{
/// <summary>
/// Interaktionslogik für Error.xaml
/// </summary>
public partial class Error : Page
{
public Error()
......@@ -24,14 +21,14 @@ namespace Main
private void Button_Click(object sender, RoutedEventArgs e)
{
if (File.Exists(App.File))
if (File.Exists(App.ConfigFile))
{
Process.Start("mailto:" + "main@help.rh-utensils.ml"
Process.Start("mailto:" + App.IssueMail
+ "?subject=" + title
+ "&body=" + "**Programm Version:** " + Assembly.GetExecutingAssembly().GetName().Version.ToString() + "<br>%0D%0A"
+ "**Windows Version:** " + Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "ProductName", "").ToString() + "<br>%0D%0A"
+ "**Config Datei:** " + App.File + "<br>%0D%0A"
+ "**EXE Datei:** " + file + "<br>%0D%0A"
+ "**Config Datei:** " + App.ConfigFile + "<br>%0D%0A"
+ "**Page Datei:** " + file + "<br>%0D%0A"
+ "<br>%0D%0A"
+ "**Fehlermeldung:**" + "%0D%0A"
+ "```c#"
......@@ -39,21 +36,21 @@ namespace Main
+ error.Replace(System.Environment.NewLine, "%0D%0A")
+ "%0D%0A"
+ "```" + "%0D%0A<br>"
+ "**" + System.IO.Path.GetFileName(App.File) + ":" + "**" + "%0D%0A"
+ "**" + System.IO.Path.GetFileName(App.ConfigFile) + ":" + "**" + "%0D%0A"
+ "```xml"
+ "%0D%0A"
+ string.Join("%0D%0A", File.ReadAllLines(App.File)).Replace(System.Environment.NewLine, "%0D%0A")
+ string.Join("%0D%0A", File.ReadAllLines(App.ConfigFile)).Replace(System.Environment.NewLine, "%0D%0A")
+ "%0D%0A"
+ "```");
}
else
{
Process.Start("mailto:" + "main@help.rh-utensils.ml"
Process.Start("mailto:" + App.IssueMail
+ "?subject=" + title
+ "&body=" + "**Programm Version:** " + Assembly.GetExecutingAssembly().GetName().Version.ToString() + "<br>%0D%0A"
+ "**Windows Version:** " + Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "ProductName", "").ToString() + "<br>%0D%0A"
+ "**Config Datei:** " + App.File + " (Datei ist nicht verfügbar!)<br>%0D%0A"
+ "**EXE Datei:** " + file + "<br>%0D%0A"
+ "**Config Datei:** " + App.ConfigFile + " (Datei ist nicht verfügbar!)<br>%0D%0A"
+ "**Page Datei:** " + file + "<br>%0D%0A"
+ "<br>%0D%0A"
+ "**Fehlermeldung:**" + "%0D%0A"
+ "```c#"
......
using Auth0.OidcClient;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using RestSharp;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Windows;
namespace Main.Functions
{
class Account
{
public static Auth0Client client = new Auth0Client(new Auth0ClientOptions
{
Domain = App.Auth0Domain,
ClientId = App.Auth0ClientId
});
public static string User_ID;
public static string GetToken()
{
var client = new RestClient("https://" + App.Auth0Domain + "/oauth/token");
var request = new RestRequest(Method.POST);
request.AddHeader("content-type", "application/json");
request.AddParameter("application/json", "{\"grant_type\":\"client_credentials\",\"client_id\": \"" + App.Auth0APIClientId + "\",\"client_secret\": \"" + App.Auth0APIClientSecret + "\",\"audience\": \"https://" + App.Auth0Domain + "/api/v2/\"}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
dynamic api = JObject.Parse(response.Content);
return api.access_token;
}
public static string GetTokenType()
{
var client = new RestClient("https://" + App.Auth0Domain + "/oauth/token");
var request = new RestRequest(Method.POST);
request.AddHeader("content-type", "application/json");
request.AddParameter("application/json", "{\"grant_type\":\"client_credentials\",\"client_id\": \"" + App.Auth0APIClientId + "\",\"client_secret\": \"" + App.Auth0APIClientSecret + "\",\"audience\": \"https://" + App.Auth0Domain + "/api/v2/\"}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
dynamic api = JObject.Parse(response.Content);
return api.token_type;
}
public static String ReadMetadata()
{
var client = new RestClient("https://" + App.Auth0Domain + "/api/v2/users/" + User_ID);
var request = new RestRequest(Method.GET);
request.AddHeader("authorization", GetTokenType() + " " + GetToken());
IRestResponse response = client.Execute(request);
dynamic api = JObject.Parse(client.Execute(request).Content);
return api.app_metadata.ToString();
}
public static void SetMetadata(String jsonData)
{
if (!Functions.InternetChecker.check())
{
return;
}
try
{
//
//Convert String Lists to jsonData
//
////String[] Parameter;
////String[] Value;
////var Data = new Dictionary<String, String>();
////for (int i = 0; i != Parameter.Length; ++i)
////{
//// Data[Parameter[i]] = Value[i];
////}
////String jsonData = JsonConvert.SerializeObject(Data);
var client = new RestClient("https://" + App.Auth0Domain + "/api/v2/users/" + User_ID);
var request = new RestRequest(Method.PATCH);
request.AddHeader("content-type", "application/json");
request.AddHeader("authorization", GetTokenType()+ " " + GetToken());
request.AddParameter("application/json", "{\"app_metadata\": {\"" + App.Name + "\": " + jsonData + "}}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
}
catch
{
return;
}
}
}
}
using System.Net.Mail;
namespace Main.Functions
{
class Mail
{
public static void send(string to, string subject, string MSG)
{
MailMessage mail = new MailMessage();
mail.From = new MailAddress("service@rh-utensils.ml ", "RH Utensils");
mail.To.Add(new MailAddress(to));
SmtpClient client = new SmtpClient();
client.Port = 587;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.Host = "smtp-relay.sendinblue.com";
client.Credentials = new System.Net.NetworkCredential("service@hampoelz.net", "W3XjB0kUvp7maJ95");
client.EnableSsl = true;
client.Timeout = 10000;
mail.Subject = "[RH Utensils] " + subject;
mail.IsBodyHtml = true;
mail.Body = MSG;
client.Send(mail);
}
}
}
......@@ -21,9 +21,8 @@ namespace Main.Functions
private const int SW_RESTORE = 9;
private const int SW_SHOWDEFAULT = 10;
public static void move()
public static void Move(string proc)
{
string proc = Process.GetCurrentProcess().ProcessName;
Process[] processes = Process.GetProcessesByName(proc);
if (processes.Length > 1)
......
......@@ -14,39 +14,19 @@
TextOptions.TextRenderingMode="Auto"
Background="{DynamicResource MaterialDesignPaper}"
FontFamily="{DynamicResource MaterialDesignFont}"
d:DesignHeight="290" d:DesignWidth="320"
Title="Anmelden" Loaded="Page_Loaded">
Title="Anmelden" Loaded="Page_Loaded" Height="310" Width="360">
<Grid>
<StackPanel Margin="20,10,20,10">
<Label Content="Anmelden" FontFamily="Segoe UI Black" FontSize="24" Margin="0,10" VerticalAlignment="Top" HorizontalAlignment="Left"/>
<Grid Margin="20,10">
<Image x:Name="Logo" HorizontalAlignment="Left" Height="75" Margin="10,10,0,0" VerticalAlignment="Top" Width="75" Source="Assets\favicon.png"/>
<TextBlock x:Name="Welcome" FontFamily="Segoe UI Black" FontSize="24" Margin="90,10,0,0" VerticalAlignment="Top" Height="75" TextAlignment="Center" TextWrapping="WrapWithOverflow" Padding="5">Willkommen <LineBreak/> bei RH Utensils!</TextBlock>
<TextBlock FontFamily="Segoe UI Semibold" Margin="10,115,10,65" TextWrapping="Wrap" FontSize="20" TextAlignment="Center">Du kannst dich anmelden um <LineBreak/> die Programm Einstellungen <LineBreak/> zwischen deinen Geräten <LineBreak/> zu Synchronisieren</TextBlock>
<StackPanel Orientation="Horizontal">
<TextBlock HorizontalAlignment="Left" VerticalAlignment="Top" TextWrapping="Wrap"><Run Text="Hast du kein Konto? "/></TextBlock>
<TextBlock Name="tb_CreateAccount" Cursor="Hand" HorizontalAlignment="Left" VerticalAlignment="Top" TextWrapping="Wrap" Foreground="{DynamicResource PrimaryHueMidBrush}" MouseLeftButtonDown="CreateAccount_MouseLeftButtonDown"><Run Text="Erstelle ein Konto, "/></TextBlock>
</StackPanel>
<TextBlock HorizontalAlignment="Left" VerticalAlignment="Top" TextWrapping="Wrap"><Run Text="es dauert weniger als eine Minute."/></TextBlock>
<StackPanel Margin="0,10,0,15" Orientation="Horizontal">
<materialDesign:PackIcon Kind="Email" VerticalAlignment="Center"/>
<TextBox Name="Email" materialDesign:HintAssist.Hint="E-Mail oder Benutzername" Margin="5" Width="255" TextChanged="Email_TextChanged"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<materialDesign:PackIcon Kind="Key" VerticalAlignment="Center"/>
<PasswordBox Name="Password" materialDesign:HintAssist.Hint="Passwort" Margin="5" Width="255" PasswordChanged="Password_PasswordChanged"/>
</StackPanel>
<Grid>
<Label Name="l_LostPassword" Cursor="Hand" Content="Passwort vergessen?" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="16" Foreground="{DynamicResource PrimaryHueMidBrush}" MouseLeftButtonDown="LostPassword_MouseLeftButtonDown"/>
</Grid>
<Grid>
<Button x:Name="btn_Login" HorizontalAlignment="Left" Content="Anmelden" Width="100" Foreground="White" Click="Login_Click"/>
<Button x:Name="btn_Skip" HorizontalAlignment="Right" Content="Überspringen" Width="120" Click="Skip_Click" Style="{DynamicResource MaterialDesignFlatButton}"/>
<Grid Height="50" VerticalAlignment="Bottom">
<Button x:Name="btn_Login" HorizontalAlignment="Left" Content="Anmelden" Width="110" Height="35" Foreground="White" Click="Login_Click" FontSize="15"/>
<Button x:Name="btn_Skip" HorizontalAlignment="Right" Content="Überspringen" Width="130" Height="35" Click="Skip_Click" Style="{DynamicResource MaterialDesignFlatButton}" FontSize="15"/>
</Grid>
</StackPanel>
</Grid>
</Grid>
</Page>
using MahApps.Metro.Controls;
using System;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;
using System;
using System.Windows;
using System.Windows.Media.Imaging;
using System.Windows.Controls;
using System.Windows.Input;
using WordPressPCL;
using WordPressPCL.Models;
using Page = System.Windows.Controls.Page;
using System.Web;
using IdentityModel.Client;
using System.Text;
namespace Main
{
......@@ -20,21 +16,30 @@ namespace Main
if (Application.Current.MainWindow is MainWindow MW)
{
if (App.SkipLogin || Properties.Settings.Default.SkipLogin && !App.Login)
if (App.SkipLogin || Properties.Settings.Default.SkipLogin && !Properties.Settings.Default.Login && !App.Login && !App.FirstPage)
{
MW.Load();
}
else
{
MW.Height = 300;
MW.Width = 320;
MW.Height = 310;
MW.Width = 360;
MW.ShowTitleBar = false;
MW.ShowMinButton = false;
MW.CenterWindowOnScreen();
MW.Title = this.Title + " - " + App.AppName;
MW.Title = this.Title + " - " + App.Name;
Welcome.Text = "Willkommen " + Environment.NewLine + " bei " + App.Name + "!";
try
{
Logo.Source = new BitmapImage(new Uri(App.Favicon));
}
catch
{}
#pragma warning disable CS0618 // Typ oder Element ist veraltet
MW.WindowCloseButtonStyle = (Style)FindResource("CloseButtonStyle");
......@@ -46,8 +51,11 @@ namespace Main
private async void Page_Loaded(object sender, RoutedEventArgs e)
{
if (!App.Login && Properties.Settings.Default.Username != "" && Properties.Settings.Default.Password != "")
if (App.Login || Properties.Settings.Default.Login && !App.FirstPage)
{
Functions.MSG.Show("info", "Der Anmelde-Prozess läuft gerade ...");
IsEnabled = false;
if (!Functions.InternetChecker.check())
{
Functions.MSG.Show();
......@@ -56,32 +64,48 @@ namespace Main
{
MW.Load();
}
IsEnabled = true;
return;
}
else
{
try
{
var client = new WordPressClient(App.WPjsonURL.ToString());
client.AuthMethod = AuthMethod.JWT;
Functions.MSG.Show("info", "Bitte warte ... - Du wirst gerade eingeloggt.");
await client.RequestJWToken(Functions.Encryption.Decrypt(Properties.Settings.Default.Username, System.Security.Principal.WindowsIdentity.GetCurrent().Name), Functions.Encryption.Decrypt(Properties.Settings.Default.Password, System.Security.Principal.WindowsIdentity.GetCurrent().Name));
var loginResult = await Functions.Account.client.LoginAsync();
Functions.MSG.Show();
Functions.Account.User_ID = loginResult.User.FindFirst(c => c.Type == "sub")?.Value;
if (Application.Current.MainWindow is MainWindow MW)
if (loginResult.IsError)
{
MW.Load();
Functions.MSG.Show("error", "Beim Anmelden ist leider ein Fehler aufgetreten!");
IsEnabled = true;
return;
}
}
catch
{
Functions.MSG.Show("warning", "Bitte melde dich erneut an!");
Functions.MSG.Show("error", "Wir konnten leider keine Verbindung mit dem Anmelde-Server aufbauen!");
IsEnabled = true;
return;
}
IsEnabled = true;
Functions.MSG.Show();
Properties.Settings.Default.Login = true;
Properties.Settings.Default.SkipLogin = false;
Properties.Settings.Default.Save();
String[] Parameter = { "Test1","Test2" };
String[] Value = { "Test1_Value", "Test2_Value" };
Functions.Account.SetMetadata(Functions.Account.ReadMetadata());
if (Application.Current.MainWindow is MainWindow MW)
{
MW.Load();
}
}
}
}
......@@ -96,44 +120,37 @@ namespace Main
return;
}
if (Email.Text == "")
{
Functions.MSG.Show("error", "Gib bitte deine E-Mail-Adresse oder deinen Benutzernamen ein!");
return;
}
else if (Password.Password.ToString() == "")
{
Functions.MSG.Show("error", "Gib bitte ein Passwort ein!");
return;
}
if (!Functions.InternetChecker.check(App.WPjsonURL.GetLeftPart(UriPartial.Authority)))
{
Functions.MSG.Show("error", "Wir konnten leider keine Verbindung mit dem Anmelde-Server aufbauen!");
return;
}
Functions.MSG.Show("info", "Der Anmelde-Prozess läuft gerade ...");
IsEnabled = false;
try
{
var client = new WordPressClient(App.WPjsonURL.ToString());
client.AuthMethod = AuthMethod.JWT;
var loginResult = await Functions.Account.client.LoginAsync();
Functions.MSG.Show("info", "Bitte warte ... - Du wirst gerade eingeloggt.");
Functions.Account.User_ID = loginResult.User.FindFirst(c => c.Type == "sub")?.Value;
await client.RequestJWToken(Email.Text, Password.Password);
if (loginResult.IsError)
{
Functions.MSG.Show("error", "Beim Anmelden ist leider ein Fehler aufgetreten!");
IsEnabled = true;
return;
}
}
catch
{
Functions.MSG.Show("error", "Falscher Benutzername oder falsches Passwort!\n\nNach zu vielen fehlerhaften Versuchen wirst du für 60 Minuten gesperrt!", 100);
Functions.MSG.Show("error", "Wir konnten leider keine Verbindung mit dem Anmelde-Server aufbauen!");
IsEnabled = true;
return;
}
Properties.Settings.Default.Username = Functions.Encryption.Encrypt(Email.Text, System.Security.Principal.WindowsIdentity.GetCurrent().Name);
Properties.Settings.Default.Password = Functions.Encryption.Encrypt(Password.Password, System.Security.Principal.WindowsIdentity.GetCurrent().Name);
Properties.Settings.Default.Save();
IsEnabled = true;
Functions.MSG.Show();
Properties.Settings.Default.Login = true;
Properties.Settings.Default.SkipLogin = false;
Properties.Settings.Default.Save();
if (Application.Current.MainWindow is MainWindow MW)
{
MW.Load();
......@@ -142,8 +159,7 @@ namespace Main
private void Skip_Click(object sender, RoutedEventArgs e)
{
Properties.Settings.Default.Username = "";
Properties.Settings.Default.Password = "";
Properties.Settings.Default.Login = false;
Properties.Settings.Default.SkipLogin = true;
Properties.Settings.Default.Save();
......@@ -154,25 +170,5 @@ namespace Main
MW.Load();
}
}
private void CreateAccount_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
Process.Start(App.RegisterURL.ToString());
}
private void LostPassword_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
Process.Start(App.ResetPasswordURL.ToString());
}
private void Email_TextChanged(object sender, TextChangedEventArgs e)
{
Functions.MSG.Show();
}
private void Password_PasswordChanged(object sender, RoutedEventArgs e)
{
Functions.MSG.Show();
}
}
}
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.28307.106
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Main", "Main.csproj", "{5EF4AF7A-15A0-4F98-90D5-2DDDED0ED600}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{5EF4AF7A-15A0-4F98-90D5-2DDDED0ED600}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5EF4AF7A-15A0-4F98-90D5-2DDDED0ED600}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5EF4AF7A-15A0-4F98-90D5-2DDDED0ED600}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5EF4AF7A-15A0-4F98-90D5-2DDDED0ED600}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {001963EF-3695-4AE3-BC32-CC0494A66FA9}
EndGlobalSection
EndGlobal
......@@ -31,7 +31,7 @@
Deactivated="Window_Deactivated"
Height="500" Width="350"
Title="RH Utensils">
Title="RH Utensils" MouseDown="MetroWindow_MouseDown">
<Grid Name="Grid">
<Grid x:Name="Overlay" Panel.ZIndex="1000" VerticalAlignment="Top" Visibility="Collapsed">
......@@ -51,4 +51,10 @@
<Frame Name="Index" Source="Login.xaml" NavigationUIVisibility="Hidden"/>
</Grid>
<metro:MetroWindow.RightWindowCommands>
<metro:WindowCommands>
<Button x:Name="About" Click="Button_Click" />
</metro:WindowCommands>
</metro:MetroWindow.RightWindowCommands>
</metro:MetroWindow>
......@@ -3,42 +3,49 @@ using MahApps.Metro.Controls;
using MaterialDesignThemes.Wpf;
using System;
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices;
using System.Threading;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
namespace Main
{
/// <summary>
/// Interaktionslogik für MainWindow.xaml
/// </summary>
public partial class MainWindow : MetroWindow
{
public MainWindow()
{
InitializeComponent();
if (App.Theme == "dark")
{
new PaletteHelper().SetLightDark(true);
//if (App.Theme == "dark")
//{
// new PaletteHelper().SetLightDark(true);
ThemeManager.ChangeAppStyle(this, ThemeManager.GetAccent("Blue"), ThemeManager.GetAppTheme("BaseDark"));
}
else if (App.Theme == "light")
{
new PaletteHelper().SetLightDark(false);
// ThemeManager.ChangeAppStyle(this, ThemeManager.GetAccent("Blue"), ThemeManager.GetAppTheme("BaseDark"));
//}
//else if (App.Theme == "light")
//{
// new PaletteHelper().SetLightDark(false);
ThemeManager.ChangeAppStyle(this, ThemeManager.GetAccent("Blue"), ThemeManager.GetAppTheme("BaseLight"));
}
// ThemeManager.ChangeAppStyle(this, ThemeManager.GetAccent("Blue"), ThemeManager.GetAppTheme("BaseLight"));
//}
About.Content = "Über " + App.Name;
if (App.Favicon != "")
{
Icon = new BitmapImage(new Uri(App.Favicon));
}
try
{
Icon = new BitmapImage(new Uri(App.Favicon));
}
catch
{
}
}
}
public Boolean isMSG = false;
......@@ -139,6 +146,8 @@ namespace Main
System.Windows.Forms.Panel panel = new System.Windows.Forms.Panel();
private Process CurrentProcess;
public void SetIndex(String exe, String Argument)
{
System.Windows.Forms.Integration.WindowsFormsHost host = new System.Windows.Forms.Integration.WindowsFormsHost();
......@@ -155,8 +164,16 @@ namespace Main
WindowStyle = ProcessWindowStyle.Minimized
};
String FilePath = Path.GetDirectoryName(exe);
String FileName = Path.GetFileNameWithoutExtension(exe).ToLower();
if (CurrentProcess != null)
CurrentProcess.Kill();
Process p = Process.Start(ps);
CurrentProcess = p;
Thread.Sleep(1000);
appWin = p.MainWindowHandle;
......@@ -177,6 +194,8 @@ namespace Main
Error.error = ex.ToString();
Error.file = exe;
Error.title = "Fehler beim Laden einer Seite";
CurrentProcess = null;
}
}
......@@ -213,5 +232,17 @@ namespace Main
MoveWindow(appWin, 0, 0, panel.Width, panel.Height, true);
}
}
private void MetroWindow_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
if (e.ChangedButton == MouseButton.Left)
this.DragMove();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
Window window = new About();
window.Show();
}
}
}
......@@ -2,14 +2,10 @@
using System.Diagnostics;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media.Imaging;
namespace Main
{
/// <summary>
/// Interaktionslogik für Menu.xaml
/// </summary>
public partial class Menu : Page
{
public Menu()
......@@ -75,13 +71,24 @@ namespace Main
menuItemIcon.Margin = new Thickness(5);
TextBlock menuItemText = new TextBlock
{
{
Text = App.SiteTitle[i],
FontSize = 17,
VerticalAlignment = VerticalAlignment.Center,
Margin = new Thickness(20, 0, 20, 0)
};
if (App.SitePath[i] == "account.exe")
{
menuItemIcon.Source = new BitmapImage(new Uri(@"/Assets/account.png", UriKind.Relative));
if (Properties.Settings.Default.Login)
menuItemText.Text = "Abmelden";
else
menuItemText.Text = "Anmelden";
}
menuItemStack.Children.Add(menuItemIcon);
menuItemStack.Children.Add(menuItemText);
......@@ -98,16 +105,44 @@ namespace Main
}
}
private void Menu_Selected(object sender, RoutedEventArgs e)
private async void Menu_Selected(object sender, RoutedEventArgs e)
{
ListViewItem Menu = (ListViewItem)sender;
int menuItem = Int32.Parse(Menu.Name.Replace("MenuItem_", ""));
Uri uriResult;
if (Uri.TryCreate(App.SitePath[menuItem], UriKind.Absolute, out uriResult) && (uriResult.Scheme == Uri.UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps))
if (Uri.TryCreate(App.SitePath[menuItem], UriKind.Absolute, out uriResult) && (uriResult.Scheme == Uri.UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps) || App.SitePath[menuItem] == "account.exe")
{
Process.Start(uriResult.ToString());
if (App.SitePath[menuItem] == "account.exe")
{
if (Properties.Settings.Default.Login)
{
await Functions.Account.client.LogoutAsync();
ProcessStartInfo ps = new ProcessStartInfo(System.Reflection.Assembly.GetEntryAssembly().Location)
{
Arguments = "-FirstPage -Config \"" + App.ConfigFile + "\"",
};
Process p = Process.Start(ps);
Application.Current.Shutdown();
}
else
{
ProcessStartInfo ps = new ProcessStartInfo(System.Reflection.Assembly.GetEntryAssembly().Location)
{
Arguments = "-Login -Config \"" + App.ConfigFile + "\"",
};
Process p = Process.Start(ps);
Application.Current.Shutdown();
}
}
else
{
Process.Start(uriResult.ToString());
}
Menu.IsSelected = false;
......@@ -133,7 +168,7 @@ namespace Main
if (Application.Current.MainWindow is MainWindow MW)
{
MW.Title = App.SiteTitle[menuItem] + " - " + App.AppName;
MW.Title = App.SiteTitle[menuItem] + " - " + App.Name;
}
......
......@@ -25,37 +25,25 @@ namespace Main.Properties {
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string Username {
get {
return ((string)(this["Username"]));
}
set {
this["Username"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string Password {
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool SkipLogin {
get {
return ((string)(this["Password"]));
return ((bool)(this["SkipLogin"]));
}
set {
this["Password"] = value;
this["SkipLogin"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool SkipLogin {
public bool Login {
get {
return ((bool)(this["SkipLogin"]));
return ((bool)(this["Login"]));
}
set {
this["SkipLogin"] = value;
this["Login"] = value;
}
}
}
......
<?xml version="1.0"?>
<doc>
<assembly>
<name>Auth0.OidcClient.Core</name>
</assembly>
<members>
<member name="M:Auth0.OidcClient.IAuth0Client.LoginAsync(System.Object)">
<summary>
Launches a browser to log the user in.
</summary>
<param name="extraParameters">Any extra parameters that need to be passed to the authorization endpoint.</param>
<returns></returns>
</member>
<member name="M:Auth0.OidcClient.IAuth0Client.LogoutAsync">
<summary>
Launches a browser to log the user out and clear the Auth0 SSO Cookie
</summary>
<returns></returns>
</member>
<member name="M:Auth0.OidcClient.IAuth0Client.LogoutAsync(System.Boolean)">
<summary>
Launches a browser to log the user out and clear the Auth0 SSO Cookie
</summary>
<param name="federated">Indicates whether the user should also be logged out of their identity provider.</param>
<returns></returns>
</member>
<member name="M:Auth0.OidcClient.IAuth0Client.PrepareLoginAsync(System.Object)">
<summary>
Generates an <see cref="T:IdentityModel.OidcClient.AuthorizeState"/> containing the URL, state, nonce and code challenge which can
be used to redirect the user to the authorization URL, and subsequently process any response by calling
the <see cref="M:Auth0.OidcClient.IAuth0Client.ProcessResponseAsync(System.String,IdentityModel.OidcClient.AuthorizeState)"/> method.
</summary>
<param name="extraParameters"></param>
<returns></returns>
</member>
<member name="M:Auth0.OidcClient.IAuth0Client.ProcessResponseAsync(System.String,IdentityModel.OidcClient.AuthorizeState)">
<summary>
Process the response from the Auth0 redirect URI
</summary>
<param name="data">The data containing the full redirect URI.</param>
<param name="state">The <see cref="T:IdentityModel.OidcClient.AuthorizeState"/> which was generated when the <see cref="M:Auth0.OidcClient.IAuth0Client.PrepareLoginAsync(System.Object)"/>
method was called.</param>
<returns></returns>
</member>
<member name="M:Auth0.OidcClient.IAuth0Client.RefreshTokenAsync(System.String)">
<summary>
Generates a new set of tokens based on a refresh token.
</summary>
<param name="refreshToken">The refresh token which was issued during the authorization flow, or subsequent
calls to <see cref="M:Auth0.OidcClient.IAuth0Client.RefreshTokenAsync(System.String)"/>.</param>
<returns></returns>
</member>
</members>
</doc>
<?xml version="1.0"?>
<doc>
<assembly>
<name>Auth0.OidcClient</name>
</assembly>
<members>
<member name="T:Auth0.OidcClient.Properties.Resources">
<summary>
A strongly-typed resource class, for looking up localized strings, etc.
</summary>
</member>
<member name="P:Auth0.OidcClient.Properties.Resources.ResourceManager">
<summary>
Returns the cached ResourceManager instance used by this class.
</summary>
</member>
<member name="P:Auth0.OidcClient.Properties.Resources.Culture">
<summary>
Overrides the current thread's CurrentUICulture property for all
resource lookups using this strongly typed resource class.
</summary>
</member>
<member name="M:Auth0.OidcClient.Auth0Client.#ctor(Auth0.OidcClient.Auth0ClientOptions)">
<summary>
Creates a new instance of the Auth0 OIDC Client.
</summary>
<param name="options">The <see cref="T:Auth0.OidcClient.Auth0ClientOptions"/> specifying the configuration for the Auth0 OIDC Client.</param>
</member>
<member name="M:Auth0.OidcClient.Auth0Client.LoginAsync(System.Object)">
<summary>
Launches a browser to log the user in.
</summary>
<param name="extraParameters">Any extra parameters that need to be passed to the authorization endpoint.</param>
<returns></returns>
</member>
<member name="M:Auth0.OidcClient.Auth0Client.LogoutAsync">
<summary>
Launches a browser to log the user out and clear the Auth0 SSO Cookie
</summary>
<returns></returns>
</member>
<member name="M:Auth0.OidcClient.Auth0Client.LogoutAsync(System.Boolean)">
<inheritdoc />
</member>
<member name="M:Auth0.OidcClient.Auth0Client.PrepareLoginAsync(System.Object)">
<summary>
Generates an <see cref="T:IdentityModel.OidcClient.AuthorizeState"/> containing the URL, state, nonce and code challenge which can
be used to redirect the user to the authorization URL, and subsequently process any response by calling
the <see cref="M:Auth0.OidcClient.Auth0Client.ProcessResponseAsync(System.String,IdentityModel.OidcClient.AuthorizeState)"/> method.
</summary>
<param name="extraParameters"></param>
<returns></returns>
</member>
<member name="M:Auth0.OidcClient.Auth0Client.ProcessResponseAsync(System.String,IdentityModel.OidcClient.AuthorizeState)">
<summary>
Process the response from the Auth0 redirect URI
</summary>
<param name="data">The data containing the full redirect URI.</param>
<param name="state">The <see cref="T:IdentityModel.OidcClient.AuthorizeState"/> which was generated when the <see cref="M:Auth0.OidcClient.Auth0Client.PrepareLoginAsync(System.Object)"/>
method was called.</param>
<returns></returns>
</member>
<member name="M:Auth0.OidcClient.Auth0Client.RefreshTokenAsync(System.String)">
<summary>
Generates a new set of tokens based on a refresh token.
</summary>
<param name="refreshToken">The refresh token which was issued during the authorization flow, or subsequent
calls to <see cref="M:Auth0.OidcClient.Auth0Client.RefreshTokenAsync(System.String)"/>.</param>
<returns></returns>
</member>
<member name="P:Auth0.OidcClient.Auth0ClientOptions.Browser">
<summary>
The <see cref="T:IdentityModel.OidcClient.Browser.IBrowser"/> implementation which is responsible for displaying the Auth0 Login screen
</summary>
</member>
<member name="P:Auth0.OidcClient.Auth0ClientOptions.ClientId">
<summary>
Your Auth0 Client ID.
</summary>
</member>
<member name="P:Auth0.OidcClient.Auth0ClientOptions.ClientSecret">
<summary>
Your Auth0 Client Secret.
</summary>
</member>
<member name="P:Auth0.OidcClient.Auth0ClientOptions.Domain">
<summary>
Your Auth0 tenant domain.
</summary>
<remarks>
e.g. tenant.auth0.com
</remarks>
</member>
<member name="P:Auth0.OidcClient.Auth0ClientOptions.EnableTelemetry">
<summary>
Indicates whether telemetry information should be sent to Auth0.
</summary>
<remarks>
Telemetry simply contains information about the version of the Auth0 OIDC Client being used. No information about your
application or users are being sent to Auth0.
</remarks>
</member>
<member name="P:Auth0.OidcClient.Auth0ClientOptions.LoadProfile">
<summary>
Indicates whether the user profile should be loaded from the /userinfo endpoint.
</summary>
<remarks>
Defaults to true.
</remarks>
</member>
<member name="P:Auth0.OidcClient.Auth0ClientOptions.Scope">
<summary>
The scopes you want to request.
</summary>
</member>
<member name="P:Auth0.OidcClient.Auth0ClientOptions.PostLogoutRedirectUri">
<summary>
Allow overriding of the Post Logout Redirect URI
</summary>
<remarks>
This should only be done in exceptional circumstances
</remarks>
</member>
<member name="P:Auth0.OidcClient.Auth0ClientOptions.RedirectUri">
<summary>
Allow overriding of the Redirect URI
</summary>
<remarks>
This should only be done in exceptional circumstances
</remarks>
</member>
</members>
</doc>
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
<?xml version="1.0"?>
<doc>
<assembly>
<name>Microsoft.Extensions.Logging</name>
</assembly>
<members>
<member name="T:Microsoft.Extensions.Logging.FilterLoggingBuilderExtensions">
<summary>
Extension methods for setting up logging services in an <see cref="T:Microsoft.Extensions.DependencyInjection.IServiceCollection" />.
</summary>
</member>
<member name="T:Microsoft.Extensions.Logging.ILoggingBuilder">
<summary>
An interface for configuring logging providers.
</summary>
</member>
<member name="P:Microsoft.Extensions.Logging.ILoggingBuilder.Services">
<summary>
Gets the <see cref="T:Microsoft.Extensions.DependencyInjection.IServiceCollection"/> where Logging services are configured.
</summary>
</member>
<member name="M:Microsoft.Extensions.Logging.LoggerFactory.CheckDisposed">
<summary>
Check if the factory has been disposed.
</summary>
<returns>True when <see cref="M:Microsoft.Extensions.Logging.LoggerFactory.Dispose"/> as been called</returns>
</member>
<member name="P:Microsoft.Extensions.Logging.LoggerFilterOptions.MinLevel">
<summary>
Gets or sets the minimum level of log messages if none of the rules match.
</summary>
</member>
<member name="P:Microsoft.Extensions.Logging.LoggerFilterOptions.Rules">
<summary>
Gets the collection of <see cref="T:Microsoft.Extensions.Logging.LoggerFilterRule"/> used for filtering log messages.
</summary>
</member>
<member name="T:Microsoft.Extensions.Logging.LoggerFilterRule">
<summary>
Defines a rule used to filter log messages
</summary>
</member>
<member name="P:Microsoft.Extensions.Logging.LoggerFilterRule.ProviderName">
<summary>
Gets the logger provider type or alias this rule applies to.
</summary>
</member>
<member name="P:Microsoft.Extensions.Logging.LoggerFilterRule.CategoryName">
<summary>
Gets the logger category this rule applies to.
</summary>
</member>
<member name="P:Microsoft.Extensions.Logging.LoggerFilterRule.LogLevel">
<summary>
Gets the minimum <see cref="P:Microsoft.Extensions.Logging.LoggerFilterRule.LogLevel"/> of messages.
</summary>
</member>
<member name="P:Microsoft.Extensions.Logging.LoggerFilterRule.Filter">
<summary>
Gets the filter delegate that would be applied to messages that passed the <see cref="P:Microsoft.Extensions.Logging.LoggerFilterRule.LogLevel"/>.
</summary>
</member>
<member name="T:Microsoft.Extensions.Logging.LoggingBuilderExtensions">
<summary>
Extension methods for setting up logging services in an <see cref="T:Microsoft.Extensions.Logging.ILoggingBuilder" />.
</summary>
</member>
<member name="T:Microsoft.Extensions.Logging.ProviderAliasAttribute">
<summary>
Defines alias for <see cref="T:Microsoft.Extensions.Logging.ILoggerProvider"/> implementation to be used in filtering rules.
</summary>
</member>
<member name="T:Microsoft.Extensions.DependencyInjection.LoggingServiceCollectionExtensions">
<summary>
Extension methods for setting up logging services in an <see cref="T:Microsoft.Extensions.DependencyInjection.IServiceCollection" />.
</summary>
</member>
<member name="M:Microsoft.Extensions.DependencyInjection.LoggingServiceCollectionExtensions.AddLogging(Microsoft.Extensions.DependencyInjection.IServiceCollection)">
<summary>
Adds logging services to the specified <see cref="T:Microsoft.Extensions.DependencyInjection.IServiceCollection" />.
</summary>
<param name="services">The <see cref="T:Microsoft.Extensions.DependencyInjection.IServiceCollection" /> to add services to.</param>
<returns>The <see cref="T:Microsoft.Extensions.DependencyInjection.IServiceCollection"/> so that additional calls can be chained.</returns>
</member>
<member name="M:Microsoft.Extensions.DependencyInjection.LoggingServiceCollectionExtensions.AddLogging(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{Microsoft.Extensions.Logging.ILoggingBuilder})">
<summary>
Adds logging services to the specified <see cref="T:Microsoft.Extensions.DependencyInjection.IServiceCollection" />.
</summary>
<param name="services">The <see cref="T:Microsoft.Extensions.DependencyInjection.IServiceCollection" /> to add services to.</param>
<param name="configure">The <see cref="T:Microsoft.Extensions.Logging.ILoggingBuilder"/> configuration delegate.</param>
<returns>The <see cref="T:Microsoft.Extensions.DependencyInjection.IServiceCollection"/> so that additional calls can be chained.</returns>
</member>
</members>
</doc>
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -10,15 +10,12 @@
</startup>
<userSettings>
<Main.Properties.Settings>
<setting name="Username" serializeAs="String">
<value />
</setting>
<setting name="Password" serializeAs="String">
<value />
</setting>
<setting name="SkipLogin" serializeAs="String">
<value>False</value>
</setting>
<setting name="Login" serializeAs="String">
<value>False</value>
</setting>
</Main.Properties.Settings>
</userSettings>
<runtime>
......@@ -27,6 +24,36 @@
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.IdentityModel.Tokens" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.4.0.0" newVersion="5.4.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.IdentityModel.Logging" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.4.0.0" newVersion="5.4.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Extensions.Logging.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.2.0.0" newVersion="2.2.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="IdentityModel" publicKeyToken="e7877f4675df049f" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.10.6.0" newVersion="3.10.6.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Extensions.Logging" publicKeyToken="adb9793829ddae60" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.2.0.0" newVersion="2.2.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.ComponentModel.Annotations" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.1.0" newVersion="4.2.1.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
......@@ -148,12 +175,6 @@
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Net.NetworkInformation" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
......
This diff is collapsed.
<?xml version="1.0" encoding="utf-8"?><span>
<doc>
<assembly>
<name>System.Buffers</name>
</assembly>
<members>
<member name="T:System.Buffers.ArrayPool`1">
<summary>Provides a resource pool that enables reusing instances of type <see cref="T[]"></see>.</summary>
<typeparam name="T">The type of the objects that are in the resource pool.</typeparam>
</member>
<member name="M:System.Buffers.ArrayPool`1.#ctor">
<summary>Initializes a new instance of the <see cref="ArrayPool{T}"></see> class.</summary>
</member>
<member name="M:System.Buffers.ArrayPool`1.Create">
<summary>Creates a new instance of the <see cref="ArrayPool{T}"></see> class.</summary>
<returns>A new instance of the <see cref="ArrayPool{T}"></see> class.</returns>
</member>
<member name="M:System.Buffers.ArrayPool`1.Create(System.Int32,System.Int32)">
<summary>Creates a new instance of the <see cref="ArrayPool{T}"></see> class using the specifed configuration.</summary>
<param name="maxArrayLength">The maximum length of an array instance that may be stored in the pool.</param>
<param name="maxArraysPerBucket">The maximum number of array instances that may be stored in each bucket in the pool. The pool groups arrays of similar lengths into buckets for faster access.</param>
<returns>A new instance of the <see cref="ArrayPool{T}"></see> class with the specified configuration.</returns>
</member>
<member name="M:System.Buffers.ArrayPool`1.Rent(System.Int32)">
<summary>Retrieves a buffer that is at least the requested length.</summary>
<param name="minimumLength">The minimum length of the array.</param>
<returns>An array of type <see cref="T[]"></see> that is at least <paramref name="minimumLength">minimumLength</paramref> in length.</returns>
</member>
<member name="M:System.Buffers.ArrayPool`1.Return(`0[],System.Boolean)">
<summary>Returns an array to the pool that was previously obtained using the <see cref="Rent"></see> method on the same <see cref="ArrayPool{T}"></see> instance.</summary>
<param name="array">A buffer to return to the pool that was previously obtained using the <see cref="Rent"></see> method.</param>
<param name="clearArray"