mirror of
https://github.com/mail-in-a-box/mailinabox.git
synced 2025-04-04 00:17:06 +00:00
64 lines
1.9 KiB
Python
64 lines
1.9 KiB
Python
|
|
#
|
|
# This is a web_update management hook for the remote-nextcloud setup
|
|
# mod.
|
|
#
|
|
# When management/web_update.py creates a new nginx configuration file
|
|
# "local.conf", this mod will ensure that .well-known/caldav and
|
|
# .well-known/carddav urls are redirected to the remote nextcloud.
|
|
#
|
|
# The hook is enabled by placing the file in directory
|
|
# LOCAL_MODS_DIR/managment_hooks_d.
|
|
#
|
|
|
|
import os
|
|
import logging
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
|
|
def do_hook(hook_name, hook_data, mods_env):
|
|
if hook_name != 'web_update':
|
|
# we only care about hooking web_update
|
|
log.debug('hook - ignoring %s' % hook_name)
|
|
return False
|
|
|
|
if 'NC_HOST' not in mods_env or mods_env['NC_HOST'].strip() == '':
|
|
# not configured for a remote nextcloud
|
|
log.debug('hook - not configured for a remote nextcloud')
|
|
return False
|
|
|
|
# get the remote nextcloud url and ensure no tailing /
|
|
nc_url = "%s://%s:%s%s" % (
|
|
mods_env['NC_PROTO'],
|
|
mods_env['NC_HOST'],
|
|
mods_env['NC_PORT'],
|
|
mods_env['NC_PREFIX'][0:-1] if mods_env['NC_PREFIX'].endswith('/') else mods_env['NC_PREFIX']
|
|
)
|
|
|
|
#
|
|
# modify nginx_conf
|
|
#
|
|
def do_replace(find_str, replace_with):
|
|
if hook_data['nginx_conf'].find(find_str) == -1:
|
|
log.warning('remote-nextcloud hook: string "%s" not found in proposed nginx_conf' % (find_str))
|
|
return False
|
|
hook_data['nginx_conf'] = hook_data['nginx_conf'].replace(
|
|
find_str,
|
|
replace_with
|
|
)
|
|
return True
|
|
|
|
# 1. change the .well-known/(caldav|carddav) redirects
|
|
do_replace(
|
|
'/cloud/remote.php/dav/',
|
|
'%s/remote.php/dav/' % nc_url
|
|
)
|
|
|
|
# 2. redirect /cloud to the remote nextcloud
|
|
do_replace(
|
|
'rewrite ^/cloud/$ /cloud/index.php;',
|
|
'rewrite ^/cloud/(.*)$ %s/$1 redirect;' % nc_url
|
|
)
|
|
|