Created
June 10, 2019 12:54
-
-
Save manio143/fe31eeef42b4f8f121417c70191651b8 to your computer and use it in GitHub Desktop.
Skrypt, który teoretycznie ma nieco przyśpieszyć podpisywanie plików profilem zaufanym przez portal obywatel.gov.pl
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
import requests | |
import json | |
import sys | |
import os.path | |
from selenium import webdriver | |
from selenium.webdriver.common.by import By | |
from selenium.webdriver.support.ui import WebDriverWait | |
from selenium.webdriver.support import expected_conditions as EC | |
from http.cookiejar import Cookie | |
if __name__ == "__main__": | |
if sys.argv[1] == "-h" or sys.argv[1] == "--help": | |
print("Skrypt do szybkiego podpisywania pliku profilem zaufanym") | |
print("USAGE: signer file") | |
sys.exit(0) | |
filename = sys.argv[1] | |
if not os.path.isfile(filename): | |
print("Invalid file") | |
sys.exit(1) | |
s = requests.Session() | |
start_req = s.get("https://obywatel.gov.pl/praca-i-biznes/podpisz-dokument-elektronicznie-wykorzystaj-podpis-zaufany/usluga-online/signer/upload?xFormsAppName=SIGNER&xFormsOrigin=EXTERNAL") | |
sendfile_req = s.post("https://obywatel.gov.pl/nforms/rest/signer/file", files={'file':(filename, open(filename, 'rb'), "application/octet-strean")}) | |
# print(sendfile_req.text) | |
if sendfile_req.json()['status'] != "OK": | |
print("Error occured when uploading file") | |
sys.exit(1) | |
validate_req = s.get("https://obywatel.gov.pl/nforms/rest/signer/file/validateDocument") | |
validity = validate_req.json() if validate_req.text else None | |
if validity: | |
print(validity) | |
drv = webdriver.Firefox() | |
drv.get('https://obywatel.gov.pl') | |
for cookie in s.cookies: | |
drv.add_cookie({'name':cookie.name, 'value': cookie.value}) | |
drv.get('https://obywatel.gov.pl/nforms/signer/signDocument') | |
try: | |
element = WebDriverWait(drv, 3600).until(EC.url_contains("signer/download")) | |
rand = s.get("https://obywatel.gov.pl/nforms/rest/signer/file/random") | |
drv.get("https://pz.gov.pl") | |
for ck in drv.get_cookies(): | |
s.cookies.set_cookie(Cookie(0, ck['name'], ck['value'], None, False, ck['domain'], True, ck['domain'].startswith("."), ck['path'], True, ck['secure'], None, None, None, None, None)) | |
file_req = s.get(rand.json()["random"]) | |
print(file_req.text) | |
finally: | |
drv.quit() | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Skrypt otwiera sesję na portalu obywatel.gov.pl, wysyła podany plik, i sprawdza czy był on już podpisywany przez kogoś innego (co wypisuje na standardowe wyjście), a następnie otwiera okno Firefox przy pomocy Selenium, i używając tej samej sesji prosi o podpis ze strony profilu zaufanego. Tam użytkownik musi się zalogować, zatwierdzić podpis pliku, przejść autoryzację i kiedy przeglądarka wróci na stronę obywatel.gov.pl, to skrypt pobiera informację skąd pobrać plik, potrzebuje ciasteczek z domeny pz.gov.pl i następnie plik ten pobiera i wypisuje zawartość na standardowe wyjście.
To jest XML z naszym oryginalnym plikiem w formie base64 oraz podpisem elektronicznym.