|
@@ -11,34 +11,35 @@ def load_credential(hook_config, config, credential_parameters):
|
|
|
'''
|
|
|
Given the hook configuration dict, the configuration dict, and a credential parameters tuple
|
|
|
containing a KeePassXC database path and an attribute name to load, run keepassxc-cli to fetch
|
|
|
- the corresponidng KeePassXC credential and return it.
|
|
|
+ the corresponding KeePassXC credential and return it.
|
|
|
|
|
|
Raise ValueError if keepassxc-cli can't retrieve the credential.
|
|
|
'''
|
|
|
try:
|
|
|
(database_path, attribute_name) = credential_parameters
|
|
|
except ValueError:
|
|
|
- path_and_name = ' '.join(credential_parameters)
|
|
|
-
|
|
|
- raise ValueError(
|
|
|
- f'Cannot load credential with invalid KeePassXC database path and attribute name: "{path_and_name}"'
|
|
|
- )
|
|
|
+ raise ValueError(f'Invalid KeePassXC credential parameters: {credential_parameters}')
|
|
|
|
|
|
expanded_database_path = os.path.expanduser(database_path)
|
|
|
|
|
|
if not os.path.exists(expanded_database_path):
|
|
|
- raise ValueError(
|
|
|
- f'Cannot load credential because KeePassXC database path does not exist: {database_path}'
|
|
|
- )
|
|
|
+ raise ValueError(f'KeePassXC database path does not exist: {database_path}')
|
|
|
|
|
|
- return borgmatic.execute.execute_command_and_capture_output(
|
|
|
+ # Build the keepassxc-cli command.
|
|
|
+ command = (
|
|
|
tuple(shlex.split((hook_config or {}).get('keepassxc_cli_command', 'keepassxc-cli')))
|
|
|
+ + ('show', '--show-protected', '--attributes', 'Password')
|
|
|
+ (
|
|
|
- 'show',
|
|
|
- '--show-protected',
|
|
|
- '--attributes',
|
|
|
- 'Password',
|
|
|
- expanded_database_path,
|
|
|
- attribute_name,
|
|
|
+ ('--key-file', hook_config['key_file'])
|
|
|
+ if hook_config and hook_config.get('key_file')
|
|
|
+ else ()
|
|
|
)
|
|
|
- ).rstrip(os.linesep)
|
|
|
+ + (
|
|
|
+ ('--yubikey', hook_config['yubikey'])
|
|
|
+ if hook_config and hook_config.get('yubikey')
|
|
|
+ else ()
|
|
|
+ )
|
|
|
+ + (expanded_database_path, attribute_name) # Ensure database and entry are last.
|
|
|
+ )
|
|
|
+
|
|
|
+ return borgmatic.execute.execute_command_and_capture_output(command).rstrip(os.linesep)
|