Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 42 additions & 5 deletions campus_python/auth/v1/clients.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

Campus Auth Clients resource (v1).
"""
from __future__ import annotations

from campus.common import env
import campus.model

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

def new(self, name: str, description: str) -> campus.model.Client:
resp = self.client.post(self.make_path(), json={
def new(
self,
name: str,
description: str,
is_public: bool = False,
redirect_uris: list[str] | None = None
) -> campus.model.Client:
"""Create a new client.

Args:
name: Client name
description: Client description
is_public: True for public clients (CLI/mobile apps) without secrets
redirect_uris: OAuth redirect URIs for public clients

Returns:
The created Client
"""
json_data = {
"name": name,
"description": description,
})
"is_public": is_public,
"redirect_uris": redirect_uris or []
}
resp = self.client.post(self.make_path(), json=json_data)
# Raise error if status code is not 2XX or 3XX
resp.raise_for_status()
return campus.model.Client.from_resource(resp.json())
Expand Down Expand Up @@ -71,12 +91,29 @@ def revoke(self) -> str:
resp.raise_for_status()
return resp.json()["secret"]

def update(self, name: str | None = None, description: str | None = None) -> campus.model.Client:
def update(
self,
name: str | None = None,
description: str | None = None,
redirect_uris: list[str] | None = None
) -> campus.model.Client:
"""Update the client.

Args:
name: New client name
description: New client description
redirect_uris: New OAuth redirect URIs

Returns:
The updated Client
"""
json_data = {}
if name is not None:
json_data["name"] = name
if description is not None:
json_data["description"] = description
if redirect_uris is not None:
json_data["redirect_uris"] = redirect_uris
resp = self.client.put(self.make_path(), json=json_data)
# Raise error if status code is not 2XX or 3XX
resp.raise_for_status()
Expand Down
Loading
Loading