Skip to content

Commit 80ddfad

Browse files
ngjunsiangclaude
andcommitted
Add public client support to Python API
Update campus_api_python client API to support new public client fields: - Add is_public and redirect_uris parameters to Clients.new() - Add redirect_uris parameter to Clients.Client.update() These align with the HTTP API changes in campus repo for public OAuth client support (RFC 6749 Section 2.1). Related: #603 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
1 parent 25024c8 commit 80ddfad

1 file changed

Lines changed: 41 additions & 5 deletions

File tree

campus_python/auth/v1/clients.py

Lines changed: 41 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
Campus Auth Clients resource (v1).
44
"""
55

6-
from campus.common import env
76
import campus.model
87

98
from ...interface import JsonDict, Resource, ResourceCollection
@@ -26,11 +25,31 @@ def list(self) -> "list[campus.model.Client]":
2625
for item in resp.json()["clients"]
2726
]
2827

29-
def new(self, name: str, description: str) -> campus.model.Client:
30-
resp = self.client.post(self.make_path(), json={
28+
def new(
29+
self,
30+
name: str,
31+
description: str,
32+
is_public: bool = False,
33+
redirect_uris: list[str] | None = None
34+
) -> campus.model.Client:
35+
"""Create a new client.
36+
37+
Args:
38+
name: Client name
39+
description: Client description
40+
is_public: True for public clients (CLI/mobile apps) without secrets
41+
redirect_uris: OAuth redirect URIs for public clients
42+
43+
Returns:
44+
The created Client
45+
"""
46+
json_data = {
3147
"name": name,
3248
"description": description,
33-
})
49+
"is_public": is_public,
50+
"redirect_uris": redirect_uris or []
51+
}
52+
resp = self.client.post(self.make_path(), json=json_data)
3453
# Raise error if status code is not 2XX or 3XX
3554
resp.raise_for_status()
3655
return campus.model.Client.from_resource(resp.json())
@@ -71,12 +90,29 @@ def revoke(self) -> str:
7190
resp.raise_for_status()
7291
return resp.json()["secret"]
7392

74-
def update(self, name: str | None = None, description: str | None = None) -> campus.model.Client:
93+
def update(
94+
self,
95+
name: str | None = None,
96+
description: str | None = None,
97+
redirect_uris: list[str] | None = None
98+
) -> campus.model.Client:
99+
"""Update the client.
100+
101+
Args:
102+
name: New client name
103+
description: New client description
104+
redirect_uris: New OAuth redirect URIs
105+
106+
Returns:
107+
The updated Client
108+
"""
75109
json_data = {}
76110
if name is not None:
77111
json_data["name"] = name
78112
if description is not None:
79113
json_data["description"] = description
114+
if redirect_uris is not None:
115+
json_data["redirect_uris"] = redirect_uris
80116
resp = self.client.put(self.make_path(), json=json_data)
81117
# Raise error if status code is not 2XX or 3XX
82118
resp.raise_for_status()

0 commit comments

Comments
 (0)