A simple yet flexible library (and command-line application) to access passwords from various backends (GPG/pass, Linux SecretService, Windows Credentials Manager, etc).
Project description
Flexpass
A simple yet flexible library (and command-line application) to access passwords from various backends (GPG/pass, Linux SecretService, Windows Credentials Manager, etc).
Installation
Flexpass package is available on PyPI.org:
pip install flexpass
Usage
Flexpass may be used as a library in your Python code:
from flexpass import get_password, set_password, delete_password, list_passwords
...
It may also be accessed directly as a command-line application. Flexpass PyPI package provides an executable that should be installed in your PATH:
flexpass --help
The application may also be invoked as a Python module:
python -m flexpass --help
Main features
This library provides read and write access to passwords, identified by a name, through the following functions:
def get_password(name: str) -> str|None:
...
def set_password(name: str, password: str, **options) -> None:
...
def delete_password(name: str) -> bool:
...
def list_passwords() -> list[PasswordInfo]:
...
Function get_password
requests all registered backends (by decreasing priority order) until a password with the given name is found.
Function set_password
sets the password in the read-write backend with the highest priority.
Function delete_password
deletes the password in all read-write backends where the password was set. It returns True
if the password was set in at least one backend.
Function list_passwords
returns a list of the password names associated with information from the backends.
Access to passwords is also possible for a specific backend, by using this backend method. Examples:
backend = get_backend('pass')
backend.get_password('my/password')
Example of invokation of flexpass
command-line application with the list
command (which is the default command when no argument is given).
It retrives passwords using function list_passwords
and format the results:
N.B.: by default, names are displayed truncated to 40 characters. Add option --full
to disable truncation.
Backends
The following backends are included in Flexpass package:
Name | Priority | Description |
---|---|---|
gpg |
80 | GPG encrypted files following the layout defined by pass, the standard unix password manager. |
secretservice |
60 | Secret Service D-Bus API, a FreeDesktop.org standard usually accessed through libsecret and its frontends (secret-tool, Gnome Keyring, KDE Wallet Manager or KeyPassXC). |
wincred |
50 | Windows Credential Manager, the password manager integrated in Windows. |
These backends are planned to be added later (ROADMAP):
Name | Priority | Description |
---|---|---|
dockersecrets |
30 | Docker Compose secrets, made available in the containers at path /run/secrets/{name} or in /run/secrets/misc (or at local path secrets/{name}.txt or in secrets/misc.ini : usefull during development). Read-only. |
dir |
20 | Unencrypted files in a root directory (by default /root/passwords ). |
env |
10 | Environment variables. Read-only. |
Custom backends may be registered in your Python code using the register_backend
function. Example:
from flexpass import register_backend
register_backend(MyCustomBackend, priority=70)
Pre-defined priorities may be modified by calling the register_backend
with the new priority
value. Example:
register_backend(WincredBackend, priority=5)
License
This project is licensed under the terms of the MIT license.
Credits
Inspired by:
- pass: the standard unix password manager based on GPG. It has very few requirements and may be installed on most workstations and servers. It is cross-platform because only GPG is actually required to read or write passwords.
- keyring: a most widly used Python library to access passwords.
Notable differences between flexpass
and keyring
:
keyring
is a lot more mature and has many more backends.flexpass
does not require to specify a username in addition to the password name.flexpass
provides a predictible and easily configurable order of precedence for the backends.flexpass
aims at including usual backends without requiring additional packages (in particular, the simplepass
command is avaible).flexpass
easily gives access to the list of passwords.
Logo based on a creation by Pixel perfect on Flaticon.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.