Files
BeWoPlaner/BeWo/ownChat/ownChatHelper.cs
2025-02-20 00:20:46 +01:00

235 lines
7.7 KiB
C#

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Web;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Forms;
using System.Windows.Threading;
using BS.Shared.DataContracts;
using Newtonsoft.Json;
using MessageBox = System.Windows.MessageBox;
namespace BeWo.ownChat
{
public class OwnChatHelper
{
public static void OpenOwnChatPdf(string tenant, string apikey, string benutzername, string passwort, string chatcode)
{
var r = HoleOwnChatPdf(tenant, apikey, benutzername, passwort, chatcode);
switch (r)
{
case 0:
// wenn hier dann alles ok
break;
case 11:
MessageBox.Show("Kundennummer unbekannt.", "Fehler", MessageBoxButton.OK, MessageBoxImage.Exclamation);
break;
case 12:
MessageBox.Show("Der API-Key ist falsch -> Auth-Error.", "Fehler", MessageBoxButton.OK, MessageBoxImage.Exclamation);
break;
case 13:
MessageBox.Show("Es existiert kein API-Key für die angegebene Kundennummer.", "Fehler", MessageBoxButton.OK, MessageBoxImage.Exclamation);
break;
case 40:
MessageBox.Show("Vorlage nicht gefunden.", "Fehler", MessageBoxButton.OK, MessageBoxImage.Exclamation);
break;
case 41:
MessageBox.Show("Ungültige Custom-Logo-URL.", "Fehler", MessageBoxButton.OK, MessageBoxImage.Exclamation);
break;
case 60:
MessageBox.Show("Fehler: \n" + "", "Fehler", MessageBoxButton.OK, MessageBoxImage.Exclamation);
break;
}
}
private static int HoleOwnChatPdf(string tenant, string apikey, string benutzername, string passwort, string chatcode)
{
try
{
#region ServerErmittlung und Link ermittlung
string serverUrl = ErmittleServerURL(tenant);
if (serverUrl == null)
{
return 11;
}
else if (serverUrl.Equals(""))
{
return 11;
}
var endurl = serverUrl + "/api/ownchat/createpdfmanual/" + apikey + "/" + tenant;
#endregion
#region Post Parameter Uebergabe
Dictionary<string, string> postparameter = new Dictionary<string, string>();
if (!String.IsNullOrEmpty(benutzername))
postparameter.Add("username", benutzername);
if (!String.IsNullOrEmpty(passwort))
postparameter.Add("password", passwort);
if (!String.IsNullOrEmpty(chatcode))
postparameter.Add("chatcode", chatcode);
string postdaten = "";
int i = 0;
foreach (var key in postparameter.Keys)
{
postdaten += HttpUtility.UrlEncode(key) + "=" + HttpUtility.UrlEncode(postparameter[key]) + "&";
}
#endregion
#region Webrequest Aufbau ink. stream
WebRequest requesten = WebRequest.Create(endurl);
requesten.Method = "POST";
requesten.ContentType = "application/x-www-form-urlencoded";
byte[] daten = Encoding.ASCII.GetBytes(postdaten);
requesten.ContentLength = daten.Length;
try
{
Stream requestStream = requesten.GetRequestStream();
requestStream.Write(daten, 0, daten.Length);
requestStream.Close();
var inte = VerarbeiteErhalteneDaten(requesten, chatcode);
return inte;
}
catch (Exception e)
{
MessageBox.Show("Es konnte keine Verbindung aufgebaut werden.", "Fehler", MessageBoxButton.OK);
return 0;
}
#endregion
}
catch (Exception e)
{
return 60;
}
}
public static int VerarbeiteErhalteneDaten(WebRequest requesten, string chatcode)
{
try
{
#region Verarbeitung der Erhaltenen Daten
using (HttpWebResponse response = (HttpWebResponse) requesten.GetResponse())
{
string responseFromServer = "";
using (Stream reqStr2 = response.GetResponseStream())
{
byte[] barray = null;
byte[] Stringmesage = null;
using (var memoryStream = new MemoryStream())
{
reqStr2.CopyTo(memoryStream);
barray = memoryStream.ToArray();
}
if (barray != null)
{
Stringmesage = barray;
responseFromServer = System.Text.Encoding.Default.GetString(Stringmesage);
}
if (responseFromServer.Contains("PDF"))
{
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.Title = "Dokument Speichern";
saveFileDialog1.FileName = Path.GetFileName(String.Format("ownChat-Kurzanleitung_{0}.pdf", chatcode));
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
File.WriteAllBytes(saveFileDialog1.FileName, barray);
Process.Start(saveFileDialog1.FileName);
reqStr2.Close();
}
return 0;
}
else
{
var jsonDatentyp = JsonConvert.DeserializeObject<PdfChatHandoutDC>(responseFromServer);
return jsonDatentyp.Result;
}
}
}
#endregion
}
catch (Exception e)
{
return 60;
}
}
private static string ErmittleServerURL(string tenant)
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
string url = "https://dict.ownchat.de/api/server/resolve/1/" + tenant;//customerId; //customerid == kundennummer
WebRequest request = WebRequest.Create(url);
request.Credentials = CredentialCache.DefaultCredentials;
WebResponse response = request.GetResponse();
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
dataStream.Dispose();
reader.Dispose();
dataStream.Close();
reader.Close();
var definition = new { status = "", URL = "", SYNCTYPE = "" };
var jsondaten = JsonConvert.DeserializeAnonymousType(responseFromServer, definition);
string serverUrl = jsondaten.URL;
response.Close();
return serverUrl;
}
}
}