malcontent-client: Print usernames rather than user IDs in output
This makes the output a little easier to interpret. Signed-off-by: Philip Withnall <withnall@endlessm.com>
This commit is contained in:
parent
305129589e
commit
b2ffb160fc
|
@ -88,26 +88,31 @@ def __set_app_filter_or_error(user_id, app_filter, interactive):
|
||||||
raise SystemExit(EXIT_PERMISSION_DENIED)
|
raise SystemExit(EXIT_PERMISSION_DENIED)
|
||||||
|
|
||||||
|
|
||||||
def __lookup_user_id(user):
|
def __lookup_user_id(user_id_or_username):
|
||||||
"""Convert a command-line specified username or ID into a user ID. If
|
"""Convert a command-line specified username or ID into a
|
||||||
`user` is empty, use the current user ID.
|
(user ID, username) tuple, looking up the component which isn’t specified.
|
||||||
|
If `user_id_or_username` is empty, use the current user ID.
|
||||||
|
|
||||||
Raise KeyError if lookup fails."""
|
Raise KeyError if lookup fails."""
|
||||||
if user == '':
|
if user_id_or_username == '':
|
||||||
return os.getuid()
|
user_id = os.getuid()
|
||||||
elif user.isdigit():
|
return (user_id, pwd.getpwuid(user_id).pw_name)
|
||||||
return int(user)
|
elif user_id_or_username.isdigit():
|
||||||
|
user_id = int(user_id_or_username)
|
||||||
|
return (user_id, pwd.getpwuid(user_id).pw_name)
|
||||||
else:
|
else:
|
||||||
return pwd.getpwnam(user).pw_uid
|
username = user_id_or_username
|
||||||
|
return (pwd.getpwnam(username).pw_uid, username)
|
||||||
|
|
||||||
|
|
||||||
def __lookup_user_id_or_error(user):
|
def __lookup_user_id_or_error(user_id_or_username):
|
||||||
"""Wrapper around __lookup_user_id() which prints an error and raises
|
"""Wrapper around __lookup_user_id() which prints an error and raises
|
||||||
SystemExit, rather than an internal exception."""
|
SystemExit, rather than an internal exception."""
|
||||||
try:
|
try:
|
||||||
return __lookup_user_id(user)
|
return __lookup_user_id(user_id_or_username)
|
||||||
except KeyError:
|
except KeyError:
|
||||||
print('Error getting ID for username {}'.format(user), file=sys.stderr)
|
print('Error getting ID for username {}'.format(user_id_or_username),
|
||||||
|
file=sys.stderr)
|
||||||
raise SystemExit(EXIT_INVALID_OPTION)
|
raise SystemExit(EXIT_INVALID_OPTION)
|
||||||
|
|
||||||
|
|
||||||
|
@ -140,10 +145,10 @@ def __oars_value_from_string(value_str):
|
||||||
|
|
||||||
def command_get_app_filter(user, quiet=False, interactive=True):
|
def command_get_app_filter(user, quiet=False, interactive=True):
|
||||||
"""Get the app filter for the given user."""
|
"""Get the app filter for the given user."""
|
||||||
user_id = __lookup_user_id_or_error(user)
|
(user_id, username) = __lookup_user_id_or_error(user)
|
||||||
app_filter = __get_app_filter_or_error(user_id, interactive)
|
app_filter = __get_app_filter_or_error(user_id, interactive)
|
||||||
|
|
||||||
print('App filter for user {} retrieved:'.format(user_id))
|
print('App filter for user {} retrieved:'.format(username))
|
||||||
|
|
||||||
sections = app_filter.get_oars_sections()
|
sections = app_filter.get_oars_sections()
|
||||||
for section in sections:
|
for section in sections:
|
||||||
|
@ -166,9 +171,9 @@ def command_get_app_filter(user, quiet=False, interactive=True):
|
||||||
def command_monitor(user, quiet=False, interactive=True):
|
def command_monitor(user, quiet=False, interactive=True):
|
||||||
"""Monitor app filter changes for the given user."""
|
"""Monitor app filter changes for the given user."""
|
||||||
if user == '':
|
if user == '':
|
||||||
filter_user_id = 0
|
(filter_user_id, filter_username) = (0, '')
|
||||||
else:
|
else:
|
||||||
filter_user_id = __lookup_user_id_or_error(user)
|
(filter_user_id, filter_username) = __lookup_user_id_or_error(user)
|
||||||
apply_filter = (user != '')
|
apply_filter = (user != '')
|
||||||
|
|
||||||
def _on_app_filter_changed(manager, changed_user_id):
|
def _on_app_filter_changed(manager, changed_user_id):
|
||||||
|
@ -181,7 +186,7 @@ def command_monitor(user, quiet=False, interactive=True):
|
||||||
|
|
||||||
if apply_filter:
|
if apply_filter:
|
||||||
print('Monitoring app filter changes for '
|
print('Monitoring app filter changes for '
|
||||||
'user ID {}'.format(filter_user_id))
|
'user {}'.format(filter_username))
|
||||||
else:
|
else:
|
||||||
print('Monitoring app filter changes for all users')
|
print('Monitoring app filter changes for all users')
|
||||||
|
|
||||||
|
@ -216,7 +221,7 @@ def is_valid_content_type(arg):
|
||||||
def command_check_app_filter(user, arg, quiet=False, interactive=True):
|
def command_check_app_filter(user, arg, quiet=False, interactive=True):
|
||||||
"""Check the given path, content type or flatpak ref is runnable by the
|
"""Check the given path, content type or flatpak ref is runnable by the
|
||||||
given user, according to their app filter."""
|
given user, according to their app filter."""
|
||||||
user_id = __lookup_user_id_or_error(user)
|
(user_id, username) = __lookup_user_id_or_error(user)
|
||||||
app_filter = __get_app_filter_or_error(user_id, interactive)
|
app_filter = __get_app_filter_or_error(user_id, interactive)
|
||||||
|
|
||||||
is_maybe_flatpak_id = arg.startswith('app/') and arg.count('/') < 3
|
is_maybe_flatpak_id = arg.startswith('app/') and arg.count('/') < 3
|
||||||
|
@ -259,24 +264,24 @@ def command_check_app_filter(user, arg, quiet=False, interactive=True):
|
||||||
if is_allowed:
|
if is_allowed:
|
||||||
if not quiet:
|
if not quiet:
|
||||||
print('{} {} is allowed by app filter for user {}'.format(
|
print('{} {} is allowed by app filter for user {}'.format(
|
||||||
noun, arg, user_id))
|
noun, arg, username))
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
if not quiet:
|
if not quiet:
|
||||||
print('{} {} is not allowed by app filter for user {}'.format(
|
print('{} {} is not allowed by app filter for user {}'.format(
|
||||||
noun, arg, user_id))
|
noun, arg, username))
|
||||||
raise SystemExit(EXIT_PATH_NOT_ALLOWED)
|
raise SystemExit(EXIT_PATH_NOT_ALLOWED)
|
||||||
|
|
||||||
|
|
||||||
def command_oars_section(user, section, quiet=False, interactive=True):
|
def command_oars_section(user, section, quiet=False, interactive=True):
|
||||||
"""Get the value of the given OARS section for the given user, according
|
"""Get the value of the given OARS section for the given user, according
|
||||||
to their OARS filter."""
|
to their OARS filter."""
|
||||||
user_id = __lookup_user_id_or_error(user)
|
(user_id, username) = __lookup_user_id_or_error(user)
|
||||||
app_filter = __get_app_filter_or_error(user_id, interactive)
|
app_filter = __get_app_filter_or_error(user_id, interactive)
|
||||||
|
|
||||||
value = app_filter.get_oars_value(section)
|
value = app_filter.get_oars_value(section)
|
||||||
print('OARS section ‘{}’ for user {} has value ‘{}’'.format(
|
print('OARS section ‘{}’ for user {} has value ‘{}’'.format(
|
||||||
section, user_id, __oars_value_to_string(value)))
|
section, username, __oars_value_to_string(value)))
|
||||||
|
|
||||||
|
|
||||||
def command_set_app_filter(user, allow_user_installation=True,
|
def command_set_app_filter(user, allow_user_installation=True,
|
||||||
|
@ -284,7 +289,7 @@ def command_set_app_filter(user, allow_user_installation=True,
|
||||||
app_filter_args=None, quiet=False,
|
app_filter_args=None, quiet=False,
|
||||||
interactive=True):
|
interactive=True):
|
||||||
"""Set the app filter for the given user."""
|
"""Set the app filter for the given user."""
|
||||||
user_id = __lookup_user_id_or_error(user)
|
(user_id, username) = __lookup_user_id_or_error(user)
|
||||||
builder = Malcontent.AppFilterBuilder.new()
|
builder = Malcontent.AppFilterBuilder.new()
|
||||||
builder.set_allow_user_installation(allow_user_installation)
|
builder.set_allow_user_installation(allow_user_installation)
|
||||||
builder.set_allow_system_installation(allow_system_installation)
|
builder.set_allow_system_installation(allow_system_installation)
|
||||||
|
@ -328,7 +333,7 @@ def command_set_app_filter(user, allow_user_installation=True,
|
||||||
__set_app_filter_or_error(user_id, app_filter, interactive)
|
__set_app_filter_or_error(user_id, app_filter, interactive)
|
||||||
|
|
||||||
if not quiet:
|
if not quiet:
|
||||||
print('App filter for user {} set'.format(user_id))
|
print('App filter for user {} set'.format(username))
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
|
Loading…
Reference in New Issue