using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Net.Http; using System.Reflection; using System.Runtime.InteropServices; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Web; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using ChatController.HauptKlassen; using ChatController.Klassen; using Newtonsoft.Json; using Path = System.IO.Path; namespace ChatController { /// /// Interaktionslogik für Login.xaml /// public partial class LoginControl : UserControl { public delegate void LoginDelegate(ChatDatenUebergabe cdu); public event LoginDelegate OnLogin; //private readonly string _dateiPfad = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "ownChatX1253781.txt"; //OwnChatX1253781 //private readonly string _merkeDaten = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "ownChatX1253782.txt"; //OwnChatX1253782 private string _newUrl = "https://dict.ownchat.de/api/server/resolve/1/"; private string _benutzername = ""; private string _passwort = ""; private string _chatCode = ""; private string _kundennummer = ""; private string _authToken = ""; private string _version = "1.1"; public LoginControl() { InitializeComponent(); //encrypt verschlüsselte datei LeseDateiFallsVorhanden(); //var version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version; lblVersion.Content = String.Format("Version: {0}", _version); } private void AnmeldenButton_OnClick(object sender, RoutedEventArgs e) { try { //TODO Abfrage einführen die prüft ob eine verbindung ueberhaupt hergestellt werde kann | FehlerMeldungen Genauer Definieren if (!TextBoxKundennummer.Text.Equals("") && !TextBoxChatCode.Text.Equals("") && !TextBoxBenutzerName.Text.Equals("") && !TextBoxPasswort.Password.Equals("")) { Cursor = Cursors.Wait; Login _login = new Login(TextBoxKundennummer.Text, TextBoxChatCode.Text, TextBoxBenutzerName.Text, TextBoxPasswort.Password); var x = _login.AnmeldevorgangDurchFuehren(); if (OnLogin != null && x != null) { AutosetDaten(); //if (Merken.IsChecked == true) //{ // SpeichereDatenInDatei(); //} //else //{ // LoescheGespeicherteDatei(); //} OnLogin(x); } else { MessageBox.Show("Fehler bei der Anmeldung. Bitte überprüfen Sie die Anmeldeinformationen.", "Info", MessageBoxButton.OK, MessageBoxImage.Asterisk); } Cursor = Cursors.Arrow; } else { MessageBox.Show("Bitte alle Felder ausfüllen!", "Info", MessageBoxButton.OK); } } catch (Exception exception) { //MessageBox.Show("Fehler bei der Anmeldung!\n\n" + exception.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Asterisk); MessageBox.Show("Fehler bei der Anmeldung. Bitte überprüfen Sie die Anmeldeinformationen.", "Info", MessageBoxButton.OK, MessageBoxImage.Asterisk); //throw; Cursor = Cursors.Arrow; } } #region Speichern / Laden / Löschen der Datei #region wird vorerst nicht gebraucht private void SpeichereDatenInDatei() { try { if (!File.Exists(Path.Combine(GetAndCreateUserAppDataPath(), "OwnChatX1253781.txt"))) { using (StreamWriter sw = new StreamWriter(Path.Combine(GetAndCreateUserAppDataPath(), "OwnChatX1253781.txt"))) { Encoding enc = new UTF8Encoding(); //var byt = enc.GetBytes(TextBoxKundennummer.Text); //var bytes = Convert.ToBase64String(byt); //var byt2 = enc.GetBytes(TextBoxChatCode.Text); //var bytes2 = Convert.ToBase64String(byt2); var byt3 = enc.GetBytes(TextBoxBenutzerName.Text); var bytes3 = Convert.ToBase64String(byt3); var byt4 = enc.GetBytes(TextBoxPasswort.Password); var bytes4 = Convert.ToBase64String(byt4); //var byt5 = enc.GetBytes(Merken.IsChecked.ToString()); //var bytes5 = Convert.ToBase64String(byt5); //sw.WriteLine(bytes); //sw.WriteLine(bytes2); sw.WriteLine(bytes3); sw.WriteLine(bytes4); //sw.WriteLine(bytes5); File.SetAttributes(Path.Combine(GetAndCreateUserAppDataPath(), "OwnChatX1253781.txt"), FileAttributes.ReadOnly); } } } catch (Exception e) { MessageBox.Show("Ups, da ist was schief gelaufen: \n" + e.Message, "Fehler", MessageBoxButton.OK); } } private void LoescheGespeicherteDatei() { try { if (File.Exists(Path.Combine(GetAndCreateUserAppDataPath(), "OwnChatX1253781.txt"))) { File.SetAttributes(Path.Combine(GetAndCreateUserAppDataPath(), "OwnChatX1253781.txt"), FileAttributes.Normal); File.Delete(Path.Combine(GetAndCreateUserAppDataPath(), "OwnChatX1253781.txt")); } } catch (Exception e) { MessageBox.Show("Ups, da ist was schief gelaufen: \n" + e.Message, "Fehler", MessageBoxButton.OK); } } #endregion private void LeseDateiFallsVorhanden() { try { if (File.Exists(Path.Combine(GetAndCreateUserAppDataPath(), "OwnChat.txt"))) { List merkdaten = new List(); using (StreamReader sr = new StreamReader(Path.Combine(GetAndCreateUserAppDataPath(), "OwnChat.txt"), true)) { string line = ""; while ((line = sr.ReadLine()) != null) { var encodedTextBytes = Convert.FromBase64String(line); string plainText = Encoding.UTF8.GetString(encodedTextBytes); merkdaten.Add(plainText); } } if (merkdaten.Count == 2) { TextBoxKundennummer.Text = merkdaten[0]; TextBoxChatCode.Text = merkdaten[1]; } } //if (File.Exists(Path.Combine(GetAndCreateUserAppDataPath(), "OwnChatX1253781.txt"))) { // List daten = new List(); // using (StreamReader sr = new StreamReader(Path.Combine(GetAndCreateUserAppDataPath(), "OwnChatX1253781.txt"), true)) // { // string line = ""; // while ((line = sr.ReadLine()) != null) // { // var encodedTextBytes = Convert.FromBase64String(line); // string plainText = Encoding.UTF8.GetString(encodedTextBytes); // daten.Add(plainText); // } // } // if(daten.Count == 3) { // TextBoxBenutzerName.Text = daten[0]; // TextBoxPasswort.Password = daten[1]; // // Merken.IsChecked = Convert.ToBoolean(daten[2]); // } //} } catch (Exception e) { MessageBox.Show("Ups, da ist was schief gelaufen: \n" + e.Message, "Fehler", MessageBoxButton.OK); } } private void AutosetDaten() { try { if (!File.Exists(Path.Combine(GetAndCreateUserAppDataPath(), "ownChat.txt"))) { using ( StreamWriter sw = new StreamWriter(Path.Combine(GetAndCreateUserAppDataPath(), "ownChat.txt"))) { Encoding enc = new UTF8Encoding(); var byt = enc.GetBytes(TextBoxKundennummer.Text); var bytes = Convert.ToBase64String(byt); var byt2 = enc.GetBytes(TextBoxChatCode.Text); var bytes2 = Convert.ToBase64String(byt2); sw.WriteLine(bytes); sw.WriteLine(bytes2); File.SetAttributes(Path.Combine(GetAndCreateUserAppDataPath(), "ownChat.txt"), FileAttributes.ReadOnly); } } else { File.SetAttributes(Path.Combine(GetAndCreateUserAppDataPath(), "ownChat.txt"), FileAttributes.Normal); File.Delete(Path.Combine(GetAndCreateUserAppDataPath(), "ownChat.txt")); using ( StreamWriter sw = new StreamWriter(Path.Combine(GetAndCreateUserAppDataPath(), "ownChat.txt"))) { Encoding enc = new UTF8Encoding(); var byt = enc.GetBytes(TextBoxKundennummer.Text); var bytes = Convert.ToBase64String(byt); var byt2 = enc.GetBytes(TextBoxChatCode.Text); var bytes2 = Convert.ToBase64String(byt2); sw.WriteLine(bytes); sw.WriteLine(bytes2); File.SetAttributes(Path.Combine(GetAndCreateUserAppDataPath(), "ownChat.txt"), FileAttributes.ReadOnly); } } } catch (Exception e) { MessageBox.Show("Ups, da ist was schief gelaufen: \n" + e.Message, "Fehler", MessageBoxButton.OK); } } public static string GetAndCreateUserAppDataPath() { try { string localAppData = Environment.GetFolderPath( Environment.SpecialFolder.LocalApplicationData); string companyFilePath = Path.Combine(localAppData, "beyondSoft"); if (!Directory.Exists(companyFilePath)) Directory.CreateDirectory(companyFilePath); string bewoFilePath = Path.Combine(companyFilePath, "OwnChat"); if (!Directory.Exists(bewoFilePath)) Directory.CreateDirectory(bewoFilePath); return bewoFilePath; } catch (Exception ex) { MessageBox.Show( "Fehler beim Anlegen des Anwendungsordners. Sie besitzen nicht die erforderlichen Rechte, bitte wenden Sie sich an Ihren Systemadministrator.\n" + ex.Message, "BeWoPlaner", MessageBoxButton.OK, MessageBoxImage.Exclamation); } return Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); } #endregion //Neue Region zum VErschlüsseln und entschlüsseln der Daten #region Verschlüsseln/Entschlüsseln via Link // wird ersmal nicht mehr gebraucht //TODO Kann erst nach erfolgreichem Login verschlüsselt werden private bool Verschluss() { try { string URl = _newUrl + "api/ownchat/user/encryptcredentials"; string postdaten = ""; Dictionary postparameter = new Dictionary(); postparameter.Add("username", _benutzername); postparameter.Add("password", _passwort); //neu | hinzufügen laut document postparameter.Add("chatcode", _chatCode); int i = 0; foreach (var key in postparameter.Keys) { //hier noch chatcode übergeben postdaten += HttpUtility.UrlEncode(key) + "=" + HttpUtility.UrlEncode(postparameter[key]) + "&"; } WebRequest requesten = WebRequest.Create(URl); requesten.Method = "POST"; requesten.ContentType = "application/x-www-form-urlencoded"; requesten.Headers["Token"] = _authToken; requesten.Headers["CustomerID"] = _kundennummer; byte[] daten = Encoding.ASCII.GetBytes(postdaten); requesten.ContentLength = daten.Length; try { Stream requestStream = requesten.GetRequestStream(); requestStream.Write(daten, 0, daten.Length); requestStream.Close(); } catch (Exception e) { MessageBox.Show("Es konnte keine Verbindung aufgebaut werden.", "Fehler", MessageBoxButton.OK); return false; } //response bereich | Verarbeiten HttpWebResponse myHttpWebResponse = (HttpWebResponse)requesten.GetResponse(); Stream responseStream = myHttpWebResponse.GetResponseStream(); StreamReader myStreamReader = new StreamReader(responseStream, Encoding.Default); var pageContent = myStreamReader.ReadToEnd(); //Bereich zum Verarbeiten der Erhaltenen Daten var definiti = new { encryped = ""}; var jsonDatentyp = JsonConvert.DeserializeAnonymousType(pageContent, definiti); return true; } catch (Exception e) { MessageBox.Show("Beim Verschlüsseln ist was schief gelaufen. \n" + e.Message,"Fehler",MessageBoxButton.OK); return false; } } private byte[] mediaDatei; //TODO Entschluss weiter ausprogrammieren private bool Entschluss() { try { string URl = _newUrl + "api/ownchat/user/decryptcredentials"; WebRequest requesten = WebRequest.Create(URl); requesten.Method = "POST"; requesten.ContentType = "application/x-www-form-urlencoded"; requesten.Headers["CustomerID"] = _kundennummer; byte[] daten = mediaDatei; requesten.ContentLength = daten.Length; try { Stream requestStream = requesten.GetRequestStream(); requestStream.Write(daten, 0, daten.Length); requestStream.Close(); } catch (Exception e) { MessageBox.Show("Es konnte keine Verbindung aufgebaut werden.", "Fehler", MessageBoxButton.OK); return false; } //erhalte response HttpWebResponse myHttpWebResponse = (HttpWebResponse)requesten.GetResponse(); Stream responseStream = myHttpWebResponse.GetResponseStream(); StreamReader myStreamReader = new StreamReader(responseStream, Encoding.Default); var pageContent = myStreamReader.ReadToEnd(); //Bereich zum Verarbeiten der Erhaltenen Daten var definiti = new { encrypted = "" }; var jsonDatentyp = JsonConvert.DeserializeAnonymousType(pageContent, definiti); return true; } catch (Exception e) { MessageBox.Show("Beim Entschlüsseln ist was schief gelaufen. \n" + e.Message, "Fehler", MessageBoxButton.OK); return false; } } #endregion } }