mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-08-26 12:46:08 +00:00
zoph: Fix cases when CLI user is set to "autodetect"
Closes: #2538 Tests: - Without the patch, set the Zoph CLI User to "autodetect" and notice the failure to load Zoph page. - With the patch, set user to "autodetect" and access the app page. It is updated to the first admin user in Zoph DB. - Try with updating Zoph configuration. - Try with re-running Zoph setup. Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org> Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
This commit is contained in:
parent
5758bdba2a
commit
ced83a31e9
17
plinth/db/mariadb.py
Normal file
17
plinth/db/mariadb.py
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
"""Utilities to help with MariaDB/MySQL databases.
|
||||||
|
|
||||||
|
Uses utilities from 'mysql-client' package such as 'mysql' and 'mysqldump'.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
|
||||||
|
def run_query(database_name: str, query: str) -> subprocess.CompletedProcess:
|
||||||
|
"""Run a database query using 'root' user.
|
||||||
|
|
||||||
|
Does not ensure that the database server is running.
|
||||||
|
"""
|
||||||
|
return subprocess.run(
|
||||||
|
['mysql', '--user=root', '--database', database_name],
|
||||||
|
input=query.encode('utf-8'), check=True)
|
||||||
@ -9,6 +9,7 @@ import subprocess
|
|||||||
|
|
||||||
from plinth import action_utils
|
from plinth import action_utils
|
||||||
from plinth.actions import privileged
|
from plinth.actions import privileged
|
||||||
|
from plinth.db import mariadb
|
||||||
|
|
||||||
APACHE_CONF = '/etc/apache2/conf-available/zoph.conf'
|
APACHE_CONF = '/etc/apache2/conf-available/zoph.conf'
|
||||||
DB_CONF = pathlib.Path('/etc/zoph.ini')
|
DB_CONF = pathlib.Path('/etc/zoph.ini')
|
||||||
@ -31,8 +32,17 @@ def pre_install():
|
|||||||
def get_configuration() -> dict[str, str]:
|
def get_configuration() -> dict[str, str]:
|
||||||
"""Return the current configuration."""
|
"""Return the current configuration."""
|
||||||
configuration = {}
|
configuration = {}
|
||||||
process = subprocess.run(['zoph', '--dump-config'], stdout=subprocess.PIPE,
|
try:
|
||||||
check=True)
|
process = subprocess.run(['zoph', '--dump-config'],
|
||||||
|
stdout=subprocess.PIPE, check=True)
|
||||||
|
except subprocess.CalledProcessError as exception:
|
||||||
|
if exception.returncode != 96:
|
||||||
|
raise
|
||||||
|
|
||||||
|
_zoph_setup_cli_user()
|
||||||
|
process = subprocess.run(['zoph', '--dump-config'],
|
||||||
|
stdout=subprocess.PIPE, check=True)
|
||||||
|
|
||||||
for line in process.stdout.decode().splitlines():
|
for line in process.stdout.decode().splitlines():
|
||||||
name, value = line.partition(':')[::2]
|
name, value = line.partition(':')[::2]
|
||||||
configuration[name.strip()] = value[1:]
|
configuration[name.strip()] = value[1:]
|
||||||
@ -40,9 +50,38 @@ def get_configuration() -> dict[str, str]:
|
|||||||
return configuration
|
return configuration
|
||||||
|
|
||||||
|
|
||||||
|
def _zoph_setup_cli_user() -> None:
|
||||||
|
"""Ensure that Zoph cli user is not set to 'autodetect'.
|
||||||
|
|
||||||
|
When set to 'autodetect', all command line commands will fail unless a user
|
||||||
|
name 'root' exists in zoph database and is an admin user.
|
||||||
|
"""
|
||||||
|
query = '''
|
||||||
|
UPDATE
|
||||||
|
zoph_conf
|
||||||
|
SET
|
||||||
|
value=(
|
||||||
|
SELECT user_id
|
||||||
|
FROM zoph_users
|
||||||
|
WHERE user_class="0"
|
||||||
|
ORDER BY user_id
|
||||||
|
LIMIT 1)
|
||||||
|
WHERE
|
||||||
|
conf_id='interface.user.cli';'''
|
||||||
|
database_name = _get_db_config()['db_name']
|
||||||
|
mariadb.run_query(database_name, query)
|
||||||
|
|
||||||
|
|
||||||
def _zoph_configure(key, value):
|
def _zoph_configure(key, value):
|
||||||
"""Set a configure value in Zoph."""
|
"""Set a configure value in Zoph."""
|
||||||
subprocess.run(['zoph', '--config', key, value], check=True)
|
try:
|
||||||
|
subprocess.run(['zoph', '--config', key, value], check=True)
|
||||||
|
except subprocess.CalledProcessError as exception:
|
||||||
|
if exception.returncode != 96:
|
||||||
|
raise
|
||||||
|
|
||||||
|
_zoph_setup_cli_user()
|
||||||
|
subprocess.run(['zoph', '--config', key, value], check=True)
|
||||||
|
|
||||||
|
|
||||||
@privileged
|
@privileged
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user