initial commit
This commit is contained in:
commit
428030c3bc
2 changed files with 91 additions and 0 deletions
62
bwpass.py
Normal file
62
bwpass.py
Normal file
|
@ -0,0 +1,62 @@
|
|||
from os import environ
|
||||
from os.path import expanduser
|
||||
from subprocess import check_output, CalledProcessError
|
||||
|
||||
from bundlewrap.exceptions import FaultUnavailable
|
||||
from bundlewrap.utils import Fault
|
||||
from bundlewrap.utils.text import bold, yellow
|
||||
from bundlewrap.utils.ui import io
|
||||
|
||||
PASSWORD_STORE_DIR = expanduser(environ.get('BW_PASS_DIR', '~/.password-store'))
|
||||
DUMMY_MODE = environ.get('PW_PASS_DUMMY_MODE', '0') == '1'
|
||||
|
||||
cache = {}
|
||||
|
||||
def _get_contents_from_pass(identifier: str):
|
||||
try:
|
||||
return cache[identifier]
|
||||
except KeyError:
|
||||
# Not yet fetched from pass
|
||||
pass
|
||||
|
||||
with io.job('{p} fetching {identifier}'.format(
|
||||
p=bold('pass'),
|
||||
identifier=identifier,
|
||||
)):
|
||||
try:
|
||||
pass_output = check_output(
|
||||
['pass', 'show', identifier],
|
||||
env={
|
||||
'PASSWORD_STORE_DIR': PASSWORD_STORE_DIR,
|
||||
}
|
||||
).decode('UTF-8').splitlines()
|
||||
except FileNotFoundError:
|
||||
raise FaultUnavailable('pass not found')
|
||||
except CalledProcessError as e:
|
||||
raise FaultUnavailable('pass exited {} when trying to get secret "{}"'.format(
|
||||
e.returncode,
|
||||
identifier,
|
||||
))
|
||||
|
||||
cache[identifier] = {}
|
||||
cache[identifier]['password'] = pass_output[0]
|
||||
|
||||
# TODO import all other options set in pass
|
||||
|
||||
return cache[identifier]
|
||||
|
||||
|
||||
def _password(identifier):
|
||||
if DUMMY_MODE:
|
||||
return 'PASS DUMMY PASSWORD'
|
||||
else:
|
||||
secret = _get_contents_from_pass(identifier)
|
||||
return secret['password']
|
||||
|
||||
|
||||
def password(identifier):
|
||||
return Fault(
|
||||
'bwpass password',
|
||||
_password,
|
||||
identifier=identifier,
|
||||
)
|
29
setup.py
Normal file
29
setup.py
Normal file
|
@ -0,0 +1,29 @@
|
|||
from setuptools import setup
|
||||
|
||||
setup(
|
||||
name="bundlewrap-pass",
|
||||
version="0.0.1",
|
||||
description="Get passwordstore entries via bundlewrap",
|
||||
author="Franziska Kunsmann",
|
||||
author_email="hi@kunsmann.eu",
|
||||
license="GPLv3",
|
||||
py_modules=['bwpass'],
|
||||
keywords=["configuration", "config", "management"],
|
||||
classifiers=[
|
||||
# "Development Status :: 5 - Production/Stable",
|
||||
"Intended Audience :: System Administrators",
|
||||
"License :: OSI Approved :: GNU General Public License v3 (GPLv3)",
|
||||
"Natural Language :: English",
|
||||
"Operating System :: POSIX :: Linux",
|
||||
"Programming Language :: Python",
|
||||
"Programming Language :: Python :: 3.6",
|
||||
"Programming Language :: Python :: 3.7",
|
||||
"Programming Language :: Python :: 3.8",
|
||||
"Topic :: Software Development :: Libraries :: Python Modules",
|
||||
"Topic :: System :: Installation/Setup",
|
||||
"Topic :: System :: Systems Administration",
|
||||
],
|
||||
install_requires=[
|
||||
"bundlewrap >= 4.0.0",
|
||||
],
|
||||
)
|
Loading…
Reference in a new issue