es3 fájl kibontása automatikusan

Fórumok

Sziasztok,

es3 (Microsec-es) kiterjesztésű fájlokat szeretnék automatikusan kibontani Centos alatt.

Van esetleg erre egy kipróbált megoldás?

 

Köszönöm

Hozzászólások

Szerintem írj rá Python script-et.

Amelyet egy shell script indít, amiben AWK-val keresel az es3-ban, az eredményt Perl-lel csócsálod a Pythonnak való átadás előtt, amely Python visszaadott eredményét egy PHP-script hozza megfelelő formára.

Esetleg kis JS még befigyelhetne.

Mit jelent a "kibontas" egy tomoritetlen XML eseten? A benne levo, base64 encode-olt dolgokat szeretned kulon-kulon file-ba tenni, es valamivel feldolgozni?

A mar emlitett python nem eleg? (van xml-hez, file-hoz, meg base64-hez is modul)

A strange game. The only winning move is not to play. How about a nice game of chess?

Pontosan amit leírtál. Elvileg több fájl is lehet az es3-ban és azokat szeretnénk kicsomagolva látni és használni. Mindezt a háttérben, nem az e-signos programmal.

 

Így néz ki az eleje:

<es:Format>
    <es:MIME-Type type="application" subtype="pdf" extension="pdf"/>
    </es:Format>
    <es:SourceSize sizeValue="8243" sizeUnit="B"/>
    <es:BaseTransform>
    <es:Transform Algorithm="zip"/>
    <es:Transform Algorithm="base64"/> 

from lxml import etree
import base64

x=etree.parse('/media/12T/nyos/3trol/ment/es3ak/vegzes.es3')
nss={'es':'https://www.microsec.hu/ds/e-szigno30#','ds':'http://www.w3.org/2000/09/xmldsig#'}
#docs=x.xpath('//es:Documents/es:Document[es:DocumentProfile]',namespaces=nss)
b64=base64.decodestring(x.xpath('//ds:Object',namespaces=nss)[3].text.encode('utf-8'))
with open('/tmp/test.zip','wb') as f:
  f.write(b64)

Kerestem egy es3-at a gepemen, inditottam egy python3 interpretert (interaktiv modban), aztan elkezdtem vele jatszani.

Eloszor tisztessegesen elkezdtem bejarni a DOM-ot, ugyanis van egy es:Documents tag, azon belul vannak a es:Document tag-ek, es annak vannak mindenfele node-jai (es:Title, meg amiket irtal, es:Format, stb..), es ami a lenyeg: a ds:Object, amiben maga a base64 enkodolt adat van.

Aztan nem akartam bonyolitani, es inkabb kivalasztottam az egyik objectet, base64 decode-oltam, es kiirtam file-ba a tartalmat. Ez egy zip, amit kibontva kaptam egy nagyon ronda nevu (A l├йtes├нt┼С okirat - v├бltoz├бsokkal egybefoglalt - hat├бlyos├нtott sz├╢vege.pdf) PDF-et. Utobbi a zipfile modullal is kibonthato, de ezzel mar nem akarok tokolni.

Az xpath fuggveny a fenti kodban amugy egy listat ad meg, amin forral vegig lehet menni ugye.. szoval nem egy varazslat mindent kinyerni a file-bol. es:MIME-Type alapjan el lehetne agazni, es es:Transform alapjan meg lehet hivni a zipes kibontast is. Alapvetoen kb. ennyi xml-t kezelni (ezt persze kb. minden modern nyelv tudja, szoval ha a C#/PHP/akarmi jobban tetszik, akkor hajra azzal).

A strange game. The only winning move is not to play. How about a nice game of chess?

Szerkesztve: 2020. 11. 23., h – 19:09
#!/usr/bin/env python
import xml.etree.ElementTree as ET
import base64
import sys
import os

if ((len(sys.argv) == 1) or (len(sys.argv) > 2)):
    print("Provide one es3 file as input please")
    exit(1)

inputfilename=sys.argv[1]
tree = ET.parse(inputfilename)
root = tree.getroot()
ns={'es':'https://www.microsec.hu/ds/e-szigno30#','ds':'http://www.w3.org/2000/09/xmldsig#'}

for documents in root.findall('es:Documents', ns):
    for document in documents.findall('es:Document',ns):
        filename = document.find('es:DocumentProfile', ns).find('es:Title', ns).text
        b64=base64.decodebytes(document.find('ds:Object',ns).text.encode('utf-8'))
        if not os.path.exists(filename):
            with open(filename, 'wb') as f:
                print(filename)
                f.write(b64)
        else:
            print(filename+' already exists.')



 

Ja, hagyatéki végzésnél pdf kiterjesztésű file van az es3-ban, ami valójában zip, és átnevezés, unzip után kapja meg az ember a pdf-et. Felhasználóbarát, na. Minden forintját megéri, amit a közjegyzőnek fizet az ember. egyébként hétköznapi emberek hogy nyitják meg ezeket? Vagy van valami triviális megoldás, csak én nem találtam?

Azt én is megnézném, h. ha az átlagemberek nagytöbbségénél már desktop windows PC sincs, csak smartphone meg tablet, ez a fájlkezelős baszkódás (átnevez .XYZ-ről .ZIP-re, majd kicsomagol, majd abból kiszedi a .PDF-et stb.) hogy kivitelezhető a mindennapi életben.

Azzal magyarázzák ennek az es3 formátumnak a létét, hogy az asic formátumok (https://en.wikipedia.org/wiki/Associated_Signature_Containers) akkor még nem léteztek, amikor már szükség volt valamire. De szerintem az eszignó kliens megnyitja, és elvégzi ezeket a kicsomagolásokat.