Skip to content

Commit 6360886

Browse files
authored
Merge pull request #3 from IMIO/SE-308/jwt_auth
Switched basic auth to jwt
2 parents 9a39581 + 8dbf29b commit 6360886

File tree

6 files changed

+34
-15
lines changed

6 files changed

+34
-15
lines changed

CHANGES.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ Changelog
77

88
- Replaced external_session_link p by span.
99
[sgeulette]
10+
- Switched basic auth to jwt.
11+
[chris-adam]
1012

1113
1.0a2 (2026-02-06)
1214
------------------

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@
5555
"collective.compoundcriterion",
5656
"collective.eeafaceted.z3ctable",
5757
"eea.facetednavigation",
58-
"imio.helpers",
58+
"imio.helpers>1.3.10",
5959
"imio.prettylink",
6060
"imio.pyutils",
6161
# 'z3c.jbot',

src/imio/esign/__init__.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
logger = logging.getLogger("imio.esign")
1414
PLONE_VERSION = int(api.env.plone_version()[0])
1515
ESIGN_ROOT_URL = os.getenv("ESIGN_ROOT_URL", "http://127.0.0.1:8000")
16-
ESIGN_CREDENTIALS = os.getenv("ESIGN_CREDENTIALS", "")
1716
manage_session_perm = "imio.esign: Manage Sessions"
1817

1918

src/imio/esign/browser/views.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
from datetime import datetime
55
from datetime import timedelta
66
from imio.esign import _
7-
from imio.esign import ESIGN_CREDENTIALS
87
from imio.esign import ESIGN_ROOT_URL
98
from imio.esign import manage_session_perm
109
from imio.esign.browser.table import external_session_link
@@ -146,7 +145,6 @@ def __call__(self, session_id=None):
146145
return self.context.absolute_url() + "/@@parapheo"
147146
resp = create_external_session(
148147
int(session_id),
149-
b64_cred=ESIGN_CREDENTIALS,
150148
esign_root_url=ESIGN_ROOT_URL,
151149
)
152150
if resp == "_session_not_found_":

src/imio/esign/services/external_session_feedback.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from datetime import datetime
33
from imio.esign import logger
44
from imio.esign.utils import get_session_annotation
5+
from imio.helpers.ws import verify_auth_token
56
from plone.restapi.deserializer import json_body
67
from plone.restapi.services import Service
78

@@ -95,4 +96,19 @@ def reply(self): # noqa C901
9596

9697
def authorized(self):
9798
"""Check if the user is authorized to access this service."""
98-
return True
99+
auth_header = self.request.getHeader("Authorization")
100+
if not auth_header or not auth_header.startswith("Bearer "):
101+
return False
102+
token = auth_header[7:] # len("Bearer ") == 7
103+
if not token:
104+
return False
105+
return verify_auth_token(token, groups=["access_imio-apps-docs"])
106+
107+
108+
"""
109+
State:
110+
to_create_session
111+
to_sign
112+
to_upload
113+
refused
114+
"""

src/imio/esign/utils.py

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
from datetime import datetime
33
from datetime import timedelta
44
from imio.esign import _tr as _
5-
from imio.esign import ESIGN_CREDENTIALS
65
from imio.esign import ESIGN_ROOT_URL
76
from imio.esign import logger
87
from imio.esign.config import get_registry_file_url
@@ -14,7 +13,7 @@
1413
from imio.helpers.content import uuidsToObjects
1514
from imio.helpers.content import uuidToObject
1615
from imio.helpers.transmogrifier import get_correct_id
17-
from imio.pyutils.system import post_request
16+
from imio.helpers.ws import get_auth_token
1817
from imio.pyutils.utils import shortuid_encode_id
1918
from os import path
2019
from persistent.list import PersistentList
@@ -24,6 +23,7 @@
2423
from zope.component import getAdapter
2524

2625
import json
26+
import requests
2727

2828

2929
SESSION_URL = "imio/esign/v1/luxtrust/sessions"
@@ -94,11 +94,10 @@ def add_files_to_session(
9494
return session_id, session
9595

9696

97-
def create_external_session(session_id, b64_cred=None, esign_root_url=None):
97+
def create_external_session(session_id, esign_root_url=None):
9898
"""Create a session with the given signers and files.
9999
100100
:param session_id: internal session id
101-
:param b64_cred: base64 encoded credentials for authentication
102101
:param esign_root_url: the root URL for the e-sign service, if not provided it will use the default ESIGN_ROOT_URL
103102
:return: session information
104103
"""
@@ -153,17 +152,22 @@ def create_external_session(session_id, b64_cred=None, esign_root_url=None):
153152
"sealCode": seal_code,
154153
}
155154

155+
# files_payload = {filename: file_content for z, filename, file_content, uid in files}
156156
files_payload = [("files", (filename, file_content)) for z, filename, file_content, uid in files]
157157

158158
# Headers avec autorisation
159-
headers = {"accept": "application/json"}
160-
b64_cred = b64_cred or ESIGN_CREDENTIALS
161-
if b64_cred:
162-
headers["Authorization"] = "Basic {}".format(b64_cred)
159+
headers = {
160+
"accept": "application/json",
161+
"Authorization": "Bearer %s" % get_auth_token(),
162+
}
163163

164164
logger.info(data_payload)
165-
ret = post_request(
166-
session_url, data={"data": json.dumps(data_payload, default=vars)}, headers=headers, files=files_payload
165+
ret = requests.post(
166+
session_url,
167+
headers=headers,
168+
data={"data": json.dumps(data_payload, default=vars)},
169+
files=files_payload,
170+
timeout=10,
167171
)
168172
if ret.status_code == 200:
169173
session["state"] = "sent"

0 commit comments

Comments
 (0)