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).
See full documentation and API reference on Read the Docs.
Installation
Flexpass package is available on PyPI.org:
pip install flexpass
Usage
Flexpass may be used as a library in your Python code:
import flexpass
flexpass.list_passwords()
flexpass.set_password(name, password)
flexpass.get_password(name)
flexpass.delete_password(name)
Flexpass may also be invoked as a command-line application (flexpass
executable is installed with the package):
flexpass --help
Flexpass 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
scans all registered backends, ordered by decreasing priority, and returns the first password found with the given name.
Function set_password
sets the given password in the writable backend with the highest priority.
Function delete_password
deletes the given password in all writable backends where the password was set. Returns True
if the password was deleted from at least one backend, False
otherwise.
Function list_passwords
lists all available passwords.
Access to passwords is also possible for a specific backend, by using this backend method. Examples:
backend = get_backend('gpg')
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, replace_if_exists=True)
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 wildly used Python library to access 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.