Skip to content

Commit f44635c

Browse files
committed
feat: added feature entitlement functions
1 parent ce44096 commit f44635c

4 files changed

Lines changed: 117 additions & 0 deletions

File tree

cryptlex/lexfloatclient/lexfloatclient.py

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,12 @@ def __init__(self, name, enabled, data):
2323
self.enabled = enabled
2424
self.data = data
2525

26+
class HostFeatureEntitlement(object):
27+
def __init__(self, host_feature_entitlement_dict):
28+
self.feature_name = host_feature_entitlement_dict.get("featureName")
29+
self.value = host_feature_entitlement_dict.get("value")
30+
31+
2632
class HostConfig(object):
2733
def __init__(self, max_offline_lease_duration):
2834
self.max_offline_lease_duration = max_offline_lease_duration
@@ -234,6 +240,93 @@ def GetHostProductVersionFeatureFlag(name):
234240
return HostProductVersionFeatureFlag(name, isEnabled, LexFloatClientNative.byte_to_string(buffer.value))
235241
else:
236242
raise LexFloatClientException(status)
243+
244+
@staticmethod
245+
def GetHostLicenseEntitlementSetName():
246+
"""Gets the name of the entitlement set associated with the LexFloatServer license.
247+
248+
Raises:
249+
LexFloatClientException
250+
251+
Returns:
252+
str: host license entitlement set name
253+
"""
254+
buffer_size = 256
255+
buffer = LexFloatClientNative.get_ctype_string_buffer(buffer_size)
256+
status = LexFloatClientNative.GetHostLicenseEntitlementSetName(buffer, buffer_size)
257+
if status != LexFloatStatusCodes.LF_OK:
258+
raise LexFloatClientException(status)
259+
return LexFloatClientNative.byte_to_string(buffer.value)
260+
261+
@staticmethod
262+
def GetHostLicenseEntitlementSetDisplayName():
263+
"""Gets the display name of the entitlement set associated with the LexFloatServer license.
264+
265+
Raises:
266+
LexFloatClientException
267+
268+
Returns:
269+
str: host license entitlement set display name
270+
"""
271+
buffer_size = 256
272+
buffer = LexFloatClientNative.get_ctype_string_buffer(buffer_size)
273+
status = LexFloatClientNative.GetHostLicenseEntitlementSetDisplayName(buffer, buffer_size)
274+
if status != LexFloatStatusCodes.LF_OK:
275+
raise LexFloatClientException(status)
276+
return LexFloatClientNative.byte_to_string(buffer.value)
277+
278+
@staticmethod
279+
def GetHostFeatureEntitlements():
280+
"""Gets the feature entitlements associated with the LexFloatServer license.
281+
282+
Feature entitlements can be linked directly to a license (license feature entitlements)
283+
or via entitlement sets. If a feature entitlement is defined in both, the value from
284+
the license feature entitlement takes precedence, overriding the entitlement set value.
285+
286+
Raises:
287+
LexFloatClientException
288+
289+
Returns:
290+
HostFeatureEntitlements[]: list of host feature entitlements
291+
"""
292+
buffer_size = 4096
293+
buffer = LexFloatClientNative.get_ctype_string_buffer(buffer_size)
294+
status = LexFloatClientNative.GetHostFeatureEntitlements(buffer, buffer_size)
295+
if status == LexFloatStatusCodes.LF_OK:
296+
host_feature_entitlements_json = LexFloatClientNative.byte_to_string(buffer.value)
297+
if not host_feature_entitlements_json.strip():
298+
return []
299+
else:
300+
host_feature_entitlements = json.loads(host_feature_entitlements_json)
301+
host_feature_entitlements_list = [HostFeatureEntitlement(feature_detail) for feature_detail in host_feature_entitlements]
302+
return host_feature_entitlements_list
303+
else:
304+
raise LexFloatClientException(status)
305+
306+
@staticmethod
307+
def GetHostFeatureEntitlement(feature_name):
308+
"""Gets the feature entitlement associated with the LexFloatServer license.
309+
310+
Feature entitlements can be linked directly to a license (license feature entitlements)
311+
or via entitlement sets. If a feature entitlement is defined in both, the value from
312+
the license feature entitlement takes precedence, overriding the entitlement set value.
313+
314+
Raises:
315+
LexFloatClientException
316+
317+
Returns:
318+
HostFeatureEntitlement: host feature entitlement
319+
"""
320+
cstring_feature_name = LexFloatClientNative.get_ctype_string(feature_name)
321+
buffer_size = 1024
322+
buffer = LexFloatClientNative.get_ctype_string_buffer(buffer_size)
323+
status = LexFloatClientNative.GetHostFeatureEntitlement(cstring_feature_name, buffer, buffer_size)
324+
if status == LexFloatStatusCodes.LF_OK:
325+
host_feature_entitlement_json = LexFloatClientNative.byte_to_string(buffer.value)
326+
host_feature_entitlement = json.loads(host_feature_entitlement_json)
327+
return HostFeatureEntitlement(host_feature_entitlement)
328+
else:
329+
raise LexFloatClientException(status)
237330

