Changeset 0111cff in murachi


Ignore:
Timestamp:
Jul 28, 2015, 11:27:02 AM (9 years ago)
Author:
antonioaraujob <aaraujo@…>
Branches:
master
Children:
1fd3b33
Parents:
2b8a08d
Message:

Agregadas funciones para: crear/abrir contenedor BDOC, agregar archivo a contenedor BDOC, eliminar archivo de contenedor BDOC, eliminar firma de contenedor BDOC. Estas funciones permiten la gestión de contenedores BDOC en el proceso de firma electrónica.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • murachi/src/main/java/ve/gob/cenditel/murachi/MurachiRESTWS.java

    r2b8a08d r0111cff  
    10911091         *  "reason":"reason",
    10921092         *  "location":"location",
    1093          *  "contact":"contact"
     1093         *  "contact":"contact",
     1094         *  "signatureVisbile":"true"
    10941095         *  }
    10951096         * 
     
    11031104         * 
    11041105         *  contact: corresponde a información de contacto del firmante.
     1106         * 
     1107         *  signatureVisible: true para mostrar un indicador visible de firma en la primera página
     1108         *  del documento pdf. false para no mostrar un indicador visible de firma en la primera página
     1109         *  del documento pdf.
    11051110         *
    11061111         * @apiSuccess {String} hash Reseña o hash del archivo que se debe cifrar con la clave privada protegida por el
     
    11141119         *                             "reason":"prueba firma web",
    11151120         *                             "location":"Oficina",
    1116          *                             "contact":"582746574336"
     1121         *                             "contact":"582746574336",
     1122         *                             "signatureVisible":"true"
    11171123         *                             });
    11181124         *
     
    23292335        }
    23302336       
    2331        
     2337        // ************************************************************************
     2338        // ************************************************************************
     2339        // ************************************************************************
     2340
     2341        // pruebas de funciones para gestionar un contenedor BDOC
     2342       
     2343        @GET
     2344        @Path("/pruebaBDOC")
     2345        @Produces("text/plain")
     2346        public String testBDOCFunctions()  {
     2347               
     2348                Security.addProvider(new BouncyCastleProvider());
     2349               
     2350                Container c = createBDOCContainer();
     2351               
     2352                String containerId = UUID.randomUUID().toString();
     2353                System.out.println(containerId);
     2354               
     2355                if (c==null)
     2356                {
     2357                        System.out.println("container == null");
     2358                }
     2359                else
     2360                {
     2361                        System.out.println("container != null");
     2362                }
     2363               
     2364                addFileToBDOCContainer("/tmp/slides-93-cfrg-9.pdf", c);
     2365               
     2366                System.out.println("numero de archivos en el contenedor: " + Integer.toString(c.getDataFiles().size()));
     2367               
     2368                PKCS12Signer PKCS12_SIGNER = new PKCS12Signer("/tmp/tibisay.p12", "123456".toCharArray());
     2369               
     2370                SignatureParameters signatureParameters = new SignatureParameters();
     2371                SignatureProductionPlace productionPlace = new SignatureProductionPlace();
     2372                productionPlace.setCity("Merida");
     2373                productionPlace.setStateOrProvince("Merida");
     2374                productionPlace.setPostalCode("5101");
     2375                productionPlace.setCountry("Venezuela");
     2376                signatureParameters.setProductionPlace(productionPlace);
     2377                logger.debug("container setProductionPlace");
     2378                signatureParameters.setRoles(asList("Desarrollador"));
     2379                c.setSignatureParameters(signatureParameters);
     2380                c.setSignatureProfile(SignatureProfile.B_BES);
     2381               
     2382                c.sign(PKCS12_SIGNER);
     2383               
     2384               
     2385                if (deleteDataFileFromBDOCContainer("/tmp/slides-93-cfrg-9.pdf", c))
     2386                {
     2387                        System.out.println("eliminado archivo del contenedor");
     2388                }
     2389                else
     2390                {
     2391                        System.out.println("NO se eliminó el archivo del contenedor");
     2392                }
     2393                       
     2394                if (deleteSignatureFromBDOCContainer(0, c))
     2395                {
     2396                        System.out.println("SE ELIMINO la firma 2");
     2397                }
     2398                else
     2399                {
     2400                        System.out.println("no se pudo eliminar la firma 0");
     2401                }
     2402               
     2403                System.out.println("numero de firmas restantes: "+ Integer.toString(c.getSignatures().size()));
     2404               
     2405                c.save("/tmp/prueba.bdoc");
     2406               
     2407                return "prueba exitosa";
     2408        }
     2409       
     2410       
     2411        /**
     2412         * Crea un contenedor BDOC
     2413         * @return contenedor BDOC creado
     2414         */
     2415        private Container createBDOCContainer() {
     2416                logger.debug("createBDOCContainer() ");
     2417                System.out.println("createBDOCContainer()");
     2418               
     2419                Container container = null;
     2420               
     2421                Configuration configuration = new Configuration(Configuration.Mode.PROD);
     2422       
     2423                configuration.loadConfiguration(DIGIDOC4J_CONFIGURATION);
     2424       
     2425                configuration.setTslLocation(DIGIDOC4J_TSL_LOCATION);
     2426
     2427               
     2428                container = Container.create(Container.DocumentType.BDOC, configuration);
     2429                System.out.println("container created");
     2430                logger.debug("container created");
     2431                               
     2432                return container;               
     2433        }
     2434       
     2435        /**
     2436         * Agrega un archivo a un contendor BDOC existente
     2437         * @param filePath ruta absoluta al archivo que se desea agregar
     2438         * @param c contenedor BDOC al que se le desea agregar el archivo
     2439         */
     2440        private void addFileToBDOCContainer(String filePath, Container c) {
     2441                logger.debug("addFileToBDOCContainer() ");
     2442                System.out.println("addFileToBDOCContainer()");
     2443               
     2444                String mime = getMimeTypeWithTika(filePath);
     2445                System.out.println("mimeType: " + mime);
     2446               
     2447                c.addDataFile(filePath, mime);
     2448                System.out.println("agregado archivo a contenedor");
     2449               
     2450        }
     2451       
     2452        /**
     2453         * Elimina un archivo de un contenedor BDOC existente.
     2454         *
     2455         * Se debe pasar la ruta absoluta del archivo que se desea eliminar
     2456         *
     2457         * @param dataFile ruta absoluta del archivo que se desea eliminar
     2458         * @param c contenedor BDOC del que se desea eliminar el archivo
     2459         * @return si el archivo se elimino del contenedor
     2460         */
     2461        private boolean deleteDataFileFromBDOCContainer(String dataFile, Container c) {
     2462                logger.debug("deleteDataFileFromBDOCContainer() ");
     2463                System.out.println("deleteDataFileFromBDOCContainer()");               
     2464               
     2465                boolean result = false;
     2466               
     2467                // si el contenedor esta firmado no se puede eliminar un archivo
     2468                if (c.getSignatures().size() > 0)
     2469                {
     2470                        logger.debug("el contenedor esta firmado y no se puede eliminar el archivo: "+ dataFile);
     2471                        System.out.println("el contenedor esta firmado y no se puede eliminar el archivo: "+ dataFile);
     2472                        result = false;
     2473                }
     2474                else
     2475                {                       
     2476                        int files = c.getDataFiles().size();
     2477                        System.out.println("numero de archivos en el contenedor: " + Integer.toString(files));
     2478                        if (files == 0)
     2479                        {
     2480                                logger.debug("el contendor no posee archivos");
     2481                                System.out.println("el contenedor no posee archivos");
     2482                                result = false;
     2483                        }
     2484                        else
     2485                        {                               
     2486                                c.removeDataFile(dataFile);
     2487                                logger.debug("archivo eliminado del contenedor");
     2488                                System.out.println("archivo eliminado del contenedor");
     2489                                result = true;
     2490                        }                       
     2491                }
     2492                return result;
     2493        }
     2494       
     2495        /**
     2496         * Elimina una firma del contendor BDOC.
     2497         *
     2498         * @param signatureId id de la firma que se desea eliminar. Las firmas se enumeran de 0 en adelante.
     2499         * @param c Contenedor para eliminar la firma
     2500         * @return si se eliminó la firma del contenedor
     2501         */
     2502        private boolean deleteSignatureFromBDOCContainer(int signatureId, Container c) {
     2503                logger.debug("deleteSignatureFromBDOCContainer() ");
     2504                System.out.println("deleteSignatureFromBDOCContainer()");               
     2505               
     2506                boolean result = false;
     2507               
     2508                // si el contenedor esta firmado no se puede eliminar un archivo
     2509                int signatures = c.getSignatures().size();
     2510                System.out.println("numero de firmas: "+ Integer.toString(signatures));
     2511               
     2512                if (signatures < 1)
     2513                {
     2514                        logger.debug("el contenedor no esta firmado; no se elimina ninguna firma");
     2515                        System.out.println("el contenedor no esta firmado; no se elimina ninguna firma");
     2516                        result = false;
     2517                }
     2518                else
     2519                {                       
     2520                        if ((signatureId >= signatures) || (signatureId < 0))
     2521                        {
     2522                                logger.debug("el id de firma a eliminar no es valido.");
     2523                                System.out.println("el id de firma a eliminar no es valido");
     2524                                result = false;
     2525                        }
     2526                        else
     2527                        {
     2528                                c.removeSignature(signatureId);
     2529                                result = true;
     2530                        }                       
     2531                }
     2532                return result;
     2533        }
    23322534       
    23332535       
Note: See TracChangeset for help on using the changeset viewer.