mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-01-28 08:03:36 +00:00
When this option is enabled, it would make the interface easy to work with. This is likely what most users would want. Don't break things for users who have already installed roundcube and ensure that local only is disable for them. Tests: - Install roundcube without the patch. Disable the app. Apply patch. Restart service. Notice that roundcube is not re-enabled. - Install roundcube without the patch. Apply patch. Restart service. Notice that roundcube configuration /etc/roundcube/config.inc.php file has been updated and include_once() at the end has been added. The file /etc/roundcube/freedombox-config.php has been added. Local only option is disabled. - Install roundcube freshly with the patch. Local only option is enabled. Open interface. Notice that server option is not presented. - Disable local only option and notice that server field is shown in the interface. Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org> [jvalleroy: Fix comment] Signed-off-by: James Valleroy <jvalleroy@mailbox.org> Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
130 lines
4.8 KiB
Python
130 lines
4.8 KiB
Python
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
"""
|
|
FreedomBox app to configure Roundcube.
|
|
"""
|
|
|
|
import json
|
|
|
|
from django.utils.translation import gettext_lazy as _
|
|
|
|
from plinth import actions
|
|
from plinth import app as app_module
|
|
from plinth import frontpage, menu
|
|
from plinth.modules.apache.components import Webserver
|
|
from plinth.modules.backups.components import BackupRestore
|
|
from plinth.modules.firewall.components import Firewall
|
|
from plinth.package import Packages
|
|
|
|
from . import manifest
|
|
|
|
_description = [
|
|
_('Roundcube webmail is a browser-based multilingual IMAP '
|
|
'client with an application-like user interface. It provides '
|
|
'full functionality you expect from an email client, including '
|
|
'MIME support, address book, folder manipulation, message '
|
|
'searching and spell checking.'),
|
|
_('You can use it by providing the username and password of the email '
|
|
'account you wish to access followed by the domain name of the '
|
|
'IMAP server for your email provider, like <code>imap.example.com'
|
|
'</code>. For IMAP over SSL (recommended), fill the server field '
|
|
'like <code>imaps://imap.example.com</code>.'),
|
|
_('For Gmail, username will be your Gmail address, password will be '
|
|
'your Google account password and server will be '
|
|
'<code>imaps://imap.gmail.com</code>. Note that you will also need '
|
|
'to enable "Less secure apps" in your Google account settings '
|
|
'(<a href="https://www.google.com/settings/security/lesssecureapps"'
|
|
'>https://www.google.com/settings/security/lesssecureapps</a>).'),
|
|
]
|
|
|
|
app = None
|
|
|
|
|
|
class RoundcubeApp(app_module.App):
|
|
"""FreedomBox app for Roundcube."""
|
|
|
|
app_id = 'roundcube'
|
|
|
|
_version = 2
|
|
|
|
def __init__(self):
|
|
"""Create components for the app."""
|
|
super().__init__()
|
|
|
|
info = app_module.Info(app_id=self.app_id, version=self._version,
|
|
name=_('Roundcube'), icon_filename='roundcube',
|
|
short_description=_('Email Client'),
|
|
description=_description,
|
|
manual_page='Roundcube',
|
|
clients=manifest.clients)
|
|
self.add(info)
|
|
|
|
menu_item = menu.Menu('menu-roundcube', info.name,
|
|
info.short_description, info.icon_filename,
|
|
'roundcube:index', parent_url_name='apps')
|
|
self.add(menu_item)
|
|
|
|
shortcut = frontpage.Shortcut('shortcut-roundcube', info.name,
|
|
short_description=info.short_description,
|
|
icon=info.icon_filename,
|
|
url='/roundcube/', clients=info.clients,
|
|
login_required=True)
|
|
self.add(shortcut)
|
|
|
|
packages = Packages(
|
|
'packages-roundcube',
|
|
['sqlite3', 'roundcube', 'roundcube-core', 'roundcube-sqlite3'])
|
|
self.add(packages)
|
|
|
|
firewall = Firewall('firewall-roundcube', info.name,
|
|
ports=['http', 'https'], is_external=True)
|
|
self.add(firewall)
|
|
|
|
webserver = Webserver('webserver-roundcube', 'roundcube')
|
|
self.add(webserver)
|
|
|
|
webserver = Webserver('webserver-roundcube-freedombox',
|
|
'roundcube-freedombox',
|
|
urls=['https://{host}/roundcube'])
|
|
self.add(webserver)
|
|
|
|
backup_restore = BackupRestore('backup-restore-roundcube',
|
|
**manifest.backup)
|
|
self.add(backup_restore)
|
|
|
|
|
|
def setup(helper, old_version=None):
|
|
"""Install and configure the module."""
|
|
helper.call('pre', actions.superuser_run, 'roundcube', ['pre-install'])
|
|
app.setup(old_version)
|
|
helper.call('post', actions.superuser_run, 'roundcube', ['setup'])
|
|
if old_version == 0:
|
|
set_config(local_only=True)
|
|
helper.call('post', app.enable)
|
|
|
|
|
|
def force_upgrade(helper, packages):
|
|
"""Force upgrade package to resolve conffile prompts."""
|
|
if 'roundcube-core' not in packages:
|
|
return False
|
|
|
|
# Allow roundcube any version to upgrade to any version. This is okay
|
|
# because there will no longer be conflicting file changes.
|
|
helper.install(['roundcube-core'], force_configuration='new')
|
|
if app.get_component('webserver-roundcube').is_enabled():
|
|
app.get_component('webserver-roundcube-freedombox').enable()
|
|
|
|
return True
|
|
|
|
|
|
def get_config():
|
|
"""Return Rouncube configuration."""
|
|
value = actions.superuser_run('roundcube', ['get-config'])
|
|
return json.loads(value)
|
|
|
|
|
|
def set_config(local_only):
|
|
"""Set whether only local server should be allowed."""
|
|
actions.superuser_run('roundcube',
|
|
['set-config', '--local-only',
|
|
str(local_only)])
|