@@ -299,6 +299,17 @@ def import_offline_activation_request(self, request_file, fingerprint, bearer, l
299299 loglines .append ("ERROR: import_offline_activation_request: {0}" .format (str (e )))
300300 return "EXCEPTION ERROR"
301301
302+ def import_restricted_offline_activation_request (self , lsid , pubkey , bearer , loglines ):
303+ url = "{0}/support/{1}/importrestrictedofflineactivationrequest" .format (self ._base_url , self ._ccid )
304+ headers = {"Content-Type" : "application/json" , "Authorization" : "CWSAuth bearer={0}" .format (bearer )}
305+ payload = {"ver" : "1.0" , "lsid" : lsid , "pubkey" : pubkey }
306+ try :
307+ result = self ._post_json (url , headers , payload )
308+ return result .get ("importrequesttoken" , "" )
309+ except Exception as e :
310+ loglines .append ("ERROR: import_restricted_offline_activation_request: {0}" .format (str (e )))
311+ return "EXCEPTION ERROR"
312+
302313 def generate_offline_activation (self , import_token , bearer , ent_name , loglines ):
303314 url = "{0}/{1}/{2}/generateofflineactivation" .format (self ._base_url , self ._ccid , self .endpoint )
304315 headers = {"Content-Type" : "application/json" , "Authorization" : "CWSAuth bearer={0}" .format (bearer )}
@@ -458,7 +469,8 @@ def get_offline_request_package(nitro, ip, username, password, local_dir, new_ap
458469# ---------------------------------------------------------------------------
459470
460471
461- def extract_lsguid (file_path , loglines ):
472+ def extract_request_fields (file_path , loglines ):
473+ """Extract lsguid, lsid, and pubkey from the NS offline activation request tgz in one pass."""
462474 dest_dir = os .path .dirname (file_path )
463475 # Validate that file_path is within dest_dir to guard against path traversal.
464476 real_file_path = os .path .realpath (file_path )
@@ -504,8 +516,12 @@ def extract_lsguid(file_path, loglines):
504516 loglines .append ("DEBUG: Could not remove temp file lasData.tgz: {0}" .format (str (e )))
505517
506518 lsguid = data ["lsguid" ]
519+ inner = data .get ("data" , {})
520+ lsid = inner ["lsid" ]
521+ pubkey = inner ["pubkey" ]
507522 loglines .append ("INFO: Extracted lsguid: {0}" .format (lsguid ))
508- return lsguid
523+ loglines .append ("INFO: Extracted lsid: {0}" .format (lsid ))
524+ return lsguid , lsid , pubkey
509525
510526
511527# ---------------------------------------------------------------------------
@@ -558,7 +574,7 @@ def get_ent_name(request_pem, request_ed, is_fips, loglines):
558574# ---------------------------------------------------------------------------
559575
560576
561- def generate_offline_package (lsguid , request_file , output_file , ent_name , secret_file , loglines ):
577+ def generate_offline_package (lsguid , request_file , output_file , ent_name , secret_file , loglines , restricted_mode = False , lsid = None , pubkey = None ):
562578 client = LASClient (lsguid , secret_file )
563579
564580 bearer = client .validate_bearer_cache ()
@@ -572,13 +588,16 @@ def generate_offline_package(lsguid, request_file, output_file, ent_name, secret
572588 loglines .append ("ERROR: Failed to obtain bearer token from LAS" )
573589 return None
574590
575- fingerprint = client .get_fingerprint_for_lsguid (bearer , loglines )
576- if "ERROR" in str (fingerprint ):
577- loglines .append ("ERROR: Failed to get device fingerprint for lsguid {0}" .format (lsguid ))
578- return None
579- loglines .append ("INFO: Device fingerprint in LAS: {0!r}" .format (fingerprint ))
591+ if restricted_mode :
592+ import_token = client .import_restricted_offline_activation_request (lsid , pubkey , bearer , loglines )
593+ else :
594+ fingerprint = client .get_fingerprint_for_lsguid (bearer , loglines )
595+ if "ERROR" in str (fingerprint ):
596+ loglines .append ("ERROR: Failed to get device fingerprint for lsguid {0}" .format (lsguid ))
597+ return None
598+ loglines .append ("INFO: Device fingerprint in LAS: {0!r}" .format (fingerprint ))
599+ import_token = client .import_offline_activation_request (request_file , fingerprint , bearer , loglines )
580600
581- import_token = client .import_offline_activation_request (request_file , fingerprint , bearer , loglines )
582601 if not import_token or "ERROR" in import_token :
583602 loglines .append ("ERROR: Failed to import offline activation request" )
584603 return None
0 commit comments