private void DoModification(DialogConfigBLEntities entities, AntragItem item, AntragItem.Item.SubItem x, List <string> errors) { var p = from z in entities.UserMappings where z.HandyNummer == x.handyNummer && z.DatenbankId == item.Data.datenbankId select z; if (p.Any()) { var um = p.First(); um.IsAdmin = x.isAdmin; um.IsGesperrt = x.isGesperrt; um.Name = x.name; um.Vorname = x.vorname; um.ShortName = x.shortName; um.Module = x.module; try { entities.SaveChanges(); } catch (Exception ex) { errors.Add(string.Format("MODIFICATION: Ausnahme: '{2}' für HandyNummer '{0}' und DatanbankId {1}", ex.Message, x.handyNummer, item.Data.datenbankId)); } } else { errors.Add(string.Format("MODIFICATION: Keinen Eintrag in Tabelle UserMappings mit HandyNummer '{0}' und DatanbankId {1} gefunden!", x.handyNummer, item.Data.datenbankId)); } }
private void DoAddition(DialogConfigBLEntities entities, AntragItem item, AntragItem.Item.SubItem x, List <string> errors) { var existingItem = entities.UserMappings.Find(x.handyNummer, item.Data.datenbankId); if (existingItem == null) { var um = new UserMapping() { DatenbankId = item.Data.datenbankId, HandyNummer = x.handyNummer, IsAdmin = x.isAdmin, IsGesperrt = x.isGesperrt, Name = x.name, Vorname = x.vorname, Module = x.module, ShortName = x.shortName }; entities.UserMappings.Add(um); try { entities.SaveChanges(); } catch (Exception ex) { errors.Add(string.Format("ADDITION: Ausnahme: '{2}' für HandyNummer '{0}' und DatanbankId {1}", ex.Message, x.handyNummer, item.Data.datenbankId)); } } else { errors.Add(string.Format("ADDITION: Einen Eintrag in Tabelle UserMappings mit HandyNummer '{0}' und DatanbankId {1} existiert bereits und keine Duplizierungen sind erlaubt!", x.handyNummer, item.Data.datenbankId)); } }
// GET: GetAntraege public ActionResult GetAntraege() { var entities = new DialogConfigBLEntities(); using (entities) { var q = from x in entities.Antrags where !x.Erledigt select new { x.AntragId, x.FormData }; return(Json(q.ToList(), JsonRequestBehavior.AllowGet)); } }
// GET: Admin public ActionResult Index() { var context = (SessionContext)Session["SessionContext"]; var model = new AdminIndexViewModel(); var entities = new DialogConfigBLEntities(); using (entities) { // Aktueller Benutzer finden var q1 = from x in entities.UserMappings where x.HandyNummer == context.Handynummer && x.DatenbankId == context.DatenbankId select x; if (!q1.Any()) { return(View("Error")); } var administrator = q1.First(); model.HandyNummer = administrator.HandyNummer; model.MandantId = administrator.Datenbank.Mandant.MandantId; model.MandantBezeichnung = administrator.Datenbank.Mandant.Bezeichnung; model.DatenbankId = administrator.DatenbankId; model.Module = administrator.Datenbank.Mandant.Module ?? ""; model.DatenbankBezeichnung = administrator.Datenbank.Bezeichnung; model.Items = new List <AdminIndexViewModel.Item>(); var q2 = from x in entities.UserMappings where x.Datenbank.MandantId == model.MandantId && x.DatenbankId == model.DatenbankId select x; if (!q2.Any()) { return(View("Error")); } foreach (var um in q2) { model.Items.Add(new AdminIndexViewModel.Item() { IsGesperrt = um.IsGesperrt, HandyNummer = um.HandyNummer, IsAdmin = um.IsAdmin, ShortName = um.ShortName, Vorname = um.Vorname, Name = um.Name, Module = um.Module, Status = AdminIndexViewModel.ItemStatus.Unchanged }); } ViewBag.Users = q2.Count(um => !um.IsGesperrt); } return(View(model)); }
private void CallSwisscomWsMockAsync(IndexViewModel model, string datenbankBez, string mandantUrl) { var ctxt = new SessionContext() { DatenbankId = model.datenbankId, Handynummer = model.handynummer, IsAdmin = model.isAdmin, Shortname = model.shortname }; Session["SessionContext"] = ctxt; Task.Run(() => { var enUs = new CultureInfo("en-us"); var data = string.Format( "<?xml version='1.0' encoding='utf-8' ?>" + "<data>" + "<user>{0}</user>" + "<database>{1}</database>" + "<module>{2}</module>" + "<timestamp>{3}</timestamp>" + "</data>", model.shortname, datenbankBez, model.module, DateTime.Now.ToString(enUs.DateTimeFormat)); var entities = new DialogConfigBLEntities(); using (entities) { var token = Convert.ToBase64String(Encoding.UTF8.GetBytes(data)); var hash = Sign(token, _TokenSigningCertificate2); var req = new MIDRequest() { DatenbankId = model.datenbankId, Erfolgreich = true, Handynummer = model.handynummer, Hash = hash, IsAdmin = model.isAdmin, RequestId = model.requestId, ResponseMessage = "Mobile ID korrekt eingegeben", Shortname = model.shortname, Status = "ready", //Url = "http://" + mandantUrl, Url = mandantUrl.StartsWith("http") ? mandantUrl : "http://" + mandantUrl, Token = token }; entities.MIDRequests.Add(req); entities.SaveChanges(); } }); }
private void MIDLogWrite(string msg) { if (_MIDLogSwitch.Enabled) { var log = new DialogPortal.Models.Log() { OpId = _MIDLogOpId, SeqId = ++_MIDLogSeqId, Text = msg }; var entities = new DialogConfigBLEntities(); using (entities) { entities.Logs.Add(log); entities.SaveChanges(); } } }
private void DoDeletion(DialogConfigBLEntities entities, AntragItem item, AntragItem.Item.SubItem x, List <string> errors) { var p = from z in entities.UserMappings where z.HandyNummer == x.handyNummer && z.DatenbankId == item.Data.datenbankId select z; if (p.Any()) { var um = p.First(); entities.UserMappings.Remove(um); try { entities.SaveChanges(); } catch (Exception ex) { errors.Add(string.Format("DELETION: Ausnahme: '{2}' für HandyNummer '{0}' und DatanbankId {1}", ex.Message, x.handyNummer, item.Data.datenbankId)); } } else { errors.Add(string.Format("DELETION: Keinen Eintrag in Tabelle UserMappings mit HandyNummer '{0}' und DatanbankId {1} gefunden!", x.handyNummer, item.Data.datenbankId)); } }
// GET: GetAntrag public ActionResult ConfirmAntrag(int antragId, string ignore) { var ignoreList = new List <string>(); if (!string.IsNullOrEmpty(ignore)) { ignoreList = ignore.Split(',').ToList(); } var errors = new List <string>(); try { var entities = new DialogConfigBLEntities(); using (entities) { var q = from x in entities.Antrags where x.AntragId == antragId select x; // Aktualisieren if (q.Any()) { var a = q.First(); var item = new AntragItem() { AntragId = antragId, FormData = a.FormData }; // foreach (var x in item.Data.items) { if (ignoreList.Contains(x.handyNummer)) { continue; } if (x.status == "modified") { DoModification(entities, item, x, errors); } else if (x.status == "added") { DoAddition(entities, item, x, errors); } else if (x.status == "deleted") { DoDeletion(entities, item, x, errors); } else { errors.Add(string.Format("Status '{0}' unbekannt", x.status)); } } if (errors.Count > 0) { return(Content(PrepareErrorMessage(errors))); } else { a.Erledigt = true; entities.SaveChanges(); // wegen a.Erledigt = true!! return(Content("ok")); } } else { errors.Add(string.Format("Antrag in Tabelle Antrags mit antragId {0} nicht vorhanden. Keine Änderung wurde durchgeführt.", antragId)); return(Content(PrepareErrorMessage(errors))); } } } catch (Exception ex) { return(Content(PrepareErrorMessage(ex))); } }
// GET: Send public ActionResult Send(string formData) { var success = true; var errorMessage = string.Empty; var antragNummer = 0; //formData = formData.Replace(""e;", "\\'"); //var data = JsonConvert.DeserializeObject<Dictionary<string, object>>(formData); /* Newtonsoft.Json.dll * * JArray array = new JArray(); Product product = new Product(); * array.Add("Manual text"); product.Name = "Apple"; * array.Add(new DateTime(2000, 5, 23)); product.Expiry = new DateTime(2008, 12, 28); * JObject o = new JObject(); product.Sizes = new string[] { "Small" }; * o["MyArray"] = array; string json = JsonConvert.SerializeObject(product); * string json = o.ToString(); //{ * // { // "Name": "Apple", * // "MyArray": [ // "Expiry": "2008-12-28T00:00:00", * // "Manual text", // "Sizes": [ * // "2000-05-23T00:00:00" // "Small" * // ] // ] * // } //} * * string json = @"{ JsonSchema schema = JsonSchema.Parse(@"{ * 'Name': 'Bad Boys', 'type': 'object', * 'ReleaseDate': '1995-4-7T00:00:00', 'properties': { * 'Genres': [ 'name': {'type':'string'}, * 'Action', 'hobbies': {'type': 'array'} * 'Comedy' } * ] }"); * }"; JObject person = JObject.Parse(@"{ * Movie m = JsonConvert.DeserializeObject<Movie>(json); 'name': 'James', * string name = m.Name; // Bad Boys 'hobbies': ['.NET', 'LOLCATS'] * }"); * bool valid = person.IsValid(schema); // true */ try { var entities = new DialogConfigBLEntities(); using (entities) { var antrag = new Antrag() { FormData = formData, Erledigt = false }; entities.Antrags.Add(antrag); entities.SaveChanges(); antragNummer = antrag.AntragId; var smtpHost = ConfigurationManager.AppSettings["SmtpHost"] ?? ""; var smtpPort = ConfigurationManager.AppSettings["SmtpPort"] ?? ""; var smtpFrom = ConfigurationManager.AppSettings["SmtpFrom"] ?? ""; var smtpTo = ConfigurationManager.AppSettings["SmtpTo"] ?? ""; var smtpSubject = string.Format(ConfigurationManager.AppSettings["SmtpSubject"], antragNummer); var smtpUser = ConfigurationManager.AppSettings["SmtpUser"] ?? ""; var smtpPassword = ConfigurationManager.AppSettings["SmtpPassword"] ?? ""; var smtpBcc = ConfigurationManager.AppSettings["SmtpBcc"] ?? ""; var smtpEnableSsl = (ConfigurationManager.AppSettings["SmtpEnableSsl"] ?? "") == "1"; var smtp = new SmtpClient(smtpHost, int.Parse(smtpPort)); using (smtp) { try { if (smtpUser.Length > 2) { smtp.Credentials = new NetworkCredential(smtpUser, smtpPassword); } smtp.EnableSsl = smtpEnableSsl; var message = new MailMessage() { From = new MailAddress(smtpFrom), IsBodyHtml = false, Body = formData, Subject = smtpSubject }; if (smtpBcc.Length > 2) { message.Bcc.Add(smtpBcc); } message.To.Add(new MailAddress(smtpTo)); smtp.Send(message); } catch (Exception ex) { success = false; errorMessage = ex.Message + "\nSind 'SmtpHost', 'SmtpFrom', 'SmtpTo' und 'SmtpSubject' in der Config-Datei konfugiriert?"; } } //var smtp = new SmtpClient(ConfigurationManager.AppSettings["SmtpHost"]); //using (smtp) //{ // try // { // //smtp.EnableSsl = true; // var message = new MailMessage( // ConfigurationManager.AppSettings["SmtpFrom"], // ConfigurationManager.AppSettings["SmtpTo"], // string.Format(ConfigurationManager.AppSettings["SmtpSubject"], antragNummer), // formData); // smtp.Send(message); // } // catch (Exception ex) // { // success = false; // errorMessage = ex.Message + "\nSind 'SmtpHost', 'SmtpFrom', 'SmtpTo' und 'SmtpSubject' in der Config-Datei konfugiriert?"; // } //} } } catch (Exception ex) { success = false; errorMessage = ex.Message; } var result = new { success = success, errorMessage = errorMessage, antragNummer = antragNummer }; return(Json(result, JsonRequestBehavior.AllowGet)); }
private void CallSwisscomWsAsync(IndexViewModel model, string datenbankBez, string mandantUrl) { if (BypassMobileId) { CallSwisscomWsMockAsync(model, datenbankBez, mandantUrl); return; } var ctxt = new SessionContext() { DatenbankId = model.datenbankId, Handynummer = model.handynummer, IsAdmin = model.isAdmin, Shortname = model.shortname }; Session["SessionContext"] = ctxt; var certDir = Server.MapPath("~/Certificates"); Task.Run(() => { var message = string.Format("DIALOG: {0}", ConfigurationManager.AppSettings["MobileIdText"]); var mid = new SwisscomMobileID(true, true, model.handynummer, message, "de", Server.MapPath("/"), certDir); try { var entities = new DialogConfigBLEntities(); using (entities) { var req = new MIDRequest() { DatenbankId = model.datenbankId, Erfolgreich = false, Handynummer = model.handynummer, Hash = "", IsAdmin = model.isAdmin, RequestId = model.requestId, ResponseMessage = "", Shortname = model.shortname, Status = "pending", Url = "", Token = "" }; entities.MIDRequests.Add(req); entities.SaveChanges(); var returnCode = 0; mid.Execute(out returnCode); // ... // ... // ... var q = from x in entities.MIDRequests where x.RequestId == model.requestId select x; if (q.Any()) { var x = q.First(); x.Status = "ready"; x.Erfolgreich = false; x.ResponseMessage = ""; //x.Url = "http://" + mandantUrl; x.Url = mandantUrl.StartsWith("http") ? mandantUrl : "http://" + mandantUrl; x.Shortname = model.shortname; var enUs = new CultureInfo("en-us"); var data = string.Format( "<?xml version='1.0' encoding='utf-8' ?>" + "<data>" + "<user>{0}</user>" + "<database>{1}</database>" + "<module>{2}</module>" + "<timestamp>{3}</timestamp>" + "</data>", model.shortname, datenbankBez, model.module, DateTime.Now.ToString(enUs.DateTimeFormat)); x.Token = Convert.ToBase64String(Encoding.UTF8.GetBytes(data)); x.Hash = Sign(x.Token, _TokenSigningCertificate2); x.Handynummer = model.handynummer; x.DatenbankId = model.datenbankId; switch (returnCode) { case RETURN_OK: x.ResponseMessage = "Mobile ID korrekt eingegeben."; x.Erfolgreich = true; break; case RETURN_REJECT: x.ResponseMessage = "MID Abfrage abgelehnt/storniert."; break; case RETURN_FAIL: x.ResponseMessage = "Ausnahme während der Bearbeitung der Abfrage. Mögliche Ursache: Mobile-ID beim Provider nicht aktiviert."; break; case RETURN_INVALID: x.ResponseMessage = "Ungültige Abfrage/Konfiguration."; break; case RETURN_BLOCKED: x.ResponseMessage = "Benutzer oder Token blockiert."; break; case RETURN_NOTFOUND: x.ResponseMessage = "Benutzer nicht gefunden."; break; } entities.SaveChanges(); } } } catch (Exception ex) { var entities = new DialogConfigBLEntities(); using (entities) { var q = from x in entities.MIDRequests where x.RequestId == model.requestId select x; if (q.Any()) { var x = q.First(); x.Erfolgreich = false; x.ResponseMessage = "Ausnahme: " + ex.Message; x.Status = "ready"; entities.SaveChanges(); } } } }); }
// GET: MidTest //[HttpPost] //public ActionResult MidTest(string handyNummer, int datenbankId) //{ //var model = new IndexViewModel() //{ // erfolgreich = false, // responseMessage = "", // token = "", // url = "", // hash = "", // shortname = "", // datenbanken = null, // isAdmin = false, // datenbankId = datenbankId, // handynummer = handyNummer //}; //if (handyNummer.Length > 5) //{ // var cookie = new HttpCookie("handynummer", handyNummer); // cookie.Expires = DateTime.Today.AddDays(30); // Response.Cookies.Add(cookie); //} //var entities = new DialogConfigBLEntities(); //using (entities) //{ // if (datenbankId == 0) // { // var q = from x in entities.UserMappings // where x.HandyNummer == handyNummer && !x.IsGesperrt // select x; // if (!q.Any()) // { // model.responseMessage = "Ungültige oder gesperrte Handynummer"; // } // else // { // model.datenbanken = new List<KeyValuePair<int, string>>(); // foreach (var x in q) // { // model.datenbanken.Add(new KeyValuePair<int, string>(x.DatenbankId, x.Datenbank.Bezeichnung)); // } // if (q.Count() == 1) // { // var first = q.First(); // model.isAdmin = first.IsAdmin; // if (first.Demo.HasValue && first.Demo.Value) // { // CallSwisscomWsMock(model, first); // } // else // { // CallSwisscomWs(model, first); // } // } // } // } // else // { // var q = from x in entities.UserMappings // where x.HandyNummer == handyNummer && x.DatenbankId == datenbankId && !x.IsGesperrt // select x; // model.datenbanken = new List<KeyValuePair<int, string>>(); // foreach (var x in q) // { // model.datenbanken.Add(new KeyValuePair<int, string>(x.DatenbankId, x.Datenbank.Bezeichnung)); // } // if (q.Any()) // { // var first = q.First(); // model.isAdmin = first.IsAdmin; // if (first.Demo.HasValue && first.Demo.Value) // { // MIDLogWrite("MIDRequest: Demo -> CallSwisscomWsMock called"); // CallSwisscomWsMock(model, first); // } // else // { // MIDLogWrite("MIDRequest: CallSwisscomWs called"); // CallSwisscomWs(model, first); // } // } // else // { // MIDLogWrite("MIDRequest: Keine UserMappings gefunden"); // model.responseMessage = "Ungültige oder gesperrte Handynummer"; // } // } //} //MIDLogWrite(string.Format("MIDRequest: Antwort {0} wird geliefert", model)); //return View(model); //} public ActionResult MIDRequest(string requestId, string handyNummer, int datenbankId) { if (string.IsNullOrEmpty(requestId)) { // Request starten MIDLogWrite(string.Format("MIDRequest start. handyNummer: {0} datenbankId: {1}", handyNummer, datenbankId)); var model = new IndexViewModel() { requestId = Guid.NewGuid().ToString(), // Id generiert status = "", erfolgreich = false, responseMessage = "", token = "", url = "", hash = "", shortname = "", datenbanken = null, isAdmin = false, datenbankId = 0, handynummer = "", module = "" }; var entities = new DialogConfigBLEntities(); using (entities) { if (datenbankId == 0) { MIDLogWrite("MIDRequest: datenbankId == 0"); var q = from x in entities.UserMappings where x.HandyNummer == handyNummer && !x.IsGesperrt select x; if (!q.Any()) { MIDLogWrite("MIDRequest: Keine Datenbank gefunden"); model.responseMessage = "Ungültige oder gesperrte Handynummer"; model.status = "error"; } else { if (q.Count() == 1) { MIDLogWrite("MIDRequest: 1 Datenbank gefunden"); var first = q.First(); model.isAdmin = first.IsAdmin; model.shortname = first.ShortName; model.datenbankId = first.DatenbankId; model.handynummer = first.HandyNummer; model.module = first.Module ?? first.Datenbank.Mandant.Module; if (first.Demo.HasValue && first.Demo.Value) { MIDLogWrite("MIDRequest: Demo -> CallSwisscomWsMock called"); model.status = "pending"; CallSwisscomWsMockAsync(model, first.Datenbank.Bezeichnung, first.Datenbank.Mandant.MandantUrl); } else { MIDLogWrite("MIDRequest: CallSwisscomWs called"); model.status = "pending"; CallSwisscomWsAsync(model, first.Datenbank.Bezeichnung, first.Datenbank.Mandant.MandantUrl); } } else // mehrere Datenbanken { MIDLogWrite("MIDRequest: Mehrere Datenbanken gefunden"); model.datenbanken = new List <KeyValuePair <int, string> >(); foreach (var x in q.OrderBy(m => m.Datenbank.Bezeichnung)) { model.datenbanken.Add(new KeyValuePair <int, string>(x.DatenbankId, x.Datenbank.Bezeichnung)); } model.status = "selectdb"; } } } else { MIDLogWrite("MIDRequest: datenbankId != 0"); var q = from x in entities.UserMappings where x.HandyNummer == handyNummer && x.DatenbankId == datenbankId && !x.IsGesperrt select x; if (q.Any()) { MIDLogWrite("MIDRequest: UserMappings gefunden"); var first = q.Include("Datenbank").First(); model.isAdmin = first.IsAdmin; model.shortname = first.ShortName; model.datenbankId = first.DatenbankId; model.handynummer = first.HandyNummer; model.module = first.Module ?? first.Datenbank.Mandant.Module; if (first.Demo.HasValue && first.Demo.Value) { MIDLogWrite("MIDRequest: Demo -> CallSwisscomWsMock called"); model.status = "pending"; CallSwisscomWsMockAsync(model, first.Datenbank.Bezeichnung, first.Datenbank.Mandant.MandantUrl); } else { MIDLogWrite("MIDRequest: CallSwisscomWs called"); model.status = "pending"; CallSwisscomWsAsync(model, first.Datenbank.Bezeichnung, first.Datenbank.Mandant.MandantUrl); } } else { MIDLogWrite("MIDRequest: Keine UserMappings gefunden"); model.responseMessage = "Ungültige oder gesperrte Handynummer"; model.status = "error"; } } } MIDLogWrite(string.Format("MIDRequest: Antwort {0} wird geliefert", model)); // Possible status values: pending, selectdb, error, ready return(Json(model, JsonRequestBehavior.AllowGet)); } else { // Response abfragen MIDLogWrite(string.Format("MIDRequest start. handyNummer: {0} datenbankId: {1} requestId: {2}", handyNummer, datenbankId, requestId)); var model = new IndexViewModel() { requestId = requestId, status = "pending", erfolgreich = false, responseMessage = "", token = "", url = "", hash = "", shortname = "", datenbanken = null, isAdmin = false, datenbankId = 0, handynummer = "", module = "" }; var entities = new DialogConfigBLEntities(); using (entities) { var q = from x in entities.MIDRequests where x.RequestId == requestId select x; if (q.Any()) { var first = q.First(); if (first.Status == "ready") { model.status = "ready"; model.erfolgreich = first.Erfolgreich; model.datenbankId = first.DatenbankId; model.handynummer = first.Handynummer; model.hash = first.Hash; model.isAdmin = first.IsAdmin; model.requestId = requestId; model.responseMessage = first.ResponseMessage; model.shortname = first.Shortname; model.token = first.Token; model.url = first.Url; } } } MIDLogWrite(string.Format("MIDRequest: Antwort {0} wird geliefert", model)); return(Json(model, JsonRequestBehavior.AllowGet)); } }