Пример #1
0
        public ActionResult CreateContact(Guid?userId)
        {
            Guid token = CheckSessionAuthState(CurrentUser, _authService);

            if (token == Guid.Empty)
            {
                ViewBag.login = true;
                //return RedirectToAction("LogOff", "Account");
            }
            if (Request.QueryString.AllKeys.Contains("Thumbprint"))
            {
                string thmbprnt  = Request.QueryString["Thumbprint"];
                string sbjctName = Request.QueryString["SubjectName"];
                string timeMsg   = Request.QueryString["TimeMessage"];
                var    cert      = new CertificateInfoContactAdd();
                cert.Thumbprint  = thmbprnt;
                cert.SubjectName = sbjctName;
                cert.TimeMessage = timeMsg;
                ViewBag.cert     = JsonConvert.SerializeObject(cert);
                //JsonConvert.SerializeObject(cert,Formatting.Indented);
                ViewBag.cert = ViewBag.cert.ToString().Replace(""", "");
            }
            ViewBag.UserId = userId == null ? Guid.Empty : (Guid)userId;

            return(View());
        }
Пример #2
0
        public ActionResult GetCertificatesInfo(List <string> thumbprints, Guid?userId)
        {
            Guid token = CheckSessionAuthState(CurrentUser, _authService);

            if (token == Guid.Empty)
            {
                return(Json(new { Status = "logoff" }, JsonRequestBehavior.AllowGet));
            }
            var certificates = new List <CertificateInfoContactAdd>();

            foreach (string thumbprint in thumbprints)
            {
                CertificateResponse response = _cryptxService.GetCertificate(thumbprint,
                                                                             (userId == null ? Guid.Empty : (Guid)userId), token);

                CertificateInfo certificateInfo = response.Certificate;

                var curCert = new CertificateInfoContactAdd();
                curCert.IsMyCert = certificateInfo.MyCertificate != null;
                if (certificateInfo.RecipientCertificate != null &&
                    certificateInfo.RecipientCertificate.FriendlyName != null)
                {
                    curCert.FriendlyName = certificateInfo.RecipientCertificate.FriendlyName;
                }
                curCert.CertificateId = certificateInfo.CertificateId;
                curCert.SubjectName   = certificateInfo.SubjectName;
                curCert.IssureName    = certificateInfo.IssureName;
                curCert.Thumbprint    = certificateInfo.Thumbprint;
                curCert.Organization  = certificateInfo.Organization;
                curCert.IsTest        = certificateInfo.IsTest;
                if (DateTime.Now < certificateInfo.NotBefore)
                {
                    curCert.TimeMessage = "Недействителен до " +
                                          certificateInfo.NotBefore.Date.ToShortDateString().Replace("/", ".");
                }
                if (DateTime.Now > certificateInfo.NotBefore && DateTime.Now < certificateInfo.NotAfter)
                {
                    curCert.TimeMessage = "Действителен до " +
                                          certificateInfo.NotAfter.Date.ToShortDateString().Replace("/", ".");
                }
                else
                {
                    curCert.TimeMessage = "Недействителен с " +
                                          certificateInfo.NotAfter.Date.ToShortDateString().Replace("/", ".");
                }

                certificates.Add(curCert);
            }


            return(Json(new { Status = "ok", certificates }, JsonRequestBehavior.AllowGet));
        }
Пример #3
0
        /// <summary>
        ///     Запрос на поиск сертов
        /// </summary>
        /// <param name="isActive"></param>
        /// <param name="searchString"></param>
        /// <returns></returns>
        public ActionResult FindCertificate(bool isActive = false, string searchString = "")
        {
            Guid token = CheckSessionAuthState(CurrentUser, _authService);

            if (token == Guid.Empty)
            {
                return(Json(new { status = "Error", errorCode = "401", errorMessage = "" }, JsonRequestBehavior.AllowGet));
            }
            //bool isActiveCur = isActive ?? false;

            var model = new List <CertificateInfoContactAdd>();
            SearchResultResponse response = _cryptxService.GetCertificatesBySearchString(searchString, isActive, false,
                                                                                         token);

            if (response.Exception == null)
            {
                foreach (CertificateInfo certificateInfo in response.Certificates)
                {
                    var curCert = new CertificateInfoContactAdd();
                    curCert.CertificateId = certificateInfo.CertificateId;
                    curCert.SubjectName   = certificateInfo.SubjectName;
                    curCert.IssureName    = certificateInfo.IssureName;
                    curCert.Thumbprint    = certificateInfo.Thumbprint;
                    curCert.Organization  = certificateInfo.Organization;
                    curCert.IsTest        = certificateInfo.IsTest;
                    if (DateTime.Now < certificateInfo.NotBefore)
                    {
                        curCert.TimeMessage = "Недействителен до " +
                                              certificateInfo.NotBefore.Date.ToShortDateString().Replace("/", ".");
                    }
                    if (DateTime.Now > certificateInfo.NotBefore && DateTime.Now < certificateInfo.NotAfter)
                    {
                        curCert.TimeMessage = "Действителен до " +
                                              certificateInfo.NotAfter.Date.ToShortDateString().Replace("/", ".");
                    }
                    else
                    {
                        curCert.TimeMessage = "Недействителен с " +
                                              certificateInfo.NotAfter.Date.ToShortDateString().Replace("/", ".");
                    }
                    model.Add(curCert);
                }
            }
            else
            {
                return(Json(new { status = "Error", errorCode = "", errorMessage = response.Exception.Message },
                            JsonRequestBehavior.AllowGet));
            }

            return(Json(new { model, status = "ok" }, JsonRequestBehavior.AllowGet));
        }
Пример #4
0
        public ActionResult MyCertificates(Guid?userId)
        {
            Guid token = CheckSessionAuthState(CurrentUser, _authService);

            if (token == Guid.Empty)
            {
                return(RedirectToAction("LogOff", "Account"));
            }
            CertificatesResponse response =
                _cryptxService.GetMyCertificates((userId == null ? Guid.Empty : (Guid)userId), token);

            if (response.Exception != null)
            {
                throw response.Exception;
            }
            var model = new List <CertificateInfoContactAdd>();

            foreach (CertificateInfo certificateInfo in response.Certificates)
            {
                var curCert = new CertificateInfoContactAdd();
                curCert.CertificateId = certificateInfo.CertificateId;
                curCert.SubjectName   = certificateInfo.SubjectName;
                curCert.IssureName    = certificateInfo.IssureName;
                curCert.Thumbprint    = certificateInfo.Thumbprint;
                curCert.Organization  = certificateInfo.Organization;
                curCert.IsTest        = certificateInfo.IsTest;
                if (DateTime.Now < certificateInfo.NotBefore)
                {
                    curCert.TimeMessage = "Недействителен до " +
                                          certificateInfo.NotBefore.Date.ToShortDateString().Replace("/", ".");
                }
                if (DateTime.Now > certificateInfo.NotBefore && DateTime.Now < certificateInfo.NotAfter)
                {
                    curCert.TimeMessage = "Действителен до " +
                                          certificateInfo.NotAfter.Date.ToShortDateString().Replace("/", ".");
                }
                else
                {
                    curCert.TimeMessage = "Недействителен с " +
                                          certificateInfo.NotAfter.Date.ToShortDateString().Replace("/", ".");
                }
                model.Add(curCert);
            }
            return(View(model));
        }
Пример #5
0
        public ActionResult FindCertificate(string searchString, bool?isActive, Guid?contactId, string addToContact,
                                            string selectedItem, Guid?userId, bool all = false)
        {
            ViewBag.all = all;
            Guid token = CheckSessionAuthState(CurrentUser, _authService);

            if (token == Guid.Empty)
            {
                ViewBag.login = true;
            }
            ViewBag.contactId = contactId;
            ViewBag.UserId    = (userId == null ? Guid.Empty : (Guid)userId);
            bool isActiveCur = isActive ?? false;

            if (string.IsNullOrEmpty(addToContact))
            {
                var model = new List <CertificateInfoContactAdd>();
                SearchResultResponse response = _cryptxService.GetCertificatesBySearchString(searchString, isActiveCur,
                                                                                             all, token);
                if (response.Exception == null)
                {
                    foreach (CertificateInfo certificateInfo in response.Certificates)
                    {
                        var curCert = new CertificateInfoContactAdd();
                        curCert.CertificateId = certificateInfo.CertificateId;
                        curCert.SubjectName   = certificateInfo.SubjectName;
                        curCert.IssureName    = certificateInfo.IssureName;
                        if (certificateInfo.RecipientCertificate != null &&
                            certificateInfo.RecipientCertificate.FriendlyName != null)
                        {
                            curCert.FriendlyName = certificateInfo.RecipientCertificate.FriendlyName;
                        }
                        curCert.Thumbprint   = certificateInfo.Thumbprint;
                        curCert.Organization = certificateInfo.Organization;
                        curCert.IsTest       = certificateInfo.IsTest;
                        if (curCert.FriendlyName == null)
                        {
                            curCert.FriendlyName = string.Empty;
                        }
                        if (DateTime.Now < certificateInfo.NotBefore)
                        {
                            curCert.TimeMessage = "Недействителен до " +
                                                  certificateInfo.NotBefore.Date.ToShortDateString().Replace("/", ".");
                        }
                        if (DateTime.Now > certificateInfo.NotBefore && DateTime.Now < certificateInfo.NotAfter)
                        {
                            curCert.TimeMessage = "Действителен до " +
                                                  certificateInfo.NotAfter.Date.ToShortDateString().Replace("/", ".");
                        }
                        else
                        {
                            curCert.TimeMessage = "Недействителен с " +
                                                  certificateInfo.NotAfter.Date.ToShortDateString().Replace("/", ".");
                        }
                        model.Add(curCert);
                    }
                }
                return(View(model));
            }
            if (!string.IsNullOrEmpty(selectedItem) && contactId != null && contactId != Guid.Empty)
            {
                var serializaer = new JavaScriptSerializer();
                var certs       = serializaer.Deserialize <List <CertificateInfoContactAdd> >(selectedItem);
                var requestList = new List <CertificateAddRequest>();
                foreach (CertificateInfoContactAdd certificateInfoContactAdd in certs)
                {
                    requestList.Add(new CertificateAddRequest
                    {
                        CertificateId = certificateInfoContactAdd.CertificateId
                    });
                }
                _cryptxService.AddCertificatesToContact((Guid)contactId, requestList,
                                                        (userId == null ? Guid.Empty : (Guid)userId), token);
            }

            return(View());
        }
Пример #6
0
        public ActionResult AddCertificateToContact(Guid?contactId, Guid?userId)
        {
            Guid token = CheckSessionAuthState(CurrentUser, _authService);

            if (token == Guid.Empty)
            {
                ViewBag.login = true;
                //return RedirectToAction("LogOff", "Account");
            }

            //string fileName =  Uri.EscapeDataString(Request.Headers["X-File-Name"]);
            string fileType    = Request.Headers["X-File-Type"];
            int    fileSize    = Convert.ToInt32(Request.Headers["X-File-Size"]);
            Stream fileContent = Request.InputStream;
            var    buf         = new byte[fileSize];

            fileContent.Read(buf, 0, fileSize);
            var data = new CertificateInfoContactAdd();

            try
            {
                var x509Certificate2 = new X509Certificate2(buf);
            }
            catch (Exception ex)
            {
                data.Status =
                    "Файл не соответствует требованиям к сертификатам, используемым в Cryptogramm. Загрузка невозможна.";
                return(Json(data));
            }

            if (contactId == null)
            {
                try
                {
                    var x509Certificate2 = new X509Certificate2(buf);
                    if (!x509Certificate2.SignatureAlgorithm.FriendlyName.ToLower().Contains("гост"))
                    {
                        data.Status =
                            "Файл не соответствует требованиям к сертификатам, используемым в Cryptogramm. Загрузка невозможна.";
                        return(Json(data));
                    }


                    Session[x509Certificate2.Thumbprint] = buf;

                    data.SubjectName = x509Certificate2.GetNameInfo(X509NameType.SimpleName, false);
                    data.Thumbprint  = x509Certificate2.Thumbprint;
                    if (DateTime.Now < x509Certificate2.NotBefore)
                    {
                        data.TimeMessage = "Недействителен до " +
                                           x509Certificate2.NotBefore.Date.ToShortDateString().Replace("/", ".");
                    }
                    if (DateTime.Now > x509Certificate2.NotBefore && DateTime.Now < x509Certificate2.NotAfter)
                    {
                        data.TimeMessage = "Действителен до " +
                                           x509Certificate2.NotAfter.Date.ToShortDateString().Replace("/", ".");
                    }
                    else
                    {
                        data.TimeMessage = "Недействителен с " +
                                           x509Certificate2.NotAfter.Date.ToShortDateString().Replace("/", ".");
                    }
                    data.FriendlyName = "";
                    data.Status       = "ok";
                    return(Json(data));
                }
                catch (Exception ex)
                {
                    data.Status =
                        "Файл не соответствует требованиям к сертификатам, используемым в Cryptogramm. Загрузка невозможна.";
                    return(Json(data));
                }
            }

            #region Проверка на наличие серта в списке

            if (Request.Headers.AllKeys.Contains("contactCertificates"))
            {
                var js = new JavaScriptSerializer();
                var contactCertificates =
                    (List <string>)js.Deserialize(Request.Headers["contactCertificates"], typeof(List <string>));
                var x509Cert2 = new X509Certificate2(buf);
                if (contactCertificates.Contains(x509Cert2.Thumbprint))
                {
                    data.Status = "Выбранный сертификат уже присутствует в списке";
                    return(Json(data));
                }
            }

            #endregion

            var listCerts = new List <CertificateAddRequest>();
            listCerts.Add(new CertificateAddRequest
            {
                CertificateBytes = buf
            });

            _cryptxService.AddCertificatesToContact((Guid)contactId, listCerts,
                                                    (userId == null ? Guid.Empty : (Guid)userId), token);
            data.Status = "refresh";
            return(Json(data));
        }