Add support for setting a base url for the server endpoint
This commit is contained in:
parent
0bd1cab9e2
commit
f4fd1245dc
5 changed files with 341 additions and 296 deletions
|
|
@ -63,6 +63,7 @@ environment:
|
|||
- FLASK_ENV=production # Flask environment
|
||||
- PYTHONPATH=/app # Python path
|
||||
- SOULSYNC_CONFIG_PATH=/app/config/config.json # Config file location
|
||||
- SOULSYNC_BASE_URL=/ # Configure the endpoint base_url, useful for reverse proxies
|
||||
- TZ=America/New_York # Timezone
|
||||
```
|
||||
|
||||
|
|
@ -268,4 +269,4 @@ services:
|
|||
- [ ] Configure firewall rules
|
||||
- [ ] Set up backup strategy
|
||||
- [ ] Test health checks
|
||||
- [ ] Verify external service connectivity
|
||||
- [ ] Verify external service connectivity
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -65,6 +65,7 @@ if os.path.exists(config_path):
|
|||
print(f"🔴 FAILED to re-initialize config_manager: {e}")
|
||||
else:
|
||||
print(f"🔴 WARNING: config.json not found at {config_path}. Using default settings.")
|
||||
|
||||
# Correctly point to the 'webui' directory for templates and static files
|
||||
app = Flask(
|
||||
__name__,
|
||||
|
|
@ -72,6 +73,41 @@ app = Flask(
|
|||
static_folder=os.path.join(base_dir, 'webui', 'static')
|
||||
)
|
||||
|
||||
#
|
||||
# Hack-ish support for custom base urls
|
||||
#
|
||||
# This is generally supported out of the box by proper werkzeug configuration or more production ready WSGI servers (gunicorn)
|
||||
# where the Flask app needs to be configured and returned as function or attributem but not 'run'.
|
||||
# (Run is handled by the WSGI server)
|
||||
#
|
||||
class PrefixMiddleware(object):
|
||||
def __init__(self, app, prefix=''):
|
||||
self.app = app
|
||||
self.prefix = prefix
|
||||
|
||||
def __call__(self, environ, start_response):
|
||||
|
||||
if environ['PATH_INFO'].startswith(self.prefix):
|
||||
environ['PATH_INFO'] = environ['PATH_INFO'][len(self.prefix):]
|
||||
environ['SCRIPT_NAME'] = self.prefix
|
||||
return self.app(environ, start_response)
|
||||
else:
|
||||
start_response('404', [('Content-Type', 'text/plain')])
|
||||
return ["This url does not belong to the app.".encode()]
|
||||
|
||||
base_url = '/'
|
||||
if 'SOULSYNC_BASE_URL' in os.environ:
|
||||
base_url = os.environ['SOULSYNC_BASE_URL']
|
||||
|
||||
if base_url != '/': # the middleware seems to misbehave if the base_url is the default path
|
||||
app.wsgi_app = PrefixMiddleware(app.wsgi_app, prefix=base_url)
|
||||
|
||||
# Inject the base_url into the context so it can be used in the template rendering
|
||||
@app.context_processor
|
||||
def inject_base_url():
|
||||
return dict(base_url=base_url)
|
||||
|
||||
|
||||
# --- Docker Helper Functions ---
|
||||
def docker_resolve_path(path_str):
|
||||
"""
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@
|
|||
<meta charset="UTF-8">
|
||||
<title>SoulSync - Music Sync & Manager</title>
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
|
||||
<!-- APP_BASE_URL obtained from server, used in script.js to know the base server path -->
|
||||
<script>var APP_BASE_URL = "{{ base_url }}"; console.log('Soulsync base url:', APP_BASE_URL);</script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="main-container">
|
||||
|
|
@ -3100,4 +3102,4 @@
|
|||
|
||||
<script src="{{ url_for('static', filename='script.js') }}"></script>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue