malcontent-client: Add a `get-session-limits` command
Signed-off-by: Philip Withnall <withnall@endlessm.com>
This commit is contained in:
parent
ec1af3ef55
commit
c02c56b3b5
|
@ -17,6 +17,7 @@
|
||||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
|
import datetime
|
||||||
import os
|
import os
|
||||||
import pwd
|
import pwd
|
||||||
import sys
|
import sys
|
||||||
|
@ -79,6 +80,34 @@ def __get_app_filter_or_error(user_id, interactive):
|
||||||
raise SystemExit(__manager_error_to_exit_code(e))
|
raise SystemExit(__manager_error_to_exit_code(e))
|
||||||
|
|
||||||
|
|
||||||
|
def __get_session_limits(user_id, interactive):
|
||||||
|
"""Get the session limits for `user_id` off the bus.
|
||||||
|
|
||||||
|
If `interactive` is `True`, interactive polkit authorisation dialogues will
|
||||||
|
be allowed. An exception will be raised on failure."""
|
||||||
|
if interactive:
|
||||||
|
flags = Malcontent.ManagerGetValueFlags.INTERACTIVE
|
||||||
|
else:
|
||||||
|
flags = Malcontent.ManagerGetValueFlags.NONE
|
||||||
|
|
||||||
|
connection = Gio.bus_get_sync(Gio.BusType.SYSTEM)
|
||||||
|
manager = Malcontent.Manager.new(connection)
|
||||||
|
return manager.get_session_limits(
|
||||||
|
user_id=user_id,
|
||||||
|
flags=flags, cancellable=None)
|
||||||
|
|
||||||
|
|
||||||
|
def __get_session_limits_or_error(user_id, interactive):
|
||||||
|
"""Wrapper around __get_session_limits() which prints an error and raises
|
||||||
|
SystemExit, rather than an internal exception."""
|
||||||
|
try:
|
||||||
|
return __get_session_limits(user_id, interactive)
|
||||||
|
except GLib.Error as e:
|
||||||
|
print('Error getting session limits for user {}: {}'.format(
|
||||||
|
user_id, e.message), file=sys.stderr)
|
||||||
|
raise SystemExit(__manager_error_to_exit_code(e))
|
||||||
|
|
||||||
|
|
||||||
def __set_app_filter(user_id, app_filter, interactive):
|
def __set_app_filter(user_id, app_filter, interactive):
|
||||||
"""Set the app filter for `user_id` off the bus.
|
"""Set the app filter for `user_id` off the bus.
|
||||||
|
|
||||||
|
@ -187,6 +216,24 @@ def command_get_app_filter(user, quiet=False, interactive=True):
|
||||||
print('App installation is disallowed to system repository')
|
print('App installation is disallowed to system repository')
|
||||||
|
|
||||||
|
|
||||||
|
def command_get_session_limits(user, now=None, quiet=False, interactive=True):
|
||||||
|
"""Get the session limits for the given user."""
|
||||||
|
(user_id, username) = __lookup_user_id_or_error(user)
|
||||||
|
session_limits = __get_session_limits_or_error(user_id, interactive)
|
||||||
|
|
||||||
|
(user_allowed_now, time_remaining_secs, time_limit_enabled) = \
|
||||||
|
session_limits.check_time_remaining(now.timestamp() * GLib.USEC_PER_SEC)
|
||||||
|
|
||||||
|
if not time_limit_enabled:
|
||||||
|
print('Session limits are not enabled for user {}'.format(username))
|
||||||
|
elif user_allowed_now:
|
||||||
|
print('Session limits are enabled for user {}, and they have {} '
|
||||||
|
'seconds remaining'.format(username, time_remaining_secs))
|
||||||
|
else:
|
||||||
|
print('Session limits are enabled for user {}, and they have no time '
|
||||||
|
'remaining'.format(username))
|
||||||
|
|
||||||
|
|
||||||
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 == '':
|
||||||
|
@ -390,6 +437,24 @@ def main():
|
||||||
'app filter for (default: current '
|
'app filter for (default: current '
|
||||||
'user)')
|
'user)')
|
||||||
|
|
||||||
|
# ‘get-session-limits’ command
|
||||||
|
parser_get_session_limits = \
|
||||||
|
subparsers.add_parser('get-session-limits',
|
||||||
|
parents=[common_parser],
|
||||||
|
help='get current session limit settings')
|
||||||
|
parser_get_session_limits.set_defaults(function=command_get_session_limits)
|
||||||
|
parser_get_session_limits.add_argument('user', default='', nargs='?',
|
||||||
|
help='user ID or username to get '
|
||||||
|
'the session limits for (default: '
|
||||||
|
'current user)')
|
||||||
|
parser_get_session_limits.add_argument(
|
||||||
|
'--now',
|
||||||
|
metavar='yyyy-mm-ddThh:mm:ssZ',
|
||||||
|
type=lambda d: datetime.datetime.strptime(d, '%Y-%m-%dT%H:%M:%S%z'),
|
||||||
|
default=datetime.datetime.now(),
|
||||||
|
help='date/time to use as the value for ‘now’ (default: wall clock '
|
||||||
|
'time)')
|
||||||
|
|
||||||
# ‘monitor’ command
|
# ‘monitor’ command
|
||||||
parser_monitor = subparsers.add_parser('monitor',
|
parser_monitor = subparsers.add_parser('monitor',
|
||||||
help='monitor parental controls '
|
help='monitor parental controls '
|
||||||
|
|
Loading…
Reference in New Issue