Browse Source

Revert "Move Swagger UI JS to separate file"

This reverts commit 049c3d0649.
merge-requests/169/head
Andrew Shu 2 months ago
committed by talklittle
parent
commit
f0f790b9f5
  1. 22
      ansible/roles/swagger_ui/files/index.html
  2. 26
      ansible/roles/swagger_ui/files/index.js
  3. 6
      ansible/roles/swagger_ui/tasks/main.yml
  4. 28
      tildes/tildes/tweens.py

22
ansible/roles/swagger_ui/files/index.html

@ -11,6 +11,26 @@
<div id="swagger-ui"></div>
<script src="/swagger-ui/swagger-ui-bundle.js" charset="UTF-8"> </script>
<script src="/swagger-ui/swagger-ui-standalone-preset.js" charset="UTF-8"> </script>
<script src="/swagger-ui/index.js" charset="UTF-8"> </script>
<script${nonce_attr}>
window.onload = function() {
const uiConfig = ${ui_config};
Object.assign(uiConfig, {
presets: [
SwaggerUIBundle.presets.apis,
SwaggerUIStandalonePreset,
],
plugins: [
SwaggerUIBundle.plugins.DownloadUrl,
],
});
const oauthConfig = ${oauth_config};
// Build a system
const ui = SwaggerUIBundle(uiConfig);
if (oauthConfig) {
ui.initOAuth(oauthConfig);
}
window.ui = ui;
}
</script>
</body>
</html>

26
ansible/roles/swagger_ui/files/index.js

@ -1,26 +0,0 @@
window.onload = function() {
const uiConfig = {
"url": "/api/beta/ui",
"dom_id": "#swagger-ui",
"deepLinking": True,
"validatorUrl": None,
"layout": "StandaloneLayout",
"oauth2RedirectUrl": "oauth2-redirect",
};
Object.assign(uiConfig, {
presets: [
SwaggerUIBundle.presets.apis,
SwaggerUIStandalonePreset,
],
plugins: [
SwaggerUIBundle.plugins.DownloadUrl,
],
});
const oauthConfig = undefined;
// Build a system
const ui = SwaggerUIBundle(uiConfig);
if (oauthConfig) {
ui.initOAuth(oauthConfig);
}
window.ui = ui;
}

6
ansible/roles/swagger_ui/tasks/main.yml

@ -22,9 +22,3 @@
owner: "{{ app_username }}"
group: "{{ app_username }}"
mode: 0644
- copy:
src: "index.js"
dest: "{{ app_dir }}/static/swagger-ui/index.js"
owner: "{{ app_username }}"
group: "{{ app_username }}"
mode: 0644

28
tildes/tildes/tweens.py

@ -3,6 +3,7 @@
"""Contains Pyramid "tweens", used to insert additional logic into request-handling."""
import secrets
from collections.abc import Callable
from time import time
@ -106,8 +107,35 @@ def theme_cookie_tween_factory(handler: Callable, registry: Registry) -> Callabl
return theme_cookie_tween
def inject_csp_header_tween_factory(handler: Callable, registry: Registry) -> Callable:
# pylint: disable=unused-argument
"""Return a tween function that sets a CSP nonce (for Swagger UI)."""
def inject_csp_header_tween(request: Request) -> Response:
"""Generate a CSP nonce and add it to the request and response.
Only apply to specific routes defined here, to minimize performance overhead.
"""
nonce = None
route_name = request.matched_route.name if request.matched_route else None
if route_name == "pyramid_openapi3.explorer":
nonce = secrets.token_urlsafe(16)
request.csp_nonce = nonce
response = handler(request)
if nonce:
response.headers["Content-Security-Policy"] = (
f"script-src 'self' 'nonce-{nonce}'"
)
return response
return inject_csp_header_tween
def includeme(config: Configurator) -> None:
"""Attach Tildes tweens to the Pyramid config."""
config.add_tween("tildes.tweens.http_method_tween_factory")
config.add_tween("tildes.tweens.metrics_tween_factory")
config.add_tween("tildes.tweens.theme_cookie_tween_factory")
config.add_tween("tildes.tweens.inject_csp_header_tween_factory")
Loading…
Cancel
Save