From ad0e909f236a96cfc8dc0ecfaad5e88f626bedbb Mon Sep 17 00:00:00 2001 From: Chris Burr Date: Fri, 26 Feb 2021 09:57:05 +0100 Subject: [PATCH 1/2] Use prompt_toolkit for reading passwords --- environment-py3.yml | 1 + environment.yml | 1 + src/DIRAC/FrameworkSystem/Client/ProxyGeneration.py | 9 ++++++--- src/DIRAC/FrameworkSystem/Client/ProxyUpload.py | 9 ++++++--- 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/environment-py3.yml b/environment-py3.yml index 0f444331f72..37a4401a424 100644 --- a/environment-py3.yml +++ b/environment-py3.yml @@ -21,6 +21,7 @@ dependencies: - numpy - pexpect >=4.0.1 - pillow + - prompt-toolkit >=3,<4 - psutil >=4.2.0 - pyasn1 >0.4.1 - pyasn1-modules diff --git a/environment.yml b/environment.yml index aeceeacbbe1..715a6573597 100644 --- a/environment.yml +++ b/environment.yml @@ -24,6 +24,7 @@ dependencies: - numpy >=1.10.1,<1.16 # Limit to 1.15 as Python 2 pylint has bugs with numpy 1.16 - pexpect >=4.0.1 - pillow + - prompt_toolkit - psutil >=4.2.0 - pyasn1 >0.4.1 - pyasn1-modules diff --git a/src/DIRAC/FrameworkSystem/Client/ProxyGeneration.py b/src/DIRAC/FrameworkSystem/Client/ProxyGeneration.py index 330f8ebbc50..4c98b0b54b3 100644 --- a/src/DIRAC/FrameworkSystem/Client/ProxyGeneration.py +++ b/src/DIRAC/FrameworkSystem/Client/ProxyGeneration.py @@ -7,7 +7,7 @@ from __future__ import print_function import sys -import getpass +from prompt_toolkit import prompt from DIRAC import S_OK, S_ERROR, gLogger from DIRAC.Core.Base import Script from DIRAC.Core.Utilities.NTP import getClockDeviation @@ -297,11 +297,14 @@ def generateProxy(params): # First try reading the key from the file retVal = testChain.loadKeyFromFile(params.keyLoc, password=params.userPasswd) # XXX why so commented? if not retVal['OK']: - passwdPrompt = "Enter Certificate password:" if params.stdinPasswd: userPasswd = sys.stdin.readline().strip("\n") else: - userPasswd = getpass.getpass(passwdPrompt) + try: + userPasswd = prompt(u"Enter Certificate password: ", is_password=True) + except KeyboardInterrupt: + gLogger.error("Caught KeyboardInterrupt, exiting...") + sys.exit(1) params.userPasswd = userPasswd # Find location diff --git a/src/DIRAC/FrameworkSystem/Client/ProxyUpload.py b/src/DIRAC/FrameworkSystem/Client/ProxyUpload.py index 73579d507b8..94ffde636f7 100644 --- a/src/DIRAC/FrameworkSystem/Client/ProxyUpload.py +++ b/src/DIRAC/FrameworkSystem/Client/ProxyUpload.py @@ -7,7 +7,7 @@ from __future__ import absolute_import from __future__ import division import sys -import getpass +from prompt_toolkit import prompt import DIRAC from DIRAC import gLogger @@ -129,11 +129,14 @@ def uploadProxy(params): testChain = X509Chain() retVal = testChain.loadKeyFromFile(keyLoc, password=params.userPasswd) if not retVal['OK']: - passwdPrompt = "Enter Certificate password:" if params.stdinPasswd: userPasswd = sys.stdin.readline().strip("\n") else: - userPasswd = getpass.getpass(passwdPrompt) + try: + userPasswd = prompt(u"Enter Certificate password: ", is_password=True) + except KeyboardInterrupt: + DIRAC.gLogger.error("Caught KeyboardInterrupt, exiting...") + sys.exit(1) params.userPasswd = userPasswd DIRAC.gLogger.info("Loading cert and key") From d1c567467e5313cf4afe1a9346076584a7647ad2 Mon Sep 17 00:00:00 2001 From: Chris Burr Date: Tue, 2 Mar 2021 14:13:25 +0100 Subject: [PATCH 2/2] Apply suggestions from code review Co-authored-by: fstagni --- src/DIRAC/FrameworkSystem/Client/ProxyGeneration.py | 3 +-- src/DIRAC/FrameworkSystem/Client/ProxyUpload.py | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/DIRAC/FrameworkSystem/Client/ProxyGeneration.py b/src/DIRAC/FrameworkSystem/Client/ProxyGeneration.py index 4c98b0b54b3..a493217bcb1 100644 --- a/src/DIRAC/FrameworkSystem/Client/ProxyGeneration.py +++ b/src/DIRAC/FrameworkSystem/Client/ProxyGeneration.py @@ -303,8 +303,7 @@ def generateProxy(params): try: userPasswd = prompt(u"Enter Certificate password: ", is_password=True) except KeyboardInterrupt: - gLogger.error("Caught KeyboardInterrupt, exiting...") - sys.exit(1) + return S_ERROR("Caught KeyboardInterrupt, exiting...") params.userPasswd = userPasswd # Find location diff --git a/src/DIRAC/FrameworkSystem/Client/ProxyUpload.py b/src/DIRAC/FrameworkSystem/Client/ProxyUpload.py index 94ffde636f7..de3a7cc894b 100644 --- a/src/DIRAC/FrameworkSystem/Client/ProxyUpload.py +++ b/src/DIRAC/FrameworkSystem/Client/ProxyUpload.py @@ -135,8 +135,7 @@ def uploadProxy(params): try: userPasswd = prompt(u"Enter Certificate password: ", is_password=True) except KeyboardInterrupt: - DIRAC.gLogger.error("Caught KeyboardInterrupt, exiting...") - sys.exit(1) + return S_ERROR("Caught KeyboardInterrupt, exiting...") params.userPasswd = userPasswd DIRAC.gLogger.info("Loading cert and key")