Skip to content

Commit

Permalink
Add ability to store/retrieve password to/from keyring (OSX Keychain,…
Browse files Browse the repository at this point in the history
… etc.) using the 'keyring' module.
  • Loading branch information
tonycpsu authored and ototo committed Dec 30, 2014
1 parent ca41f61 commit 04f7888
Showing 1 changed file with 43 additions and 14 deletions.
57 changes: 43 additions & 14 deletions jic
Expand Up @@ -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(
Expand All @@ -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:
Expand Down Expand Up @@ -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:
Expand Down

0 comments on commit 04f7888

Please sign in to comment.