You want to contribute to pass-import, thank a lot for this. You will find
in this page all the useful information needed to contribute to pass-import
.
pass-import
has a complete test suite that provide functional and unit tests
for all the parts of the program. Moreover, it provides test coverage and code
health reports.
To run the tests, you need to install the following programs:
- python-green as python test runner.
- python-coverage as code coverage system.
Then simply run: make tests
To run the code health report, you need to install the following programs:
- prospector
pip install prospector[with_everything]
Then simply run: make lint
To run the security check, you need to install the following programs:
- bandit
pip install bandit
Then simply run: make security
To re-generate the README table as well as the man pages and the completion
file simply run: make docs
- If you don't have git on your machine, [install it][git].
- Fork this repo by clicking on the fork button on the top of this page.
- Clone the repository and go to the directory:
git clone https://github.com/this-is-you/pass-import.git
cd pass-import
- Create a branch:
git checkout -b my_contribution
- Make the changes and commit:
git add <files changed>
git commit -m "A message for sum up my contribution"
- Push changes to GitHub:
git push origin my_contribution
7) Submit your changes for review: If you go to your repository on GitHub, you'll see a Compare & pull request button, fill and submit the pull request.
1) To add support for a new password manager named mymanager
, add the file
pass_import/managers/mymanager.py
. The code itself will depend on the
format of the file it should import. Here is the bare minimum for a CSV based
importer:
# -*- encoding: utf-8 -*-
# pass import - Passwords importer swiss army knife
# Copyright (C) Year YourName <[email protected]>.
#
from pass_import.formats.csv import CSV
from pass_import.manager import register_managers
class MyManagerCSV(CSV):
"""Importer for MyManager in CSV format."""
name = 'mymanager'
url='https://mymanager.com'
hexport='File > Export > CSV'
himport='pass import mymanager file.csv'
keys = {
'title': 'title',
'password': 'password',
'login': 'login',
'url': 'url',
'comments': 'comments',
'group': 'group'
}
def parse(self):
# If required your importer code here.
pass
register_managers(MyManagerCSV)
- Then, you will want to import the class
MyManagerCSV
inpass_import/managers/__init__.py
.
3) Add a file named tests/assets/db/mymanager[.csv,.xml,...]
. No
contribution will be accepted without this file. This file must contain the
exported data from your manager. It has to be the exact export of the main
test password repository. This test data can be found in the
tests/assets/references/main.yml.
4) Enable and configure the generic import and file format test for your new
importer. Add an entry in tests/tests.yml
with your importer settings.
Example:
MyManagerCSV:
path: mymanager.csv
5) Check the success of the tests, ensure the coverage does not decrease and the code health passes.
- The class name is not linked to the command name. It is common to name it as
follow:
ManagerNameFormat()
. - If a class has both import and export capabilities, it is common to name it directly by its manager. It should also be the default class for the manager.
- Always sort the classes in alphabetic order.
By definition, password-store does not impose any particular schema or type of organisation of data. Nevertheless, pass-import respects the most common case storing a single password per entry alongside with additional information like emails, pseudo, URL and other sensitive data or metadata. Although the exact list of data stored with the password can vary from entries in the password store, the data imported always respects a simple key: value format at the exception of the password that is always present in the first line.
pass_import.manager.PasswordManager is the main class that manages import from all the supported password manager. Then the classes in pass_import.formats inherit from it. It manages data formatting from all the password manager.
Data are imported in PasswordManager.data, this is a list of ordered dict. Each entry is a dictionary that contains the data for a password store entry. The dictionary's keys are divided into two sets:
1) The standard keys: title, password, login, url, comments and group. 2) The extra keys that differ from password managers and contain the description of any extra data we can find in the exported file.