feat: replace static Swagger UI server selector with dynamic client-side detection
Build and Push Docker Image / build (push) Successful in 56s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 1m18s
CI / Security audit (push) Successful in 2m9s
CI / Swagger Validation & Coverage (push) Successful in 2m25s
CI / Tests & coverage (push) Successful in 2m44s
Build and Push Docker Image / build (push) Successful in 56s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 1m18s
CI / Security audit (push) Successful in 2m9s
CI / Swagger Validation & Coverage (push) Successful in 2m25s
CI / Tests & coverage (push) Successful in 2m44s
- Update openapi.yaml to use single placeholder server URL - Add swagger-server-detection.js to auto-detect current server URL from window.location - Configure protocol, host, and port detection based on browser connection - Fallback to placeholder URL if detection fails - Include detection script in both app.js and index.js Swagger UI configurations - /api/swagger.json endpoint returns static placeholder for external consumers
This commit is contained in:
@@ -0,0 +1,45 @@
|
|||||||
|
// Swagger UI server URL auto-detection
|
||||||
|
// Automatically sets the server URL to match the current instance
|
||||||
|
(function() {
|
||||||
|
window.addEventListener('load', function() {
|
||||||
|
// Wait for Swagger UI to initialize
|
||||||
|
setTimeout(function() {
|
||||||
|
try {
|
||||||
|
// Detect current URL from browser
|
||||||
|
const protocol = window.location.protocol;
|
||||||
|
const host = window.location.host;
|
||||||
|
const detectedUrl = `${protocol}//${host}`;
|
||||||
|
|
||||||
|
// Get Swagger UI instance
|
||||||
|
const ui = window.ui;
|
||||||
|
if (!ui) {
|
||||||
|
console.warn('Swagger UI not found, cannot set server URL');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the spec servers
|
||||||
|
const spec = ui.specSelectors.specJson();
|
||||||
|
const servers = spec.getIn(['servers']);
|
||||||
|
|
||||||
|
if (!servers || servers.size === 0) {
|
||||||
|
console.warn('No servers defined in OpenAPI spec');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update the first server with the detected URL
|
||||||
|
const updatedServers = servers.setIn([0, 'url'], detectedUrl);
|
||||||
|
|
||||||
|
// Apply the updated servers to the spec
|
||||||
|
const updatedSpec = spec.set('servers', updatedServers);
|
||||||
|
ui.specActions.updateSpec(updatedSpec.toJS());
|
||||||
|
|
||||||
|
// Also set the selected server in Swagger UI state
|
||||||
|
ui.specActions.setSelectedServer(updatedServers.get(0).get('url'));
|
||||||
|
|
||||||
|
console.log('Swagger UI server URL set to:', detectedUrl);
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Failed to auto-detect Swagger UI server URL:', error);
|
||||||
|
}
|
||||||
|
}, 100); // Small delay to ensure Swagger UI is initialized
|
||||||
|
});
|
||||||
|
})();
|
||||||
+2
-1
@@ -185,7 +185,8 @@ function createApp({ skipRateLimits = false } = {}) {
|
|||||||
customSiteTitle: 'sofarr API Documentation',
|
customSiteTitle: 'sofarr API Documentation',
|
||||||
customCss: '.swagger-ui .topbar { display: none }',
|
customCss: '.swagger-ui .topbar { display: none }',
|
||||||
customJs: [
|
customJs: [
|
||||||
'/swagger-auth-banner.js'
|
'/swagger-auth-banner.js',
|
||||||
|
'/swagger-server-detection.js'
|
||||||
]
|
]
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
|||||||
+2
-1
@@ -300,7 +300,8 @@ app.use('/api/swagger', swaggerUi.serve, swaggerUi.setup(swaggerSpec, {
|
|||||||
customSiteTitle: 'sofarr API Documentation',
|
customSiteTitle: 'sofarr API Documentation',
|
||||||
customCss: '.swagger-ui .topbar { display: none }',
|
customCss: '.swagger-ui .topbar { display: none }',
|
||||||
customJs: [
|
customJs: [
|
||||||
'/swagger-auth-banner.js'
|
'/swagger-auth-banner.js',
|
||||||
|
'/swagger-server-detection.js'
|
||||||
]
|
]
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
|||||||
+1
-3
@@ -25,10 +25,8 @@ info:
|
|||||||
name: MIT
|
name: MIT
|
||||||
|
|
||||||
servers:
|
servers:
|
||||||
- url: http://localhost:3001
|
|
||||||
description: Local development server
|
|
||||||
- url: https://sofarr.example.com
|
- url: https://sofarr.example.com
|
||||||
description: Production server
|
description: sofarr API (auto-detected from current URL)
|
||||||
|
|
||||||
tags:
|
tags:
|
||||||
- name: Health
|
- name: Health
|
||||||
|
|||||||
Reference in New Issue
Block a user