Skip to content

Commit 0e15dba

Browse files
committed
improve /config and enable template by query param
Signed-off-by: Luiz Oliveira <ziuloliveira@gmail.com>
1 parent 8d183d5 commit 0e15dba

2 files changed

Lines changed: 87 additions & 27 deletions

File tree

server.py

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,8 @@ async def auth_callback(request: Request):
6262

6363
else:
6464
def require_login(request: Request):
65-
return None
65+
request.session['user'] = "anonymous"
66+
return request.session['user']
6667

6768

6869
@app.get("/proxy", include_in_schema=False)
@@ -123,7 +124,7 @@ def apply_proxy_to_openapi(openapi_url: str, header: str = None) -> str:
123124

124125

125126
@app.get("/", response_class=HTMLResponse)
126-
async def docs(request: Request, user=Depends(require_login)):
127+
async def docs(request: Request, template:str=None, user=Depends(require_login)):
127128
"""
128129
Main documentation page.
129130
"""
@@ -153,6 +154,15 @@ async def docs(request: Request, user=Depends(require_login)):
153154
for swagger in swaggers:
154155
swagger["url"] = apply_proxy_to_openapi(swagger.get("url"), parse_headers(swagger.get("header")))
155156

157+
if template and template.lower() in ["redoc", "swagger-ui"]:
158+
return templates.TemplateResponse(
159+
f"{template.lower()}.html",
160+
{
161+
"request": request,
162+
"urls": swaggers,
163+
"title": os.environ.get("TITLE", "API Documentation"),
164+
}
165+
)
156166
interface = os.environ.get("INTERFACE", "swagger-ui").lower()
157167
if interface not in ["swagger-ui", "redoc"]:
158168
interface = "swagger-ui"
@@ -173,15 +183,7 @@ async def config(request: Request):
173183
try:
174184
with open('static/openapi/urls.json') as f:
175185
swaggers = json.load(f)
176-
except FileNotFoundError:
177-
swaggers = [
178-
{
179-
"url": "/openapi.json",
180-
"name": "Swagger Aggregator",
181-
"header": "",
182-
}
183-
]
184-
except json.JSONDecodeError:
186+
except:
185187
swaggers = [
186188
{
187189
"url": "/openapi.json",
@@ -196,5 +198,17 @@ async def config(request: Request):
196198
"request": request,
197199
"urls": swaggers,
198200
"title": os.environ.get("TITLE", "API Documentation - Config"),
201+
"session": request.session,
202+
"settings": {
203+
"enable_oidc": ENABLE_OIDC,
204+
"oidc_client_id": os.environ.get("OIDC_CLIENT_ID"),
205+
"oidc_metadata_url": os.environ.get("OIDC_METADATA_URL"),
206+
"interface": os.environ.get("INTERFACE", "swagger-ui").lower(),
207+
"path_key": os.environ.get("SWAGGER_OPERATOR_PATH_KEY", "swagger-operator-path"),
208+
"name_key": os.environ.get("SWAGGER_OPERATOR_NAME_KEY", "swagger-operator-name"),
209+
"port_key": os.environ.get("SWAGGER_OPERATOR_PORT_KEY", "swagger-operator-port"),
210+
"header_key": os.environ.get("SWAGGER_OPERATOR_HEADER_KEY", "swagger-operator-header"),
211+
"proxy_timeout": os.environ.get("PROXY_TIMEOUT", 10),
212+
}
199213
}
200214
)

templates/config.html

Lines changed: 62 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,67 @@
55
</head>
66
<body>
77
<h1>{{ title }}</h1>
8-
<table border="1">
9-
<thead>
10-
<tr>
11-
<th>Name</th>
12-
<th>URL</th>
13-
</tr>
14-
</thead>
15-
<tbody>
16-
{% for swagger in urls %}
17-
<tr>
18-
<td><pre>{{ swagger.name }}</pre></td>
19-
<td><pre>{{ swagger.url }}</pre></td>
20-
</tr>
21-
{% endfor %}
22-
</tbody>
23-
</table>
8+
9+
10+
<details>
11+
<summary><strong>Configured APIs</strong> ({{ urls|length }})</summary>
12+
<table border="1">
13+
<thead>
14+
<tr>
15+
<th>Name</th>
16+
<th>URL</th>
17+
</tr>
18+
</thead>
19+
<tbody>
20+
{% for swagger in urls %}
21+
<tr>
22+
<td><pre>{{ swagger.name }}</pre></td>
23+
<td><pre>{{ swagger.url }}</pre></td>
24+
</tr>
25+
{% endfor %}
26+
</tbody>
27+
</table>
28+
</details>
29+
30+
31+
<details>
32+
<summary><strong>Settings</strong> ({{ settings|length }})</summary>
33+
<table border="1">
34+
<thead>
35+
<tr><th>Key</th><th>Value</th></tr>
36+
</thead>
37+
<tbody>
38+
{% for key, value in settings.items() %}
39+
<tr>
40+
<td>{{ key }}</td>
41+
<td><pre>{{ value }}</pre></td>
42+
</tr>
43+
{% endfor %}
44+
</tbody>
45+
</table>
46+
</details>
47+
48+
49+
<details>
50+
<summary><strong>Session</strong> ({{ session|length if session else 0 }})</summary>
51+
{% if session %}
52+
<table border="1">
53+
<thead>
54+
<tr><th>Key</th><th>Value</th></tr>
55+
</thead>
56+
<tbody>
57+
{% for key, value in session.items() %}
58+
<tr>
59+
<td>{{ key }}</td>
60+
<td><pre>{{ value | tojson(indent=2) }}</pre></td>
61+
</tr>
62+
{% endfor %}
63+
</tbody>
64+
</table>
65+
{% else %}
66+
<p><em>Session is empty.</em></p>
67+
{% endif %}
68+
</details>
69+
2470
</body>
2571
</html>

0 commit comments

Comments
 (0)