Skip to content

Commit

Permalink
feat: add service account credential
Browse files Browse the repository at this point in the history
  • Loading branch information
gg authored and cowan-macady committed Nov 11, 2022
1 parent facf4bd commit 9b73e92
Show file tree
Hide file tree
Showing 7 changed files with 456 additions and 3 deletions.
80 changes: 79 additions & 1 deletion jarvis_sdk/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,30 @@ def main():
delete_service_account_parser.add_argument("service_account_id", help="Service account Id")
delete_service_account_parser.add_argument("etag", nargs='?', help="Optional Etag")

# application_agent_credential
application_agent_credential_parser = subparsers.add_parser("application_agent_credential")
application_agent_credential_parser.add_argument("application_agent_credential_id",
help="Application agent credential id")

# register_service_account_credential_jwk
register_service_account_credential_jwk_parser = subparsers.add_parser(
"register_service_account_credential_jwk")
register_service_account_credential_jwk_parser.add_argument("service_account_id",
help="Service account credential id")
register_service_account_credential_jwk_parser.add_argument("display_name", help="Display name")

# register_service_account_credential_pem
register_service_account_credential_pem_parser = subparsers.add_parser(
"register_service_account_credential_pem")
register_service_account_credential_pem_parser.add_argument("service_account_id",
help="Service account credential id")
register_service_account_credential_pem_parser.add_argument("display_name", help="Display name")

# delete_service_account_credential
delete_service_account_credential_parser = subparsers.add_parser("delete_service_account_credential")
delete_service_account_credential_parser.add_argument("service_account_credential_id",
help="Service account credential id")

args = parser.parse_args()

local = args.local
Expand Down Expand Up @@ -839,6 +863,57 @@ def main():
print("Invalid delete_service_account response")
return delete_service_account_response

elif command == "service_account_credential":
service_account_credential_id = args.service_account_credential_id
service_account_credential = client_config.get_service_account_credential(service_account_credential_id)
if service_account_credential:
print_response(service_account_credential)
else:
print("Invalid service account id")

elif command == "register_service_account_credential_jwk":
service_account_id = args.service_account_id
display_name = args.display_name
jwk = None
t = datetime.now().timestamp()
expire_time_in_seconds = int(t) + 2678400 # now + one month example
service_account_credential_response = client_config.register_service_account_credential_jwk(service_account_id,
display_name, jwk,
expire_time_in_seconds,
[])
if service_account_credential_response:
print_credential(service_account_credential_response)
else:
print("Invalid service account response")
return service_account_credential_response

elif command == "register_service_account_credential_pem":
service_account_id = args.service_account_id
display_name = args.display_name
default_tenant_id = args.default_tenant_id
pem = None
t = datetime.now().timestamp()
expire_time_in_seconds = int(t) + 2678400 # now + one month example
service_account_credential_response = client_config.register_service_account_credential_pem(service_account_id,
display_name, pem,
expire_time_in_seconds,
default_tenant_id, [])
if service_account_credential_response:
print_credential(service_account_credential_response)
else:
print("Invalid service account response")
return service_account_credential_response

elif command == "delete_service_account_credential":
service_account_credential_id = args.service_account_credential_id

delete_service_account_credential_response = client_config.delete_service_account_credential(service_account_credential_id, [])
if delete_service_account_credential_response:
print(delete_service_account_credential_response)
else:
print("Invalid delete_service_account_credential_response response")
return delete_service_account_credential_response


def print_verify_info(digital_twin_info): # pragma: no cover
print("Digital twin info")
Expand All @@ -852,7 +927,10 @@ def print_credential(credential): # pragma: no cover
print("==========")
print("Credential id: " + str(credential.id))
print("Kid: " + str(credential.kid))
print("Agent config: " + str(credential.agent_config))
if hasattr(credential, 'agent_config'):
print("Agent config: " + str(credential.agent_config))
elif hasattr(credential, 'service_account_config'):
print("Service account config: " + str(credential.service_account_config))
print("Bookmark: " + str(credential.bookmark))
print("Create time: " + str(credential.create_time))
print("Expire time: " + str(credential.expire_time))
Expand Down
2 changes: 1 addition & 1 deletion jarvis_sdk/cmdconfig/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,5 +57,5 @@ def __init__(self, local=False):
from ._application_agent import get_application_agent_by_id, get_application_agent_by_name, create_application_agent, update_application_agent, \
list_application_agents, delete_application_agent
from ._application_agent_credential import get_application_agent_credential, register_application_agent_credential_jwk, register_application_agent_credential_pem, delete_application_agent_credential

from ._service_account_credential import get_service_account_credential, register_service_account_credential_jwk, register_service_account_credential_pem, delete_service_account_credential

84 changes: 84 additions & 0 deletions jarvis_sdk/cmdconfig/_service_account_credential.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
from jarvis_sdk.cmdconfig import helper
from jarvis_sdk.indykite.config.v1beta1 import config_management_api_pb2 as pb2
from jarvis_sdk.indykite.config.v1beta1 import model_pb2 as model
from jarvis_sdk.model.service_account_credential import ServiceAccountCredential
from jarvis_sdk.indykite.config.v1beta1.model_pb2 import google_dot_protobuf_dot_wrappers__pb2 as wrappers
from jarvis_sdk.model.register_service_account_credential import RegisterServiceAccountCredential
from google.protobuf.timestamp_pb2 import Timestamp


