diff --git a/src/yunohost/app.py b/src/yunohost/app.py index 153a13575..33a8d7061 100644 --- a/src/yunohost/app.py +++ b/src/yunohost/app.py @@ -796,8 +796,10 @@ def app_makedefault(auth, app, domain=None): from yunohost.domain import domain_list app_settings = _get_app_settings(app) - app_domain = app_settings['domain'] - app_path = app_settings['path'] + if app_settings.get('domain') is not None: + app_domain = app_settings.get('domain') + else: + raise MoulinetteError(errno.EINVAL, m18n.n('app_no_domain')) if domain is None: domain = app_domain @@ -808,31 +810,72 @@ def app_makedefault(auth, app, domain=None): raise MoulinetteError(errno.EEXIST, m18n.n('app_location_already_used')) - try: - with open('/etc/ssowat/conf.json.persistent') as json_conf: - ssowat_conf = json.loads(str(json_conf.read())) - except ValueError as e: - raise MoulinetteError(errno.EINVAL, - m18n.n('ssowat_persistent_conf_read_error', error=e.strerror)) - except IOError: - ssowat_conf = {} + app_setting(app, 'is_domain_default', value='Yes', delete=False) - if 'redirected_urls' not in ssowat_conf: - ssowat_conf['redirected_urls'] = {} - - ssowat_conf['redirected_urls'][domain +'/'] = app_domain + app_path - - try: - with open('/etc/ssowat/conf.json.persistent', 'w+') as f: - json.dump(ssowat_conf, f, sort_keys=True, indent=4) - except IOError as e: - raise MoulinetteError(errno.EPERM, - m18n.n('ssowat_persistent_conf_write_error', error=e.strerror)) + app_ssowatconf(auth) - os.system('chmod 644 /etc/ssowat/conf.json.persistent') +def app_removedefault(auth, app, domain=None): + """ + Remove the default redirection to an app on a domain - logger.success(m18n.n('ssowat_conf_updated')) + Keyword argument: + app + domain + + """ + from yunohost.domain import domain_list + + app_settings = _get_app_settings(app) + if app_settings.get('domain') is not None: + app_domain = app_settings.get('domain') + else: + raise MoulinetteError(errno.EINVAL, m18n.n('app_no_domain')) + + if domain is None: + domain = app_domain + elif domain not in domain_list(auth)['domains']: + raise MoulinetteError(errno.EINVAL, m18n.n('domain_unknown')) + + if '/' in app_map(raw=True)[domain]: + raise MoulinetteError(errno.EEXIST, + m18n.n('app_location_already_used')) + + app_setting(app, 'is_domain_default', value=None, delete=True) + + app_ssowatconf(auth) + + +def app_checkdefault(auth, app, domain=None): + """ + Check if an app is the default redirecton of a domain + + Keyword argument: + app + domain + + """ + from yunohost.domain import domain_list + + app_settings = _get_app_settings(app) + if app_settings.get('domain') is not None: + app_domain = app_settings.get('domain') + else: + raise MoulinetteError(errno.EINVAL, m18n.n('app_no_domain')) + + if domain is None: + domain = app_domain + elif domain not in domain_list(auth)['domains']: + raise MoulinetteError(errno.EINVAL, m18n.n('domain_unknown')) + + if '/' in app_map(raw=True)[domain]: + raise MoulinetteError(errno.EEXIST, + m18n.n('app_location_already_used')) + + if 'is_domain_default' in app_settings: + return True + else: + return False def app_setting(app, key, value=None, delete=False): @@ -1030,6 +1073,9 @@ def app_ssowatconf(auth): redirected_urls.update(app_settings['redirected_urls']) if 'redirected_regex' in app_settings: redirected_regex.update(app_settings['redirected_regex']) + if 'is_domain_default' in app_settings: + redirected_urls.update({ app_settings['domain']: app_settings['domain'] + app_settings['path']}) + for domain in domains: skipped_urls.extend([domain + '/yunohost/admin', domain + '/yunohost/api'])