miniflux: Fix regression in creating admin user

- Fix typo in private method
- Fix mypy errors
- Fix error message formatting

Signed-off-by: Joseph Nuthalapati <njoseph@riseup.net>
This commit is contained in:
Joseph Nuthalapati 2024-07-24 14:29:49 +05:30
parent 3501b1f1a8
commit 2f3e586eb6
No known key found for this signature in database
GPG Key ID: 5398F00A2FA43C35
2 changed files with 26 additions and 14 deletions

View File

@ -5,7 +5,7 @@ import json
import os import os
import pathlib import pathlib
import subprocess import subprocess
from typing import Dict from typing import Any, Dict, Tuple
from urllib.parse import urlparse from urllib.parse import urlparse
import pexpect import pexpect
@ -54,11 +54,12 @@ def pre_setup():
vars_file.write_text(_dict_to_env_file(new_settings)) vars_file.write_text(_dict_to_env_file(new_settings))
def _run_miniflux_intreractively(command: str, username: str, def _run_miniflux_interactively(command: str, username: str,
password: str) -> str: password: str) -> Tuple[Any, Any]:
"""Fill interactive terminal prompt for username and password.""" """Fill interactive terminal prompt for username and password."""
args = ['-c', '/etc/miniflux/miniflux.conf', command] args = ['-c', '/etc/miniflux/miniflux.conf', command]
child = pexpect.spawn('miniflux', args, env={'LOG_FORMAT': 'json'}) os.environ['LOG_FORMAT'] = 'json'
child = pexpect.spawn('miniflux', args, env=os.environ)
# The CLI is in English only. # The CLI is in English only.
child.expect('Enter Username: ') child.expect('Enter Username: ')
@ -71,13 +72,7 @@ def _run_miniflux_intreractively(command: str, username: str,
status = child.before.decode() status = child.before.decode()
child.close() child.close()
if not os.WIFEXITED(child.exitstatus): return (status, child.exitstatus)
try:
status = json.loads(status)['msg']
except (KeyError, json.JSONDecodeError):
pass
raise Exception(status)
@privileged @privileged
@ -86,7 +81,16 @@ def create_admin_user(username: str, password: str):
Raise exception if a user with the name already exists or otherwise fails. Raise exception if a user with the name already exists or otherwise fails.
""" """
_run_miniflux_intreractively('--create-admin', username, password) status, _ = _run_miniflux_interactively('--create-admin', username,
password)
try:
log = json.loads(status)
except (KeyError, json.JSONDecodeError):
pass
# user_id is allocated only when a new user is created successfully.
if not log.get('user_id'):
raise Exception(log['msg'])
@privileged @privileged
@ -95,7 +99,15 @@ def reset_user_password(username: str, password: str):
Raise exception if the user does not exist or otherwise fails. Raise exception if the user does not exist or otherwise fails.
""" """
_run_miniflux_intreractively('--reset-password', username, password) status, exit_code = _run_miniflux_interactively('--reset-password',
username, password)
if not os.WIFEXITED(exit_code):
try:
status_message = json.loads(status)['msg']
except (KeyError, json.JSONDecodeError):
pass
raise Exception(status)
@privileged @privileged

View File

@ -83,6 +83,6 @@ class ResetUserPasswordView(SuccessMessageMixin, FormView):
messages.error( messages.error(
self.request, self.request,
_('An error occurred during password reset: {error}.').format( _('An error occurred during password reset: {error}.').format(
error=error)) error=str(error).strip()))
return super().form_valid(form) return super().form_valid(form)