Files
Chat/ChatController/HauptKlassen/Login.cs
Lyndon ee981e48c2 tr
2019-04-02 13:43:30 +02:00

404 lines
14 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
public 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 _angemeldeterUser;
private ChatGruppenDaten _alleGruppen;
private bool showMessageBox = true;
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 Login(string kundennummer)
{
_kundennummer = kundennummer;
showMessageBox = false;
ServerErmittlung();
}
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);
if (_ownchatVerbindungsaufbauOK)
{
GruppenHolen();
}
if (_gruppeholenverbindungsaufbauOK)
{
long maxUploadSize = GetMaiximumAllowedFileUploadSize(_authToken,_kundennummer);
ChatDatenUebergabe ubergabe = new ChatDatenUebergabe(_serverconect, _angemeldeterUser, _alleGruppen, _serverUrl, _authToken, _userid, _kundennummer,_apikey, maxUploadSize);
return ubergabe;
}
}
return null;
}
public bool ServerErmittlung()
{
if (_serverUrl.Equals(""))
{
try
{
string serverURl = _newUrl + _kundennummer;
WebRequest request = WebRequest.Create(serverURl);
request.Credentials = CredentialCache.DefaultCredentials;
WebResponse response;
try
{
response = request.GetResponse();
}
catch (Exception e)
{
if (showMessageBox)
{
MessageBox.Show("Fehler: Es konnte keine Verbindung aufgebaut werden.", "ownChat Fehler",
MessageBoxButton.OK, MessageBoxImage.Error);
}
return false;
}
// Display the status.
var statusResponse = ((HttpWebResponse) response).StatusDescription;
string responseFromServer = Utilities.Utils.ReadStream(response);
try
{
var jsonDatentyp =
JsonConvert.DeserializeObject<NewAuthentifizierungsDatenTyp1>(responseFromServer);
if (jsonDatentyp.Status == 1)
{
if (showMessageBox)
{
MessageBox.Show(
"Fehler: Kundennummer unbekannt.\nBitte überprüfen Sie die Anmeldeinformationen.",
"ownChat Info", MessageBoxButton.OK, MessageBoxImage.Asterisk);
}
return false;
}
else if (jsonDatentyp.Status == 2)
{
if (showMessageBox)
{
MessageBox.Show("Der Diensttyp ist für die angegebene Kundennummer nicht definiert.",
"ownChat Info",
MessageBoxButton.OK, MessageBoxImage.Asterisk);
}
return false;
}
else
{
_url = jsonDatentyp.URL;
}
}
catch (Exception eds)
{
try
{
var jsonDatentyp =
JsonConvert.DeserializeObject<NewAuthentifizierungsDatenTyp2>(responseFromServer);
if (jsonDatentyp.Status == 1)
{
if (showMessageBox)
{
MessageBox.Show(
"Fehler: Kundennummer unbekannt.\nBitte überprüfen Sie die Anmeldeinformationen.",
"ownChat Info", MessageBoxButton.OK, MessageBoxImage.Asterisk);
}
return false;
}
else if (jsonDatentyp.Status == 2)
{
if (showMessageBox)
{
MessageBox.Show(
"Der Diensttyp ist für die angegebene Kundennummer nicht definiert.",
"ownChat Info", MessageBoxButton.OK, MessageBoxImage.Asterisk);
}
return false;
}
else
{
_url = jsonDatentyp.URL;
}
}
catch (Exception e)
{
if (showMessageBox)
{
MessageBox.Show("Fehler: " + e.Message, "ownChat Fehler", MessageBoxButton.OK,
MessageBoxImage.Error);
}
}
}
response.Close();
_serverUrl = _url;
return true;
}
catch (Exception e)
{
if (showMessageBox)
{
MessageBox.Show("Fehler: " + e.Message, "ownChat Fehler", MessageBoxButton.OK,
MessageBoxImage.Error);
}
return false;
}
}
else
{
return true;
}
}
private void VerbindeMitChatServer(Dictionary<string, string> postparameter)
{
string fehlermeldung = "";
try
{
var endurl = _url + "/api/user/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();
if (!pageContent.Equals(""))
{
var jsonDaten = JsonConvert.DeserializeObject<UserDaten>(pageContent);
if (jsonDaten.Success == true)
{
foreach (var datev in jsonDaten.Response)
{
_authToken = datev.Value.Token;
_userid = datev.Value.Oid;
}
_angemeldeterUser = jsonDaten;
_ownchatVerbindungsaufbauOK = true;
}
else
{
if (jsonDaten.Errors.chatcode_failed != null)
{
if (showMessageBox)
{
MessageBox.Show(
"Fehler: " + jsonDaten.Errors.chatcode_failed[0] +
"\nBitte überprüfen Sie die Anmeldeinformationen.", "Info", MessageBoxButton.OK,
MessageBoxImage.Asterisk);
}
}else if (jsonDaten.Errors.login_failed != null)
{
if (showMessageBox)
{
MessageBox.Show(
"Fehler: " + jsonDaten.Errors.login_failed[0] +
"\nBitte überprüfen Sie die Anmeldeinformationen.", "Info", MessageBoxButton.OK,
MessageBoxImage.Asterisk);
}
}
_ownchatVerbindungsaufbauOK = false;
}
}
myStreamReader.Close();
responseStream.Close();
}
catch (Exception e)
{
if (showMessageBox)
{
MessageBox.Show("Fehler:" + e.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
}
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;
using (WebResponse response = request.GetResponse())
{
// Display the status.
var statusResponse = ((HttpWebResponse) response).StatusDescription;
string responseFromServer = Utilities.Utils.ReadStream(response);
if (!responseFromServer.Equals(""))
{
var jsonDaten = JsonConvert.DeserializeObject<ChatGruppenDaten>(responseFromServer);
_alleGruppen = jsonDaten;
_gruppeholenverbindungsaufbauOK = true;
}
}
}
catch (Exception e)
{
if (showMessageBox)
{
MessageBox.Show("Fehler: " + e.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
}
#region Maximal erlaubte File Größe
public long GetMaiximumAllowedFileUploadSize(string token, string customerid)
{
long maxsize = 0;
try
{
var endurl = _serverUrl + "/api/ownchat/uploadmaxsize";// + apikey + "/" + customerid;
WebRequest request = WebRequest.Create(endurl);
request.Headers["Token"] = token;
request.Headers["CustomerID"] = customerid;
request.Credentials = CredentialCache.DefaultCredentials;
request.Proxy = null;
using (WebResponse response = request.GetResponse())
{
// Display the status.
var statusResponse = ((HttpWebResponse) response).StatusDescription;
string responseFromServer = Utilities.Utils.ReadStream(response);
var definiti = new {file_upload_max_size = ""};
var jsonDatentyp = JsonConvert.DeserializeAnonymousType(responseFromServer, definiti);
maxsize = Convert.ToInt64(jsonDatentyp.file_upload_max_size);
}
}
catch (Exception e)
{
return 0;
}
return maxsize;
}
#endregion
}
}