public static void CreateConfigFile(String fileName, JObject config) { Directory.CreateDirectory(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "KwpMyCraftnoteSyncAdapter\\")); try { //////////////////////////////////// /// Read all values from JObject /// /// and update all values /// //////////////////////////////////// host = (string)config["host"]; username = (string)config["username"]; password = (string)config["password"]; database = (string)config["database"]; database = (string)config["database"]; instance = (string)config["instance"]; limit = (int)config["limit"]; interval = (double)config["interval"]; apikey = (string)config["apikey"]; keyword = (string)config["keyword"]; current = DateTime.Now.ToString("dd-MM-yyyy HH:mm:ss.fff"); } catch (Exception e) { Console.WriteLine("Error while processing the config file. Using fallback values. Please check the Configfile for any issues"); Console.WriteLine(e.ToString()); LogfileHandler.Log("Error in Configfile: " + e.ToString()); } //////////////////////////////////////////////////////////////////////////////// /// Rewriting Configfile to avoid malconfig and to update lastsync timestamp /// //////////////////////////////////////////////////////////////////////////////// File.WriteAllText(fileName, string.Empty); /////////////////////////////////////////////////// /// New JObject with updated Value for lastsync /// /////////////////////////////////////////////////// JObject json = new JObject(new JProperty("host", host), new JProperty("username", username), new JProperty("password", password), new JProperty("database", database), new JProperty("instance", instance), new JProperty("last_sync", current), new JProperty("limit", limit), new JProperty("apikey", apikey), new JProperty("interval", interval), new JProperty("keyword", keyword)); //////////////////////////////////////////////////// /// Opening Filestream and write JObject to File /// //////////////////////////////////////////////////// using (FileStream fs = File.Create(fileName)) { ////////////////////////////// /// JObject to Byte array /// //////////////////////////// Byte[] contents = new UTF8Encoding(true).GetBytes(json.ToString()); /////////////////////////////////// /// Writing Byte array to File /// ///////////////////////////////// fs.Write(contents, 0, contents.Length); Console.WriteLine("Configfile successfuly updated"); LogfileHandler.Log("Configfile updated"); } }
public static void CheckUpdate(Version version) { try { Directory.CreateDirectory(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "KwpMyCraftnoteSyncAdapter\\")); Console.WriteLine("Prüfe auf aktualisierung"); WebClient myWebClient = new WebClient(); myWebClient.DownloadFile("https://server01.nibot.me/kwpcraftnote/update.json", filePath); if (File.Exists(filePath) && new FileInfo(filePath).Length != 0) { ///////////////////////////////////////////////////////////////////////////// /// Open a StreamReader to read the filecontent an parse it to a JObject /// /////////////////////////////////////////////////////////////////////////// using (StreamReader r = new StreamReader(filePath)) { string json = r.ReadToEnd(); JObject filecontent = JObject.Parse(json); LogfileHandler.Log("update.json content: " + filecontent.ToString()); Version newVersion = Version.Parse(filecontent["version"].ToString()); if (version < newVersion) { Console.WriteLine("Update avilable"); myWebClient.DownloadFile("https://server01.nibot.me/kwpcraftnote/update.exe", filePathExe); if (File.Exists(filePathExe) && new FileInfo(filePathExe).Length != 0) { Process.Start(Path.Combine(filePathExe + " /SILENT")); LogfileHandler.Log("Update started"); System.Environment.Exit(0); } } else { LogfileHandler.Log("Version is not Higher"); } } } } catch (Exception e) { Console.WriteLine(e.ToString()); LogfileHandler.Log("Update Error: " + e.ToString()); MessageBox.Show("Bitte lassen sie Dieses Fenster Geöffnet und informieren sie ihren Systemadministrator \n\n\n" + e.ToString(), "KWP -> MyCraftnote Projekt Synchronisation Schwerwiegender Fehler!!! ", MessageBoxButtons.OK, MessageBoxIcon.Error); System.Threading.Thread.Sleep(5000); System.Environment.Exit(1); } }
///<summary>Read Configfile or create on if not Exists</summary> /// <returns>Returns Configfile content as JObject</returns> public static JObject ReadConfigfile(string path) { ///////////////////////////////////////////////// /// Checking if file exists and is not empty /// /////////////////////////////////////////////// if (File.Exists(path) && new FileInfo(path).Length != 0) { ///////////////////////////////////////////////////////////////////////////// /// Open a StreamReader to read the filecontent an parse it to a JObject /// /////////////////////////////////////////////////////////////////////////// using (StreamReader r = new StreamReader(path)) { string json = r.ReadToEnd(); JObject filecontent = JObject.Parse(json); return(filecontent); } } else { ///////////////////////////////////////////////// /// Creating JObject with the default values /// /////////////////////////////////////////////// JObject json = new JObject(new JProperty("host", "localhost"), new JProperty("username", "sa"), new JProperty("password", "kwpsarix"), new JProperty("database", "BNWINS"), new JProperty("instance", "kwp"), new JProperty("last_sync", ""), new JProperty("limit", 10), new JProperty("apikey", ""), new JProperty("interval", 10.0), new JProperty("keyword", "craftnote")); //////////////////////////////////////////////////// /// Opening Filestream and write JObject to File /// //////////////////////////////////////////////////// using (FileStream fs = File.Create(path)) { ////////////////////////////// /// JObject to Byte array /// //////////////////////////// Byte[] contents = new UTF8Encoding(true).GetBytes(json.ToString()); /////////////////////////////////// /// Writing Byte array to File /// ///////////////////////////////// fs.Write(contents, 0, contents.Length); Console.WriteLine("Configfile successfuly created"); LogfileHandler.Log("Configfile created"); } return(json); } }
///<summary>Creates JObject for a Project and sends a Post request to the Carftnote Api</summary> public async static void SendProjects(List <Models.Project> projects, string apikey) { for (var i = 0; i < projects.Count; i++) { //////////////////////////////////////////////// /// Deleting evry slash from the Phonenumber /// //////////////////////////////////////////////// if (projects[i].BauHrAdrTelNr != null) { projects[i].BauHrAdrTelNr = projects[i].BauHrAdrTelNr.Replace("/", ""); } ///////////////////////////////////////////////// /// Creating JObject with the Project values /// /////////////////////////////////////////////// if (projects[i].ProjBezeichnung.Length != 0) { JArray contactPersons = new JArray(); if (projects[i].ProjAdr != projects[i].BauHrAdr) { contactPersons.Add(new JObject( new JProperty("name", projects[i].ProjAdrAnrede + " " + projects[i].ProjAdrVorname + " " + projects[i].ProjAdrName), new JProperty("email", projects[i].ProjAdrEmail), new JProperty("phone", projects[i].ProjAdrTelNr) )); if (projects[i].BauHrAdr != projects[i].RechAdr) { contactPersons.Add(new JObject( new JProperty("name", projects[i].BauHrAdrAnrede + " " + projects[i].BauHrAdrVorname + " " + projects[i].BauHrAdrName), new JProperty("email", projects[i].BauHrAdrEmail), new JProperty("phone", projects[i].BauHrAdrTelNr) )); contactPersons.Add(new JObject( new JProperty("name", projects[i].RechAdrAnrede + " " + projects[i].RechAdrVorname + " " + projects[i].RechAdrName), new JProperty("email", projects[i].RechAdrEmail), new JProperty("phone", projects[i].RechAdrTelNr) )); } else { contactPersons.Add(new JObject( new JProperty("name", projects[i].BauHrAdrAnrede + " " + projects[i].BauHrAdrVorname + " " + projects[i].BauHrAdrName), new JProperty("email", projects[i].BauHrAdrEmail), new JProperty("phone", projects[i].BauHrAdrTelNr) )); } } else { contactPersons.Add(new JObject( new JProperty("name", projects[i].ProjAdrAnrede + " " + projects[i].ProjAdrVorname + " " + projects[i].ProjAdrName), new JProperty("email", projects[i].ProjAdrEmail), new JProperty("phone", projects[i].ProjAdrTelNr) )); } if (projects[i].ProjectAdrAnsprechpartner != null) { contactPersons.Add(new JObject( new JProperty("name", projects[i].ProjectAdrAnsprechpartner.Anrede + " " + projects[i].ProjectAdrAnsprechpartner.Vorname + " " + projects[i].ProjectAdrAnsprechpartner.Nachname), new JProperty("email", projects[i].ProjectAdrAnsprechpartner.Email), new JProperty("phone", projects[i].ProjectAdrAnsprechpartner.Telefonnummer))); if (projects[i].ProjectAdrAnsprechpartner.TelefonnummerPrivat != "" || projects[i].ProjectAdrAnsprechpartner.EmailPrivat != "") { contactPersons.Add(new JObject( new JProperty("name", projects[i].ProjectAdrAnsprechpartner.Anrede + " " + projects[i].ProjectAdrAnsprechpartner.Vorname + " " + projects[i].ProjectAdrAnsprechpartner.Nachname + "(Privat)"), new JProperty("email", projects[i].ProjectAdrAnsprechpartner.EmailPrivat), new JProperty("phone", projects[i].ProjectAdrAnsprechpartner.TelefonnummerPrivat))); } } if (projects[i].BauHrAdrAnsprechpartner != null) { contactPersons.Add(new JObject( new JProperty("name", projects[i].BauHrAdrAnsprechpartner.Anrede + " " + projects[i].BauHrAdrAnsprechpartner.Vorname + " " + projects[i].BauHrAdrAnsprechpartner.Nachname), new JProperty("email", projects[i].BauHrAdrAnsprechpartner.Email), new JProperty("phone", projects[i].BauHrAdrAnsprechpartner.Telefonnummer))); if (projects[i].BauHrAdrAnsprechpartner.TelefonnummerPrivat != "" || projects[i].BauHrAdrAnsprechpartner.EmailPrivat != "") { contactPersons.Add(new JObject( new JProperty("name", projects[i].BauHrAdrAnsprechpartner.Anrede + " " + projects[i].BauHrAdrAnsprechpartner.Vorname + " " + projects[i].BauHrAdrAnsprechpartner.Nachname + "(Privat)"), new JProperty("email", projects[i].BauHrAdrAnsprechpartner.EmailPrivat), new JProperty("phone", projects[i].BauHrAdrAnsprechpartner.TelefonnummerPrivat))); } } if (projects[i].RechAdrAnsprechpartner != null) { contactPersons.Add(new JObject( new JProperty("name", projects[i].RechAdrAnsprechpartner.Anrede + " " + projects[i].RechAdrAnsprechpartner.Vorname + " " + projects[i].RechAdrAnsprechpartner.Nachname), new JProperty("email", projects[i].RechAdrAnsprechpartner.Email), new JProperty("phone", projects[i].RechAdrAnsprechpartner.Telefonnummer))); if (projects[i].RechAdrAnsprechpartner.TelefonnummerPrivat != "" || projects[i].RechAdrAnsprechpartner.EmailPrivat != "") { contactPersons.Add(new JObject( new JProperty("name", projects[i].RechAdrAnsprechpartner.Anrede + " " + projects[i].RechAdrAnsprechpartner.Vorname + " " + projects[i].RechAdrAnsprechpartner.Nachname + "(Privat)"), new JProperty("email", projects[i].RechAdrAnsprechpartner.EmailPrivat), new JProperty("phone", projects[i].RechAdrAnsprechpartner.TelefonnummerPrivat))); } } JObject json = new JObject( new JProperty("name", projects[i].ProjBezeichnung), new JProperty("orderNumber", projects[i].ProjNr), new JProperty("street", projects[i].ProjAdrStrasse), new JProperty("zipcode", projects[i].ProjAdrOrtPLZ), new JProperty("city", projects[i].ProjAdrOrtOrt), new JProperty("contact", contactPersons) ); LogfileHandler.Log("Json Body: " + json.ToString()); if (apikey.Length != 0) { /////////////////////////////////////////////// /// Sending JObject to the MyCraftnote Api /// ///////////////////////////////////////////// using (var client = new HttpClient()) { String jsonString = ""; var response = await client.PostAsync( "https://europe-west1-craftnote-live.cloudfunctions.net/v1/createproject?apikey=" + apikey, new StringContent(json.ToString(), Encoding.UTF8, "application/json")); if (response.IsSuccessStatusCode) { jsonString = await response.Content.ReadAsStringAsync(); } //////////////////////////// /// Printing Api Result /// ////////////////////////// LogfileHandler.Log("Http respinse: " + response); LogfileHandler.Log("Json Body" + jsonString); try { JObject responseJson = JObject.Parse(jsonString); Console.WriteLine("\nProject Urls: " + responseJson["weblink"] + " || " + responseJson["appDeepLink"]); } catch (Exception e) { Console.WriteLine(e.ToString()); LogfileHandler.Log("Update Error: " + e.ToString()); MessageBox.Show("Bitte lassen sie Dieses Fenster Geöffnet und informieren sie ihren Systemadministrator \n\n\n" + e.ToString(), "KWP -> MyCraftnote Projekt Synchronisation Schwerwiegender Fehler!!! ", MessageBoxButtons.OK, MessageBoxIcon.Error); System.Threading.Thread.Sleep(5000); System.Environment.Exit(1); } } } else { Console.WriteLine("kein ApiKey vorhanden"); LogfileHandler.Log("No ApiKey available"); } } else { Console.WriteLine("Projekt bezeichnung nicht verfügbar"); LogfileHandler.Log("No Project Name available"); } } }
static void Main(string[] args) { System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly(); version = assembly.GetName().Version; UpdateHandler.CheckUpdate(version); ////////////////////////////////////////////////////// /// Searches commandline args for a Configfilepath /// ////////////////////////////////////////////////////// LogfileHandler.Log("Configfile: " + configfilePath); if (!ConfigfileHandler.CheckIfConfigFileExists(configfilePath)) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Dies ist der Erste start der Anwendung. Als ertses müssen wir noc ein paar sachen Wissen."); Console.Write("Bitte Geben sie die IPAdresse des Computers mit dem Installierten Sqlservers an (localhost): "); host = Console.ReadLine(); if (host.Length == 0) { host = "localhost"; } Console.Write("Bitte Geben sie jetzt die Sqlserver Instanz ein (kwp): "); instance = Console.ReadLine(); if (instance.Length == 0) { instance = "kwp"; } Console.Write("Bitte Geben sie Jetzt die Start Datenbank ein (BNWINS): "); database = Console.ReadLine(); if (database.Length == 0) { database = "BNWINS"; } Console.Write("Bitte geben sie jetz den Benutzernamen der Sqlserverinstanz ein (sa): "); username = Console.ReadLine(); if (username.Length == 0) { username = "******"; } Console.Write("Bitte geben sie jetzt das Passwort der Sqlserverinstanz ein (kwpsarix): "); password = Console.ReadLine(); if (password.Length == 0) { password = "******"; } Console.Write("Bitte geben sie jetzt den MyCraftnote API Schlüssel ein: "); apikey = Console.ReadLine(); while (apikey == "") { Console.Write("Der Api Schlüssel darf nicht leer sein. Bitte tragen sie hier ihren API Schlüssel ein: "); apikey = Console.ReadLine(); } Console.Write("Bitte geben sie jetzt den Gewünschten aktualisierungs rythmus in minuten an (5): "); string intervalString = Console.ReadLine(); if (intervalString.Length == 0) { interval = 5.0; } else { if (isDouble(intervalString)) { interval = Double.Parse(intervalString); } else { while (!isDouble(intervalString)) { Console.Write("Die eingabe muss eine Zahl sein. Bitte geben sie jetzt den Gewünschten aktualisierungs rythmus in minuten an (5): "); intervalString = Console.ReadLine(); } interval = Double.Parse(intervalString); } } config = new JObject(new JProperty("host", host), new JProperty("username", username), new JProperty("password", password), new JProperty("database", database), new JProperty("instance", instance), new JProperty("last_sync", current), new JProperty("limit", limit), new JProperty("apikey", apikey), new JProperty("interval", interval), new JProperty("keyword", keyword)); ConfigfileHandler.CreateConfigFile(configfilePath, config); Console.WriteLine("Configuration Abgeschlossen. Die Konfigurationsdatei befindet sich hier: " + configfilePath); } try { ////////////////////////// /// Reading Configfile /// ////////////////////////// config = ConfigfileHandler.ReadConfigfile(configfilePath); LogfileHandler.Log("Configfile content: " + config.ToString()); //////////////////////////////////// /// Read all values from JObject /// /// and update all values /// //////////////////////////////////// host = (string)config["host"]; username = (string)config["username"]; password = (string)config["password"]; database = (string)config["database"]; database = (string)config["database"]; instance = (string)config["instance"]; lastSync = (string)config["last_sync"]; limit = (int)config["limit"]; interval = (double)config["interval"]; apikey = (string)config["apikey"]; keyword = (string)config["keyword"]; } catch (Exception e) { Console.WriteLine("Error while processing the config file. Using fallback values. Please check the Configfile for any issues"); Console.WriteLine(e.ToString()); LogfileHandler.Log("Error in Configfile: " + e.ToString()); } cnn = DatabaseHandler.BuildConnecion(host, instance, username, password, database); try { //////////////////////////////////////// /// Try to Connect to the Sql Server /// //////////////////////////////////////// Console.WriteLine("Connecting to SQL Server"); cnn.Open(); Console.WriteLine("!!!Connection Open!!!"); LogfileHandler.Log("Sql Server Connected"); runDBProcessing(); /////////////////////////////////////////////////////////// /// Creating a Timer to run this Operations Periodicaly /// ////////////////////////////////////////////////////////// SetTimer(interval * 60.0 * 1000.0); Console.Write("Press any key to exit... "); Console.ReadKey(); //////////////////////////////////// /// Closing Sqlserver Connection /// //////////////////////////////////// cnn.Close(); Console.WriteLine("!!!Connection Closed!!!"); LogfileHandler.Log("Sql Server disonnected"); } catch (SqlException e) { Console.WriteLine(e.ToString()); MessageBox.Show("Bitte lassen sie Dieses Fenster Geöffnet und informieren sie ihren Systemadministrator \n\n\n" + e.ToString(), "KWP -> MyCraftnote Projekt Synchronisation Schwerwiegender Fehler!!! ", MessageBoxButtons.OK, MessageBoxIcon.Error); cnn.Close(); LogfileHandler.Log("Sql Error: " + e.ToString()); System.Threading.Thread.Sleep(5000); Environment.Exit(1); } catch (ArgumentNullException e) { Console.WriteLine(e.ToString()); MessageBox.Show("Bitte lassen sie Dieses Fenster Geöffnet und informieren sie ihren Systemadministrator \n\n\n" + e.ToString(), "KWP -> MyCraftnote Projekt Synchronisation Schwerwiegender Fehler!!! ", MessageBoxButtons.OK, MessageBoxIcon.Error); cnn.Close(); LogfileHandler.Log("ArgumentNull Error: " + e.ToString()); System.Threading.Thread.Sleep(5000); Environment.Exit(1); } catch (NullReferenceException e) { Console.WriteLine(e.ToString()); MessageBox.Show("Bitte lassen sie Dieses Fenster Geöffnet und informieren sie ihren Systemadministrator \n\n\n" + e.ToString(), "KWP -> MyCraftnote Projekt Synchronisation Schwerwiegender Fehler!!! ", MessageBoxButtons.OK, MessageBoxIcon.Error); cnn.Close(); LogfileHandler.Log("NullReference Error: " + e.ToString()); System.Threading.Thread.Sleep(5000); Environment.Exit(1); } catch (Exception e) { Console.WriteLine(e.ToString()); MessageBox.Show("Bitte lassen sie Dieses Fenster Geöffnet und informieren sie ihren Systemadministrator \n\n\n" + e.ToString(), "KWP -> MyCraftnote Projekt Synchronisation Schwerwiegender Fehler!!! ", MessageBoxButtons.OK, MessageBoxIcon.Error); cnn.Close(); LogfileHandler.Log("Error: " + e.ToString()); System.Threading.Thread.Sleep(5000); Environment.Exit(1); } }
public static void runDBProcessing() { try { ////////////////////////// /// Reading Configfile /// ////////////////////////// config = ConfigfileHandler.ReadConfigfile(configfilePath); LogfileHandler.Log("Configfile content: " + config.ToString()); //////////////////////////////////// /// Read all values from JObject /// /// and update all values /// //////////////////////////////////// host = (string)config["host"]; username = (string)config["username"]; password = (string)config["password"]; database = (string)config["database"]; database = (string)config["database"]; instance = (string)config["instance"]; lastSync = (string)config["last_sync"]; limit = (int)config["limit"]; interval = (int)config["interval"]; apikey = (string)config["apikey"]; keyword = (string)config["keyword"]; } catch (Exception fileError) { Console.WriteLine("Error while processing the config file. Using fallback values. Please check the Configfile for any issues"); Console.WriteLine(fileError.ToString()); LogfileHandler.Log("Error in Configfile: " + fileError.ToString()); } current = DateTime.Now.ToString("dd-MM-yyyy HH:mm:ss.fff"); LogfileHandler.Log("Current timestamp: " + current); List <Models.Project> projects = DatabaseHandler.GetProjects(cnn, config); List <Models.Project> serviceProjects = DatabaseHandler.GetServiceProjects(cnn, config); for (var i = 0; i < projects.Count; i++) { if (projects[i].ProjAdrAnsprechpartnerID != (long)-1) { projects[i].ProjectAdrAnsprechpartner = DatabaseHandler.GetContactPersonById(cnn, projects[i].ProjAdrAnsprechpartnerID); } if (projects[i].BauHrAdrAnsprechpartnerID != (long)-1) { projects[i].BauHrAdrAnsprechpartner = DatabaseHandler.GetContactPersonById(cnn, projects[i].BauHrAdrAnsprechpartnerID); } if (projects[i].RechAdrAnsprechpartnerID != (long)-1) { projects[i].RechAdrAnsprechpartner = DatabaseHandler.GetContactPersonById(cnn, projects[i].ProjAdrAnsprechpartnerID); } } ApiHandler.SendProjects(projects, apikey); for (var i = 0; i < serviceProjects.Count; i++) { if (serviceProjects[i].ProjAdrAnsprechpartnerID != (long)-1) { serviceProjects[i].ProjectAdrAnsprechpartner = DatabaseHandler.GetContactPersonById(cnn, serviceProjects[i].ProjAdrAnsprechpartnerID); } if (serviceProjects[i].BauHrAdrAnsprechpartnerID != (long)-1) { serviceProjects[i].BauHrAdrAnsprechpartner = DatabaseHandler.GetContactPersonById(cnn, serviceProjects[i].BauHrAdrAnsprechpartnerID); } if (serviceProjects[i].RechAdrAnsprechpartnerID != (long)-1) { serviceProjects[i].RechAdrAnsprechpartner = DatabaseHandler.GetContactPersonById(cnn, serviceProjects[i].ProjAdrAnsprechpartnerID); } } ApiHandler.SendProjects(serviceProjects, apikey); ConfigfileHandler.UpdateConfigfile(configfilePath, config, current); }
private static void OnTimedEvent(Object source, ElapsedEventArgs e) { LogfileHandler.Log("Timer run"); runDBProcessing(); }