From 1aecdcf2e94000c8f595e47a28a58d0a59dc0664 Mon Sep 17 00:00:00 2001 From: Goffi Date: Sat, 14 Nov 2015 19:18:10 +0100 Subject: [PATCH] jp: better profile commands: - new "profile/default" command - info doesn't show password anymore by default, need to be explicitly requested - info and modify don't need to connect anymore - modify can now set default profile. As use_profile is set, at least a profile session need to be started when it would not be mandatory technicaly (if just setting the profile as default is needed). But this option should not be used often, and it's not a big side effect, so I don't feel the need to create a new dedicated command, or to do complicated checks to avoid the session start. --- frontends/src/jp/cmd_profile.py | 38 ++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/frontends/src/jp/cmd_profile.py b/frontends/src/jp/cmd_profile.py index 43c88f04..49032191 100644 --- a/frontends/src/jp/cmd_profile.py +++ b/frontends/src/jp/cmd_profile.py @@ -20,7 +20,7 @@ """This module permits to manage profiles. It can list, create, delete and retrieve information about a profile.""" -from logging import debug, info, error, warning +import logging as log from sat.core.i18n import _ from sat_frontends.jp import base @@ -29,9 +29,20 @@ __commands__ = ["Profile"] PROFILE_HELP = _('The name of the profile') +class ProfileDefault(base.CommandBase): + def __init__(self, host): + super(ProfileDefault, self).__init__(host, 'default', use_profile=False, help=_('print default profile')) + + def add_parser_options(self): + pass + + def run(self): + print self.host.bridge.getProfileName('@DEFAULT@') + + class ProfileDelete(base.CommandBase): def __init__(self, host): - super(ProfileDelete, self).__init__(host, 'delete', use_profile=False, help=_('Delete a profile')) + super(ProfileDelete, self).__init__(host, 'delete', use_profile=False, help=_('delete a profile')) def add_parser_options(self): self.parser.add_argument('profile', type=str, help=PROFILE_HELP) @@ -39,22 +50,20 @@ class ProfileDelete(base.CommandBase): def run(self): super(ProfileDelete, self).run() if self.args.profile not in self.host.bridge.getProfilesList(): - error("Profile %s doesn't exist." % self.args.profile) + log.error("Profile %s doesn't exist." % self.args.profile) self.host.quit(1) self.host.bridge.asyncDeleteProfile(self.args.profile, callback=lambda dummy: None) class ProfileInfo(base.CommandBase): def __init__(self, host): - super(ProfileInfo, self).__init__(host, 'info', help=_('Get information about a profile')) - self.to_show = [(_(u"jid"), "Connection", "JabberID"), - (_(u"XMPP password"), "Connection", "Password"), - ] + super(ProfileInfo, self).__init__(host, 'info', need_connect=False, help=_('get information about a profile')) + self.to_show = [(_(u"jid"), "Connection", "JabberID"),] self.largest = max([len(item[0]) for item in self.to_show]) def add_parser_options(self): - pass + self.parser.add_argument('--show-password', action='store_true', help=_(u'show the XMPP password IN CLEAR TEXT')) def showNextValue(self, label=None, category=None, value=None): """Show next value from self.to_show and quit on last one""" @@ -71,12 +80,14 @@ class ProfileInfo(base.CommandBase): def connected(self): self.need_loop = True super(ProfileInfo, self).connected() + if self.args.show_password: + self.to_show.append((_(u"XMPP password"), "Connection", "Password")) self.showNextValue() class ProfileList(base.CommandBase): def __init__(self, host): - super(ProfileList, self).__init__(host, 'list', use_profile=False, help=_('List profiles')) + super(ProfileList, self).__init__(host, 'list', use_profile=False, help=_('list profiles')) def add_parser_options(self): pass @@ -110,20 +121,21 @@ class ProfileCreate(base.CommandBase): """Create a new profile""" self.need_loop = True if self.args.profile in self.host.bridge.getProfilesList(): - error("Profile %s already exists." % self.args.profile) + log.error("Profile %s already exists." % self.args.profile) self.host.quit(1) self.host.bridge.asyncCreateProfile(self.args.profile, self.args.password, callback=self._profile_created, errback=None) class ProfileModify(base.CommandBase): def __init__(self, host): - super(ProfileModify, self).__init__(host, 'modify', help=_('Modify an existing profile')) + super(ProfileModify, self).__init__(host, 'modify', need_connect=False, help=_('Modify an existing profile')) def add_parser_options(self): self.parser.add_argument('-w', '--password', type=str, default='', help=_('the password of the profile')) self.parser.add_argument('-j', '--jid', type=str, help=_('the jid of the profile')) self.parser.add_argument('-x', '--xmpp-password', type=str, help=_('the password of the XMPP account'), metavar='PASSWORD') + self.parser.add_argument('-D', '--default', action='store_true', help=_(u'set as default profile')) def _profile_created(self): if self.args.jid: @@ -141,10 +153,12 @@ class ProfileModify(base.CommandBase): self.host.bridge.setParam("JabberID", self.args.jid, "Connection", profile_key=self.host.profile) if self.args.xmpp_password is not None: self.host.bridge.setParam("Password", self.args.xmpp_password, "Connection", profile_key=self.host.profile) + if self.args.default: + self.host.bridge.profileSetDefault(self.host.profile) class Profile(base.CommandBase): - subcommands = (ProfileDelete, ProfileInfo, ProfileList, ProfileCreate, ProfileModify) + subcommands = (ProfileCreate, ProfileDefault, ProfileDelete, ProfileInfo, ProfileList, ProfileModify) def __init__(self, host): super(Profile, self).__init__(host, 'profile', use_profile=False, help=_('Profile commands'))