示例#1
0
        //richiedo OTP
        protected void BtnRequestOTP_Click(object sender, EventArgs e)
        {
            ScriptManager.RegisterStartupScript(this, this.GetType(), "reallowOp", "reallowOp();", true);

            DigitalSignature.RemoteDigitalSignManager dsm = new DigitalSignature.RemoteDigitalSignManager();
            if (!string.IsNullOrEmpty(this.TxtHsmAlias.Text) && !string.IsNullOrEmpty(this.TxtHsmDomain.Text))
            {
                string alias   = this.TxtHsmAlias.Text;
                string dominio = this.TxtHsmDomain.Text;

                try
                {
                    DigitalSignature.RemoteDigitalSignManager.Memento m = new DigitalSignature.RemoteDigitalSignManager.Memento {
                        Alias = alias, Dominio = dominio
                    };
                    //Intanto salvo il memento
                    dsm.HSM_SetMementoForUser(m);
                }
                catch (System.Exception ex)
                {
                    UIManager.AdministrationManager.DiagnosticError(ex);
                    return;
                }

                bool retval = false;
                try
                {
                    retval = dsm.HSM_RequestOTP(alias, dominio);
                }
                catch (System.Exception ex)
                {
                    ScriptManager.RegisterStartupScript(this, this.GetType(), "ajaxDialogModal", "if (parent.fra_main) {parent.fra_main.ajaxDialogModal('ErrorHsmSignOtp', 'error');} else {parent.ajaxDialogModal('ErrorHsmSignOtp', 'error');}", true);
                    return;
                }


                if (retval)
                {
                    //mandiamo in avviso che informa del successo dell'operazione e che tra pochi secondi riceverà l'opt sul telefonio
                    ScriptManager.RegisterStartupScript(this, this.GetType(), "ajaxDialogModal", "if (parent.fra_main) {parent.fra_main.ajaxDialogModal('SuccessHsmRequestOTP', 'check');} else {parent.ajaxDialogModal('SuccessHsmRequestOTP', 'check');}", true);
                }
                else
                {
                    // è accaduto un inconveniente.. l'operazione è fallita.
                    ScriptManager.RegisterStartupScript(this, this.GetType(), "ajaxDialogModal", "if (parent.fra_main) {parent.fra_main.ajaxDialogModal('ErrorHsmSignOtp', 'error');} else {parent.ajaxDialogModal('ErrorHsmSignOtp', 'error');}", true);
                }
            }
            else
            {
                ScriptManager.RegisterStartupScript(this, this.GetType(), "ajaxDialogModal", "if (parent.fra_main) {parent.fra_main.ajaxDialogModal('WarningHsmRequestOTPReq', 'warning');} else {parent.ajaxDialogModal('WarningHsmRequestOTPReq', 'warning');}", true);
            }
        }
 //andrebbe chiamato all'open della maschera se presenti i dati alias e dominio essi verrano PRE popolati
 private void popolaCampiMemento()
 {
     DigitalSignature.RemoteDigitalSignManager dsm = new DigitalSignature.RemoteDigitalSignManager();
     try
     {
         DigitalSignature.RemoteDigitalSignManager.Memento m = dsm.HSM_GetMementoForUser();
         if (m != null)
         {
             this.TxtHsmAlias.Text  = m.Alias;
             this.TxtHsmDomain.Text = m.Dominio;
         }
     }
     catch (System.Exception ex)
     {
         UIManager.AdministrationManager.DiagnosticError(ex);
         return;
     }
 }
        private bool PutHSMSign()
        {
            bool   retVal   = false;
            string errorMsg = string.Empty;

            if (!string.IsNullOrEmpty(this.TxtHsmAlias.Text) && !string.IsNullOrEmpty(this.TxtHsmDomain.Text) && !string.IsNullOrEmpty(this.TxtHsmPin.Text) && !string.IsNullOrEmpty(this.TxtHsmLitOtp.Text) && (this.HsmLitPades.Checked || this.HsmLitP7M.Checked))
            {
                string alias   = this.TxtHsmAlias.Text;
                string dominio = this.TxtHsmDomain.Text;
                string pin     = this.TxtHsmPin.Text;
                string otp     = this.TxtHsmLitOtp.Text;

                try
                {
                    DigitalSignature.RemoteDigitalSignManager         dsm = new DigitalSignature.RemoteDigitalSignManager();
                    DigitalSignature.RemoteDigitalSignManager.Memento m   = new DigitalSignature.RemoteDigitalSignManager.Memento {
                        Alias = alias, Dominio = dominio
                    };
                    //Intanto salvo il memento
                    dsm.HSM_SetMementoForUser(m);
                }
                catch (System.Exception ex)
                {
                    return(true);
                }

                MassiveOperationReport.MassiveOperationResultEnum result;
                string codice = string.Empty;

                // Il dettaglio dell'elaborazione per un documento
                string details;

                MassiveOperationReport report = new MassiveOperationReport();
                if ((IsLF || Continue) && HttpContext.Current.Session["massiveSignReport"] != null)
                {
                    report = HttpContext.Current.Session["massiveSignReport"] as MassiveOperationReport;
                }

                //Lista dei fileReequest da passare in input al servizio di firma massiva
                List <FileRequest> fileRequestList = new List <FileRequest>();
                //List<FileRequest> listFileReqLF = new List<FileRequest>();
                this.FileTypes = UIManager.FileManager.GetSupportedFileTypes(Int32.Parse(UIManager.UserManager.GetInfoUser().idAmministrazione));
                this.IsEnabledSupportedFileTypes = UIManager.FileManager.IsEnabledSupportedFileTypes();

                string objType = Request.QueryString["objType"];
                if (objType.Equals("D"))
                {
                    this.SchedaDocumentList = this.LoadSchedaDocumentsList(
                        MassiveOperationUtils.GetSelectedItems());
                }

                // Invio della trasmissione per ogni documento da inviare
                foreach (SchedaDocumento schedaDoc in this.SchedaDocumentList)
                {
                    result  = MassiveOperationReport.MassiveOperationResultEnum.OK;
                    details = String.Empty;

                    // Verifica della possibilità di firmare il documento
                    result = this.CanSignDocument(schedaDoc, out details);

                    if (result != MassiveOperationReport.MassiveOperationResultEnum.KO)
                    {
                        fileRequestList.Add(schedaDoc.documenti[0]);
                    }

                    // Aggiunta di una riga al report
                    if (result == MassiveOperationReport.MassiveOperationResultEnum.KO)
                    {
                        codice = MassiveOperationUtils.getItem(schedaDoc.docNumber).Codice;
                        report.AddReportRow(
                            codice,
                            result,
                            details);
                    }
                }
                //PER TUTTI I DOCUMENTI CHE HANNO SUPERATO I CONTROLLI VADO AD APPLICARE LA FIRMA
                if (fileRequestList.Count > 0)
                {
                    DigitalSignature.RemoteDigitalSignManager dsm = new DigitalSignature.RemoteDigitalSignManager();

                    bool cofirma = this.HsmRadioCoSign.Checked; //prendere dalla checkbox cofirma

                    //ABBATANGELI - Hanno cambiato idea nuovamente e non è sempre cosign ma prende il valore dal checkbox cofirma
                    ////ABBATANGELI - PITre richiede sempre la cofirma per hsm
                    ////cofirma = true;


                    bool timestamp = this.HsmCheckMarkTemporal.Checked; //prendere dalla checkbox timestamp
                    DigitalSignature.RemoteDigitalSignManager.tipoFirma tipoFirma = new DigitalSignature.RemoteDigitalSignManager.tipoFirma();
                    if (this.HsmLitPades.Checked)
                    {
                        tipoFirma = DigitalSignature.RemoteDigitalSignManager.tipoFirma.PADES;
                    }
                    else
                    {
                        tipoFirma = DigitalSignature.RemoteDigitalSignManager.tipoFirma.CADES;
                        cofirma   = this.HsmRadioCoSign.Checked && !FirmaAnnidata;
                    }
                    List <FirmaResult> firmaResult = null;
                    try
                    {
                        firmaResult = dsm.HSM_SignMultiSign(fileRequestList.ToArray(), cofirma, timestamp, tipoFirma, alias, dominio, otp, pin).ToList <FirmaResult>();

                        /*Commento perchè la distinzione tra documenti che devo firmare cades e quelli da firmare pades per il libro firma, la faccio prima, quando vado a selezionare SchedaDocumentList
                         * if (!IsLF)
                         * {
                         *  firmaResult = dsm.HSM_SignMultiSign(fileRequestList.ToArray(), cofirma, timestamp, tipoFirma, alias, dominio, otp, pin).ToList<FirmaResult>();
                         * }
                         * else
                         * {
                         *  List<MassiveOperationTarget> selectedItemSystemIdList = MassiveOperationUtils.GetSelectedItems();
                         *  string typeSign = tipoFirma.Equals(DigitalSignature.RemoteDigitalSignManager.tipoFirma.CADES) ? "C" : "P";
                         *  List<string> idDocumentList = (from temp in selectedItemSystemIdList where temp.Id.Contains(typeSign) select temp.Id.Replace(typeSign, "")).ToList<string>();
                         *  listFileReqLF = (from f in fileRequestList where idDocumentList.Contains(f.docNumber) select f).ToList();
                         *  if (listFileReqLF != null && listFileReqLF.Count > 0)
                         *  {
                         *      firmaResult = dsm.HSM_SignMultiSign(listFileReqLF.ToArray(), cofirma, timestamp, tipoFirma, alias, dominio, otp, pin).ToList<FirmaResult>();
                         *  }
                         * }
                         */
                        if (firmaResult != null && ((firmaResult.Count > 1) || (firmaResult.Count == 1 && firmaResult[0].fileRequest != null)))
                        {
                            foreach (FirmaResult r in firmaResult)
                            {
                                string[] splitMsg = r.errore.Split(':');
                                if (splitMsg[0].Equals("true"))
                                {
                                    result  = MassiveOperationReport.MassiveOperationResultEnum.OK;
                                    details = "Firma HSM del documento avvenuta con successo";
                                    codice  = MassiveOperationUtils.getItem(r.fileRequest.docNumber).Codice;
                                    report.AddReportRow(
                                        codice,
                                        result,
                                        details);
                                }
                                else
                                {
                                    if (r.esito == null || string.IsNullOrEmpty(r.esito.Codice))
                                    {
                                        errorMsg = String.Format(
                                            "Si sono verificati degli errori durante la firma del documento. Dettagli: {0}",
                                            splitMsg[1]);
                                    }
                                    else
                                    {
                                        errorMsg = Utils.Languages.GetMessageFromCode(r.esito.Codice, UserManager.GetLanguageData());
                                    }

                                    result  = MassiveOperationReport.MassiveOperationResultEnum.KO;
                                    codice  = MassiveOperationUtils.getItem(r.fileRequest.docNumber).Codice;
                                    details = errorMsg;
                                    report.AddReportRow(
                                        codice,
                                        result,
                                        details);
                                }
                            }
                        }
                        else
                        {
                            //List<FileRequest> list = IsLF ? listFileReqLF : fileRequestList;
                            string error = "Si sono verificati degli errori durante la firma del documento";
                            if (firmaResult != null && firmaResult.Count > 0)
                            {
                                error += ": " + firmaResult[0].errore;
                            }
                            if (firmaResult[0].esito != null && !string.IsNullOrEmpty(firmaResult[0].esito.Codice))
                            {
                                error = Utils.Languages.GetMessageFromCode(firmaResult[0].esito.Codice, UserManager.GetUserLanguage());
                            }
                            foreach (FileRequest fr in fileRequestList)
                            {
                                result  = MassiveOperationReport.MassiveOperationResultEnum.KO;
                                codice  = MassiveOperationUtils.getItem(fr.docNumber).Codice;
                                details = error;
                                report.AddReportRow(
                                    codice,
                                    result,
                                    details);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        //List<FileRequest> list = IsLF ? listFileReqLF : fileRequestList;
                        foreach (FileRequest fr in fileRequestList)
                        {
                            result  = MassiveOperationReport.MassiveOperationResultEnum.KO;
                            codice  = MassiveOperationUtils.getItem(fr.docNumber).Codice;
                            details = "Si sono verificati degli errori durante la firma HSM del documento.";
                            report.AddReportRow(
                                codice,
                                result,
                                details);
                        }
                    }
                }
                if (Continue)
                {
                    HttpContext.Current.Session["massiveSignReport"] = report;

                    //Se ho firmato CADES e ci sono documenti da firmare PADES non chiudo la maschera ma visualizzo un worning che
                    //informa l'utente di inserire un nuovo otp per procedere con la firma
                    this.TxtHsmLitOtp.Text      = string.Empty;
                    this.HsmLitP7M.Enabled      = false;
                    this.HsmLitPades.Enabled    = false;
                    this.HsmRadioCoSign.Enabled = false;
                    this.UpOTP.Update();
                    this.UpPnlSign.Update();
                    ScriptManager.RegisterStartupScript(this, this.GetType(), "ajaxDialogModal", "if (parent.fra_main) {parent.fra_main.ajaxDialogModal('WarningRequestNewOTPFirmaAnnidata', 'warning');} else {parent.ajaxDialogModal('WarningRequestNewOTPFirmaAnnidata', 'warning');}", true);
                    return(false);
                }

                if (!IsLF)
                {
                    // Introduzione della riga di summary
                    string[] pars = new string[] { "" + report.Worked, "" + report.NotWorked };
                    report.AddSummaryRow("Documenti lavorati: {0} - Documenti non lavorati: {1}", pars);
                    this.generateReport(report, "Firma HSM massiva");
                }
                else
                {
                    HttpContext.Current.Session["massiveSignReport"] = report;

                    //Se ho firmato CADES e ci sono documenti da firmare PADES non chiudo la maschera ma visualizzo un worning che
                    //informa l'utente di inserire un nuovo otp per procedere con la firma
                    List <MassiveOperationTarget> selectedItemSystemIdList = MassiveOperationUtils.GetSelectedItems();
                    bool toSignPades = (from s in selectedItemSystemIdList where s.Id.Contains("P") select s).FirstOrDefault() != null;
                    if (this.HsmLitP7M.Checked && toSignPades)
                    {
                        this.HsmLitP7M.Checked   = false;
                        this.HsmLitPades.Checked = true;
                        this.TxtHsmLitOtp.Text   = string.Empty;
                        ScriptManager.RegisterStartupScript(this, this.GetType(), "ajaxDialogModal", "if (parent.fra_main) {parent.fra_main.ajaxDialogModal('WarningRequestNewOTP', 'warning');} else {parent.ajaxDialogModal('WarningRequestNewOTP', 'warning');}", true);
                        this.UpPnlSign.Update();
                        this.UpOTP.Update();
                        return(false);
                    }
                }

                retVal = true;
            }
            else
            {
                retVal = false;
                ScriptManager.RegisterStartupScript(this, this.GetType(), "ajaxDialogModal", "if (parent.fra_main) {parent.fra_main.ajaxDialogModal('WarningHsmSign', 'warning');} else {parent.ajaxDialogModal('WarningHsmSign', 'warning');}", true);
            }

            return(retVal);
        }
示例#4
0
        protected void BtnSign_Click(object sender, EventArgs e)
        {
            ScriptManager.RegisterStartupScript(this, this.GetType(), "reallowOp", "reallowOp();", true);

            if (!string.IsNullOrEmpty(this.TxtHsmAlias.Text) && !string.IsNullOrEmpty(this.TxtHsmDomain.Text) && !string.IsNullOrEmpty(this.TxtHsmPin.Text) && !string.IsNullOrEmpty(this.TxtHsmLitOtp.Text) && (this.HsmLitPades.Checked || this.HsmLitP7M.Checked))
            {
                string alias   = this.TxtHsmAlias.Text;
                string dominio = this.TxtHsmDomain.Text;
                string pin     = this.TxtHsmPin.Text;
                string otp     = this.TxtHsmLitOtp.Text;

                DocsPaWR.FileRequest fileReq = null;

                if (FileManager.GetSelectedAttachment() == null)
                {
                    fileReq = UIManager.FileManager.getSelectedFile();
                }
                else
                {
                    fileReq = FileManager.GetSelectedAttachment();
                }

                bool isPdf = (FileManager.getEstensioneIntoSignedFile(fileReq.fileName).ToUpper() == "PDF");

                //if (!idPdf && this.HsmLitPades.Checked && !this.HsmCheckConvert.Checked)
                //{
                //    ScriptManager.RegisterStartupScript(this, this.GetType(), "ajaxDialogModal", "if (parent.fra_main) {parent.fra_main.ajaxDialogModal('WarningHsmSignPDF', 'warning');} else {parent.ajaxDialogModal('WarningHsmSignPDF', 'warning');}", true);
                //}
                #region VERIFICA DIMENSIONE MASSIMA FILE
                int maxDimFileSign = 0;
                if (!string.IsNullOrEmpty(Utils.InitConfigurationKeys.GetValue(UserManager.GetUserInSession().idAmministrazione, Utils.DBKeys.FE_DO_BIG_FILE_MIN.ToString())) &&
                    !Utils.InitConfigurationKeys.GetValue(UserManager.GetUserInSession().idAmministrazione, Utils.DBKeys.FE_DO_BIG_FILE_MIN.ToString()).Equals("0"))
                {
                    maxDimFileSign = Convert.ToInt32(Utils.InitConfigurationKeys.GetValue(UserManager.GetUserInSession().idAmministrazione, Utils.DBKeys.FE_DO_BIG_FILE_MIN.ToString()));
                }
                if (maxDimFileSign > 0 && Convert.ToInt32(fileReq.fileSize) > maxDimFileSign)
                {
                    string maxSize = Convert.ToString(Math.Round((double)maxDimFileSign / 1048576, 3));
                    string msgDesc = "WarningStartProcessSignatureMaxDimFile";
                    ScriptManager.RegisterStartupScript(this, this.GetType(), "ajaxDialogModal", "if (parent.fra_main) {parent.fra_main.ajaxDialogModal('" + utils.FormatJs(msgDesc) + "', 'warning', '', '" + maxSize + "');} else {parent.ajaxDialogModal('" + utils.FormatJs(msgDesc) + "', 'warning', '', '" + maxSize + "');}", true);
                    return;
                }
                #endregion

                string msgError = CheckSign(fileReq, isPdf);
                if (!string.IsNullOrEmpty(msgError))
                {
                    ScriptManager.RegisterStartupScript(this, this.GetType(), "ajaxDialogModal", "if (parent.fra_main) {parent.fra_main.ajaxDialogModal('" + msgError + "', 'warning');} else {parent.ajaxDialogModal('" + msgError + "', 'warning');}", true);
                }
                else
                {
                    DigitalSignature.RemoteDigitalSignManager dsm = new DigitalSignature.RemoteDigitalSignManager();

                    // attenzione mancano questi dati in maschera, vanno popolati come quelli sopra, prendendo i valori corretti.

                    //ABBATANGELI - Nuova gestione sign/cosign
                    //bool cofirma = this.HsmRadioCoSign.Checked; //prendere dalla checkbox cofirma
                    bool cofirma   = this.optCofirma.Checked;
                    bool timestamp = this.HsmCheckMarkTemporal.Checked; //prendere dalla checkbox timestamp
                    DigitalSignature.RemoteDigitalSignManager.tipoFirma tipoFirma = new DigitalSignature.RemoteDigitalSignManager.tipoFirma();
                    if (this.HsmLitPades.Checked)
                    {
                        tipoFirma = DigitalSignature.RemoteDigitalSignManager.tipoFirma.PADES;
                    }
                    else
                    {
                        tipoFirma = DigitalSignature.RemoteDigitalSignManager.tipoFirma.CADES;
                        //Non posso firmare parallelemente un file firmato PADES con CADES, quindi impongo firma annidata
                        if (fileReq.firmato.Equals("1") && (fileReq.tipoFirma == TipoFirma.PADES || fileReq.tipoFirma == TipoFirma.PADES_ELETTORNICA))
                        {
                            cofirma = false;
                        }
                    }

                    try
                    {
                        DigitalSignature.RemoteDigitalSignManager.Memento m = new DigitalSignature.RemoteDigitalSignManager.Memento {
                            Alias = alias, Dominio = dominio
                        };
                        //Intanto salvo il memento
                        dsm.HSM_SetMementoForUser(m);
                    }
                    catch (System.Exception ex)
                    {
                        UIManager.AdministrationManager.DiagnosticError(ex);
                        return;
                    }

                    bool retval  = false;
                    bool convert = !isPdf && this.HsmCheckConvert.Checked;
                    DocsPaWR.FirmaResult firmaResult = new FirmaResult();
                    try
                    {
                        //ABBATANGELI - Rischiesta sempre "cofirma" nel caso sia stata già apposta la prima firma
                        //if (fileReq.firmato == "1")
                        //    cofirma = true;

                        retval = dsm.HSM_Sign(fileReq, cofirma, timestamp, tipoFirma, alias, dominio, otp, pin, convert, out firmaResult);
                    }
                    catch (System.Exception ex)
                    {
                        ScriptManager.RegisterStartupScript(this, this.GetType(), "ajaxDialogModal", "if (parent.fra_main) {parent.fra_main.ajaxDialogModal('ErrorHsmSignOtp', 'error');} else {parent.ajaxDialogModal('ErrorHsmSignOtp', 'error');}", true);
                        return;
                    }

                    if (retval)
                    {
                        //che famo se retval è true tocca refreschare la lista come nell amascera firma tradizionale
                        this.SetNewFile(fileReq);
                        ScriptManager.RegisterStartupScript(this, this.GetType(), "closeAjaxModal", "parent.closeAjaxModal('HSMSignature', 'up');", true);
                    }
                    else
                    {
                        // è accaduto un inconveniente.. la firma non è andata a buon fine...
                        string warningEsitoFirma = string.Empty;
                        string errorText         = string.Empty;
                        if (firmaResult.esito != null && !string.IsNullOrEmpty(firmaResult.esito.Codice))
                        {
                            warningEsitoFirma = firmaResult.esito.Codice;
                        }

                        if (string.IsNullOrEmpty(warningEsitoFirma))
                        {
                            ScriptManager.RegisterStartupScript(this, this.GetType(), "ajaxDialogModal", "if (parent.fra_main) {parent.fra_main.ajaxDialogModal('ErrorHsmSign', 'error', '', '" + errorText + "');} else {parent.ajaxDialogModal('ErrorHsmSign', 'error', '', '" + errorText + "');}", true);
                        }
                        else
                        {
                            ScriptManager.RegisterStartupScript(this, this.GetType(), "ajaxDialogModal", "if (parent.fra_main) {parent.fra_main.ajaxDialogModal('" + warningEsitoFirma + "', 'warning');} else {parent.ajaxDialogModal('" + warningEsitoFirma + "', 'warning');}", true);
                        }
                    }
                }
            }
            else
            {
                ScriptManager.RegisterStartupScript(this, this.GetType(), "ajaxDialogModal", "if (parent.fra_main) {parent.fra_main.ajaxDialogModal('WarningHsmSign', 'warning');} else {parent.ajaxDialogModal('WarningHsmSign', 'warning');}", true);
            }
        }