/// <summary> /// Metodo per l'invio della ricevuta /// </summary> /// <param name="sender">Informazioni sul mittente della spedizione</param> /// <param name="receiver">Informazioni sul destinatario della spedizione</param> /// <param name="senderUrl">Url del mittente</param> /// <param name="reason">Ragione di annullamento o dettaglio dell'eccezione</param> /// <param name="adminId">Id dell'amministrazione</param> /// <param name="dropped">Flag utilizzato per indicare se si deve inviare una richiesta di eliminazione</param> /// <param name="receiverCode">Codice del destinatario</param> private static void SendProof(RecordInfo sender, RecordInfo receiver, string senderUrl, String reason, String adminId, bool dropped, String receiverCode) { InteroperabilityController interoperabilityController = new InteroperabilityController(); interoperabilityController.AnalyzeDocumentDroppedOrErrorProof( new Interoperability.Domain.RecordInfo() { AdministrationCode = sender.AdministrationCode, AOOCode = sender.AOOCode, RecordDate = sender.RecordDate, RecordNumber = sender.RecordNumber }, new Interoperability.Domain.RecordInfo() { AdministrationCode = receiver.AdministrationCode, AOOCode = receiver.AOOCode, RecordDate = receiver.RecordDate, RecordNumber = receiver.RecordNumber }, reason, InteroperabilitaSemplificataManager.GetUrl(adminId), senderUrl, dropped ? Interoperability.Domain.OperationDiscriminator.Drop : Interoperability.Domain.OperationDiscriminator.Error, receiverCode); }
/// <summary> /// Metodo per l'invio della ricevuta di conferma ricezione /// </summary> /// <param name="senderRecordInfo">Informazioni sul protocollo mittente</param> /// <param name="receiverRecordInfo">Informaizoni sul protocollo destinatario</param> /// <param name="senderUrl">Url del mittente della richiesta di interoperabilità</param> /// <param name="idProfile">Id del documento creato a seguito della richiesta di interoperabilità</param> /// <param name="userId">User id dell'utente mittente della ricevuta</param> /// <param name="adminId">Id dell'amministrazione mittente</param> /// <param name="receiverCode">Codice del destinatario per cui generare la ricevuta</param> internal static void SendProof(RecordInfo senderRecordInfo, RecordInfo receiverRecordInfo, String senderUrl, String idProfile, String userId, String adminId, String receiverCode) { InteroperabilityController interoperabilityController = new InteroperabilityController(); try { // Invio della ricevuta al mittente try { interoperabilityController.AnalyzeDocumentReceivedProof( new Interoperability.Domain.RecordInfo() { AdministrationCode = senderRecordInfo.AdministrationCode, AOOCode = senderRecordInfo.AOOCode, RecordDate = senderRecordInfo.RecordDate, RecordNumber = senderRecordInfo.RecordNumber }, new Interoperability.Domain.RecordInfo() { AdministrationCode = receiverRecordInfo.AdministrationCode, AOOCode = receiverRecordInfo.AOOCode, RecordDate = receiverRecordInfo.RecordDate, RecordNumber = receiverRecordInfo.RecordNumber }, senderUrl, InteroperabilitaSemplificataManager.GetUrl(adminId), receiverCode); } catch (Exception e) { logger.Error("Errore durante l'invio della ricevuta di conferma ricezione al mittente: " + e.Message); SimplifiedInteroperabilityLogAndRegistryManager.InsertItemInLog(idProfile, true, String.Format("Errore durante l'invio della ricevuta di conferma ricezione al mittente da parte dell'utente {0}", userId)); logger.ErrorFormat("Errore durante l'invio della ricevuta di conferma ricezione al mittente da parte dell'utente {0}", userId); } // Aggiunta voce di log SimplifiedInteroperabilityLogAndRegistryManager.InsertItemInLog(idProfile, false, String.Format("Ricevuta di conferma di ricezione al mittente con indirizzo '{0}' da parte dell'utente {1} inviata correttamente.", senderUrl, userId)); } catch (Exception e) { SimplifiedInteroperabilityLogAndRegistryManager.InsertItemInLog(idProfile, true, String.Format("Errore durante l'invio della ricevuta di conferma di ricezione al mittente con indirizzo '{0}' da parte dell'utente {1}", senderUrl, userId)); logger.Error( String.Format("Errore durante l'invio della ricevuta di conferma di ricezione al mittente con indirizzo '{0}' da parte dell'utente {1}", senderUrl, userId), e); } }
/// <summary> /// Metodo per il download di un file associato ad un documento /// </summary> /// <param name="documentInfo">Informazioni sul documento</param> /// <param name="senderAdministrationId">Id dell'amministrazione</param> /// <param name="fileRequest">Informazioni sul file richiesto</param> /// <param name="userInfo">Informazioni sull'utente con cui recuperare il file</param> /// <param name="senderFileManagerUrl">Url del servizio per la gestione dei file</param> public static void DownloadFile(DocumentInfo documentInfo, String senderAdministrationId, FileRequest fileRequest, InfoUtente userInfo, String senderFileManagerUrl, out string errPutFile) { logger.Debug("BEGIN"); // Reperimento del file InteroperabilityController interoperabilityController = new InteroperabilityController(); Interoperability.Service.Library.FileServiceReference.RemoteFileInfo fileResponse = interoperabilityController.DownloadFile( new Interoperability.Service.Library.FileServiceReference.SendFileRequest( senderAdministrationId, documentInfo.DocumentNumber, documentInfo.DocumentServerLocation, documentInfo.FileName, documentInfo.FilePath, documentInfo.Version, documentInfo.VersionId, documentInfo.VersionLabel), senderFileManagerUrl); // Caricamento del file in DocsPa byte[] documentContent = ReadFileContent(fileResponse.FileData, (int)fileResponse.FileTransferInfo.FileLength); FileDocumento fileDocument = new FileDocumento() { content = documentContent, length = (int)fileResponse.FileTransferInfo.FileLength, name = fileResponse.FileTransferInfo.FileName }; String err = String.Empty; //Gestione TSDis (DOC+TSR) //Siccome non si possono mandare piu file allo stesso tempo, ne è possibile alterare la struttura //si è pensato in fase di invio, in caso di documenti con TSR associato, l'invio dello stesso un formato //TSD, come marca verrà presa l'ultima disponibile, e unita al documento, creadno un file con estensione TSDis //In fase di ricezione il TsdIs, sarà poi spacchettato, il TSR messo in DPA_TIMESTAMP dopo verifica hash e //infine il payload messo in documentale con la putfile. DocsPaVO.areaConservazione.OutputResponseMarca resultMarca = null; if (Path.GetExtension(fileDocument.name) == ".TSDis") { try { Documenti.DigitalSignature.PKCS_Utils.tsd tsdMgr = new Documenti.DigitalSignature.PKCS_Utils.tsd(); tsdMgr.explode(fileDocument.content); fileDocument.content = tsdMgr.Data.Content; fileDocument.length = (int)fileDocument.content.Length; fileDocument.name = fileDocument.name.Replace(".TSDis", string.Empty); Documenti.DigitalSignature.VerifyTimeStamp vts = new Documenti.DigitalSignature.VerifyTimeStamp(); byte[] tsrFile = tsdMgr.TSR.FirstOrDefault().Content; if (vts.machTSR(tsrFile, fileDocument.content)) { resultMarca = vts.Verify(fileDocument.content, tsrFile); } } catch (Exception e) { logger.ErrorFormat("Errore gestendo il TSDis {0} {1}", e.Message, e.StackTrace); //manca il loggher pdpdpdpdp } } FileManager.putFile(ref fileRequest, fileDocument, userInfo, out errPutFile, false); if (resultMarca != null && resultMarca.esito == "OK") { DocsPaDB.Query_DocsPAWS.TimestampDoc timestampDoc = new DocsPaDB.Query_DocsPAWS.TimestampDoc(); timestampDoc.saveTSR(userInfo, resultMarca, fileRequest); } logger.Debug("END"); }