Fix absolute urls for swagger-ui oauth settings

master
Cristi Vîjdea 2018-12-21 12:40:31 +02:00
parent 9d933a9745
commit de950461c7
7 changed files with 15 additions and 22 deletions

View File

@ -3,7 +3,6 @@ import six
import collections import collections
import logging import logging
import re import re
import sys
from collections import OrderedDict from collections import OrderedDict
from coreapi.compat import urlparse from coreapi.compat import urlparse

View File

@ -2,6 +2,7 @@ import six
from django.shortcuts import resolve_url from django.shortcuts import resolve_url
from django.template.loader import render_to_string from django.template.loader import render_to_string
from django.utils.encoding import force_text
from django.utils.functional import Promise from django.utils.functional import Promise
from rest_framework.renderers import BaseRenderer, JSONRenderer, TemplateHTMLRenderer from rest_framework.renderers import BaseRenderer, JSONRenderer, TemplateHTMLRenderer
from rest_framework.utils import encoders, json from rest_framework.utils import encoders, json
@ -120,7 +121,14 @@ class SwaggerUIRenderer(_UIRenderer):
def set_context(self, renderer_context, swagger=None): def set_context(self, renderer_context, swagger=None):
super(SwaggerUIRenderer, self).set_context(renderer_context, swagger) super(SwaggerUIRenderer, self).set_context(renderer_context, swagger)
renderer_context['swagger_settings'] = json.dumps(self.get_swagger_ui_settings(), cls=encoders.JSONEncoder) swagger_ui_settings = self.get_swagger_ui_settings()
request = renderer_context['request']
oauth_redirect_url = force_text(swagger_ui_settings.get('oauth2RedirectUrl', ''))
if request and oauth_redirect_url:
swagger_ui_settings['oauth2RedirectUrl'] = request.build_absolute_uri(oauth_redirect_url)
renderer_context['swagger_settings'] = json.dumps(swagger_ui_settings, cls=encoders.JSONEncoder)
def get_swagger_ui_settings(self): def get_swagger_ui_settings(self):
data = { data = {

View File

@ -192,7 +192,6 @@ function initSwaggerUiConfig(swaggerSettings, oauth2Settings) {
var oldResponseInterceptor = swaggerUiConfig.responseInterceptor; var oldResponseInterceptor = swaggerUiConfig.responseInterceptor;
swaggerUiConfig.responseInterceptor = function (response) { swaggerUiConfig.responseInterceptor = function (response) {
var absUrl = new URL(response.url, currentPath); var absUrl = new URL(response.url, currentPath);
console.log("response", response);
if (absUrl.href in specRequestsInFlight) { if (absUrl.href in specRequestsInFlight) {
var setToUrl = specRequestsInFlight[absUrl.href]; var setToUrl = specRequestsInFlight[absUrl.href];
delete specRequestsInFlight[absUrl.href]; delete specRequestsInFlight[absUrl.href];

View File

@ -3,7 +3,7 @@ import os
# Build paths inside the project like this: os.path.join(BASE_DIR, ...) # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
from django.urls import reverse_lazy from django.urls import reverse_lazy
from testproj.util import full_url_lazy, static_lazy from testproj.util import static_lazy
BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
@ -100,9 +100,9 @@ OAUTH2_CLIENT_SECRET = '5FvYALo7W4uNnWE2ySw7Yzpkxh9PSf5GuY37RvOys00ydEyph64dbl1E
'AKoz0JpiVQtq0DUnsxNhU3ubrJgZ9YbtiXymbLGJq8L7n4fiER7gXbXaNSbze3BN' 'AKoz0JpiVQtq0DUnsxNhU3ubrJgZ9YbtiXymbLGJq8L7n4fiER7gXbXaNSbze3BN'
OAUTH2_APP_NAME = 'drf-yasg OAuth2 provider' OAUTH2_APP_NAME = 'drf-yasg OAuth2 provider'
OAUTH2_REDIRECT_URL = full_url_lazy(static_lazy('drf-yasg/swagger-ui-dist/oauth2-redirect.html')) OAUTH2_REDIRECT_URL = static_lazy('drf-yasg/swagger-ui-dist/oauth2-redirect.html')
OAUTH2_AUTHORIZE_URL = full_url_lazy(reverse_lazy('oauth2_provider:authorize')) OAUTH2_AUTHORIZE_URL = reverse_lazy('oauth2_provider:authorize')
OAUTH2_TOKEN_URL = full_url_lazy(reverse_lazy('oauth2_provider:token')) OAUTH2_TOKEN_URL = reverse_lazy('oauth2_provider:token')
# drf-yasg # drf-yasg
SWAGGER_SETTINGS = { SWAGGER_SETTINGS = {

View File

@ -4,14 +4,4 @@ from django.utils.encoding import force_text
from django.utils.functional import lazy from django.utils.functional import lazy
def full_url(absolute_path):
try:
return "http://test.local:8002" + force_text(absolute_path)
except NoReverseMatch:
# if absolute_path is a resolve_lazy, it might point to an invalid name
# just ignore it if it does
return "http://test.local:8002/no-reverse-match/"
full_url_lazy = lazy(full_url, str)
static_lazy = lazy(static, str) static_lazy = lazy(static, str)

View File

@ -1,9 +1,6 @@
# Generated by Django 2.1.3 on 2018-12-19 07:57 # Generated by Django 2.1.3 on 2018-12-19 07:57
from django.conf import settings from django.conf import settings
from django.contrib.staticfiles.templatetags.staticfiles import static from django.db import migrations
from django.db import migrations, IntegrityError
from testproj.util import full_url_lazy
def add_oauth_apps(apps, schema_editor): def add_oauth_apps(apps, schema_editor):

View File

@ -32,7 +32,7 @@ securityDefinitions:
scopes: scopes:
read: Read everything. read: Read everything.
write: Write everything, write: Write everything,
tokenUrl: http://test.local:8002/o/token/ tokenUrl: /o/token/
type: oauth2 type: oauth2
Query: Query:
in: query in: query