Skip to content

Commit 524e430

Browse files
committed
using CloudOperationsClient API
1 parent d38c972 commit 524e430

File tree

3 files changed

+34
-44
lines changed

3 files changed

+34
-44
lines changed

Diff for: encryption_jwt/codec_server.py

+29-39
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,22 @@
22
import os
33
import ssl
44

5-
import grpc
65
import jwt
76
import requests
87
from aiohttp import hdrs, web
98
from google.protobuf import json_format
109
from jwt.algorithms import RSAAlgorithm
11-
from temporalio.api.cloud.cloudservice.v1 import request_response_pb2, service_pb2_grpc
12-
from temporalio.api.common.v1 import Payload, Payloads
10+
from temporalio.api.cloud.cloudservice.v1 import GetUsersRequest
11+
from temporalio.api.common.v1 import Payloads
12+
from temporalio.client import CloudOperationsClient
1313

1414
from encryption_jwt.codec import EncryptionCodec
1515

1616
AUTHORIZED_ACCOUNT_ACCESS_ROLES = ["owner", "admin"]
1717
AUTHORIZED_NAMESPACE_ACCESS_ROLES = ["read", "write", "admin"]
1818

19+
TEMPORAL_CLIENT_CLOUD_API_VERSION = "2024-05-13-00"
20+
1921
temporal_ops_address = "saas-api.tmprl.cloud:443"
2022
if os.environ.get("TEMPORAL_OPS_ADDRESS"):
2123
temporal_ops_address = os.environ.get("TEMPORAL_OPS_ADDRESS")
@@ -45,44 +47,32 @@ async def cors_options(req: web.Request) -> web.Response:
4547

4648
return resp
4749

48-
def decryption_authorized(email: str, namespace: str) -> bool:
49-
credentials = grpc.composite_channel_credentials(
50-
grpc.ssl_channel_credentials(),
51-
grpc.access_token_call_credentials(os.environ.get("TEMPORAL_API_KEY")),
50+
async def decryption_authorized(email: str, namespace: str) -> bool:
51+
client = await CloudOperationsClient.connect(
52+
api_key=os.environ.get("TEMPORAL_API_KEY"),
53+
version=TEMPORAL_CLIENT_CLOUD_API_VERSION,
5254
)
5355

54-
with grpc.secure_channel(temporal_ops_address, credentials) as channel:
55-
client = service_pb2_grpc.CloudServiceStub(channel)
56-
request = request_response_pb2.GetUsersRequest()
57-
58-
response = client.GetUsers(
59-
request,
60-
metadata=(
61-
(
62-
"temporal-cloud-api-version",
63-
os.environ.get("TEMPORAL_OPS_API_VERSION"),
64-
),
65-
),
66-
)
56+
response = await client.cloud_service.get_users(
57+
GetUsersRequest(namespace=namespace)
58+
)
6759

68-
for user in response.users:
69-
if user.spec.email.lower() == email.lower():
70-
if (
71-
user.spec.access.account_access.role
72-
in AUTHORIZED_ACCOUNT_ACCESS_ROLES
73-
):
74-
return True
75-
else:
76-
if namespace in user.spec.access.namespace_accesses:
77-
if (
78-
user.spec.access.namespace_accesses[
79-
namespace
80-
].permission
81-
in AUTHORIZED_NAMESPACE_ACCESS_ROLES
82-
):
83-
return True
84-
85-
return False
60+
for user in response.users:
61+
if user.spec.email.lower() == email.lower():
62+
if (
63+
user.spec.access.account_access.role
64+
in AUTHORIZED_ACCOUNT_ACCESS_ROLES
65+
):
66+
return True
67+
else:
68+
if namespace in user.spec.access.namespace_accesses:
69+
if (
70+
user.spec.access.namespace_accesses[namespace].permission
71+
in AUTHORIZED_NAMESPACE_ACCESS_ROLES
72+
):
73+
return True
74+
75+
return False
8676

8777
def make_handler(fn: str):
8878
async def handler(req: web.Request):
@@ -122,7 +112,7 @@ async def handler(req: web.Request):
122112
)
123113

124114
# Use the email to determine if the user is authorized to decrypt the payload
125-
authorized = decryption_authorized(
115+
authorized = await decryption_authorized(
126116
decoded["https://saas-api.tmprl.cloud/user/email"], namespace
127117
)
128118

Diff for: poetry.lock

+4-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: pyproject.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ dependencies = { cryptography = "^38.0.1", aiohttp = "^3.8.1" }
4545

4646
[tool.poetry.group.encryption_jwt]
4747
optional = true
48-
dependencies = { cryptography = "^38.0.1", aiohttp = "^3.8.1", pyjwt = "^2.9.0", grpcio = "^1.66.1", aioboto3 = "^13.1.1", "requests" = "^2.32.3" }
48+
dependencies = { cryptography = "^38.0.1", aiohttp = "^3.8.1", pyjwt = "^2.9.0", aioboto3 = "^13.1.1", "requests" = "^2.32.3" }
4949

5050
[tool.poetry.group.gevent]
5151
optional = true

0 commit comments

Comments
 (0)