478 lines
17 KiB
C#
478 lines
17 KiB
C#
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.Data;
|
|
using System.Windows.Documents;
|
|
using System.Windows.Forms;
|
|
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 Cursors = System.Windows.Input.Cursors;
|
|
using KeyEventArgs = System.Windows.Input.KeyEventArgs;
|
|
using MessageBox = System.Windows.MessageBox;
|
|
using Path = System.IO.Path;
|
|
using UserControl = System.Windows.Controls.UserControl;
|
|
|
|
namespace ChatController
|
|
{
|
|
/// <summary>
|
|
/// Interaktionslogik für Login.xaml
|
|
/// </summary>
|
|
public partial class LoginControl : UserControl
|
|
{
|
|
public delegate void LoginDelegate(ChatDatenUebergabe cdu);
|
|
|
|
public event LoginDelegate OnLogin;
|
|
|
|
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)
|
|
{
|
|
Anmelden();
|
|
}
|
|
|
|
private void TextBoxPasswort_OnKeyUp(object sender, KeyEventArgs e)
|
|
{
|
|
if (e.Key == Key.Return)
|
|
{
|
|
Anmelden();
|
|
}
|
|
}
|
|
|
|
private void Anmelden()
|
|
{
|
|
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
|
|
//{
|
|
// Auskommentiert weil bereits abgefangen
|
|
// 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:"+exception.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
|
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<string> merkdaten = new List<string>();
|
|
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<string> daten = new List<string>();
|
|
// 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);
|
|
}
|
|
}
|
|
|
|
private 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<string, string> postparameter = new Dictionary<string, string>();
|
|
|
|
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
|
|
|
|
}
|
|
|
|
|
|
}
|