mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-01-28 08:03:36 +00:00
Closes: #2050. Current implementation of Zoph does not work with version 0.9.9 in Buster. As an easy hack to make the app only available in Bullseye, php7.4 dependency has been added. After making the last release for Buster, this can be removed to allow compatibility with newer versions of PHP that become available. An incomplete list of problems with current implementation with Buster: - zoph --get-config is unavailable. Can be circumvented by querying the DB directly. - zoph --dump-config is unavailable. Can be circumvented by querying the DB directly. - interface.user.remote and authentication based on REMOTE_USER are unavailable. The Apache configuration shipped by Debian package does not include FreedomBox related LDAP configuration. - interface.user.cli defaults to "0" instead of "1". This cases running zoph from command line. This can be circumvented by setting this configuration value to "1" via DB interaction. Tests: - On stable container, zoph is not available for installation. - On testing container, zoph can be installed, setup and used. Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org> Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
135 lines
4.8 KiB
Python
135 lines
4.8 KiB
Python
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
"""
|
|
FreedomBox app to configure Zoph web application
|
|
"""
|
|
|
|
import json
|
|
import logging
|
|
|
|
from django.utils.translation import ugettext_lazy as _
|
|
|
|
from plinth import actions
|
|
from plinth import app as app_module
|
|
from plinth import cfg, 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.utils import format_lazy
|
|
|
|
from . import manifest
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
version = 1
|
|
|
|
# XXX: This implementation of Zoph does not work with version 0.9.9 in Buster.
|
|
# As an easy hack to make the app only available in Bullseye, php7.4 dependency
|
|
# has been added. After making the last release for Buster, this can be removed
|
|
# to allow compatibility with newer versions of PHP that become available.
|
|
managed_packages = ['zoph', 'php7.4']
|
|
|
|
_description = [
|
|
format_lazy(
|
|
_('Zoph manages your photo collection. Photos are stored on your '
|
|
'{box_name}, under your control. Instead of focusing on galleries '
|
|
'for public display, Zoph focuses on managing them for your own '
|
|
'use, organizing them by who took them, where they were taken, '
|
|
'and who is in them. Photos can be linked to multiple hierarchical '
|
|
'albums and categories. It is easy to find all photos containing a '
|
|
'person, or photos taken on a date, or photos taken at a location '
|
|
'using search, map and calendar views. Individual photos can be '
|
|
'shared with others by sending a direct link.'),
|
|
box_name=_(cfg.box_name)),
|
|
format_lazy(
|
|
_('The {box_name} user who setup Zoph will also become the '
|
|
'administrator in Zoph. For additional users, accounts must be '
|
|
'created both in {box_name} and in Zoph with the same user name.'),
|
|
box_name=_(cfg.box_name))
|
|
]
|
|
|
|
app = None
|
|
|
|
|
|
class ZophApp(app_module.App):
|
|
"""FreedomBox app for Zoph."""
|
|
|
|
app_id = 'zoph'
|
|
|
|
def __init__(self):
|
|
"""Create components for the app."""
|
|
super().__init__()
|
|
info = app_module.Info(app_id=self.app_id, version=version,
|
|
name=_('Zoph'), icon_filename='zoph',
|
|
short_description=_('Photo Organizer'),
|
|
description=_description, manual_page='Zoph',
|
|
clients=manifest.clients)
|
|
self.add(info)
|
|
|
|
menu_item = menu.Menu('menu-zoph', info.name, info.short_description,
|
|
info.icon_filename, 'zoph:index',
|
|
parent_url_name='apps')
|
|
self.add(menu_item)
|
|
|
|
shortcut = frontpage.Shortcut('shortcut-zoph', info.name,
|
|
short_description=info.short_description,
|
|
icon=info.icon_filename, url='/zoph/',
|
|
clients=info.clients,
|
|
login_required=True)
|
|
self.add(shortcut)
|
|
|
|
firewall = Firewall('firewall-zoph', info.name,
|
|
ports=['http', 'https'], is_external=True)
|
|
self.add(firewall)
|
|
|
|
webserver = Webserver('webserver-zoph', 'zoph',
|
|
urls=['https://{host}/zoph/'])
|
|
self.add(webserver)
|
|
|
|
backup_restore = ZophBackupRestore('backup-restore-zoph',
|
|
**manifest.backup)
|
|
self.add(backup_restore)
|
|
|
|
|
|
def setup(helper, old_version=None):
|
|
"""Install and configure the module."""
|
|
helper.call('pre', actions.superuser_run, 'zoph', ['pre-install'])
|
|
helper.install(managed_packages)
|
|
helper.call('post', actions.superuser_run, 'zoph', ['setup'])
|
|
helper.call('post', app.enable)
|
|
|
|
|
|
def set_configuration(admin_user=None, enable_osm=None):
|
|
"""Configure Zoph."""
|
|
args = []
|
|
if admin_user:
|
|
args += ['--admin-user', admin_user]
|
|
|
|
if enable_osm is not None:
|
|
args += ['--enable-osm', str(enable_osm)]
|
|
|
|
actions.superuser_run('zoph', ['set-configuration'] + args)
|
|
|
|
|
|
def is_configured():
|
|
"""Return whether the Zoph app is configured."""
|
|
output = actions.superuser_run('zoph', ['is-configured'])
|
|
return output.strip() == 'true'
|
|
|
|
|
|
def get_configuration():
|
|
"""Return full configuration of Zoph."""
|
|
configuration = actions.superuser_run('zoph', ['get-configuration'])
|
|
return json.loads(configuration)
|
|
|
|
|
|
class ZophBackupRestore(BackupRestore):
|
|
"""Component to backup/restore Zoph database"""
|
|
|
|
def backup_pre(self, packet):
|
|
"""Save database contents."""
|
|
actions.superuser_run('zoph', ['dump-database'])
|
|
|
|
def restore_post(self, packet):
|
|
"""Restore database contents."""
|
|
actions.superuser_run('zoph', ['restore-database'])
|