Skip to content

Commit 4200e6b

Browse files
committed
Updated swagger-ui-dist to 4.13.2 and added support for Swagger UI OAuth2 redirect with oauth2-redirect.html as default (#4)
1 parent f628921 commit 4200e6b

14 files changed

+131
-34
lines changed

CHANGELOG

+5
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
mkdocs-swagger-ui-tag 0.4.1 (2022-08-16)
2+
3+
* Added support for Swagger UI OAuth2 redirect with oauth2-redirect.html as default (#4)
4+
* Updated swagger-ui-dist to 4.13.2
5+
16
mkdocs-swagger-ui-tag 0.4.0 (2022-07-31)
27

38
* Added support for Swagger UI initOAuth method (#4)

README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ A MkDocs plugin supports for add [Swagger UI](https://github.com/swagger-api/swa
2121
1. Python Package
2222
1. beautifulsoup4>=4.11.1
2323
2. [Swagger UI dist](https://www.npmjs.com/package/swagger-ui-dist) javascript file and css file
24-
1. swagger-ui-dist>=4.13.0
24+
1. swagger-ui-dist==4.13.2
2525

2626
## Usage
2727

@@ -65,7 +65,7 @@ A MkDocs plugin supports for add [Swagger UI](https://github.com/swagger-api/swa
6565
| filter | String or Boolean | Default: False. If set, enables filtering. The top bar will show an edit box that you can use to filter the tagged operations that are shown. Can be Boolean to enable or disable, or a string, in which case filtering will be enabled using that string as the filter expression. Filtering is case sensitive matching the filter expression anywhere inside the tag. |
6666
| syntaxHighlightTheme | String | Default: "agate". [Highlight.js](https://highlightjs.org/static/demo/) syntax coloring theme to use. It can be "agate", "arta", "monokai", "nord", "obsidian" or "tomorrow-night" |
6767
| tryItOutEnabled | Boolean | Default: False. Controls whether the "Try it out" section should be enabled by default. |
68-
| oauth2RedirectUrl | String | Default: None. OAuth redirect URL. |
68+
| oauth2RedirectUrl | String | Default: [site url]/assets/swagger-ui/oauth2-redirect.html. OAuth redirect URL. |
6969
| supportedSubmitMethods | Array | Default: All Http Methods. Array=["get", "put", "post", "delete", "options", "head", "patch", "trace"]. List of HTTP methods that have the "Try it out" feature enabled. An empty array disables "Try it out" for all operations. This does not filter the operations from the display. |
7070
| validatorUrl | String | Default: "https://validator.swagger.io/validator". By default, Swagger UI attempts to validate specs against swagger.io's online validator in multiple OAS Swagger UI. You can use this parameter to set a different validator URL, for example for locally deployed validators ([Validator Badge](https://github.com/swagger-api/validator-badge)). Setting it "none" to disable validation. |
7171

mkdocs_swagger_ui_tag/plugin.py

+13-4
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import os
44
import uuid
55
from urllib.parse import unquote as urlunquote
6-
from urllib.parse import urlsplit, urlunsplit
6+
from urllib.parse import urlsplit, urlunsplit, urljoin
77

88
from bs4 import BeautifulSoup
99
from jinja2 import Environment, FileSystemLoader
@@ -109,7 +109,7 @@ def on_post_page(self, output, page, config, **kwargs):
109109
cur_id = str(uuid.uuid4())[:8]
110110
iframe_filename = f"swagger-{cur_id}.html"
111111
iframe_id_list.append(cur_id)
112-
cur_options = self.process_options(swagger_ui_ele)
112+
cur_options = self.process_options(config, swagger_ui_ele)
113113
cur_oath2_prop = self.process_oath2_prop(swagger_ui_ele)
114114

115115
openapi_spec_url = self.path_to_url(page.file,
@@ -140,7 +140,7 @@ def on_post_page(self, output, page, config, **kwargs):
140140
openapi_spec_url.append({"url": cur_url, "name": cur_name})
141141

142142
# only use options from first grouped swagger ui tag
143-
cur_options = self.process_options(grouped_list[0])
143+
cur_options = self.process_options(config, grouped_list[0])
144144
cur_oath2_prop = self.process_oath2_prop(grouped_list[0])
145145
output_from_parsed_template = template.render(
146146
css_dir=css_dir,
@@ -222,7 +222,7 @@ def replace_with_iframe(self, soup, swagger_ui_ele, cur_id,
222222
iframe['class'] = "swagger-ui-iframe"
223223
swagger_ui_ele.replaceWith(iframe)
224224

225-
def process_options(self, swagger_ui_ele):
225+
def process_options(self, config, swagger_ui_ele):
226226
""" Retrieve Swagger UI options from attribute and use config options as default """
227227
global_options = {
228228
k: v
@@ -254,6 +254,8 @@ def process_options(self, swagger_ui_ele):
254254
if "syntaxHighlightTheme" in cur_options:
255255
cur_options["syntaxHighlight.theme"] = cur_options.pop(
256256
"syntaxHighlightTheme")
257+
if "oauth2RedirectUrl" not in cur_options:
258+
cur_options["oauth2RedirectUrl"] = urljoin(config['site_url'], "assets/swagger-ui/oauth2-redirect.html")
257259
return cur_options
258260

259261
def process_oath2_prop(self, swagger_ui_ele):
@@ -311,3 +313,10 @@ def on_post_build(self, config, **kwargs):
311313
utils.copy_file(
312314
os.path.join(base_path, "swagger-ui", "javascripts",
313315
file_name), os.path.join(js_path, file_name))
316+
317+
swagger_ui_path = os.path.join(output_base_path, "swagger-ui")
318+
if not os.path.exists(swagger_ui_path):
319+
os.mkdir(swagger_ui_path)
320+
utils.copy_file(
321+
os.path.join(base_path, "swagger-ui", "oauth2-redirect.html"),
322+
os.path.join(swagger_ui_path, "oauth2-redirect.html"))

mkdocs_swagger_ui_tag/swagger-ui/javascripts/swagger-initializer.js

-20
This file was deleted.

mkdocs_swagger_ui_tag/swagger-ui/javascripts/swagger-ui-bundle.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

mkdocs_swagger_ui_tag/swagger-ui/javascripts/swagger-ui-bundle.js.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

mkdocs_swagger_ui_tag/swagger-ui/javascripts/swagger-ui-standalone-preset.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

mkdocs_swagger_ui_tag/swagger-ui/javascripts/swagger-ui-standalone-preset.js.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
<!doctype html>
2+
<html lang="en-US">
3+
<head>
4+
<title>Swagger UI: OAuth2 Redirect</title>
5+
</head>
6+
<body>
7+
<script>
8+
'use strict';
9+
function run () {
10+
var oauth2 = window.opener.swaggerUIRedirectOauth2;
11+
var sentState = oauth2.state;
12+
var redirectUrl = oauth2.redirectUrl;
13+
var isValid, qp, arr;
14+
15+
if (/code|token|error/.test(window.location.hash)) {
16+
qp = window.location.hash.substring(1);
17+
} else {
18+
qp = location.search.substring(1);
19+
}
20+
21+
arr = qp.split("&");
22+
arr.forEach(function (v,i,_arr) { _arr[i] = '"' + v.replace('=', '":"') + '"';});
23+
qp = qp ? JSON.parse('{' + arr.join() + '}',
24+
function (key, value) {
25+
return key === "" ? value : decodeURIComponent(value);
26+
}
27+
) : {};
28+
29+
isValid = qp.state === sentState;
30+
31+
if ((
32+
oauth2.auth.schema.get("flow") === "accessCode" ||
33+
oauth2.auth.schema.get("flow") === "authorizationCode" ||
34+
oauth2.auth.schema.get("flow") === "authorization_code"
35+
) && !oauth2.auth.code) {
36+
if (!isValid) {
37+
oauth2.errCb({
38+
authId: oauth2.auth.name,
39+
source: "auth",
40+
level: "warning",
41+
message: "Authorization may be unsafe, passed state was changed in server. The passed state wasn't returned from auth server."
42+
});
43+
}
44+
45+
if (qp.code) {
46+
delete oauth2.state;
47+
oauth2.auth.code = qp.code;
48+
oauth2.callback({auth: oauth2.auth, redirectUrl: redirectUrl});
49+
} else {
50+
let oauthErrorMsg;
51+
if (qp.error) {
52+
oauthErrorMsg = "["+qp.error+"]: " +
53+
(qp.error_description ? qp.error_description+ ". " : "no accessCode received from the server. ") +
54+
(qp.error_uri ? "More info: "+qp.error_uri : "");
55+
}
56+
57+
oauth2.errCb({
58+
authId: oauth2.auth.name,
59+
source: "auth",
60+
level: "error",
61+
message: oauthErrorMsg || "[Authorization failed]: no accessCode received from the server."
62+
});
63+
}
64+
} else {
65+
oauth2.callback({auth: oauth2.auth, token: qp, isValid: isValid, redirectUrl: redirectUrl});
66+
}
67+
window.close();
68+
}
69+
70+
if (document.readyState !== 'loading') {
71+
run();
72+
} else {
73+
document.addEventListener('DOMContentLoaded', function () {
74+
run();
75+
});
76+
}
77+
</script>
78+
</body>
79+
</html>

mkdocs_swagger_ui_tag/swagger-ui/stylesheets/swagger-ui.css

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

mkdocs_swagger_ui_tag/swagger-ui/stylesheets/swagger-ui.css.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
22
"dependencies": {
3-
"swagger-ui-dist": "4.13.0"
3+
"swagger-ui-dist": "4.13.2"
44
}
55
}

setup.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
long_description = f.read()
55

66
setup(name="mkdocs-swagger-ui-tag",
7-
version="0.4.0",
7+
version="0.4.1",
88
author="Blueswen",
99
author_email="[email protected]",
1010
url="https://blueswen.github.io/mkdocs-swagger-ui-tag",

update-swagger-ui.sh

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
if [ -z "$1" ]
2+
then
3+
echo "No version supplied"
4+
exit 1
5+
fi
6+
7+
VER="$1"
8+
DEST="./mkdocs_swagger_ui_tag/swagger-ui"
9+
SOURCE="https://raw.githubusercontent.com/swagger-api/swagger-ui/$1/dist"
10+
JS_LIST="swagger-ui-bundle.js.map swagger-ui-standalone-preset.js.map swagger-ui-bundle.js swagger-ui-standalone-preset.js"
11+
CSS_LIST="swagger-ui.css swagger-ui.css.map"
12+
HTML_LIST="oauth2-redirect.html"
13+
14+
for f in $JS_LIST; do
15+
wget ${SOURCE}/${f} -O ${DEST}/javascripts/${f}
16+
done
17+
18+
for f in $CSS_LIST; do
19+
wget ${SOURCE}/${f} -O ${DEST}/stylesheets/${f}
20+
done
21+
22+
for f in $HTML_LIST; do
23+
wget ${SOURCE}/${f} -O ${DEST}/${f}
24+
done

0 commit comments

Comments
 (0)