Skip to content

Commit 2cc1a6f

Browse files
committed
adds retire functionality for tpp
1 parent 971856e commit 2cc1a6f

2 files changed

Lines changed: 62 additions & 12 deletions

File tree

vcert/connection_tpp.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,17 @@ def post(self, args):
7676

7777
return self._post(url=url, data=data)
7878

79+
def put(self, args):
80+
"""
81+
82+
:param dict args:
83+
:rtype: tuple[Any, Any]
84+
"""
85+
url = args[self.ARG_URL] if self.ARG_URL in args else None
86+
data = args[self.ARG_DATA] if self.ARG_DATA in args else None
87+
88+
return self._put(url=url, data=data)
89+
7990
def _get(self, url="", params=None):
8091
if not self._token or self._token[1] < time.time() + 1:
8192
self.auth()
@@ -106,6 +117,22 @@ def _post(self, url, data=None):
106117
raise ClientBadData
107118
return self.process_server_response(r)
108119

120+
def _put(self, url, data=None):
121+
if not self._token or self._token[1] < time.time() + 1:
122+
self.auth()
123+
log.debug(f"Token is {self._token[0]}, timeout is {self._token[1]}")
124+
125+
if isinstance(data, dict):
126+
r = requests.put(f"{self._base_url}{url}",
127+
headers={TOKEN_HEADER_NAME: self._token[0],
128+
'content-type': MIME_JSON,
129+
'cache-control': "no-cache"},
130+
json=data,
131+
**self._http_request_kwargs) # nosec B113
132+
else:
133+
log.error(f"Unexpected client data type: {type(data)} for {url}")
134+
raise ClientBadData
135+
return self.process_server_response(r)
109136
@staticmethod
110137
def _normalize_and_verify_base_url(u):
111138
if u.startswith('http://'): # nosec

vcert/connection_tpp_abstract.py

Lines changed: 35 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ class URLS:
5959
CERTIFICATE_REVOKE = API_BASE_URL + "certificates/revoke"
6060
CERTIFICATE_RENEW = API_BASE_URL + "certificates/renew"
6161
CERTIFICATE_SEARCH = API_BASE_URL + "certificates/"
62+
CERTIFICATE_UPDATE = API_BASE_URL + "certificates/"
6263
CERTIFICATE_IMPORT = API_BASE_URL + "certificates/import"
6364
ZONE_CONFIG = API_BASE_URL + "certificates/checkpolicy"
6465
CONFIG_READ_DN = API_BASE_URL + "Config/ReadDn"
@@ -349,23 +350,37 @@ def revoke_cert(self, request):
349350
raise ServerUnexptedBehavior
350351

351352
def retire_cert(self, request):
352-
if not (request.id or request.thumbprint):
353+
if not (request.id or request.thumbprint or request.guid):
353354
raise ClientBadData
354-
d = {
355-
'Disable': request.disable
355+
data = {
356+
'AttributeData': [
357+
{
358+
'Name': 'Disabled',
359+
'Value': [
360+
'1'
361+
]
362+
}
363+
]
356364
}
357-
if request.reason:
358-
d['Reason'] = request.reason
359365
if request.id:
360-
d['CertificateDN'] = request.id
361-
elif request.thumbprint:
362-
d['Thumbprint'] = request.thumbprint
366+
cert_guid = self.get_certificate_guid_from_dn(request.id)
367+
elif request.guid:
368+
cert_guid = request.guid
363369
else:
364370
raise ClientBadData
365-
if request.comments:
366-
d['Comments'] = request.comments
367-
# TODO: Change _post() with post(args)
368-
status, data = self._post(URLS.CERTIFICATE_REVOKE, data=d)
371+
372+
if request.description:
373+
data['AttributeData'] += {
374+
'Name': 'Description',
375+
'Value': [
376+
request.description
377+
]
378+
}
379+
args = {
380+
self.ARG_URL: URLS.CERTIFICATE_UPDATE+cert_guid,
381+
self.ARG_DATA: data
382+
}
383+
status, data = self.put(args)
369384
if status in (HTTPStatus.OK, HTTPStatus.ACCEPTED):
370385
return data
371386

@@ -755,6 +770,14 @@ def post(self, args):
755770
"""
756771
raise NotImplementedError
757772

773+
def put(self, args):
774+
"""
775+
776+
:param dict args:
777+
:rtype: tuple[Any, Any]
778+
"""
779+
raise NotImplementedError
780+
758781
# ======================================== API IMPLEMENTATION ENDS ======================================== #
759782
# ========================================================================================================= #
760783

0 commit comments

Comments
 (0)