38 lines
928 B
Python
38 lines
928 B
Python
|
import secrets
|
||
|
|
||
|
from ninja import Field, Schema
|
||
|
|
||
|
from ..models import Application
|
||
|
from .base import api
|
||
|
|
||
|
|
||
|
class CreateApplicationSchema(Schema):
|
||
|
client_name: str
|
||
|
redirect_uris: str
|
||
|
scopes: None | str = None
|
||
|
website: None | str = None
|
||
|
|
||
|
|
||
|
class ApplicationSchema(Schema):
|
||
|
id: str
|
||
|
name: str
|
||
|
website: str | None
|
||
|
client_id: str
|
||
|
client_secret: str
|
||
|
redirect_uri: str = Field(alias="redirect_uris")
|
||
|
|
||
|
|
||
|
@api.post("/v1/apps", response=ApplicationSchema)
|
||
|
def add_app(request, details: CreateApplicationSchema):
|
||
|
client_id = "tk-" + secrets.token_urlsafe(16)
|
||
|
client_secret = secrets.token_urlsafe(40)
|
||
|
application = Application.objects.create(
|
||
|
name=details.client_name,
|
||
|
website=details.website,
|
||
|
client_id=client_id,
|
||
|
client_secret=client_secret,
|
||
|
redirect_uris=details.redirect_uris,
|
||
|
scopes=details.scopes or "read",
|
||
|
)
|
||
|
return application
|