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("&quote;", "\\'");
            //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));
        }
Exemple #10
0
        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();
                        }
                    }
                }
            });
        }
Exemple #11
0
        // 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));
            }
        }