/ SignPdf.py
SignPdf.py
 1  #!/usr/bin/env vpython3
 2  # *-* coding: utf-8 *-*
 3  import sys
 4  import os
 5  import datetime
 6  from cryptography.hazmat import backends
 7  from cryptography.hazmat.primitives.serialization import pkcs12
 8  from endesive.pdf import cms
 9  from decouple import config
10  
11  fname = sys.argv[1]
12  # x = sys.argv[2]
13  # y = sys.argv[3]
14  #
15  p12_path =  config('P12_PATH', default=None, cast=str)
16  
17  p12_pwd = config('P12_PASSWORD', default=None, cast=str)
18  if p12_pwd is None or type(p12_pwd) is not str:
19      raise Exception('Password not set in .env')
20  
21  p12_contact = config('P12_PASSWORD', default=None, cast=str)
22  if p12_contact is None or type(p12_contact) is not str:
23      raise Exception('P12_CONTACT not set in .env')
24  
25  p12_reason = config('P12_REASON', default=None, cast=str)
26  if p12_reason is None or type(p12_reason) is not str:
27      raise Exception('P12_REASON not set in .env')
28  
29  p12_location = config('P12_LOCATION', default=None, cast=str)
30  if p12_contact is None or type(p12_location) is not str:
31      raise Exception('P12_LOCATION not set in .env')
32  
33  try:
34      date = datetime.datetime.utcnow() - datetime.timedelta(hours=24)
35      date = date.strftime("D:%Y%m%d%H%M%S+00'00'")
36      dct = {
37              "aligned": 0,
38              "sigflags": 3,
39              "sigpage": 0,
40              "sigflagsft": 132,
41              "sigbutton": True,
42              "sigfield": "Signature1",
43              "auto_sigfield": True,
44              "sigandcertify": True,
45              # "signaturebox": (420, -350, 570, 640), //CERT
46              "signaturebox": (0, 840, 570, 640), #for default
47              "signature": "Signed by SGOC",
48              #   "signature_img": "signature_test.png",
49              "signingdate": date,
50              "contact": p12_contact,
51              "location": p12_location,
52              "reason": p12_reason,
53              "password": p12_pwd,
54              }
55  
56      with open(p12_path, "rb") as fp:
57          p12 = pkcs12.load_key_and_certificates(
58                  fp.read(),
59                  p12_pwd.encode('utf-8'),
60                  backends.default_backend())
61  
62      data_unsigned = open(fname, "rb").read()
63      data_signed = cms.sign(data_unsigned, dct, p12[0], p12[1], p12[2], "sha256")
64      fname = fname.replace(".pdf", "-signed.pdf")
65  
66      with open(fname, "wb") as fp:
67          fp.write(data_unsigned)
68          fp.write(data_signed)
69  
70      print(fname)
71  
72  except Exception as e:
73      print(e)
74