Generate swagger
This commit is contained in:
parent
5ff918e104
commit
fb9cb5425c
6 changed files with 502 additions and 185 deletions
|
|
@ -9,6 +9,8 @@ Local settings
|
|||
"""
|
||||
|
||||
from .common import * # noqa
|
||||
from funkwhale_api import __version__ as funkwhale_version
|
||||
from drf_spectacular.contrib.django_oauth_toolkit import OpenApiAuthenticationExtension
|
||||
|
||||
|
||||
# DEBUG
|
||||
|
|
@ -78,6 +80,8 @@ DEBUG_TOOLBAR_PANELS = [
|
|||
# ------------------------------------------------------------------------------
|
||||
# INSTALLED_APPS += ('django_extensions', )
|
||||
|
||||
INSTALLED_APPS += ("drf_spectacular",)
|
||||
|
||||
# Debug toolbar is slow, we disable it for tests
|
||||
DEBUG_TOOLBAR_ENABLED = env.bool("DEBUG_TOOLBAR_ENABLED", default=DEBUG)
|
||||
if DEBUG_TOOLBAR_ENABLED:
|
||||
|
|
@ -96,6 +100,39 @@ CELERY_TASK_ALWAYS_EAGER = False
|
|||
|
||||
CSRF_TRUSTED_ORIGINS = [o for o in ALLOWED_HOSTS]
|
||||
|
||||
REST_FRAMEWORK["DEFAULT_SCHEMA_CLASS"] = "drf_spectacular.openapi.AutoSchema"
|
||||
SPECTACULAR_SETTINGS = {
|
||||
"TITLE": "Funkwhale API",
|
||||
"DESCRIPTION": open("Readme.md", "r").read(),
|
||||
"VERSION": funkwhale_version,
|
||||
"SCHEMA_PATH_PREFIX": "/api/(v[0-9])?",
|
||||
"OAUTH_FLOWS": ["authorizationCode"],
|
||||
"AUTHENTICATION_WHITELIST": [
|
||||
"funkwhale_api.common.authentication.OAuth2Authentication",
|
||||
"funkwhale_api.common.authentication.ApplicationTokenAuthentication",
|
||||
],
|
||||
"SERVERS": [
|
||||
{"url": "https://demo.funkwhale.audio", "description": "Demo Server"},
|
||||
{
|
||||
"url": "https://funkwhale.audio",
|
||||
"description": "Read server with real content",
|
||||
},
|
||||
{
|
||||
"url": "https://{domain}",
|
||||
"description": "Custom server",
|
||||
"variables": {
|
||||
"domain": {
|
||||
"default": "yourdomain",
|
||||
"description": "Your Funkwhale Domain",
|
||||
},
|
||||
"protocol": {"enum": ["http", "https"], "default": "https"},
|
||||
},
|
||||
},
|
||||
],
|
||||
"OAUTH2_FLOWS": ["authorizationCode"],
|
||||
"OAUTH2_AUTHORIZATION_URL": "/authorize",
|
||||
"OAUTH2_TOKEN_URL": "/api/v1/oauth/token/",
|
||||
}
|
||||
|
||||
if env.bool("WEAK_PASSWORDS", default=False):
|
||||
# Faster during tests
|
||||
|
|
@ -106,3 +143,29 @@ MIDDLEWARE = (
|
|||
"funkwhale_api.common.middleware.ProfilerMiddleware",
|
||||
"funkwhale_api.common.middleware.PymallocMiddleware",
|
||||
) + MIDDLEWARE
|
||||
|
||||
|
||||
class CustomOAuthExt(OpenApiAuthenticationExtension):
|
||||
target_class = "funkwhale_api.common.authentication.OAuth2Authentication"
|
||||
name = "oauth2"
|
||||
|
||||
def get_security_definition(self, auto_schema):
|
||||
from oauth2_provider.scopes import get_scopes_backend
|
||||
|
||||
from drf_spectacular.settings import spectacular_settings
|
||||
|
||||
flows = {}
|
||||
for flow_type in spectacular_settings.OAUTH2_FLOWS:
|
||||
flows[flow_type] = {}
|
||||
if flow_type in ("implicit", "authorizationCode"):
|
||||
flows[flow_type][
|
||||
"authorizationUrl"
|
||||
] = spectacular_settings.OAUTH2_AUTHORIZATION_URL
|
||||
if flow_type in ("password", "clientCredentials", "authorizationCode"):
|
||||
flows[flow_type]["tokenUrl"] = spectacular_settings.OAUTH2_TOKEN_URL
|
||||
if spectacular_settings.OAUTH2_REFRESH_URL:
|
||||
flows[flow_type]["refreshUrl"] = spectacular_settings.OAUTH2_REFRESH_URL
|
||||
scope_backend = get_scopes_backend()
|
||||
flows[flow_type]["scopes"] = scope_backend.get_all_scopes()
|
||||
|
||||
return {"type": "oauth2", "flows": flows}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue