Skip to content

Commit a0c910f

Browse files
committed
allow to pass a file path as apiKeyValue
1 parent 5c85c85 commit a0c910f

File tree

4 files changed

+52
-5
lines changed

4 files changed

+52
-5
lines changed

source/confParser.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ def checkTLSsettings(args):
4848
def checkAPIsettings(args):
4949
if not args.get('apiKeyName') or not args.get('apiKeyValue'):
5050
return False, MSG['MissingParm']
51+
elif "/" in str(args.get('apiKeyValue')) and not os.path.isfile(args.get('apiKeyValue')):
52+
return False, MSG['FileNotFound'].format(args.get('apiKeyValue'))
5153
return True, ''
5254

5355

@@ -159,8 +161,8 @@ class Password(argparse.Action):
159161
defaults = ConfigManager().defaults
160162

161163
def __call__(self, parser, namespace, values, option_string):
162-
if values is None and self.defaults.get('apiKeyValue', None) is None:
163-
print('no valid apiKeyValue found in the config.ini')
164+
if values is None:
165+
print('Enter your apiKey value')
164166
values = getpass.getpass()
165167

166168
setattr(namespace, self.dest, values)

source/zimonGrafanaIntf.py

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -569,6 +569,16 @@ def updateCherrypySslConf(args):
569569
cherrypy.config.update(sslConfig)
570570

571571

572+
def resolveAPIKeyValue(storedKey):
573+
keyValue = None
574+
if "/" in str(storedKey):
575+
with open(storedKey) as file:
576+
keyValue = file.read().rstrip()
577+
return keyValue
578+
else:
579+
return storedKey
580+
581+
572582
def main(argv):
573583
# parse input arguments
574584
args, msg = getSettings(argv)
@@ -587,13 +597,21 @@ def main(argv):
587597
# prepare metadata
588598
try:
589599
logger.info("%s", MSG['BridgeVersionInfo'].format(__version__))
590-
logger.details('zimonGrafanaItf invoked with parameters:\n %s', "\n".join("{}={}".format(k, v) for k, v in args.items()))
600+
logger.details('zimonGrafanaItf invoked with parameters:\n %s', "\n".join("{}={}".format(k, v) for k, v in args.items() if not k =='apiKeyValue'))
591601
# logger.details('zimonGrafanaItf invoked with parameters:\n %s', "\n".join("{}={}".format(k, type(v)) for k, v in args.items()))
592-
mdHandler = MetadataHandler(logger, args.get('server'), args.get('serverPort'), args.get('apiKeyName'), args.get('apiKeyValue'), args.get('includeDiskData'))
602+
mdHandler = MetadataHandler(logger, args.get('server'), args.get('serverPort'), args.get('apiKeyName'), resolveAPIKeyValue(args.get('apiKeyValue')), args.get('includeDiskData'))
593603
except (AttributeError, TypeError, ValueError) as e:
594604
logger.details('%s', MSG['IntError'].format(str(e)))
595605
logger.error(MSG['MetaError'])
596606
return
607+
except IOError as e:
608+
if e.errno == errno.ENOENT:
609+
# file does not exist'
610+
logger.error(f'Error reading file, Reason: {e}')
611+
elif e.errno == errno.EACCES:
612+
# file cannot be read
613+
logger.error(f'Error accessing file, Reason: {e}')
614+
return
597615
except (PerfmonConnError, Exception) as e:
598616
logger.error('%s', MSG['CollectorErr'].format(str(e)))
599617
return

tests/test_configManager.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,3 +78,9 @@ def test_case11():
7878
result = cm.defaults
7979
assert 'includeDiskData' in result.keys()
8080
assert result['includeDiskData'] == 'no'
81+
82+
83+
def test_case12():
84+
cm = ConfigManager()
85+
result = cm.defaults
86+
assert 'apiKeyValue' not in result.keys()

tests/test_params.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,15 @@
33

44

55
def my_setup():
6-
global a, b, c, d, e, f, g, m, n
6+
global a, b, c, d, e, f, g, m, n, o, p, y
77
a = ConfigManager().defaults
8+
y = ConfigManager().defaults.copy()
9+
y['apiKeyValue'] = '/tmp/mykey'
810
b, c = parse_cmd_args([])
911
d, e = parse_cmd_args(['-p', '8443', '-t', '/etc/my_tls'])
1012
f, g = parse_cmd_args(['-p', '8443', '-t', None, '-k', 'None', '-m', "None"])
1113
m, n = parse_cmd_args(['-d', 'yes'])
14+
o, p = parse_cmd_args(['-v', 'e40960c9-de0a-4c75-bc71-0bcae6db23b2'])
1215

1316

1417
@with_setup(my_setup)
@@ -17,6 +20,7 @@ def test_case01():
1720
assert len(result.keys()) > 0
1821
assert 'port' in result.keys()
1922
assert 'serverPort' in result.keys()
23+
assert 'apiKeyValue' not in result.keys()
2024

2125

2226
@with_setup(my_setup)
@@ -43,6 +47,7 @@ def test_case04():
4347
assert 'tlsKeyPath' not in result.keys()
4448
assert 'tlsKeyFile' not in result.keys()
4549
assert 'tlsCertFile' not in result.keys()
50+
assert 'apiKeyValue' not in result.keys()
4651
assert result.get('port') == 8443
4752

4853

@@ -60,3 +65,19 @@ def test_case06():
6065
assert len(result.keys()) > 0
6166
assert 'includeDiskData' in result.keys()
6267
assert result.get('includeDiskData') == True
68+
69+
70+
@with_setup(my_setup)
71+
def test_case07():
72+
result = merge_defaults_and_args(y, m)
73+
assert len(result.keys()) > 0
74+
assert 'apiKeyValue' in result.keys()
75+
assert '/' in str(result.get('apiKeyValue'))
76+
77+
@with_setup(my_setup)
78+
def test_case08():
79+
result = merge_defaults_and_args(y, o)
80+
assert len(result.keys()) > 0
81+
assert 'apiKeyValue' in result.keys()
82+
assert '/' not in str(result.get('apiKeyValue'))
83+
assert result.get('apiKeyValue') == 'e40960c9-de0a-4c75-bc71-0bcae6db23b2'

0 commit comments

Comments
 (0)