Split initializing the password store from generating passwords.
This commit is contained in:
parent
1b2d41a34a
commit
0d431d086c
7 changed files with 115 additions and 21 deletions
|
@ -46,25 +46,25 @@ then
|
||||||
NOSYMB="-n"
|
NOSYMB="-n"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Load required GPG ID parameters.
|
|
||||||
set --
|
|
||||||
while read -r id;
|
|
||||||
do
|
|
||||||
set -- "$@" "$id"
|
|
||||||
done < "${__object:?}/parameter/gpgid"
|
|
||||||
|
|
||||||
# Load required password store location parameter.
|
# Load required password store location parameter.
|
||||||
PASSWORD_STORE_DIR="$(cat "${__object:?}/parameter/storedir")"
|
PASSWORD_STORE_DIR="$(cat "${__object:?}/parameter/storedir")"
|
||||||
export PASSWORD_STORE_DIR
|
export PASSWORD_STORE_DIR
|
||||||
|
|
||||||
# Run every time in case GPG IDs are updated.
|
# Check if the password store is initialized.
|
||||||
pass init "$@" >/dev/null
|
if ! pass ls >/dev/null 2>&1;
|
||||||
|
then
|
||||||
|
cat <<- EOF >&2
|
||||||
|
__pass: this type requires the password store to be initialized.
|
||||||
|
See cdist-type__pass_init(7) and pass(1) for more information.
|
||||||
|
EOF
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
|
||||||
# Generate a password if it does not already exist.
|
# Generate a password if it does not already exist.
|
||||||
if [ ! -f "${PASSWORD_STORE_DIR}/${__object_id:?}.gpg" ];
|
if [ ! -f "${PASSWORD_STORE_DIR}/${__object_id:?}.gpg" ];
|
||||||
then
|
then
|
||||||
# shellcheck disable=SC2086
|
# shellcheck disable=SC2086
|
||||||
pass generate $NOSYMB "${__object_id:?}" $LENGTH
|
pass generate $NOSYMB "${__object_id:?}" $LENGTH >/dev/null
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Send it out to the messages.
|
# Send it out to the messages.
|
||||||
|
|
|
@ -14,9 +14,6 @@ types depending on this one should require it. This enables an administrator to
|
||||||
ensure a password exists using this type and then, from another type, use it as
|
ensure a password exists using this type and then, from another type, use it as
|
||||||
need be.
|
need be.
|
||||||
|
|
||||||
This type also sets the GPG IDs used to encrypt the password store: beware that
|
|
||||||
the IDs passed in the last ran invocation of the type will be the ones set for
|
|
||||||
the store.
|
|
||||||
|
|
||||||
REQUIRED PARAMETERS
|
REQUIRED PARAMETERS
|
||||||
-------------------
|
-------------------
|
||||||
|
@ -25,11 +22,6 @@ storedir
|
||||||
created if it does not exist).
|
created if it does not exist).
|
||||||
|
|
||||||
|
|
||||||
REQUIRED MULTIPLE PARAMETERS
|
|
||||||
----------------------------
|
|
||||||
gpgid
|
|
||||||
The GPG IDs of the public keys used to encrypt the password store.
|
|
||||||
|
|
||||||
OPTIONAL PARAMETERS
|
OPTIONAL PARAMETERS
|
||||||
-------------------
|
-------------------
|
||||||
length
|
length
|
||||||
|
@ -37,6 +29,7 @@ length
|
||||||
it exists, this has no effect (and hence will not update the password, even
|
it exists, this has no effect (and hence will not update the password, even
|
||||||
if the length is different from the one specified).
|
if the length is different from the one specified).
|
||||||
|
|
||||||
|
|
||||||
BOOLEAN PARAMETERS
|
BOOLEAN PARAMETERS
|
||||||
------------------
|
------------------
|
||||||
no-symbols
|
no-symbols
|
||||||
|
@ -52,18 +45,19 @@ looks up in the cdist messages to find it:
|
||||||
|
|
||||||
.. code-block:: sh
|
.. code-block:: sh
|
||||||
|
|
||||||
__pass database/services/arandomservice
|
require=__pass_init \
|
||||||
|
__pass database/services/arandomservice \
|
||||||
--storedir password/store/location
|
--storedir password/store/location
|
||||||
--gpgpid 92296965EAA1DD86A93284EF7B21E5AA32FB9810
|
|
||||||
|
|
||||||
require='__pass/database/services/arandomservice' \
|
require='__pass/database/services/arandomservice' \
|
||||||
__othertype --password database/service/arandomservice
|
__othertype --password database/service/arandomservice
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
|
|
||||||
SEE ALSO
|
SEE ALSO
|
||||||
--------
|
--------
|
||||||
`pass`\ (7)
|
`pass`\ (7), `cdist-type__pass_init`\ (7)
|
||||||
|
|
||||||
|
|
||||||
AUTHORS
|
AUTHORS
|
||||||
|
|
43
type/__pass_init/gencode-local
Executable file
43
type/__pass_init/gencode-local
Executable file
|
@ -0,0 +1,43 @@
|
||||||
|
#!/bin/sh -e
|
||||||
|
#
|
||||||
|
# 2020 Joachim Desroches (joachim.desroches@epfl.ch)
|
||||||
|
#
|
||||||
|
# This file is part of cdist.
|
||||||
|
#
|
||||||
|
# cdist is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# cdist is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
# Check pass is installed.
|
||||||
|
command -v pass >/dev/null 2>&1 ||
|
||||||
|
{
|
||||||
|
cat <<- EOF >&2
|
||||||
|
__pass_init: this type requires pass installed.
|
||||||
|
See https://www.passwordstore.org/.
|
||||||
|
EOF
|
||||||
|
exit 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Load required GPG ID parameters.
|
||||||
|
set --
|
||||||
|
while read -r id;
|
||||||
|
do
|
||||||
|
set -- "$@" "$id"
|
||||||
|
done < "${__object:?}/parameter/gpgid"
|
||||||
|
|
||||||
|
# Load required password store location parameter.
|
||||||
|
PASSWORD_STORE_DIR="$(cat "${__object:?}/parameter/storedir")"
|
||||||
|
export PASSWORD_STORE_DIR
|
||||||
|
|
||||||
|
# Do our work.
|
||||||
|
pass init "$@" >/dev/null
|
56
type/__pass_init/man.rst
Normal file
56
type/__pass_init/man.rst
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
cdist-type__pass_init(7)
|
||||||
|
========================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
cdist-type__pass_init - Initialize a local password store.
|
||||||
|
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
This type is intented to be used as a prerequisite to the
|
||||||
|
cdist-type__pass(7) type. It will set up a pass(1) password
|
||||||
|
store with the provided GPP2(1) public encryption key IDs.
|
||||||
|
|
||||||
|
|
||||||
|
REQUIRED PARAMETERS
|
||||||
|
-------------------
|
||||||
|
storedir
|
||||||
|
The host-local directory where the password store is to be found (or
|
||||||
|
created if it does not exist).
|
||||||
|
|
||||||
|
|
||||||
|
REQUIRED MULTIPLE PARAMETERS
|
||||||
|
----------------------------
|
||||||
|
gpgid
|
||||||
|
The GPG IDs of the public keys used to encrypt the password store.
|
||||||
|
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
|
||||||
|
.. code-block:: sh
|
||||||
|
|
||||||
|
# Setup a repository with a GPG ID
|
||||||
|
__pass_init
|
||||||
|
--storedir password/store/location
|
||||||
|
--gpgpid 92296965EAA1DD86A93284EF7B21E5AA32FB9810
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
--------
|
||||||
|
`pass`\ (7), `cdist-type__pass`\ (7)
|
||||||
|
|
||||||
|
|
||||||
|
AUTHORS
|
||||||
|
-------
|
||||||
|
Joachim Desroches <joachim.desroches@epfl.ch>
|
||||||
|
|
||||||
|
|
||||||
|
COPYING
|
||||||
|
-------
|
||||||
|
Copyright \(C) 2021 Joachim Desroches. You can redistribute it
|
||||||
|
and/or modify it under the terms of the GNU General Public License as
|
||||||
|
published by the Free Software Foundation, either version 3 of the
|
||||||
|
License, or (at your option) any later version.
|
1
type/__pass_init/parameter/required
Normal file
1
type/__pass_init/parameter/required
Normal file
|
@ -0,0 +1 @@
|
||||||
|
storedir
|
0
type/__pass_init/singleton
Normal file
0
type/__pass_init/singleton
Normal file
Loading…
Reference in a new issue