You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

66 lines
1.7 KiB

from . import Password, PasswordManager
import subprocess
from typing import Tuple, List
class GNUPassPasswordManager( PasswordManager ):
"""
GNU pass password manager
https://www.passwordstore.org/
"""
@classmethod
def name( cls ):
return "pass"
@classmethod
def verify( cls, config: dict, path: str ) -> Tuple[bool, List[str]]:
"""
Verifies that the configuration is correct
Args:
config: dict with password manager configuration
path: path to the "config" dict in the main configuration file
Returns:
bool: true if the config is correct
List[str]: list of errors if the config is not correct
"""
return (True, [])
def __init__( self, config: dict ):
# no parameters
pass
def get( self, identifier: str ) -> Password:
"""
Gets a password from the manager.
This function is overriden by the concrete PasswordManager instances.
Args:
identifier: which password to get
Returns:
None if the password is not found,
the password otherwise
"""
result = subprocess.run([
"pass",
identifier
],
capture_output = True
)
lines = result.stdout.decode("utf-8").splitlines()
if len(lines) == 0:
return Password( None )
ret = Password( lines[0] )
for i in range(1, len(lines)):
fields = lines[i].split(': ', 1)
if len(fields) != 2:
continue
if fields[0] == "login":
ret.login = str(fields[1])
return ret