238331
@staticmethod
239332
def GetHostLicenseMetadata(key):

cryptlex/lexfloatclient/lexfloatclient_exception.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,4 +80,8 @@ def get_error_message(code):
8080
return 'Machine fingerprint has changed since activation.'
8181
if code == LexFloatStatusCodes.LF_E_PROXY_NOT_TRUSTED:
8282
return 'Request blocked due to untrusted proxy.'
83+
if code == LexFloatStatusCodes.LF_E_ENTITLEMENT_SET_NOT_LINKED:
84+
return 'No entitlement set is linked to the license.'
85+
if code == LexFloatStatusCodes.LF_E_FEATURE_ENTITLEMENT_NOT_FOUND:
86+
return 'The feature entitlement does not exist.'
8387
return 'Unknown error!'

cryptlex/lexfloatclient/lexfloatclient_native.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,22 @@ def byte_to_string(input):
155155
GetHostConfig.argtypes = [STRTYPE, c_uint32]
156156
GetHostConfig.restype = c_int
157157

158+
GetHostLicenseEntitlementSetName = library.GetHostLicenseEntitlementSetName
159+
GetHostLicenseEntitlementSetName.argtypes = [STRTYPE, c_uint32]
160+
GetHostLicenseEntitlementSetName.restype = c_int
161+
162+
GetHostLicenseEntitlementSetDisplayName = library.GetHostLicenseEntitlementSetDisplayName
163+
GetHostLicenseEntitlementSetDisplayName.argtypes = [STRTYPE, c_uint32]
164+
GetHostLicenseEntitlementSetDisplayName.restype = c_int
165+
166+
GetHostFeatureEntitlements = library.GetHostFeatureEntitlementsInternal
167+
GetHostFeatureEntitlements.argtypes = [STRTYPE, c_uint32]
168+
GetHostFeatureEntitlements.restype = c_int
169+
170+
GetHostFeatureEntitlement = library.GetHostFeatureEntitlementInternal
171+
GetHostFeatureEntitlement.argtypes = [CSTRTYPE, STRTYPE, c_uint32]
172+
GetHostFeatureEntitlement.restype = c_int
173+
158174
GetHostLicenseMetadata = library.GetHostLicenseMetadata
159175
GetHostLicenseMetadata.argtypes = [CSTRTYPE, STRTYPE, c_uint32]
160176
GetHostLicenseMetadata.restype = c_int

cryptlex/lexfloatclient/lexfloatstatus_codes.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,10 @@ class LexFloatStatusCodes:
6060

6161
LF_E_PROXY_NOT_TRUSTED = 67
6262

63+
LF_E_ENTITLEMENT_SET_NOT_LINKED = 68
64+
65+
LF_E_FEATURE_ENTITLEMENT_NOT_FOUND = 69
66+
6367
LF_E_CLIENT = 70
6468

6569
LF_E_SERVER = 71

0 commit comments

Comments
 (0)