using Database; using Model; using Newtonsoft.Json; using SecuringWebApiUsingApiKey.Middleware; using System; using System.Buffers.Text; using System.Configuration; using System.Data; using System.Data.SqlClient; using System.IO; using System.Linq; using System.Text.RegularExpressions; using System.Web; using System.Web.Http.Results; using System.Web.Services; using System.Web.UI; using System.Web.UI.WebControls; namespace WebApp { public partial class JSONViewer : System.Web.UI.Page { private string ConnectionString = StringCipher.Decrypt(ConfigurationManager.ConnectionStrings["DocTesterconnectionstring"].ConnectionString, "i%!k!7pab%bNLdA5hE4pkR4XaB%E^jB3d9tHuQ4pbF&BZjF7SB#WBWit5#HrbJiLrLVm"); private TableConfig CurrentTable => TableConfigProvider.LoadConfig().Tables.FirstOrDefault(t => t.Key == ddlTables.SelectedValue); protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) BindTables(); } private void BindTables() { var config = TableConfigProvider.LoadConfig(); ddlTables.DataSource = config.Tables; ddlTables.DataTextField = "DisplayName"; ddlTables.DataValueField = "Key"; ddlTables.DataBind(); ddlTables.Items.Insert(0, "-- bitte wählen --"); } protected void ddlTables_SelectedIndexChanged(object sender, EventArgs e) { gvData.PageIndex = 0; LoadTableData(); } protected void ddlTables_clearfilter(object sender, EventArgs e) { this.txtfilter.Text = ""; LoadTableData(); } protected void gvData_PageIndexChanging(object sender, GridViewPageEventArgs e) { gvData.PageIndex = e.NewPageIndex; LoadTableData(); } string[] buttons; private void LoadTableData() { if (ddlTables.SelectedIndex <= 0 || CurrentTable == null) return; var cfg = CurrentTable; buttons = cfg.Buttons.Split(';'); if (cfg.FilterColumns == "") { txtfilter.Visible = false; lblFilter.Visible = false; } else { txtfilter.Visible = true; lblFilter.Visible = true; } string sql = cfg.SqlList; string where = ""; if (cfg.FilterColumns != "" && txtfilter.Text.Trim()!="") { string[] filters = cfg.FilterColumns.Split(';'); int i = 0; foreach(string filter in filters) { if (i>0) { where = where + " or "; } where = where + " " + filter + " like '%" + txtfilter.Text + "%' "; i=i + 1; } if (where !="") { where = "where " + where; } } sql = sql.Replace("[FILTER]", where); using (var con = new SqlConnection(ConnectionString)) using (var cmd = new SqlCommand(sql, con)) { var dt = new DataTable(); con.Open(); dt.Load(cmd.ExecuteReader()); gvData.DataSource = dt; gvData.DataBind(); } } protected void gvData_RowCreated(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.Header) e.Row.Cells.Add(new TableHeaderCell { Text = "Details" }); } protected void gvData_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType != DataControlRowType.DataRow) return; var cfg = CurrentTable; if (cfg == null) return; var id = DataBinder.Eval(e.Row.DataItem, cfg.IdField)?.ToString(); if (string.IsNullOrEmpty(id)) return; string tableKeyJs = HttpUtility.JavaScriptStringEncode(cfg.Key); string idJs = HttpUtility.JavaScriptStringEncode(id); bool hasoeffenen = false; foreach (string button in buttons) { switch (button.ToUpper()) { case "ÖFFNEN": var c1 = new TableCell(); var l1 = new LinkButton { Text = "Öffnen", CssClass = "open" }; hasoeffenen = true; l1.OnClientClick = $"loadJson('{tableKeyJs}','{idJs}'); return false;"; c1.Controls.Add(l1); e.Row.Cells.Add(c1); break; case "ANZEIGEN": var c2 = new TableCell(); var l2 = new LinkButton { Text = "Dok.Anzeigen", CssClass = "open" }; l2.OnClientClick = $"showDoc('{tableKeyJs}','{idJs}'); return false;"; c2.Controls.Add(l2); e.Row.Cells.Add(c2); break; case "PAKETANZEIGE": var c3 = new TableCell(); var l3 = new LinkButton { Text = "Paket-Dok.anzeigen", CssClass = "open" }; l3.OnClientClick = $"showPacDoc('{tableKeyJs}','{idJs}'); return false;"; c3.Controls.Add(l3); e.Row.Cells.Add(c3); break; case "DOKUMENTEANZEIGEN": var c4 = new TableCell(); var l4 = new LinkButton { Text = "Dokumente(e) anzeigen", CssClass = "open" }; l4.OnClientClick = $"showAPIDocs('{tableKeyJs}','{idJs}'); return false;"; c4.Controls.Add(l4); e.Row.Cells.Add(c4); break; } } if (!hasoeffenen) { masterform.Attributes.Add("class", "leftfull"); } else { masterform.Attributes.Add("class", "left"); } //var cell = new TableCell(); //var lnk = new LinkButton //{ // Text = " Öffnen ", // CssClass = "open" //}; //lnk.OnClientClick = $"loadJson('{tableKeyJs}','{idJs}'); return false;"; //cell.Controls.Add(lnk); //var cell2 = new TableCell(); //var lnk2 = new LinkButton //{ // Text = " Generieren ", // CssClass = "open" //}; ////lnk.OnClientClick = $"loadJson('{tableKeyJs}','{idJs}'); return false;"; //lnk2.OnClientClick = $"generateFromJson(); return false;"; //cell.Controls.Add(lnk2); //e.Row.Cells.Add(cell); } private static Random random = new Random(); public static string RandomString(int length) { const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; return new string(Enumerable.Repeat(chars, length) .Select(s => s[random.Next(s.Length)]).ToArray()); } [WebMethod] public static object gwrAPIDocs(string table, string id) { var config = TableConfigProvider.LoadConfig(); var cfg = config.Tables.FirstOrDefault(t => t.Key == table); if (cfg == null) return "Tabelle nicht gefunden"; string sql = "SELECT NLOGApiDoc_1.id, NLOGApiDoc_1.GUID, a.Div FROM edoka_journale.dbo.NLOGApiDoc as a INNER JOIN edoka_journale.dbo.NLOGApiDoc AS NLOGApiDoc_1 ON a.GUID = NLOGApiDoc_1.GUID"; sql = sql + " WHERE (a.Div LIKE 'offedk%') AND (NLOGApiDoc_1.id = " + id + ")"; int rowcount = 0; System.IO.DirectoryInfo di = new DirectoryInfo(@"d:\apps\ondoc\admintemp\"); foreach (FileInfo file in di.GetFiles()) { file.Delete(); } string prefix=RandomString(6).ToString(); using (var con = new SqlConnection(StringCipher.Decrypt(ConfigurationManager.ConnectionStrings["DocTesterconnectionstring"].ConnectionString, "i%!k!7pab%bNLdA5hE4pkR4XaB%E^jB3d9tHuQ4pbF&BZjF7SB#WBWit5#HrbJiLrLVm"))) using (var cmd = new SqlCommand(sql, con)) { //cmd.Parameters.AddWithValue("@id", id); con.Open(); var dt = new DataTable(); dt.Load(cmd.ExecuteReader()); con.Close(); rowcount = dt.Rows.Count; if (rowcount > 0) { foreach (DataRow dr in dt.Rows) { cmd.CommandText = "Select dbo.BinaryToBase64(dokument) from dbo.doks where dokumentid='" + dr[2].ToString() + "'"; con.Open(); string doc = cmd.ExecuteScalar()?.ToString(); con.Close(); var ms1 = new MemoryStream(Convert.FromBase64String(doc)); using (System.IO.FileStream file = new System.IO.FileStream(@"d:\apps\ondoc\admintemp\" + prefix + dr[2].ToString() + ".pdf", System.IO.FileMode.Create, System.IO.FileAccess.Write)) { byte[] bytes = new byte[ms1.Length]; ms1.Read(bytes, 0, (int)ms1.Length); file.Write(bytes, 0, bytes.Length); ms1.Close(); } ms1 = null; } return prefix; } else { return ""; } } } [WebMethod] public static object GetPacDoc(string table, string id) { var config = TableConfigProvider.LoadConfig(); var cfg = config.Tables.FirstOrDefault(t => t.Key == table); if (cfg == null) return "Tabelle nicht gefunden"; using (var con = new SqlConnection(StringCipher.Decrypt(ConfigurationManager.ConnectionStrings["DocTesterconnectionstring"].ConnectionString, "i%!k!7pab%bNLdA5hE4pkR4XaB%E^jB3d9tHuQ4pbF&BZjF7SB#WBWit5#HrbJiLrLVm"))) using (var cmd = new SqlCommand(cfg.AnzeigeDokument, con)) { System.IO.DirectoryInfo di = new DirectoryInfo(@"d:\apps\ondoc\admintemp\"); foreach (FileInfo file in di.GetFiles()) { file.Delete(); } cmd.Parameters.AddWithValue("@id", id); con.Open(); var dt = new DataTable(); dt.Load(cmd.ExecuteReader()); con.Close(); Versandpaket vp = JsonConvert.DeserializeObject(dt.Rows[0][0].ToString()); var b64 = vp.finaldoc; var ms = new MemoryStream(Convert.FromBase64String(b64)); using (System.IO.FileStream file = new System.IO.FileStream(@"d:\apps\ondoc\admintemp\vp.pdf", System.IO.FileMode.Create, System.IO.FileAccess.Write)) { byte[] bytes = new byte[ms.Length]; ms.Read(bytes, 0, (int)ms.Length); file.Write(bytes, 0, bytes.Length); ms.Close(); } //System.Diagnostics.Process.Start(@"d:\apps\ondoc\admintemp\vp.pdf"); //System.IO.File.Delete("d:\\ondoc\\temp\\vp.pdf"); return ""; } } [WebMethod] public static object GetDoc(string table, string id) { var config = TableConfigProvider.LoadConfig(); var cfg = config.Tables.FirstOrDefault(t => t.Key == table); if (cfg == null) return "Tabelle nicht gefunden"; using (var con = new SqlConnection(StringCipher.Decrypt(ConfigurationManager.ConnectionStrings["DocTesterconnectionstring"].ConnectionString, "i%!k!7pab%bNLdA5hE4pkR4XaB%E^jB3d9tHuQ4pbF&BZjF7SB#WBWit5#HrbJiLrLVm"))) using (var cmd = new SqlCommand(cfg.AnzeigeDokument, con)) { cmd.Parameters.AddWithValue("@id", id); con.Open(); string doc = cmd.ExecuteScalar()?.ToString(); con.Close(); return doc; } } [WebMethod] public static object GetJson(string table, string id) { var config = TableConfigProvider.LoadConfig(); var cfg = config.Tables.FirstOrDefault(t => t.Key == table); if (cfg == null) return "Tabelle nicht gefunden"; using (var con = new SqlConnection(StringCipher.Decrypt(ConfigurationManager.ConnectionStrings["DocTesterconnectionstring"].ConnectionString, "i%!k!7pab%bNLdA5hE4pkR4XaB%E^jB3d9tHuQ4pbF&BZjF7SB#WBWit5#HrbJiLrLVm"))) using (var cmd = new SqlCommand(cfg.SqlById, con)) { cmd.Parameters.AddWithValue("@id", id); con.Open(); string json = cmd.ExecuteScalar()?.ToString(); return json; dynamic dataj = JsonConvert.DeserializeObject(json); try { if (dataj.Id != "") { json = JsonConvert.DeserializeObject("" + json + ""); return json; } } catch { } if (string.IsNullOrEmpty(json)) return "Datensatz nicht gefunden"; try { if (json.TrimStart().StartsWith("\"")) { json = JsonConvert.DeserializeObject("{" + json + "}"); } Versandpaket vp = new Versandpaket(); vp = JsonConvert.DeserializeObject(json); vp.finaldoc = "ABCD..."; foreach (Versanddokument vd in vp.Dokument) { vd.dokument = "ABC..."; } //vp.Dokument.Clear(); json = JsonConvert.SerializeObject(vp, Formatting.Indented); } catch (Exception ex) { } // JSON in Objekt parsen, damit PageMethods es korrekt als JS-Objekt liefert return (json); } } [WebMethod] public static object Generate(string json) { return ""; } } }