Files
Chat/ChatController/HauptKlassen/Login.cs
2017-10-06 12:08:05 +02:00

329 lines
11 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using System.Windows;
using ChatController.Klassen;
using Newtonsoft.Json;
namespace ChatController.HauptKlassen
{
public class Login
{
private string _url = ""; //"https://bewoplaner.beyondsoft.de/voucher_check.php"; // alt
private string _newUrl = "https://dict.ownchat.de/api/server/resolve/1/"; //https://dict.ownchat.de/api/server/resolve/{type}/{customerid} //type = Diensttyp(1,2,oder 3), customerid = Kudennummer des Kunden
private string _serverUrl = "";
private string _authToken = "";
private readonly string _benutzername;
private readonly string _passwort;
private readonly string _kundennummer;
private readonly string _chatCode;
private readonly string _apikey;
private long? _userid;
private bool _verbindungsaufbauOK = false;
private bool _ownchatVerbindungsaufbauOK = false;
private bool _gruppeholenverbindungsaufbauOK = false;
private AuthentifizierungsDaten _serverconect;
private UserDaten _userconect;
private ChatGruppenDaten _groupconect;
public Login(string kundennummer, string chatCode,string benutzername,string passwort)
{
_kundennummer = kundennummer;
_chatCode = chatCode;
_benutzername = benutzername;
_passwort = passwort;
_apikey = "0000";//default damit nichts kaput geht
}
public Login(string kundennummer, string chatCode, string benutzername, string passwort,string apikey)
{
_kundennummer = kundennummer;
_chatCode = chatCode;
_benutzername = benutzername;
_passwort = passwort;
_apikey = apikey;
}
public ChatDatenUebergabe AnmeldevorgangDurchFuehren()
{
if(ServerErmittlung()){
Dictionary<string, string> dic = new Dictionary<string, string>();
dic.Add("username", _benutzername);
dic.Add("password", _passwort);
dic.Add("chatcode",_chatCode);
VerbindeMitChatServer(dic);
// Gruppen abfragen
if (_ownchatVerbindungsaufbauOK)
{
GruppenHolen();
}
if (_gruppeholenverbindungsaufbauOK)
{
ChatDatenUebergabe ubergabe = new ChatDatenUebergabe(_serverconect, _userconect, _groupconect, _serverUrl, _authToken, _userid, _kundennummer,_apikey);
return ubergabe;
}
}
return null;
}
public bool ServerErmittlung()
{
try
{
string serverURl = _newUrl + _kundennummer;
WebRequest request = WebRequest.Create(serverURl);
request.Credentials = CredentialCache.DefaultCredentials;
WebResponse response;
try
{
response = request.GetResponse();
}
catch (Exception e)
{
MessageBox.Show("Es konnte keine Verbindung aufgebaut werden.", "Fehler", MessageBoxButton.OK);
return false;
}
// Display the status.
var statusResponse = ((HttpWebResponse)response).StatusDescription;
string responseFromServer = ReadStream(response);
try
{
var jsonDatentyp = JsonConvert.DeserializeObject<NewAuthentifizierungsDatenTyp1>(responseFromServer);
if (jsonDatentyp.Status == 1)
{
MessageBox.Show("Kundennummer unbekannt");
return false;
}
else if (jsonDatentyp.Status == 2)
{
MessageBox.Show("Diensttyp ist für angegebene Kundennummer nicht definiert");
return false;
}
else
{
_url = jsonDatentyp.URL;
}
}
catch (Exception eds)
{
try
{
var jsonDatentyp = JsonConvert.DeserializeObject<NewAuthentifizierungsDatenTyp2>(responseFromServer);
if (jsonDatentyp.Status == 1)
{
MessageBox.Show("Kundennummer unbekannt");
return false;
}
else if (jsonDatentyp.Status == 2)
{
MessageBox.Show("Diensttyp ist für angegebene Kundennummer nicht definiert");
return false;
}
else
{
_url = jsonDatentyp.URL;
}
}
catch (Exception e)
{
MessageBox.Show("Beim Parsen der Datei ist ein fehler aufgetreten.", "Fehler",
MessageBoxButton.OK);
}
}
response.Close();
_serverUrl = _url;
return true;
}
catch (Exception e)
{
MessageBox.Show("Ein nicht weiter definierter fehler ist aufgetreten: "+ e.Message,"Fehler",MessageBoxButton.OK);
return false;
}
}
private void VerbindeMitChatServer(Dictionary<string, string> postparameter)
{
try
{
var endurl = _url + "/api/user/login"; //loginwithchatcode
string postdaten = "";
int i = 0;
foreach (var key in postparameter.Keys)
{
postdaten += HttpUtility.UrlEncode(key) + "=" + HttpUtility.UrlEncode(postparameter[key]) + "&";
}
WebRequest requesten = WebRequest.Create(endurl);
requesten.Method = "POST";
requesten.ContentType = "application/x-www-form-urlencoded";
requesten.Headers["CustomerID"] = _kundennummer;
byte[] daten = Encoding.ASCII.GetBytes(postdaten);
requesten.ContentLength = daten.Length;
Stream requestStream = requesten.GetRequestStream();
requestStream.Write(daten, 0, daten.Length);
requestStream.Close();
HttpWebResponse myHttpWebResponse = (HttpWebResponse)requesten.GetResponse();
Stream responseStream = myHttpWebResponse.GetResponseStream();
StreamReader myStreamReader = new StreamReader(responseStream, Encoding.Default);
string pageContent = myStreamReader.ReadToEnd();
//UserDaten müssen mehrere wege der initialisierung bieten
if (!pageContent.Equals(""))
{
//_serverCheckOK = true;
//string[] array = responseFromServer.Split(':');
//Json Verarbeitungsgedöns Dictionary < string, TestKlasse>
var jsonDaten = JsonConvert.DeserializeObject<UserDaten>(pageContent);
//var serv = jsonDaten[_chatcode].ServerName;
foreach (var datev in jsonDaten.Response)
{
_authToken = datev.Value.Token;
_userid = datev.Value.Oid;
}
_userconect = jsonDaten;
_ownchatVerbindungsaufbauOK = true;
}
else
{
//throw fehler
// MessageBox.Show("Keine Daten Vorhanden.");
}
// MessageBox.Show(pageContent);
myStreamReader.Close();
responseStream.Close();
}
catch (Exception e)
{
//throw fehler
MessageBox.Show(e.Message, "Fehler", MessageBoxButton.OK);
}
}
private void GruppenHolen()
{
try
{
var endurl = _url + "/api/chat/groups";
WebRequest request = WebRequest.Create(endurl);
request.Credentials = CredentialCache.DefaultCredentials;
request.Headers["Token"] = _authToken;
request.Headers["CustomerID"] = _kundennummer;
// Get the response.
WebResponse response = request.GetResponse();
// Display the status.
var statusResponse = ((HttpWebResponse)response).StatusDescription;
string responseFromServer = ReadStream(response);
//verarbeite hier zu json
if (!responseFromServer.Equals(""))
{
//################# Deserialisierung mit Json ###############################
var jsonDaten = JsonConvert.DeserializeObject<ChatGruppenDaten>(responseFromServer);
_groupconect = jsonDaten;
// var serv = jsonDaten[_chatcode].ServerName;
//MessageBox.Show(responseFromServer);
_gruppeholenverbindungsaufbauOK = true;
}
else
{
// MessageBox.Show("Keine Daten Vorhanden.");
}
response.Close();
}
catch (Exception e)
{
// MessageBox.Show(e.Message, "Fehler", MessageBoxButton.OK);
}
}
private string ReadStream(WebResponse response)
{
try
{
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
dataStream.Dispose();
reader.Dispose();
dataStream.Close();
reader.Close();
return responseFromServer;
}
catch (Exception e)
{
// MessageBox.Show(e.Message);
return null;
}
}
}
}