def get_service_account_credential(self, service_account_credential_id):
try:
response = self.stub.ReadServiceAccountCredential(
pb2.ReadServiceAccountCredentialRequest(
id=str(service_account_credential_id)
)
)
except Exception as exception:
print(exception)
return None

if not response:
return None

return ServiceAccountCredential.deserialize(response.service_account_credential)


def register_service_account_credential_jwk(self, service_account_id, display_name, jwk_in_bytes, expire_time_in_seconds,
bookmarks=[]):

try:
response = self.stub.RegisterServiceAccountCredential(
pb2.RegisterServiceAccountCredentialRequest(
service_account_id=service_account_id, display_name=display_name,
jwk=jwk_in_bytes, expire_time=Timestamp(seconds=expire_time_in_seconds),
bookmarks=bookmarks
)
)
except Exception as exception:
print(exception)
return None

if not response:
return None

return RegisterServiceAccountCredential.deserialize(response)


def register_service_account_credential_pem(self, service_account_id, display_name, pem_in_bytes, expire_time_in_seconds,
bookmarks=[]):

try:
response = self.stub.RegisterServiceAccountCredential(
pb2.RegisterServiceAccountCredentialRequest(
service_account_id=service_account_id, display_name=display_name,
pem=pem_in_bytes, expire_time=Timestamp(seconds=expire_time_in_seconds),
bookmarks=bookmarks
)
)
except Exception as exception:
print(exception)
return None

if not response:
return None

return RegisterServiceAccountCredential.deserialize(response)


def delete_service_account_credential(self, service_account_credential_id, bookmarks):

try:
response = self.stub.DeleteServiceAccountCredential(
pb2.DeleteServiceAccountCredentialRequest(
id=service_account_credential_id, bookmarks=bookmarks
)
)
except Exception as exception:
print(exception)
return None

if not response:
return None

return response
32 changes: 32 additions & 0 deletions jarvis_sdk/model/register_service_account_credential.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
from jarvis_sdk.utils import timestamp_to_date


class RegisterServiceAccountCredential:
@classmethod
def deserialize(cls, message):
if message is None:
return None

register_service_account_credential = RegisterServiceAccountCredential(
str(message.id),
str(message.service_account_id),
str(message.kid),
bytes(message.service_account_config),
timestamp_to_date(message.create_time),
timestamp_to_date(message.expire_time),
str(message.bookmark),
)

return register_service_account_credential

def __init__(self, id, service_account_id, kid, service_account_config, create_time, expire_time, bookmark):
self.id = id
self.service_account_id = service_account_id
self.kid = kid
self.service_account_config = service_account_config
self.create_time = create_time
self.expire_time = expire_time
self.bookmark = bookmark



41 changes: 41 additions & 0 deletions jarvis_sdk/model/service_account_credential.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
from jarvis_sdk.utils import timestamp_to_date


class ServiceAccountCredential:
@classmethod
def deserialize(cls, message):
if message is None:
return None

service_account_credential = ServiceAccountCredential(
str(message.id),
str(message.kid),
str(message.display_name),
str(message.customer_id),
str(message.service_account_id),
str(message.app_space_id)
)

if message.HasField('create_time'):
service_account_credential.create_time = timestamp_to_date(message.create_time)

if message.HasField('destroy_time'):
service_account_credential.destroy_time = timestamp_to_date(message.destroy_time)

if message.HasField('delete_time'):
service_account_credential.delete_time = timestamp_to_date(message.delete_time)

return service_account_credential

def __init__(self, id, kid, display_name, customer_id, service_account_id, app_space_id=None):
self.id = id
self.kid = kid
self.display_name = display_name
self.customer_id = customer_id
self.service_account_id = service_account_id
self.app_space_id = app_space_id
self.create_time = None
self.destroy_time = None
self.delete_time = None


7 changes: 6 additions & 1 deletion tests/helpers/data.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
ACCOUNT_ID= "gid:AAAAEgGym_wUPEZfjV8TIdsImsE"
WRONG_ACCOUNT_ID= "gid:AAAAFJ6iGHyG8Ee8tIvW7DQ1hkE"
SERVICE_ACCOUNT_NAME = "serviceaccount-sdk"
TEST_SERVICE_ACCOUNT = "gid:AAAAEiuyZi3zVE9hvsu0gSqgi-g"
CUSTOMER_NAME = "sdk-customer"
APP_SPACE_NAME = "sdk-appspace"
CUSTOMER_ID = "gid:AAAAAbHLUExsxkqsqRoI93amR30"
Expand All @@ -28,6 +29,7 @@
APPLICATION_AGENT_ID = "gid:AAAABbPQM7m4OUbXnsfyef2zOc0"
APPLICATION_AGENT_NAME = "appagent-sdk"
APPLICATION_AGENT_CREDENTIAL_ID = "gid:AAAABhgLSrxgg0_nuVeZppYYSGs"
SERVICE_ACCOUNT_CREDENTIAL_ID = "gid:AAAAE0rMcwG_RUbSjzclsV7bdjg"

PASSWORD = "Password"
NEW_PASSWORD = "Password1"
Expand Down Expand Up @@ -155,8 +157,11 @@ def get_application_agent_credential_id():


def get_service_account_id():
return ACCOUNT_ID
return TEST_SERVICE_ACCOUNT


def get_service_account_name():
return SERVICE_ACCOUNT_NAME

def get_service_account_credential_id():
return SERVICE_ACCOUNT_CREDENTIAL_ID

0 comments on commit 9b73e92

Please sign in to comment.