summaryrefslogtreecommitdiffstats
path: root/api/views/apps.py
blob: 33ecf0ff1917c267ddbd4fee5e1d6cbbf4d0d923 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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