diff --git a/jic b/jic index c5f7b61..da70676 100755 --- a/jic +++ b/jic @@ -2720,8 +2720,8 @@ class Cache (object): oauth_secret = self.srv_cfg.get('oauth.secret') oauth_cert = self.srv_cfg.get('oauth.cert') user = self.srv_cfg.get('user') - password = self.srv_cfg.get('password') server = self.srv_cfg.get('url') + password = self.srv_cfg.get('password') if not server: raise RuntimeError( @@ -2746,19 +2746,8 @@ class Cache (object): return self.jira if user and not password: - #vpre(VERBOSITY_INFO, u'INFO: Using user/password to connect to JIRA') - if not sys.stdin.isatty(): - raise RuntimeError( - u'Password or oauth token/secret are missing '\ - u'for server \'%s\'' % self.srv_name) - pre(u'Please enter password for %s at %s.' % (\ - self.user, self.srv_name)) - try: - password = getpass(u'password: ') - except EOFError: - raise RuntimeError( - u'Password is missing for server \'%s\'' %\ - self.srv_name) + password = self.get_password_from_keyring_or_console( + self.srv_name, user) options = { 'server': server, 'verify': False } if user: @@ -3325,6 +3314,46 @@ class Cache (object): return True + def get_password_from_keyring_or_console(self, server, user): + + name = "jic.server.%s" %(server) + + try: + from keyring import get_password, set_password + password = get_password(name, user) + except ImportError: + vpre(VERBOSITY_INFO, + u'keyring module not installed, getting password from console', + end=u'') + password = None + + if not password: + password = self.get_password_from_console(server, user) + + try: + set_password(name, user, password) + except: + pass + return password + + + def get_password_from_console(self, server, user): + + #vpre(VERBOSITY_INFO, u'INFO: Using user/password to connect to JIRA') + if not sys.stdin.isatty(): + raise RuntimeError( + u'Password or oauth token/secret are missing '\ + u'for server \'%s\'' % server) + pre(u'Please enter password for %s at %s.' % (\ + user, server)) + try: + password = getpass(u'password: ') + except EOFError: + raise RuntimeError( + u'Password is missing for server \'%s\'' %\ + server) + return password + def _cache_createmeta(self): try: