Beispiel #1
0
        /// <summary>
        /// Recupera la firma de los datos haciendo uso del servicio de red de firma en la nube.
        /// </summary>
        /// <param name="transactionId">Identificador de la transacción.</param>
        /// <param name="subjectId">Identificador del usuario propietario de los certificados de firma.</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 nulo o vacío un parámetro obligatorio.</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="InvalidTransactionException">Cuando se intenta operar sobre una transaccion inexistente o ya caducada.</exception>
        /// <exception cref="HttpOperationException">Cuando se produce un error generico durante la operación.</exception>
        public FireTransactionResult recoverSign(
            string transactionId,
            string subjectId,
            string upgrade
            )
        {
            if (String.IsNullOrEmpty(transactionId))
            {
                throw new ArgumentException(
                          "El id de la transaccion no puede ser nulo"
                          );
            }
            if (String.IsNullOrEmpty(subjectId))
            {
                throw new ArgumentException(
                          "El identificador del titular no puede ser nulo"
                          );
            }

            string url           = this.config.getFireService();
            string urlParameters = URL_PARAMETERS_RECOVER_SIGN
                                   .Replace(APP_ID, this.appId)
                                   .Replace(TRANSACTION, transactionId)
                                   .Replace(SUBJECTID, subjectId)
                                   .Replace(OP, OP_CODE_RECOVER_SIGN); // El tipo de operacion solicitada es RECOVER_SIGN

            // 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, this.config.getConfig());

            // 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, this.appId)
                            .Replace(TRANSACTION, transactionId)
                            .Replace(SUBJECTID, subjectId)
                            .Replace(OP, OP_CODE_RECOVER_SIGN_RESULT); // El tipo de operacion solicitada es RECOVER_SIGN_RESULT

            //  realizamos la peticion post al servicio y recibimos los datos de la peticion
            bytes = getResponseToPostPetition(url, urlParameters, this.config.getConfig());
            result.setResult(bytes);

            return(result);
        }
Beispiel #2
0
        /// <summary>
        /// Recupera una firma enviada a generar anteriormente y para la que se solicitó esperar un periodo de gracia.
        /// </summary>
        /// <param name="appId">Identificador de la aplicación.</param>
        /// <param name="docId">Identificador de documento recibido de la  usuario propietario de los certificados de firma.</param>
        /// <param name="upgrade">Formato al que solicitamos actualizar la firma. Si se indica, se comprobará que la
        /// firma devuelta esté en el formato indicado.</param>
        /// <param name="confB64">Properties codificado en base 64 con configuración adicional para la plataforma de
        /// actualización de firma. </param>
        /// <param name="allowPartial">Indica si se debe devolver la firma incluso si no se ha actualizado al formato
        /// solicitado.</param>
        /// <returns>Resultado con la firma recuperada o un nuevo periodo de gracia.</returns>
        /// <exception cref="ArgumentException">Cuando se proporciona nulo o vacío un parámetro obligatorio.</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 durante la operación.</exception>
        public static FireTransactionResult recoverAsyncSign(
            string appId,
            string docId,
            string upgrade,
            string confB64,
            bool allowPartial
            )
        {
            if (string.IsNullOrEmpty(docId))
            {
                throw new ArgumentException(
                          "El identificador del documento firmado no puede ser nulo"
                          );
            }

            string url           = ConfigManager.getFireService();
            string urlParameters = URL_PARAMETERS_RECOVER_ASYNC_SIGN
                                   .Replace(APP_ID, appId)
                                   .Replace(DOCID, docId)
                                   .Replace(OP, "70")
                                   .Replace(PARTIAL, allowPartial.ToString());

            // Establecemos el formato de update y la configuracion para el validador si se han establecido.
            // Si no, los eliminamos de la URL
            if (!string.IsNullOrEmpty(upgrade))
            {
                urlParameters = urlParameters.Replace(UPGRADE, upgrade);
            }
            else
            {
                urlParameters = urlParameters.Replace("&upgrade=" + UPGRADE, "");
            }
            if (!string.IsNullOrEmpty(confB64))
            {
                urlParameters = urlParameters.Replace(CONF, confB64.Replace('+', '-').Replace('/', '_'));
            }
            else
            {
                urlParameters = urlParameters.Replace("&config=" + CONF, "");
            }

            //  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, se indica un periodo de gracia o si ya contiene la firma, lo devolvemos
            if (result.ErrorCode != null || result.GracePeriod != null || result.Result != null)
            {
                return(result);
            }

            // Si no, hacemos una nueva llamada para recuperarla
            urlParameters = URL_PARAMETERS_RECOVER_ASYNC_SIGN_RESULT
                            .Replace(APP_ID, appId)
                            .Replace(DOCID, docId)
                            .Replace(OP, "71"); // El tipo de operacion solicitada es RECOVER_ASYNC_SIGN_RESULT

            //  Realizamos la peticion al servicio y recibimos los datos de la peticion
            bytes         = getResponseToPostPetition(url, urlParameters);
            result.Result = bytes;

            return(result);
        }