/// <summary>Carga datos para ser posteriormente firmados.</summary> /// <param name="appId">Identificador de la aplicación.</param> /// <param name="subjectId">Identificador del titular de la clave de firma.</param> /// <param name="op">Tipo de operación a realizar: firma, cofirma o contrafirma</param> /// <param name="ft">Formato de la operación.</param> /// <param name="algth">Algoritmo de firma.</param> /// <param name="propB64">Propiedades extra a añadir a la firma (puede ser <code>null</code>).</param> /// <param name="certB64">Certificado de usuario para realizar la firma.</param> /// <param name="dataB64">Datos a firmar.</param> /// <param name="confB64">Configuración a indicar al servicio remoto (dependiente de la implementación).</param> /// <returns>Resultado de la carga.</returns> /// <exception cref="ArgumentException">Cuando se proporciona un parámetro no válido.</exception> /// <exception cref="HttpForbiddenException">Cuando falla la autenticación con el componente central.</exception> /// <exception cref="HttpNetworkException">Cuando se produce un error de conexión con el componente central.</exception> /// <exception cref="HttpOperationException">Cuando se produce un error interno del servidor.</exception> /// <exception cref="ConfigureException">Cuando no se encuentra configurada la URL del servicio.</exception> public static LoadResult loadData( String appId, String subjectId, String op, String ft, String algth, String propB64, String certB64, String dataB64, String confB64) { if (string.IsNullOrEmpty(subjectId)) { throw new ArgumentException( "El identificador del usuario no puede ser nulo" ); } if (string.IsNullOrEmpty(op)) { throw new ArgumentException( "El tipo de operacion de firma a realizar no puede ser nulo" ); } if (string.IsNullOrEmpty(ft)) { throw new ArgumentException( "El formato de firma no puede ser nulo" ); } if (string.IsNullOrEmpty(algth)) { throw new ArgumentException( "El algoritmo de firma no puede ser nulo" ); } if (string.IsNullOrEmpty(certB64)) { throw new ArgumentException( "El certificado del firmante no puede ser nulo" ); } if (string.IsNullOrEmpty(dataB64)) { throw new ArgumentException( "Los datos a firmar no pueden ser nulos" ); } string url = ConfigManager.getUrlLoadService(); string urlParameters = URL_PARAMETERS .Replace(TAG_NAME_APP_ID, appId) .Replace(TAG_NAME_SUBJECT_ID, subjectId) .Replace(TAG_NAME_OPERATION, op) .Replace(TAG_NAME_FORMAT, ft) .Replace(TAG_NAME_ALGORITHM, algth) .Replace(TAG_NAME_EXTRA_PARAM, propB64 != null ? propB64.Replace('+', '-').Replace('/', '_') : "") .Replace(TAG_NAME_CERT, certB64.Replace('+', '-').Replace('/', '_')) .Replace(TAG_NAME_DATA, dataB64.Replace('+', '-').Replace('/', '_')) .Replace(TAG_NAME_CLAVEFIRMA_CONFIG, confB64 != null ? confB64.Replace('+', '-').Replace('/', '_') : ""); string responseJSON = getResponseToPostPetition(url, urlParameters); return(new LoadResult(responseJSON)); }
/// <summary> /// Firma unos datos haciendo uso del servicio de red de firma en la nube. /// </summary> /// <param name="appId">Identificador de la aplicación.</param> /// <param name="subjectId">Identificador del firmante.</param> /// <param name="op">Tipo de operaciónn a realizar: "sign", "cosign" o "countersign".</param> /// <param name="ft">Formato de la operación: "XAdES", "PAdES", etc.</param> /// <param name="algth">Algoritmo de firma.</param> /// <param name="propB64">Propiedades extra a añadir a la firma (puede ser <code>null</code>).</param> /// <param name="dataB64"> Datos a firmar en base64.</param> /// <param name="confB64">Parámetros de la configuración de la firma.</param> /// <returns>Firma realizada en servidor.</returns> /// <exception cref="ArgumentException">Cuando se proporciona un parámetro no válido.</exception> /// <exception cref="HttpForbiddenException">Cuando falla la autenticación con el componente central.</exception> /// <exception cref="HttpNetworkException">Cuando se produce un error de conexión con el componente central.</exception> /// <exception cref="HttpOperationException">Cuando se produce un error interno del servidor.</exception> /// <exception cref="ConfigureException">Cuando no se encuentra configurada la URL del servicio.</exception> public static FireLoadResult sign( String appId, String subjectId, String op, String ft, String algth, String propB64, String dataB64, String confB64) { if (string.IsNullOrEmpty(subjectId)) { throw new ArgumentException( "El identificador del titular no puede ser nulo" ); } if (string.IsNullOrEmpty(op)) { throw new ArgumentException( "El tipo de operacion de firma a realizar no puede ser nulo" ); } if (string.IsNullOrEmpty(ft)) { throw new ArgumentException( "El formato de firma no puede ser nulo" ); } if (string.IsNullOrEmpty(algth)) { throw new ArgumentException( "El algoritmo de firma no puede ser nulo" ); } if (string.IsNullOrEmpty(dataB64)) { throw new ArgumentException( "Los datos a firmar no pueden ser nulos" ); } if (string.IsNullOrEmpty(confB64)) { throw new ArgumentException( "Los datos de configuracion no pueden ser nulos" ); } string url = ConfigManager.getFireService(); string urlParameters = URL_PARAMETERS_SIGN .Replace(APP_ID, appId) .Replace(SUBJECTID, subjectId) .Replace(COP, op) .Replace(OP, "1") // El tipo de operacion solicitada es SIGN (1) .Replace(ALG, algth) .Replace(FORMAT, ft) .Replace(PROP, string.IsNullOrEmpty(propB64) ? "" : propB64.Replace('+', '-').Replace('/', '_')) .Replace(DATA, dataB64.Replace('+', '-').Replace('/', '_')) .Replace(CONF, confB64.Replace('+', '-').Replace('/', '_')); // realizamos la peticion post al servicio y recibimos los datos de la peticion byte[] bytes = getResponseToPostPetition(url, urlParameters); // Mostramos los datos obtenidos return(new FireLoadResult(System.Text.Encoding.UTF8.GetString(bytes))); }
/// <summary> /// Crea un batch de documentos para posteriormente realizar la firma por lotes. /// </summary> /// <param name="appId">Identificador de la aplicación.</param> /// <param name="subjectId">Identificador del firmante.</param> /// <param name="op">Tipo de operaciónn a realizar: "sign", "cosign" o "countersign".</param> /// <param name="ft">Formato de la operación: "XAdES", "PAdES", etc.</param> /// <param name="algth">Algoritmo de firma.</param> /// <param name="propB64">Propiedades extra a añadir a la firma (puede ser <code>null</code>).</param> /// <param name="upgrade"> Parámetros de actualización.</param> /// <param name="confB64">Parámetros de la configuración de la firma.</param> /// <returns>Referencia al proceso batch.</returns> /// <exception cref="ArgumentException">Cuando se proporciona un parámetro no válido.</exception> /// <exception cref="HttpForbiddenException">Cuando falla la autenticación con el componente central.</exception> /// <exception cref="HttpNetworkException">Cuando se produce un error de conexión con el componente central.</exception> /// <exception cref="HttpOperationException">Cuando se produce un error interno del servidor.</exception> /// <exception cref="ConfigureException">Cuando no se encuentra configurada la URL del servicio.</exception> public static FireTransactionIdResult createBatchProcess( String appId, String subjectId, String op, String ft, String algth, String propB64, String upgrade, String confB64) { if (string.IsNullOrEmpty(subjectId)) { throw new ArgumentException( "El id de usuario no puede ser nulo" ); } if (string.IsNullOrEmpty(op)) { throw new ArgumentException( "El tipo de operacion de firma a realizar no puede ser nulo" ); } if (string.IsNullOrEmpty(ft)) { throw new ArgumentException( "El formato de firma no puede ser nulo" ); } if (string.IsNullOrEmpty(algth)) { throw new ArgumentException( "El algoritmo de firma no puede ser nulo" ); } if (string.IsNullOrEmpty(confB64)) { throw new ArgumentException( "Los datos de configuracion no pueden ser nulos" ); } string url = ConfigManager.getFireService(); string urlParameters = URL_PARAMETERS_CREATE_BATCH .Replace(APP_ID, appId) .Replace(SUBJECTID, subjectId) .Replace(COP, op) .Replace(OP, "5") // El tipo de operacion solicitada es CREATE_BATCH (5) .Replace(ALG, algth) .Replace(FORMAT, ft) .Replace(PROP, string.IsNullOrEmpty(propB64) ? "" : propB64.Replace('+', '-').Replace('/', '_')) .Replace(CONF, confB64.Replace('+', '-').Replace('/', '_')); // Si se ha indicado un formato de upgrade, lo actualizamos; si no, lo eliminamos de la URL if (string.IsNullOrEmpty(upgrade)) { urlParameters = urlParameters.Replace("&upgrade=" + UPGRADE, ""); } else { urlParameters = urlParameters.Replace(UPGRADE, upgrade); } // realizamos la peticion post al servicio y recibimos los datos de la peticion byte[] bytes = getResponseToPostPetition(url, urlParameters); // Mostramos los datos obtenidos return(new FireTransactionIdResult(System.Text.Encoding.UTF8.GetString(bytes))); }
/// <summary> /// Incluye en el batch un documento con una configuración de firma propia para realizar una firma por lotes. /// </summary> /// <param name="appId">Identificador de la aplicación.</param> /// <param name="transactionId">Identificador de la transacción.</param> /// <param name="documentId">Identificador del documento a incluir.</param> /// <param name="documentB64">Documento en base 64.</param> /// <param name="op">Tipo de operaciónn a realizar: "sign", "cosign" o "countersign".</param> /// <param name="ft">Formato de la operación: "XAdES", "PAdES", etc.</param> /// <param name="propB64">Propiedades extra a añadir a la firma (puede ser <code>null</code>).</param> /// <param name="upgrade"> Parámetros de actualización.</param> /// <param name="confB64">Parámetros de la configuración de la firma.</param> /// <exception cref="ArgumentException">Cuando se proporciona un parámetro no válido.</exception> /// <exception cref="HttpForbiddenException">Cuando falla la autenticación con el componente central.</exception> /// <exception cref="HttpNetworkException">Cuando se produce un error de conexión con el componente central.</exception> /// <exception cref="HttpOperationException">Cuando se produce un error interno del servidor.</exception> /// <exception cref="ConfigureException">Cuando no se encuentra configurada la URL del servicio.</exception> public static void addDocumentToBatch( String appId, String transactionId, String documentId, String documentB64, String op, String ft, String propB64, String upgrade, String confB64) { if (string.IsNullOrEmpty(transactionId)) { throw new ArgumentException( "El id de la transaccion no puede ser nulo" ); } if (string.IsNullOrEmpty(documentId)) { throw new ArgumentException( "El identificador del documento no puede ser nulo" ); } if (string.IsNullOrEmpty(documentB64)) { throw new ArgumentException( "El documento a incluir no puede ser nulo" ); } if (string.IsNullOrEmpty(op)) { throw new ArgumentException( "El tipo de operacion de firma a realizar no puede ser nulo" ); } if (string.IsNullOrEmpty(ft)) { throw new ArgumentException( "El formato de firma no puede ser nulo" ); } string url = ConfigManager.getFireService(); string urlParameters = URL_PARAMETERS_ADD_CUSTOM_DOCUMENT_BATCH .Replace(APP_ID, appId) .Replace(TRANSACTION, transactionId) .Replace(OP, "6") // El tipo de operacion solicitada es ADD_DOCUMENT_TO_BATCH (6) .Replace(DOCID, documentId) .Replace(DATA, documentB64.Replace('+', '-').Replace('/', '_')) .Replace(COP, op) .Replace(FORMAT, ft) .Replace(PROP, string.IsNullOrEmpty(propB64) ? "" : propB64.Replace('+', '-').Replace('/', '_')) .Replace(CONF, string.IsNullOrEmpty(confB64) ? "" : confB64.Replace('+', '-').Replace('/', '_')); // Si se ha indicado un formato de upgrade, lo actualizamos; si no, lo eliminamos de la URL if (string.IsNullOrEmpty(upgrade)) { urlParameters = urlParameters.Replace("&upgrade=" + UPGRADE, ""); } else { urlParameters = urlParameters.Replace(UPGRADE, upgrade); } // realizamos la peticion post al servicio y recibimos los datos de la peticion getResponseToPostPetition(url, urlParameters); }
/// <summary> /// Recupera la firma de los datos haciendo uso del servicio de red de firma en la nube. /// </summary> /// <param name="appId">Identificador de la aplicación.</param> /// <param name="transactionId">Identificador de la transacción.</param> /// <param name="upgrade">Formato al que queremos mejorar la firma (puede ser null).</param> /// <returns>Firma realizada en servidor.</returns> /// <exception cref="ArgumentException">Cuando se proporciona un parámetro no válido.</exception> /// <exception cref="HttpForbiddenException">Cuando falla la autenticación con el componente central.</exception> /// <exception cref="HttpNetworkException">Cuando se produce un error de conexión con el componente central.</exception> /// <exception cref="HttpOperationException">Cuando se produce un error interno del servidor.</exception> /// <exception cref="ConfigureException">Cuando no se encuentra configurada la URL del servicio.</exception> public static FireTransactionResult recoverSign( String appId, String transactionId, String upgrade) { if (string.IsNullOrEmpty(transactionId)) { throw new ArgumentException( "El id de la transaccion no puede ser nulo" ); } string url = ConfigManager.getFireService(); string urlParameters = URL_PARAMETERS_RECOVER_SIGN .Replace(APP_ID, appId) .Replace(TRANSACTION, transactionId) .Replace(OP, "2"); // El tipo de operacion solicitada es RECOVER_SIGN (2) // Si se ha indicado un formato de upgrade, lo actualizamos; si no, lo eliminamos de la URL if (upgrade != null && upgrade != "") { urlParameters = urlParameters.Replace(UPGRADE, upgrade); } else { urlParameters = urlParameters.Replace("&upgrade=" + UPGRADE, ""); //$NON-NLS-1$ //$NON-NLS-2$ } // realizamos la peticion post al servicio y recibimos los datos de la peticion byte[] bytes = getResponseToPostPetition(url, urlParameters); // Identificamos los datos obtenidos FireTransactionResult result; try { result = new FireTransactionResult(bytes); } catch (Exception e) { throw new HttpOperationException("La respuesta del servicio no tiene un formato valido", e); } // Si el resultado es un error o si ya contiene la firma, lo devolvemos if (result.getErrorCode() != null || result.getResult() != null) { return(result); } // Si no, hacemos una nueva llamada para recuperarla urlParameters = URL_PARAMETERS_RECOVER_SIGN_RESULT .Replace(APP_ID, appId) .Replace(TRANSACTION, transactionId) .Replace(OP, "11"); // El tipo de operacion solicitada es RECOVER_SIGN_RESULT (11) // realizamos la peticion post al servicio y recibimos los datos de la peticion bytes = getResponseToPostPetition(url, urlParameters); result.setResult(bytes); return(result); }