Changeset ce3da18 in murachi
- Timestamp:
- Jun 30, 2015, 6:04:15 PM (9 years ago)
- Branches:
- master
- Children:
- b1392c3
- Parents:
- aa89290
- Location:
- murachi/src/main
- Files:
-
- 1 added
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
murachi/src/main/java/ve/gob/cenditel/murachi/MurachiRESTWS.java
raa89290 rce3da18 369 369 * @apiSuccess {String} fileId Identificador único del archivo en el servidor 370 370 * @apiSuccess {Boolean} fileExist El archivo se cargó exitosamente en el servidor. 371 * @apiSuccess {String} mimeType Tipo MIME del archivo verificado. 371 372 * @apiSuccess {String} error Extension not supported. En caso de que el archivo sea diferente de PDF y BDOC. 372 373 * … … 398 399 * @apiSuccess {String} signatures.signerCertificateIssuer Emisor del certificado firmante. 399 400 * @apiSuccess {String} signatures.signerCertificateValidTo Fecha de fin de validez del certificado. 401 * @apiSuccess {String} signatures.signerCertificateSerial BDOC: Serial del certificado del firmante. 402 * @apiSuccess {String} signatures.signatureProfile BDOC: Perfil de la firma. 403 * @apiSuccess {String} signatures.signatureMethod BDOC: Algoritmo de firma utilizado. 404 * @apiSuccess {String} signatures.signatureId BDOC: identificador de la firma. 405 * @apiSuccess {String} signatures.signatureSigningTime BDOC: Hora y fecha en que se realiza la firma. 406 * @apiSuccess {Boolean} signatures.signerCertificateIsValid BDOC: El certificado firmante es válido. 407 * @apiSuccess {String} signatures.signerCertificateIssuer BDOC: Emisor del certificado firmante. 408 * @apiSuccess {String} signatures.signatureValidationException BDOC: Exepciones de la validación de la firma. 409 * @apiSuccess {String} signatures.isValid BDOC: Firma electrónica válida. 410 * @apiSuccess {String} signatures.signerCertificateSubjectName BDOC: Nombre del sujeto firmante. 411 * 412 * @apiSuccess {Boolean} containerValidation BDOC: Especifica si el contenedor posee una estructura válida. 413 * @apiSuccess {Number} numberOfDataFiles BDOC: Cantidad de archivos incluidos en el contenedor BDOC. 414 * @apiSuccess {Object[]} dataFiles BDOC: Lista de archivos incluidos en el contenedor. 415 * @apiSuccess {String} dataFiles.name BDOC: Nombre del archivo incluido en el contenedor. 416 * @apiSuccess {String} dataFiles.dataFileSize BDOC: Tamaño del archivo incluido en el contenedor. 417 * @apiSuccess {String} dataFiles.filename BDOC: Nombre del archivo incluido en el contenedor. 418 * @apiSuccess {String} dataFiles.mediaType BDOC: Tipo MIME del archivo incluido en el contenedor. 419 * @apiSuccess {Object[]} signatures BDOC: Lista de firmas del contenedor BDOC 420 * 421 * 400 422 * 401 423 * @apiExample Example usage: … … 1535 1557 private JSONObject verifySignaturesInBdoc(String bdocFile) { 1536 1558 1559 logger.debug("verifySignaturesInBdoc("+bdocFile+")"); 1537 1560 System.out.println("verifySignaturesInBdoc(String bdocFile)"); 1561 1538 1562 JSONObject jsonSignatures = new JSONObject(); 1539 1563 … … 1556 1580 { 1557 1581 container = Container.open(bdocFile, configuration); 1582 logger.debug("Container.open("+bdocFile+", DIGIDOC4J_CONFIGURATION)"); 1558 1583 } catch(DigiDoc4JException e) 1559 1584 { … … 1572 1597 1573 1598 jsonSignatures.put("fileId", idFile); 1574 jsonSignatures.put("mimeType", "application/ pdf");1599 jsonSignatures.put("mimeType", "application/vnd.etsi.asic-e+zip"); 1575 1600 1576 1601 // informacion de archivos dentro del contenedor … … 1585 1610 jsonSignatures.put("numberOfSignatures", numberOfSignatures); 1586 1611 1612 System.out.println("->container.validate()"); 1587 1613 ValidationResult validationResult = container.validate(); 1614 System.out.println("...container.validate()"); 1615 1616 1588 1617 List<DigiDoc4JException> exceptions = validationResult.getContainerErrors(); 1618 System.out.println("...validationResult.getContainerErrors()"); 1589 1619 1590 1620 boolean isDDoc = container.getDocumentType() == DocumentType.DDOC; … … 1633 1663 } 1634 1664 //verifyBdocContainer(container); 1635 jsonSignatures.put("validation", "executed");1665 //jsonSignatures.put("validation", "executed"); 1636 1666 return jsonSignatures; 1637 1667 } … … 1643 1673 */ 1644 1674 private JSONArray getJSONFromBDOCDataFiles(List<DataFile> dataFilesList) { 1675 1676 System.out.println("getJSONFromBDOCDataFiles(List<DataFile> dataFilesList)"); 1677 logger.debug("getJSONFromBDOCDataFiles(List<DataFile> dataFilesList)"); 1678 1645 1679 JSONArray jsonDataFileArray = new JSONArray(); 1646 1680 … … 1649 1683 JSONObject tmpJsonDataFile = new JSONObject(); 1650 1684 DataFile df = dataFilesList.get(i); 1685 System.out.println("...dataFilesList.get(i)"); 1686 1651 1687 tmpJsonDataFile.put("dataFileSize", Long.toString(df.getFileSize())); 1688 logger.debug("dataFileSize: " + Long.toString(df.getFileSize())); 1689 1652 1690 tmpJsonDataFile.put("filename", df.getId()); 1691 logger.debug("filename: " + df.getId()); 1692 1653 1693 tmpJsonDataFile.put("mediaType", df.getMediaType()); 1694 logger.debug("mediaType: " + df.getMediaType()); 1695 1654 1696 tmpJsonDataFile.put("name", df.getName()); 1697 logger.debug("name: " + df.getName()); 1698 1655 1699 jsonDataFileArray.put(tmpJsonDataFile); 1656 1700 } … … 1660 1704 1661 1705 //return jsonDataFile; 1706 System.out.println("...saliendo"); 1662 1707 return jsonDataFileArray; 1663 1708 } … … 1670 1715 */ 1671 1716 private static HashMap<String, String> verifyBDOCSignature(Signature signature, DocumentType documentType) { 1717 logger.debug("verifyBDOCSignature(Signature signature, DocumentType documentType)"); 1672 1718 1673 1719 HashMap<String, String> signatureMap = new HashMap<String, String>(); … … 1680 1726 System.out.println("Signature " + signature.getId() + " is not valid"); 1681 1727 signatureMap.put("isValid", Boolean.toString(false)); 1728 1729 logger.debug("Signature " + signature.getId() + " is not valid"); 1730 1682 1731 int counter = 1; 1683 1732 … … 1699 1748 } 1700 1749 } 1701 else{ 1702 1750 else{ 1703 1751 System.out.println("Signature " + signature.getId() + " is valid"); 1704 signatureMap.put("isValid", Boolean.toString(true)); 1752 logger.debug("Signature " + signature.getId() + " is valid"); 1753 signatureMap.put("isValid", Boolean.toString(true)); 1705 1754 } 1706 1755 signatureMap.put("signatureId", signature.getId()); … … 1735 1784 signatureMap.put("signerCertificateIsValid", Boolean.toString(false)); 1736 1785 } 1737 1738 1739 1786 1740 1787 return signatureMap; 1741 1788 } 1742 1789 1743 1790 1791 @POST 1792 @Path("/bdocs") 1793 @Consumes(MediaType.APPLICATION_JSON) 1794 @Produces(MediaType.APPLICATION_JSON) 1795 public Response presignBdoc(PresignParametersBdoc presignPar, @Context HttpServletRequest req) throws MurachiException { 1796 1797 logger.info("/bdocs"); 1798 1799 PresignHash presignHash = new PresignHash(); 1800 1801 // obtener el id del archivo a firmaer 1802 String fileId = presignPar.getFileId(); 1803 1804 // cadena con el certificado 1805 String certHex = presignPar.getCertificate(); 1806 System.out.println("certificado en Hex: " + certHex); 1807 1808 String city = presignPar.getCity(); 1809 logger.debug("city: " + city); 1810 1811 String state = presignPar.getState(); 1812 logger.debug("state: " + state); 1813 1814 String postalCode = presignPar.getPostalCode(); 1815 logger.debug("postalCode: " + postalCode); 1816 1817 String country = presignPar.getCountry(); 1818 logger.debug("country: " + country); 1819 1820 String role = presignPar.getRole(); 1821 logger.debug("role: " + role); 1822 1823 CertificateFactory cf; 1824 X509Certificate signerCert; 1825 1826 // 1827 String hashToSign = ""; 1828 1829 1830 SignedInfo signedInfo; 1831 1832 fileId = presignPar.getFileId(); 1833 String sourceFile = SERVER_UPLOAD_LOCATION_FOLDER + fileId; 1834 System.out.println("archivo a firmar: " + sourceFile); 1835 logger.debug("archivo a firmar: " + sourceFile); 1836 1837 String sourceFileMimeType = getMimeTypeWithTika(sourceFile); 1838 logger.debug("mimeType del archivo a firmar: " + sourceFileMimeType); 1839 1840 certHex = presignPar.getCertificate(); 1841 System.out.println("certificado en Hex: " + certHex); 1842 logger.debug("certificado firmante en Hex: " + certHex); 1843 1844 try 1845 { 1846 1847 1848 Security.addProvider(new BouncyCastleProvider()); 1849 Container container = null; 1850 1851 Configuration configuration = new Configuration(Configuration.Mode.PROD); 1852 1853 configuration.loadConfiguration(DIGIDOC4J_CONFIGURATION); 1854 1855 configuration.setTslLocation(DIGIDOC4J_TSL_LOCATION); 1856 1857 container = Container.create(Container.DocumentType.BDOC, configuration); 1858 1859 SignatureParameters signatureParameters = new SignatureParameters(); 1860 SignatureProductionPlace productionPlace = new SignatureProductionPlace(); 1861 productionPlace.setCity(city); 1862 productionPlace.setStateOrProvince(state); 1863 productionPlace.setPostalCode(postalCode); 1864 productionPlace.setCountry(country); 1865 signatureParameters.setProductionPlace(productionPlace); 1866 signatureParameters.setRoles(asList(role)); 1867 container.setSignatureParameters(signatureParameters); 1868 container.setSignatureProfile(SignatureProfile.B_BES); 1869 1870 container.addDataFile(sourceFile, sourceFileMimeType); 1871 1872 cf = CertificateFactory.getInstance("X.509"); 1873 1874 InputStream in = new ByteArrayInputStream(hexStringToByteArray(certHex)); 1875 1876 signerCert = (X509Certificate) cf.generateCertificate(in); 1877 1878 signedInfo = container.prepareSigning(signerCert); 1879 1880 hashToSign = byteArrayToHexString(signedInfo.getDigest()); 1881 //System.out.println("presignBdoc - hash: " + byteArrayToHexString(signedInfo.getDigest())); 1882 System.out.println("presignBdoc - hash: " + hashToSign); 1883 logger.debug("presignBdoc - hash: " + hashToSign); 1884 1885 // establecer el nombre del archivo a serializar 1886 String serializedContainerId = sourceFile + "-serialized"; 1887 1888 // serializar el archivo 1889 serialize(container, serializedContainerId); 1890 1891 1892 // almacenar los objetos necesarios para realizar el postsign en una sesion 1893 HttpSession session = req.getSession(true); 1894 session.setAttribute("hashToSign", hashToSign); 1895 session.setAttribute("fileId", fileId); 1896 session.setAttribute("serializedContainerId", serializedContainerId); 1897 1898 1899 1900 } catch(IOException e) 1901 { 1902 presignHash.setError(e.getMessage()); 1903 presignHash.setHash(""); 1904 return Response.status(500).entity(presignHash).build(); 1905 } catch(CertificateException e) 1906 { 1907 presignHash.setError(e.getMessage()); 1908 presignHash.setHash(""); 1909 return Response.status(500).entity(presignHash).build(); 1910 } 1911 1912 1913 // creacion del json 1914 JSONObject jsonHash = new JSONObject(); 1915 jsonHash.put("hashToSign", hashToSign); 1916 1917 1918 presignHash.setHash(hashToSign); 1919 presignHash.setError(""); 1920 1921 1922 logger.debug("presignBdoc: "+ presignHash.toString()); 1923 return Response.status(200).entity(presignHash).build(); 1924 } 1925 1926 1927 @POST 1928 @Path("/bdocs/resenas") 1929 @Consumes(MediaType.APPLICATION_JSON) 1930 @Produces(MediaType.APPLICATION_JSON) 1931 public Response postsignBdoc(PostsignParameters postsignPar, @Context HttpServletRequest req) throws IOException, MurachiException { 1932 1933 logger.info("/bdocs/resenas"); 1934 1935 // cadena con la firma 1936 String signature = postsignPar.getSignature(); 1937 System.out.println("firma en Hex: " + signature); 1938 logger.info("firma en Hex: " + signature); 1939 1940 HttpSession session = req.getSession(false); 1941 1942 String fileId = (String) session.getAttribute("fileId"); 1943 System.out.println("fileId: " + fileId); 1944 logger.debug("fileId: " + fileId); 1945 1946 String serializedContainerId = (String) session.getAttribute("serializedContainerId") + ".bin"; 1947 1948 1949 System.out.println("serializedContainerId: " + serializedContainerId); 1950 logger.debug("serializedContainerId: " + serializedContainerId); 1951 1952 String signedBdoc = SERVER_UPLOAD_LOCATION_FOLDER + fileId + ".bdoc"; 1953 1954 try { 1955 Container deserializedContainer = deserializer(serializedContainerId); 1956 1957 byte[] signatureInBytes = hexStringToByteArray(signature); 1958 1959 deserializedContainer.signRaw(signatureInBytes); 1960 deserializedContainer.save(signedBdoc); 1961 logger.debug("archivo firmado escrito en: " + signedBdoc); 1962 1963 1964 1965 } catch (ClassNotFoundException e) { 1966 //e.printStackTrace(); 1967 1968 JSONObject jsonError = new JSONObject(); 1969 1970 System.out.println("sgn == null"); 1971 logger.error("error: " + e.getMessage()); 1972 1973 jsonError.put("error", e.getMessage()); 1974 return Response.status(500).entity(jsonError).build(); 1975 } 1976 1977 // en este punto el archivo bdoc debe estar disponible en la ruta 1978 // SERVER_UPLOAD_LOCATION_FOLDER + fileId; 1979 System.out.println("Archivo firmado correctamente"); 1980 logger.debug("Archivo firmado correctamente"); 1981 1982 PostsignMessage message = new PostsignMessage(); 1983 message.setMessage("{\"signedFile\":"+fileId + ".bdoc}"); 1984 1985 1986 JSONObject jsonFinalResult = new JSONObject(); 1987 jsonFinalResult.put("signedFileId",fileId + ".bdoc"); 1988 1989 logger.info(jsonFinalResult.toString()); 1990 return Response.status(200).entity(jsonFinalResult.toString()).build(); 1991 } 1992 1993 1744 1994 private static void verifyBdocContainer(Container container) { 1995 logger.debug("verifyBdocContainer(Container container)"); 1996 1745 1997 ValidationResult validationResult = container.validate(); 1746 1998 … … 1767 2019 if (signatureValidationResult.size() == 0) { 1768 2020 System.out.println("Signature " + signature.getId() + " is valid"); 2021 logger.debug("Signature " + signature.getId() + " is valid"); 1769 2022 } else { 1770 2023 System.out.println("Signature " + signature.getId() + " is not valid"); 2024 logger.debug("Signature " + signature.getId() + " is not valid"); 1771 2025 for (DigiDoc4JException exception : signatureValidationResult) { 1772 2026 System.out.println((isDDoc ? " " : " Error: ") … … 1776 2030 if (isDDoc && isDDocTestSignature(signature)) { 1777 2031 System.out.println("Signature " + signature.getId() + " is a test signature"); 2032 logger.debug("Signature " + signature.getId() + " is a test signature"); 1778 2033 } 1779 2034 } … … 2194 2449 @Consumes(MediaType.APPLICATION_JSON) 2195 2450 @Produces(MediaType.APPLICATION_JSON) 2196 public PresignHash presignBdoc (PresignParameters presignPar, @Context HttpServletRequest req) {2197 2198 System.out.println("presignBdoc : ");2451 public PresignHash presignBdoc2(PresignParameters presignPar, @Context HttpServletRequest req) { 2452 2453 System.out.println("presignBdoc2: "); 2199 2454 2200 2455 -
murachi/src/main/java/ve/gob/cenditel/murachi/PresignParameters.java
rb3b099f rce3da18 4 4 /** 5 5 * Clase PresignParameters que representa el objeto que se mapea al JSON 6 * que se envia a /archivos/p repararfirmapdf6 * que se envia a /archivos/pdfs 7 7 * 8 8 * @author aaraujo -
murachi/src/main/resources/log4j.properties
r0eae502 rce3da18 10 10 # Redirect log messages to a log file, support file rolling. 11 11 log4j.appender.file=org.apache.log4j.RollingFileAppender 12 log4j.appender.file.File=/var/log/tomcat7/MurachiRESTWS.log 12 #log4j.appender.file.File=/var/log/tomcat7/MurachiRESTWS.log 13 log4j.appender.file.File=/tmp/MurachiRESTWS.log 13 14 log4j.appender.file.MaxFileSize=5MB 14 15 log4j.appender.file.MaxBackupIndex=10
Note: See TracChangeset
for help on using the changeset viewer.