Fix absolute urls for swagger-ui oauth settings
parent
9d933a9745
commit
de950461c7
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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 = {
|
||||||
|
|
|
||||||
|
|
@ -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];
|
||||||
|
|
|
||||||
|
|
@ -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 = {
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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):
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue