Compare commits

..

76 Commits

Author SHA1 Message Date
Hoan To 70ab8667af fixed mgmt public key 1 month ago
KyrakerzNetgo 5ca02f56a2 new gpg key for tax 2 months ago
jan.jantzen 2170376e81 moved Dustin Bleschke's public key to archive 2 months ago
jan.jantzen 7721dfe117 Update jan.jantzen public key 2 months ago
Michael Haehnel 9dbdde4b36
ADP-3780: Corrects adp-staging environment
Changelog: Updated
4 months ago
Michael Haehnel 665f39c1d5
ADP-3780: Adds gpg pub keys for adp-mgmt and adp-staging environment
Changelog: Updated
5 months ago
jan.jantzen 5d12cc6d54 add comment 5 months ago
Andreas.Rother 47a30ad1f2 added key for tobias p 5 months ago
Andreas.Rother 426cc6d943 changed public keys for ulf and thi and added andreas to sops.yaml 5 months ago
jan.jantzen 5891b61259 add thi nguyen and ulf fischer public keys verify sops.yml 5 months ago
jan.jantzen 187a8a6337 add thi nguyen and ulf fischer public keys 5 months ago
daniel.risse c3cc147ed2 fix key 6 months ago
daniel.risse d1ce01a9d6 add Daniel Risse Public Key 6 months ago
Claus Paetow cc64355eed gpg key from claus.paetow changed 7 months ago
Dustin Bleschke a165d1a6c3 GPG key for Dustin(me) :) 7 months ago
Michael Haehnel 85d1da2795
NOTICKET: Readds Kevins gpg key
Changelog: Updated
8 months ago
Kyra Kerz ae2666dc61 add gpg key 8 months ago
Andreas Rother 715148b91b added pub key andreas.rother@netgo.de.gpg.pub 9 months ago
Michael Haehnel 23b0ab4f0f
fix[DEV-1368]: Remove obsolete user pubkeys
Changelog: removed
9 months ago
Christos Adalis f10a6a794d create user and pgp key - Christos Adalis 9 months ago
Daryl Sauer-Neumann 78cff885d8 added daryl.sauer-neumann@netgo.de.gpg.pub 9 months ago
Lee Watson 75a3c94f6e ADP-231 adds group for argocd-os-nso-adp-dev 9 months ago
Lee Watson aff320d809 ADP-216 simplifies test control flow 9 months ago
Lee Watson 9877df6455 Merge branch 'ADP-216-uat-sops-step2_003' into 'master'
ADP-216 uat sops step2 003

See merge request smardigo-hetzner/communication-keys!21
10 months ago
Lee Watson 0164502ef0 ADP-216 uat sops step2 003 10 months ago
Lee Watson f607db9b97 Merge branch 'ADP-216-uat-sops-step2_002' into 'master'
ADP-216 uat sops step2 002

See merge request smardigo-hetzner/communication-keys!20
10 months ago
Lee Watson 0300b3d944 ADP-216 uat sops step2 002
* make instructions procedural
* clarify several steps
10 months ago
Lee Watson c9b987fe58 Merge branch 'ADP-216-uat-sops-step1' into 'master'
ADP-216: updates README from UAT feedback

See merge request smardigo-hetzner/communication-keys!19
10 months ago
Lee Watson 84ce66fdd7 ADP-216: updates README from UAT feedback for step1 10 months ago
Lee Watson 8a035c2fd3 Merge branch 'ADP-216-uat-sops-step2' into 'master'
ADP-216: sops automation UAT

See merge request smardigo-hetzner/communication-keys!18
10 months ago
Lee Watson 76e26d7f77 ADP-216: sops automation UAT
* clarifies README
* disables error when operating on unencrypted "dummy" secrets files (some workflows have strict requirement for a file named 'secrets.yaml' even if it's empty,unencrypted)
* avoids printing secrets by default after sops update, moves the "for verification" dump back into the verify script (it had wandered out of quarantine at some point)
* improves cross-platform operation (s/realpath/readlink), although not strictly necessary, it is the result of troubleshooting and not a bad idea to just keep the change.
10 months ago
LeeW cf80808240 Add BC to .sops.yaml: Step 2: Configure sops config 10 months ago
Bas Cancrinus 240c1f37da Add BC to .sops.yaml 10 months ago
Bas Cancrinus d3881fbff4 Fix chapter numbers in readme 10 months ago
Bas Cancrinus 7b86143ddb Merge branch 'add_pubkey_bas-cancrinus' into 'master'
On-boarding step 1a and 1b

See merge request smardigo-hetzner/communication-keys!17
10 months ago
Bas Cancrinus 0ea01e3b96 On-boarding step 1a and 1b 10 months ago
Frederik Marticke 1fc08259af Bugfix: Added missing "!" 10 months ago
Bas Cancrinus e8ab7f159c Merge branch 'ADP-216-uat-sops-onboarding' into 'master'
Adp 216 uat sops onboarding

See merge request smardigo-hetzner/communication-keys!16
10 months ago
Lee Watson 8c881e18eb Adp 216 uat sops onboarding 10 months ago
Lee Watson 258e53bbec https://issues.arxes-tolina.de/browse/ADP-216
* adds script for generating SOPS config based on keyfiles
  * adds "groups" concept for managing access
  * adds methodology for verifying correct sops configuration
  * adds tests for script
* overhauls instructions with comprehensive steps
10 months ago
Lee Watson 37a2ad9ea9 ADP-216 sops automation 10 months ago
Lee Watson 7a09a4f179 Merge branch 'ADP-179_sops_manage_keys' into 'master'
ADP-179 sops manage keys

See merge request smardigo-hetzner/communication-keys!15
10 months ago
Lee Watson 8df5b8e084 ADP-179 sops manage keys
archives old keys, updates doc
10 months ago
Michael Hähnel 5ba3bc542b Merge branch 'ADP-179_doc_sops' into 'master'
ADP-179 doc sops

See merge request smardigo-hetzner/communication-keys!13
10 months ago
Lee Watson 9b0fad9172 ADP-179 doc sops 10 months ago
Hoan To 22124e6d99 added ssp prod key 10 months ago
Lee Watson e7bd99a534 Merge branch 'add_pubkey_lee-watson' into 'master'
adds pubkey for lee.watson

See merge request smardigo-hetzner/communication-keys!12
11 months ago
LeeW 5b8d5ebeea adds pubkey for lee.watson 11 months ago
Michael Hähnel 2c6281fb4b Merge branch 'annika.biermann-master-patch-70102' into 'master'
gpg pub key added for annika.biermann@netgo.de

See merge request smardigo-hetzner/communication-keys!11
1 year ago
Thomas Steube b493319288
gpg public key Thomas Steube 1 year ago
Biermann, Annika 5670e6e3b0 gpg pub key added for annika.biermann@netgo.de 1 year ago
Hoan To 90e804d295 added new gpg key for build infra 1 year ago
Sebastian Schröder 6a3997e584 added sebastian.schroeder@netgo.de.gpg.pub 1 year ago
Kleanthis Damianidis 66b096268d Merge branch 'gpg-key-kleanthis-damianidis' into 'master'
kleanthis damianidis public key

See merge request smardigo-hetzner/communication-keys!10
1 year ago
Kleanthis Damianidis 3afac87b5a kleanthis damianidis public key 1 year ago
Sven Ketelsen 581a761273 feat: update gpg key for sven.ketelsen 2 years ago
Hoan To f32ee53999 added sot gpg key 2 years ago
MIchael Haehnel 407ca47754
Add gpg pub key for customer stage sot-test 2 years ago
MIchael Haehnel c073c8711c
Add new gpg pubkey for devnos-adp stage 2 years ago
Hoan To ae85b8f056 rename joshua key 2 years ago
Joshua Kapfer 4700bc3946 chore: Adds gpg 2 years ago
Frederik Marticke b29393889f gpg frederik.marticke 2 years ago
Kevin Bauske 87de2faf7a kevin bauske public key added 2 years ago
Matthias Friedrich 53789f4109 Adds my key 2 years ago
Hoan To 6c2a9eaaaf added poc_workload01 gpg key 2 years ago
MIchael Haehnel 66f0c33ac7
Add key for rancher-poc 2 years ago
Hoan To d891e94214 Merge branch 'gpg-key-jan-jantzen' into 'master'
jan jantzen public key added

See merge request smardigo-hetzner/communication-keys!9
2 years ago
jan.jantzen 49ff304855 jan jantzen public key added 2 years ago
Michael Hähnel 9f063acc43 Merge branch 'gpg-key-hans-peter-wissenbach' into 'master'
+ gpg key hans-peter wissenbach

See merge request smardigo-hetzner/communication-keys!8
2 years ago
Hoan To 5d7bcf94c2 added gpg key for sspdev 2 years ago
Hans-Peter.Wissenba dd9c13c495 + gpg key hans-peter wissenbach 2 years ago
Michael Haehnel b17bb2ad2e
DEV-1095 Remove gpg key of fgoerz 2 years ago
Ketelsen, Sven 7d828aa08a Merge branch 'gpg-key-esther-fuhrmann' into 'master'
gpg key for esther.fuhrmann@netgo.de

See merge request smardigo-hetzner/communication-keys!7
3 years ago
Ketelsen, Sven c56c87a927 Merge branch 'gpg-key-peichhorn' into 'master'
gpg key for philipp.eichhorn@netgo.de

See merge request smardigo-hetzner/communication-keys!6
3 years ago
Eichhorn, Philipp ff76d55e7d gpg key for philipp.eichhorn@netgo.de 3 years ago
Esther Fuhrmann 7bd0f4f568 gpg key for esther.fuhrmann@netgo.de 3 years ago

@ -1,10 +1,271 @@
## howto create a gpg key
- please follow instruction on following link: https://docs.github.com/en/authentication/managing-commit-signature-verification/generating-a-new-gpg-key
- add ONLY the _PUBLIC_ part of your gpg key!!!
- checkin via MergeRequest/PullRequest
# GPG Key Repo
### import gpg keys
Purpose: Manage gpg keys for:
* SOPS
# Key Management
* Role: New User: new key to be added; can be a new employee being added for first time, existing employee getting access to a new repo, key rotation, etc
* Role: Existing User: user who already has access to the appropriate project
* Definition: List of all users: [verify/.sops.yaml](verify/.sops.yaml)
* Keys Repository: This Git Repository (`communication-keys`), manages public keys and configuration in Project Repositories
* Project Repository: Git Repository for each Project which contains SOPS-Encrypted secrets, e.g. for GitOps Deployments using Helm Files
# Playbook for Configuring Access for New Users
## Overview:
1. In the Keys Repo (`communication-keys`):
1. New User creates,adds GPG Key
1. Existing User configures groups
1. Existing User configures verification SOPS Config
1. New User installs SOPS
1. New User verifies SOPS installation using verification SOPS Config
1. **Status**: New User has working key, working sops installation. Caveat: No access to secrets in other repos yet
1. In the Project Repo
1. Existing User adds New User Key to SOPS Config, Secrets Files
1. New User verifies access
1. **Status**: New User has access to SOPS-encrypted secrets within Project Repo
## 1a. Onboarding: [New User]: create and add a gpg key
1. Clone this repository
1. Create a branch titled `add_pubkey_[firstname]-[lastname]`. <!-- NOTE: Validation Hack: User will not be able to mistakenly create this literal branch, as the unpermitted chars '[' will prevent the branch from being created: "Branch name cannot contain '['" as per https://git-scm.com/docs/git-check-ref-format. I.e. it's a dirty hack to get some server-side(?) validation ;-) --> <!-- - Web: e.g. The following link can be used to create a branch: [https://git.dev-at.de/smardigo-hetzner/communication-keys/-/branches/new?branch_name=add_pubkey_[firstname]-[lastname]](https://git.dev-at.de/smardigo-hetzner/communication-keys/-/branches/new?branch_name=add_pubkey_[firstname]-[lastname]) -->
- CLI: e.g. `git branch add_pubkey_Max-Musterman`
- Note: no strict naming convention for the branch, it's strictly a Human-in-the-Loop process
1. Follow steps 1-13 at the following link: https://docs.github.com/en/authentication/managing-commit-signature-verification/generating-a-new-gpg-key
- CAVEAT: step 14 is not necessary, as it is specific to a GitHub account
1. add ONLY the _PUBLIC_ part of your gpg key!!! to your branch
- file format: `<email>@netgo.de.gpg.pub`
- **Example**: `max.musterman@netgo.de.gpg.pub`
1. git: commit the new file, push
1. gitlab: open a MergeRequest
1. **Hand-Off**: Assign the MR to an Existing User in your Team to have your key added.
- Hint: Look up all Existing Users in the comments at: [verify/.sops.yaml](verify/.sops.yaml)
## 1b. Onboarding: [Existing User|New User]: Add new user to groups
**Prerequisite**: Determine the groups to which access is needed, e.g. a specific repository. If uncertain, ask a Team Member for help!
**Technical Instructions** - please forgive the complexity
Create a symlink from the group-directory back to the keyfile
1. `cd groups/<project_name>`
- **Example**: `cd groups/devnso-adp-argocd`
- Explanation: Access for each repo is tracked using the `./groups/` directory; each sub-directory represents a "group" (Note: some "groups" are also "roles", e.g. `admin`)
- Explanation: Most of the groups correspond directly to git repository names, aka "project name"
1. `ln -s ../../<path_to_key.gpg.pub>`
- **Example**: `ln -s ../../max.musterman@netgo.de.gpg.pub`
## 2. Onboarding: [Existing User]: Configure sops config
Context: This repo stores the keys used to encrypt secrets in other repos; these "consumer" repos each contain a sops config `.sops.yaml` which manages access to the encrypted files (e.g. `secrets.yaml`)
For verification purposes, this repo also contains a _sample_ `.sops.yaml` to which every key in the repo is added. This allows both Existing Users to instantly verify the new key, and New Users to verify that their sops installation works correctly.
### Update Verification SOPS Config
1. Checkout the New User's branch titled `add_pubkey_[firstname]-[lastname]`.
- CLI: e.g. `git branch add_pubkey_Max-Musterman`
1. Run `./verify/usr_confirm_keycfg.sh`
1. git: commit the new file, push
1. **Status**: New User has working SOPS Configuration
1. **Hand-Off**: Proceed to next steps; Instruct New User to verify access to secrets
### Update Project SOPS Config
The following commands explain how to update the `.sops.yaml` for a repository.
Note: For a worked-through example, see next section.
1. **Prerequisite**
1. Obtain Project Repo
- CLI:: `git clone <repo_url>`
1. **Create Branch**
- CLI: `git checkout -b add_pubkey_[firstname]-[lastname] origin/main`
1. **Configure Project Repo for New User**
1. List available groups:
- CLI: `${PATH_TO_COMMUNICATION_KEYS_REPO}/bin/update_sops.sh --list_groups`
- Reminder: Group Name usually corresponds to Repository Name
1. Update sops config AND all secrets files:
- CLI: `${PATH_TO_COMMUNICATION_KEYS_REPO}/bin/update_sops.sh --group <group_name> --find_secrets
1. **Commit the changes, Create Change Request (PR/MR)**
1. git: commit the changes to `.sops.yaml` and secrets files (`secrets.yaml`) files
- CLI: `git add .sops.yaml $(find . -name secrets.yaml)`
- **CAVEAT**: check for other changes with `git status` ! The files do not always follow consistent conventions.
- CLI: `git commit -m "adds <firstname>.<lastname> to sops config"`
1. git: push branch
- CLI: `git push -u origin add_pubkey_[firstname]-[lastname]`
1. gitlab: open a MergeRequest, Review, Merge
1. **Status**: New User has access to SOPS-Encrypted Secrets within Project Repo
1. **Hand-Off**: Proceed to next steps; Instruct New User to verify access to secrets
#### Example
**Prerequisite**
Obtain Repo
```shell
# E.g. update sops config for DevNSO
% git clone git@git.dev-at.de:cloud-solutions/nso/devnso-adp-argocd.git
% cd devnso-adp-argocd/
```
**Create Branch**
```shell
## OPINIONATED GIT - use preferred method
git checkout -b add_pubkey_max-musterman origin/main
```
**Configure Project Repo for New User**
<!-- TODO: auto-determine group with git remote show origin -->
<!-- TODO: auto-determine secrets files by integrating the 'find . -name secrets.yaml' in the script -->
```shell
# List available groups
# Output:
% ${PATH_TO_COMMUNICATION_KEYS_REPO}/bin/update_sops.sh --list_groups
# INFO: listing groups
admin
automation
devnso-adp-argocd
# For a given group, update sops config AND all secrets files - New Users cannot add themselves!
# Output:
% ${PATH_TO_COMMUNICATION_KEYS_REPO}/bin/update_sops.sh --group devnso-adp-argocd --find_secrets
# RUN: generate SOPS config
# RUN: gpg --import *.gpg.pub
# RUN: sops updatekeys ./loki/loki/secrets.yaml
...
# SUCCESS: all users with keys in this dir should have functional keys
```
**Commit the changes, Create Change Request (PR/MR)**
```shell
# git: commit the changes to `.sops.yaml` and secrets files (`secrets.yaml`) files
% git add .sops.yaml $(find . -name secrets.yaml)
# **CAVEAT**: check for other changes with `git status` ! The files do not always follow consistent conventions.
# output:
% git status
...
no changes added to commit (use "git add" and/or "git commit -a")
% git commit -m "adds max.musterman to sops config"
git push -u origin add_pubkey_max-musterman
```
Now proceed to with the remaining steps, i.e. gitlab: open a MergeRequest, Review, Merge
## 3. Onboarding: [New User] Configure SOPS
SOPS is used for encrypting secrets, e.g. credentials for various systems
## Install
1. **Install Sops**
1. https://github.com/getsops/sops
- Note:
* MacOS: If desired, one can also use brew to install sops: `brew install sops`; although this is not officially maintained, [the formula is essentially the same as the official installation instructions](https://github.com/Homebrew/homebrew-core/blob/4496ce5131bc09e7065fa0aa8fb96366a3df6477/Formula/s/sops.rb)
1. **Configure Sops**
* Add the following to your `~/.bashrc` or `~/.zshrc` - but _not_ to your `~/.profile` as it must be set per session:
```shell
# Enable interactive passphrase prompt for SOPS
export GPG_TTY=$(tty)
```
1. **Verify SOPS Installation and Key Configuration**
1. `./verify/usr_confirm_keycfg.sh`
## Usage
Decrypt and Display Secrets in Terminal:
```bash
GPG_TTY=$(tty) sops secrets.yaml
```
<!-- CAVEAT: if GPG_TTY is set in environment, no need to specify it again. Leaving it inline for this command to be explicit about requirement for correct functiuonality -->
Note: The `GPG_TTY` is necessary to have the password prompt appear. src: https://www.varokas.com/secrets-in-code-with-mozilla-sops/
Note: `secrets.yaml` is just an example; the file can have any name
# Playbook for Removing Expired Keys
## Offboarding: [Existing User]: Archive Expired Keys (EOL)
To mark a key as expired:
1. move it to the `archive/` dir
2. for each group, update the project repo
3. remove the key from the group
### 1. This repo: archive
```shell
# archive key - DO NOT delete - need this for auditing
git mv ${keyname} "archive/${keyname}_$(date '+%Y-%m-%d').archive"
# remove from verification sops
./verify/usr_confirm_keycfg.sh
```
### 2. For each group / repo:
**Prerequisite**: Local copy of each repo corresponding to a group
```shell
# list all groups to which the key is registered
find groups/ -name ${keyname}
# For each group, update sops config in that repo
# Example:
% cd devnso-adp-argocd
% ${PATH_TO_COMMUNICATION_KEYS_REPO}/bin/update_sops.sh --group devnso-adp-argocd --find_secrets
# now git commit, push, etc
```
### 3. This repo: update groups
```shell
# remove from groups
find groups -name ${keyname} | xargs git rm
```
# Advanced
# Reference: Commands for gpg keys
## import gpg keys
```shell
gpg --import /path/to/keys/*.gpg.pub
```
## list imported gpg keys
```shell
gpg --list-keys --keyid-format=long
```
## SOPS Example - Manual
The steps in the following example can be run locally in order to:
* create a sample secrets file
* encrypt the file
* decrypt the file
If these steps work, sops is configured correctly - on your machine ;-)
```bash
#!/usr/bin/env bash
set -ueo pipefail
# demo: create a file with a mock secret, src: https://bash-org-archive.com/?244321
# PREREQUISITE: valid sops config, i.e. .sops.yaml - Note: most repos already have one
# further reading: https://github.com/getsops/sops?tab=readme-ov-file#using-sops-yaml-conf-to-select-kms-pgp-and-age-for-new-files
yq -n '.demo.credentials.secret = "hunter2"' > secrets.yaml
# encrypt
sops -e -i secrets.yaml
# decript, print to console
sops -d secrets.yaml
```
# Contributing
Tests: `./verify/test.sh`
### list imported gpg keys
gpg --list-keys --keyid-format=long
Caveat: requires working SOPS config,pgp key, etc

@ -0,0 +1,42 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
tPQpHpp5OcriKFWxiZSM41Wm5yHn5Yc=
=BUTZ
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,41 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
uWpPH8d2cqJE4vaH6DU+MAKj5hkXPg==
=9aJE
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,13 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEaD2xXRYJKwYBBAHaRw8BAQdAKL1LP1gP7t3R41tNdVH5cUu7OksuY7FDwoq0
EX/IznG0KkR1c3RpbiBCbGVzY2hrZSA8ZHVzdGluLmJsZXNjaGtlQG5ldGdvLmRl
PoiTBBMWCgA7FiEEjWAJEv1C71NS043SL9cfRX73u4sFAmg9sV0CGwMFCwkIBwIC
IgIGFQoJCAsCBBYCAwECHgcCF4AACgkQL9cfRX73u4trEAD/Z/e5IU9+PyU0oSFT
tu9i2t2muFwrNdxsrkgATNJoJqEBAPGRo5apeOwH/8rqfOnK89AMUPPD9DS5Giqg
RPOT4/UOuDgEaD2xXRIKKwYBBAGXVQEFAQEHQKI0sArCldO4QoHZZNUDpk2e92WC
aJSpEpqaQ1ODqGVwAwEIB4h4BBgWCgAgFiEEjWAJEv1C71NS043SL9cfRX73u4sF
Amg9sV0CGwwACgkQL9cfRX73u4tnzQEA5+wX3G6uInM8rkMCGxaZ4/0gV30Kc2ye
1YqWNjZBgKUBAKLeSWj7VzdV/nZ/rgmrZx44pQxbsv5IYaZbYKxanuwD
=vPAd
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,41 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
=X2KC
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,41 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
=HyNL
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,41 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQGNBGWuVaMBDAC/33yhaLE1EG1Nqh/01icxTiJAolF6HZj/QzgPMf2Q30TLvWth
uE/IEIaRxKs1N1Rql9vntCUGmS47aBgiskL8cAsIv6GWq7k/U+8EQj1gjwdUgEF1
nwdMNnmya3xAwFTbHds0EcGFlRDv1Xr5aFMSYxFtlNNxZA4zR0cdb2qvMnQUi4ep
BrvTSvAht93I1ERSgZl2/jPydEmz2t/AibVERaAT+aJmCd03Tkb8SktoaM8F8ECG
S/bHJkqnLjdXM1ufTyDzSNmSiHNnGt53Vxxt2jYHU5X8H2VYnItkIe5RdDXzj2RP
aQIcd5Zq017c/pc/P6Y/queqZxIY96lWVAQt91KtNzIUF56WM5xCY8vyUaJK9yjH
KXIEgV/erqZlwQ8WV0adSua6K4HWrzc4RTm7MntRCoFpZ5adZcEZeLv+8MtTdvwS
7MzdOU1j7XsbILCkE+Pif3qyNzMZrzNf7mE80fAE/Qfo3t6WKrippNDOB++73ZWm
giOES5sfYWavVjsAEQEAAbQmSm9zaHVhIEthcGZlciA8am9zaHVhLmthcGZlckBu
ZXRnby5kZT6JAc4EEwEKADgWIQSMzPzAta0/OCtRujL03vSWKAMO2QUCZa5VowIb
AwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRD03vSWKAMO2Vn0C/9yF66FOyIL
TJFNWRfMkLQuArHNiOKdu60AiZfe+vb6QAAccTVjh6u/eB2sG6pqv1acT/6FTXWg
5g92C92OjKGFEgjGRxdMq1YTiR3SVBwixssu0Rn6EbNMO4lmu2c8t4y3JxdnZ1In
jctvlOBCHdMev7ARW27W73kLKDacsw/trJsyrJHnUfrvzeqQIDC1EPYGYqSxwVev
5KptTWWO7mdOyWNRxfwtrhkqJJtzIx9boF2IQ86Fk1tYgXutA23WMKAUij8FZTrh
SApvKk/WfVY2bCvq3YYu9ROFG/HvpYJs2GhtpDOjl/HJvAYj8N+n9DBBgVlIlFjG
2SFdvhgBos3eW5PKInjnGkPePsfLoRVAPEH2h1jnH3J2qB1Nxrg2C7HuSksPJY2i
UDOa7K3wkjtehvOf/jEphmFF3o0y1twosfR1WDbvtDXqKxrY4Kpl/yYRwnzrxJzH
9Wm6157jRUUMgX7BgrSvdY+zkTd0+gNIDhiUMjiBDOBO6n6dmoNPgSG5AY0EZa5V
owEMALqXyRZ2/v2mEwPFFxEXO/qHTwSjqrpZJVpttgrlUL3uTqonLd0pJNFjTN+3
duubKIScvSsOw7ggv2e7pnpOHacpLIV6f6gLbcS8GdnaqOS9dQr813S5dEJ0sWsc
rMjHETF9uG6GUs24L0pNYhx7R5Cz57JG2JvUprgg0Xi3FsKLKr+YPrqRE6qZnpOD
OW7bOPwpZ9Bhl3pcgSikTk3DbBzzENDiI3L0pTIc7WjCuhwM/bqNhR/6/O4D6u7G
B8atp1nOeJLXC4qcx62ilZf/G56oLtaVZQDNnRSaAR8tty+evgbGrfzhUPqVWpoj
dzLWn3tPOlgLWzemJLNdkDLktLJ2UnSQADpUdRIARsAubHTJSWVqJH8FxNhXnXsL
YmjKfhR00/ijLJzOfYS3Paa4nbiKK3jRwbesjtPEd5MrpInk3tytjxZ0a5DH4GHx
6aR8KOLKeYVK4EyP9dwsvQmxhUzqaMZZ5i7PXKUxVPilKgd05y0+zGsVO1RAJjEM
fbJhkwARAQABiQG2BBgBCgAgFiEEjMz8wLWtPzgrUboy9N70ligDDtkFAmWuVaMC
GwwACgkQ9N70ligDDtlL8Av9GFYsCetjtjqQAHDdhXTMp/X9UgyB/b2sceHKSQ/5
VkGOMFfPqZ1o8tQZ2Duy1bLyVQgryJyYn7gED4QPsqc1GJpshGeLKU6XH7k9KS9W
/iUdOlaI8TLPp71yD041L41xKxTFbzg40qnbJNw6jcwST/zYX8Bpn1WU3niZWXYg
uHzLN8Tp+Y6+BA8oUeIoUKFgNaypQ2fM7lx+u2ecs9bqLEv3YuVjSpbV3XNKRIVd
ES1Xspnz+B+PnUYbxTik+NIa7LNrByev4SaqQu58Bpp7Fvi93NiaqgeluXbY7bD/
CdBje/pq/WMj9W26/Y+HyQuUT47JPOckWC7G55wtDLiokFbLVZBHwwq/IrFLtpgM
X9Q0WTOB7SQPPdS0WBuRR9CbV4jpHz5xWyvP8r3MNgWoaPTlg+xH+sA6Ug3CSNLz
bW69Td9bgJBxB8T9T2lDYevb3rWmcv3yc1CJLYJiAaJYAID5fe51xg33+q0+PrNJ
xoXz2Y+My/Z6wCcGagL64gIJ
=n1VP
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,15 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEZ5t/ExYJKwYBBAHaRw8BAQdAsV81UuOG9TR5Xg3rrHa93NWW/veCvN8ZsBM0
lX/wBWW0akxlZSBXYXRzb24gKGRpZXMgaXN0IG1laW4gc2NobHVlc3NlbCwgZXMg
Z2lidCB2aWVsZSDDpGhubGljaGUsIGFiZXIgZGllc2UgaXN0IG1laW5zKSA8bGVl
LndhdHNvbkBuZXRnby5kZT6IkwQTFgoAOxYhBL89XOo221iq4QY9C7NBB4ZS2Hkk
BQJnm38TAhsDBQsJCAcCAiICBhUKCQgLAgQWAgMBAh4HAheAAAoJELNBB4ZS2Hkk
7TAA/3W3D1axDgnDIS9cIQtKqDLHSOJ1Pk+KuoyWKUweFTVlAQCBvUy3NwQzKYOH
SZswp6WaBAX0DYBFxNBMB7jP0zXUDLg4BGebfxMSCisGAQQBl1UBBQEBB0CNviST
aU9noe0eXmuPtpTn0ZVVQ/mjw9yd55lKKvFIHwMBCAeIeAQYFgoAIBYhBL89XOo2
21iq4QY9C7NBB4ZS2HkkBQJnm38TAhsMAAoJELNBB4ZS2Hkk6FwA/1VgI+z4IRFM
y5La4mK01XHgwUQh8urBccxgPX8h+HriAQCheHzBj4wjyJNeyJOhtDWBtljLWxTa
QO9g7aMtOLL6AQ==
=MP94
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,52 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
FK1N3nxyVq/4XV+g0NWUcQ==
=K+MA
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,41 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
=lTUf
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,14 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEZapgFBYJKwYBBAHaRw8BAQdAiczO6smFDVWsbrIc7kRqVTrNeSFapbwSJF5n
Yemweo+0S3BvYy13b3JrbG9hZDAxIChwb2Mtd29ya2xvYWQwMSBncGcga2V5IGZv
ciBzb3BzKSA8TlNPLVRlYW0tRGV2T3BzQG5ldGdvLmRlPoiQBBMWCAA4FiEEmCNa
QZ6jWGv/Tj/GktSlICoNlRkFAmWqYBQCGwMFCwkIBwIGFQoJCAsCBBYCAwECHgEC
F4AACgkQktSlICoNlRkoEAD/XyxurZfbQnZ2N8NnBzSrBCJ8hfEJRM17eBaT2F2g
eBQBAPJf65hLd72Peepvnfk/efSiZGSA31vrIt8tJVgGas0KuDgEZapgFBIKKwYB
BAGXVQEFAQEHQPx67cgOLZfAFA6H0lp+HAw+lMdCTSxgU58AHXfFASRNAwEIB4h4
BBgWCAAgFiEEmCNaQZ6jWGv/Tj/GktSlICoNlRkFAmWqYBQCGwwACgkQktSlICoN
lRnxiQD+IMG8UYNHG7zkDh5C1D4d1v5Ro6IiH1Bc0Ro6Na2jfhgBAJ1s9R25LsUl
+PVVVd9FKcpaJ9TQig2YTXB74hBmBlAK
=tZ92
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,13 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEZaKQ7BYJKwYBBAHaRw8BAQdAoojbJta/+C1qDSCnF1NOvG5lMg4RTOVThHVP
MQXnXGO0JnJhbmNoZXItcG9jIDxOU08tVGVhbS1EZXZPcHNAbmV0Z28uZGU+iJME
ExYKADsWIQRCqn9r95VJDBpSLHMO2EK+EhbgwQUCZaKQ7AIbAwULCQgHAgIiAgYV
CgkICwIEFgIDAQIeBwIXgAAKCRAO2EK+EhbgwYt/AP0eQdAGQGcOU1s+CdlCIl2p
znBQwTBl1PFAZQz1EE2uzAD/Ud+S9SP/vDhbfNKt6a2NgUtY/rI7m8VlgMMChG0H
sQq4OARlopDsEgorBgEEAZdVAQUBAQdAtrPSlTIRKl6mHhuOAYCPsDslzMoJe/Uy
CyPLb+3hwwEDAQgHiHgEGBYKACAWIQRCqn9r95VJDBpSLHMO2EK+EhbgwQUCZaKQ
7AIbDAAKCRAO2EK+EhbgwRdHAP0Upk59hDryFs/UmALKUE3wo0fpIAUoPygSC5bM
uKwkiQEA8Vu7DCVdtyPefNnrC/4WjOaOtbPLxcYiiCiKnci4PgM=
=A0Ol
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,41 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQGNBGTY+c8BDAC9BKw9KEaFy58CzL2yD39G7wN1CPWO+N8/R3AwSp3dpKd8k5g9
0ReiqjKBVPmhikh9YVJCrksL7Kf6KmXMsnnhtoTpb3BHiLlULGMtrB+hX6YdUA+m
qDwD5/ksB6ngQnOHFrzAYb5wkRAiS8iSsY6IbqUl1DKbemWbaK8Hxv0FOstFV5c6
xi/LxXmOXyEix5UDwEKjq0PGSD7K0AUj7DmP0kUqZXjNpY8Gbog+64ViKdnCHR8F
pHZSFBn/NwD1253dK+tDtMUHUL0RIA9vdrmXTfaoName/lKkA6pr84xDkcYggBFo
xLA0bU2NDXRfFauE2TVhVdZ8M28EbmaAQSHzWEKtXMgynuOelb2I7RjUcIo8+Z2l
aFy7AEVTDFG8ebBTtKBedGHUT6UUBptwztA8kyqKxJfvpIfBywAr1SQyp+z9HOU0
zJCvj/J6C6+pb3KhNNaU7kc9fZEiitSywEPGltnQF9/nyXMh9rXv9Ss/KH7HLsgy
ULAu8ZgetCJSty0AEQEAAbQ1c21hcmRpZ28gYXV0b21hdGlvbiBTU1BERVYgPE5T
Ty1UZWFtLURldk9wc0BuZXRnby5kZT6JAc4EEwEKADgWIQRWI8ytQkLMPgIlpimG
rwnBc3gVeAUCZNj5zwIbAwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRCGrwnB
c3gVeMyOC/wMq1nI+J4494Uhli7I2N+B7MTNa5pyb+eUmhx13w4JuZDlDqAhoKFD
H3pmevxS57ygA5jJCZR1cOK53+g8SzW4RAVDOGmh0/VfwsP9NZmtsP0d1svZYKrm
MlMt3s0UEHB3tk1YJlhO70C4xn98bxpx4cvsR0xW3jJN+K+tZeb5CbqgzA9JLZHT
9atrNN3K417FsRB0X+D7xb+d5vfmMPJUIJEEHyV7fl9gnFBCtKssg53agnDS+IwB
H0yRiB0obOAPxBIicyQws8U/rhE3mIwCwdzI5CM6qqDn6N599RtMDflaCN6ahJFD
y9kMGWORMfYWn7H662tQfiILU4UGiVu79RDMbDAd1Aj7A1B3OSSRbluJvoq2KzeH
lWwjLEp0442NUUHo27WWAvscyV27MznC+qOJP0G5Sscn/kGi2NvScgSlGLw5LpJW
YfYmL+rE2FoWJQdFuqqOT81XD+F8mt+LSoF3q2wlB3v0WckmmpjZVFaV8hRVHI51
nVW8/anfm3W5AY0EZNj5zwEMALF+Yp6EKa2g1O4+TSirLe/bLRJ88Ql03dZBzlQa
zlB4r7bEbL+uHyAB7KLkBCafuyqpS1BY3xLsyYnefa7bGWGQouSwu238QaDTNh6a
nqBqUchaLGeRDBHAE901NkXpWKgqGbJEgJfr2WpU5rJJNLsAzom6f0m/WxsBPq2m
DQm2K2HLKWVIUnq+VsKYuQChOOr9LGf1oyMgc7zUKDqw33py+O3rdBIs50XsmGne
TvbUdCk4dEHYH55YKr3xxvXLdYVe5XHZr0s5+YqLpaChvyP+vpCGX6drXSHDC9ig
6S37CnmT2m2AOuJlrvONBHxWPUEBSwjU6IxE30pdoQkDaHuTA28RWgtAHIp8Lblw
Ff0hLiQIdqeSwlVQ9TXeupZ/to4MiFcz0OckjN4jqfv0DXfM8wz/t/J1cl9ydv44
ZR76KJbyv5yPs53qcC2l8qY8bunYzCtCt9PK3YpTz81pOyUl1lVwU4eKyxx/wQGZ
s47VvtbRXHAgrRH4bYFJYLX6cQARAQABiQG2BBgBCgAgFiEEViPMrUJCzD4CJaYp
hq8JwXN4FXgFAmTY+c8CGwwACgkQhq8JwXN4FXgpjwv+LTSDJjy7bhJHrPCOUrO0
zyJxTA2EHGksTwkmjwwNSjOzfVla8hzvkIwnexgygbKB4bWEXwwLxisFtIFN1H3M
q7ay4k0nBaxWgbSfqOp7G8QtFQ7uNFIo9usnQpV1wbp7jDg5RvMsRD7guS7dmKui
o5jFnbVlrk/Ce0kiYpUkUQen/N0byEjfkl7oyxc4neRoz4y8072nmofijsHjDLh9
mYacXqs7LqKOBdqaLIa8j2ayH6uf2R7nf1hifUFmpgE3HYR9XUxmVo6q5n/UmqJE
XxYcM1hfa0Syp95EuSxVkPkNMDWV+iP7sHr0/FQsRzEq/6lohNLFbr0jbMw7fYaK
0ksRqMSw5dunGJQz5I0+F2vmSpLMDooD4WFheA4UpvfogW7PivRGhqVj0CAGjFWy
1tinOC8w81Y38uaJLPIPQ1dzJ1O6AGlFvW4AKIwEDYuKk/+aDQZAsmDNeJKgoJFS
wPQTUgXWYCtWCDEtJzq2RbmTtIf7qvTG0LspWmHolvv7
=3vxq
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,65 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
=0CuK
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,13 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEZ8csoBYJKwYBBAHaRw8BAQdA4XDYoQCpDYRQVMdhXWaQ8R+DJWfDUZKLGp0L
CDKQkLG0JkJhcyBDYW5jcmludXMgPGJhcy5jYW5jcmludXNAbmV0Z28uZGU+iJME
ExYKADsWIQSfU0FojS+QJKFVQcngKUnQ93aeLAUCZ8csoAIbAwULCQgHAgIiAgYV
CgkICwIEFgIDAQIeBwIXgAAKCRDgKUnQ93aeLCLFAP0XM8gj8Dj6/j+CudjOemlZ
YtMeWKgzoQavq5MjvqpC5gD/SfhHrENFxqIauGyLhX3YOlYTu77nFjFD9Ue4eiXe
gAi4OARnxyygEgorBgEEAZdVAQUBAQdANCBJmJchzCLLpCje17NJp4xn5gKXMLQ5
eEonhmkAdUMDAQgHiHgEGBYKACAWIQSfU0FojS+QJKFVQcngKUnQ93aeLAUCZ8cs
oAIbDAAKCRDgKUnQ93aeLC07AP4jKmcbtyZGhV2efFbmempjylr231bG/3s5xust
+csUTwEAwu1QQPRX/OYpecVo0xIDiynnk4jeJDsRyOuFMkYpTw0=
=t/YD
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,244 @@
#!/usr/bin/env bash
# Purpose: manage .sops.yaml based on gpg keys in the same dir _and_ verify correct configuration
set -euo pipefail
function fn_gpg_extract_fpr(){
# PURPOSE: get fingerprint from gpg keyfile
gpgkeyfile=$1;shift;
# fingerprint
# caveat: restrict to netgo.de email, use-case:
# uid ... <...@mehrwerk.net>
# uid ... <...@netgo.de>
# fancy gpg src: https://unix.stackexchange.com/a/731872
fpr="$(gpg --show-keys --list-options show-only-fpr-mbox "$(readlink -f "${gpgkeyfile}")" | grep '@netgo.de' | awk "{print \$1}")"
echo "${fpr}"
}
function fn_gpg_extract_uid(){
# PURPOSE: get user-id from gpg keyfile
gpgkeyfile=$1;shift;
# user id
# caveat: restrict to netgo.de email, use-case:
# uid ... <...@mehrwerk.net>
# uid ... <...@netgo.de>
# fancy gpg src: https://unix.stackexchange.com/a/731872
uid="$(gpg --show-keys --with-colons "$(readlink -f "${gpgkeyfile}")" | awk -F':' '$1=="uid" {print $10}' | grep '@netgo.de')"
echo "${uid}"
}
function fn_sops_locate_config_in_git_repo(){
# PURPOSE: locate sops config
# Returns path sops config to be updated; defaults to returning "$(git rev-parse --show-toplevel)/.sops.yaml"
# sops locates config by recursively walking _up_ the tree from the execeution dir context,
# + _but_ does not have a mechanism to update the sops config
# This function does the same in order to locate the correct sops config to update
# starting dir, default: PWD. Note: 'realpath' to normalise the dir
start_dir="$(realpath "${1:-"${PWD}"}")";
stop_dir="$(git rev-parse --show-toplevel)"
>&2 echo "# ---"
>&2 echo "# start_dir: "${start_dir}""
>&2 echo "# stop_dir: "${stop_dir}""
# BEGIN
search_dir="${start_dir}"
contender="${search_dir}/.sops.yaml"
# base case - located the file OR stopping condition - at top of repo
if [[ -e "${contender}" ]]; then
>&2 echo "# BASE CASE: found ${contender}"
echo "${contender}"
elif [[ "${search_dir}" == "${stop_dir}" ]]; then
>&2 echo "# STOPPING CONDITION: no sops config found, suggesting: ${contender}"
echo "${contender}"
else
>&2 echo "# walk up one dir..."
fn_sops_locate_config_in_git_repo "$(dirname "${search_dir}")"
fi
}
function fn_sops_generate_config(){
# PURPOSE: generate sops config based on keyfiles
# sops.yaml doc: https://github.com/getsops/sops?tab=readme-ov-file#using-sops-yaml-conf-to-select-kms-pgp-and-age-for-new-files
# CAVEAT: dirty hacks, as DRY as feasible within bash
>&2 echo "# RUN: generate SOPS config"
# hack: 2D list workaround, i.e. difficult to have list-of-lists
fpr_list=()
uid_list=()
type_list=()
for gpgkeyfile in *automation*gpg.pub; do
type_list+=( "autom" )
fpr_list+=( "$(fn_gpg_extract_fpr "${gpgkeyfile}")" )
uid_list+=( "$(fn_gpg_extract_uid "${gpgkeyfile}")" )
done
for gpgkeyfile in $(ls *gpg.pub | grep -v automation); do
type_list+=( "human" )
fpr_list+=( "$(fn_gpg_extract_fpr "${gpgkeyfile}")" )
uid_list+=( "$(fn_gpg_extract_uid "${gpgkeyfile}")" )
done
# header
echo "# Fingerprint | User Type | User ID"
# entries/rows
for ind in "${!fpr_list[@]}"; do
printf "# %s | %s | %s\n" \
"${fpr_list[${ind}]}" \
"${type_list[${ind}]}" \
"${uid_list[${ind}]}"
done
echo "# keys in https://git.dev-at.de/smardigo-hetzner/communication-keys"
cat <<EOM
creation_rules:
# list of keys for encryption in stage
- pgp: >-
EOM
# all but last line get comma
ind_2nd_last=$((${#fpr_list[@]} - 1))
for fpr in ${fpr_list[@]:0:${ind_2nd_last}}; do
echo " ${fpr},"
done
# last line no comma
# echo " ${fpr_list[-1]}," # requires bash v4.1
echo " ${fpr_list[${ind_2nd_last}]}"
}
fn_sops_updatekeys_and_verify(){
# PURPOSE: call 'sops updatekeys' and dump contents of file so end user can visually verify functionality
sops_enc_file="${1}";shift;
# update keys in secrets file
test -e "${sops_enc_file}" || exit 1
# "update the keys of SOPS files using the config file"
>&2 echo "# RUN: sops updatekeys ${sops_enc_file}"
# HAAAACK: loop through all passed-in files, ignore any errors, always say "yes" -> rely on git diff to verify!
sops updatekeys -y "${sops_enc_file}" || echo "SKIPPING"
}
function main(){
if [[ ! -n "${@}" ]]; then
# if empty args, remove
shift
fi
# "anchor" for actions relevant to this script
repo_root="$(realpath $(dirname "${BASH_SOURCE[0]}")/..)"
# OPTIONS: ARGPARSING and VALIDATION
# assume location of script as running directly from repo with keys (instead of as a standalone packaged tool)
keyfiles_dir="${repo_root}"
# dir containing .sops.yaml
sops_config_dir=""
# path to group definitions
groups_def_dir="${repo_root}/groups"
opt_list_groups=0
groups_list=()
opt_find_secrets=0
secrets_file_list=()
while (( $# >= 1 ));do
cur="${1}";
case $cur in
# ARGS: print this help
-h|--help) echo "# ARGUMENTS:"; grep -A 1 '# ARGS:' "${BASH_SOURCE[0]}"; exit 0 ;;
# ARGS: [optional] dir containing gpg keyfiles. defaults to git repo root, var: ${repo_root}
-k|--key|--keyfiles) keyfiles_dir="${2}"; shift ;;
# ARGS: [optional] defines dir for sops config file (.sops.yaml), create if needed. defaults to git repo root, var: ${repo_root}
-c|--config_dir) sops_config_dir="${2}"; shift ;;
# ARGS: [optional] show list of groups and exit
-lg|--list_groups) opt_list_groups=1 ;;
# ARGS: [optional] [list] specify "groups" which correspond to e.g. job groups, projects, etc
-g|--group) groups_list+=( "${2}" ); shift ;;
# ARGS: [optional] update all "secrets.yaml" files found below .sops.yaml location
-f|--find_secrets) opt_find_secrets=1;;
# ARGS: [optional] [list] specify files containing sops-encrypted secrets
-s|--secrets_file|-f|--file) secrets_file_list+=( "${2}" ); shift ;;
# ARGS: [optional] [list] specify files containing sops-encrypted secrets
*) secrets_file_list+=( "${cur}" )
esac
shift;
done
# Resolve Parameters
# ... i.e. combine,override,etc options which interact
if [[ "${#groups_list[@]}" -eq 1 ]]; then
# simply change keyfiles_dir to the "groups" dir
keyfiles_dir="${groups_def_dir}/${groups_list[0]}"
elif [[ "${#groups_list[@]}" -gt 1 ]]; then
>&2 echo "# ERROR: only specify one group"
exit 1
fi
# VALIDATE INPUTS
keyfiles_dir="$(realpath "${keyfiles_dir}")"
test -d "${keyfiles_dir}" || (echo "E: specify dir containing keyfiles; invalid dir: '${keyfiles_dir}'" && exit 1)
# define sops config location
sops_config=""
if [[ -n "${sops_config_dir:-}" ]]; then
# user-specified
sops_config_dir="$(realpath "${sops_config_dir}")"
# vvv possibly redundant, since the 'realpath' will fail if dir not valid
test -d "${sops_config_dir}" || (echo "E: specify dir containing .sops.yaml, invalid dir: '${sops_config_dir}'" && exit 1)
sops_config="${sops_config_dir}/.sops.yaml"
else
# locate appropriate sops config if default assumption not found
# dev note: '2> /dev/null' to disable debug output
sops_config="$(fn_sops_locate_config_in_git_repo 2> /dev/null)"
sops_config_dir="$(dirname "${sops_config}")"
fi
# Paths to Secrets Files
if [[ "${#secrets_file_list[@]}" != "0" ]]; then
for secrets_file in "${secrets_file_list[@]}"; do
test -e "${secrets_file}" || (echo "E: could not locate file with secrets, tried: ${secrets_file}" && exit 1)
done
fi
if [[ "${opt_find_secrets}" -eq 1 ]]; then
# DEV NOTE: this is far too complicated
# loop through find, src: https://stackoverflow.com/questions/9612090/how-to-loop-through-file-names-returned-by-find
while IFS= read -r -d $'\0'; do
secrets_file_list+=("${REPLY}")
done < <( find "${sops_config_dir}" -name secrets.yaml -print0 )
fi
# /VALIDATE INPUTS
# /OPTIONS: ARGPARSING and VALIDATION
# BEGIN
if [[ "${opt_list_groups}" -eq 1 ]]; then
# list available groups and exit
pushd "${groups_def_dir}" > /dev/null 2>&1
>&2 echo "# INFO: listing groups"
ls -1d *
exit 0
popd > /dev/null 2>&1
fi
# UPDATE SOPS CONFIG
# update sops config
# TODO: remove the 'pushd;popd' workaround and make the functions aware of the dir being read
pushd "${keyfiles_dir}" > /dev/null 2>&1
(fn_sops_generate_config) > "${sops_config}"
popd > /dev/null 2>&1
# VERIFY
if [[ "${#secrets_file_list[@]}" != "0" ]]; then
# import keys
pushd "${keyfiles_dir}" > /dev/null 2>&1
>&2 echo "# RUN: gpg --import *.gpg.pub"
gpg_out="$(gpg --import *.gpg.pub 2>&1)"
popd > /dev/null 2>&1
# update
for secrets_file in "${secrets_file_list[@]}"; do
fn_sops_updatekeys_and_verify "${secrets_file}"
done
echo "# SUCCESS: all users with keys in this dir should have functional keys"
else
echo "# WARN: no secrets file passed in, make sure to call 'sops updatekeys' on secrets files"
fi
}
# pass-through, set default value
main "${@-}"
exit

@ -0,0 +1,14 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEZ9LiixYJKwYBBAHaRw8BAQdAo9TZ7FbNytrM9Odrm1fg4SV3AurPr6B4Z6wT
bYmc0Iu0NUNocmlzdG9zIEFkYWxpcyAoR1BHIEtleXMpIDxjaHJpc3Rvcy5hZGFs
aXNAbmV0Z28uZGU+iJMEExYKADsWIQT38yjw5JWOTHhZd+I7iqC6q62v5AUCZ9Li
iwIbAwULCQgHAgIiAgYVCgkICwIEFgIDAQIeBwIXgAAKCRA7iqC6q62v5JTTAP0R
ME/a4n1TkA7QtUc06KEhdYPld8T3udBusk67jWLGMQEA/niJGzcmoSbNDGvC6hLi
fw9ZlohBFItF8Dur/mLPWgS4OARn0uKLEgorBgEEAZdVAQUBAQdArq2uimWJutt0
DsCEPAwlirHZI476ks1eNr8n3RTzbhEDAQgHiHgEGBYKACAWIQT38yjw5JWOTHhZ
d+I7iqC6q62v5AUCZ9LiiwIbDAAKCRA7iqC6q62v5KgjAP9Q/dfkGy0/9cKJsmPD
emKfbZbQ8FrNX70+oYMGxjV3WwEAyol9yD1pJSt1g3R9/oHo7/KW5ZsXbVIx/Vqc
uskiLgA=
=sg0j
-----END PGP PUBLIC KEY BLOCK-----

@ -1,52 +1,13 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
1vC99G5EtuXL1U37Qp8Kug==
=vm8K
mDMEaEBF9xYJKwYBBAHaRw8BAQdA6syYUNOSScarxQGom8QcmY/yaK+OWhAQ68IY
dj7KxzW0JENsYXVzIFBhZXRvdyA8Y2xhdXMucGFldG93QG5ldGdvLmRlPoiQBBMW
CgA4FiEEZZ/e1D3hVft3KjObNDzxIYpmTTEFAmhARfcCGwMFCwkIBwIGFQoJCAsC
BBYCAwECHgECF4AACgkQNDzxIYpmTTHvVQEAi2IabzcpNK6ZBmsP2NL52oXhY4iM
bzDEtJul0E/hcvEA/3cPIZ9lIB8WeA6SK8nAgV5AlxGXsCdHsv55A2F/vDEIuDgE
aEBF9xIKKwYBBAGXVQEFAQEHQNGjADOks0AjX4qlQ3xgSOP0RBIELjqYBH/Ihiwf
eQ9ZAwEIB4h4BBgWCgAgFiEEZZ/e1D3hVft3KjObNDzxIYpmTTEFAmhARfcCGwwA
CgkQNDzxIYpmTTFyOQEArR4vKYPP9cD6Plsn0pK4hONApCEHRKGC0d3JtUkZvJAB
ALaWq4tjsPm4wF6D9RMN9tCuPPVtt/FbGzVBlm3OP2sL
=PsTc
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,51 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
=++7P
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,14 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEZ9Lk+hYJKwYBBAHaRw8BAQdAAImByKSkf+XTHj9o6BareP+aIhkTz1KV+4ZI
AsSgv/u0OURhcnlsIFNhdWVyLU5ldW1hbm4gKFNPUFMpIDxkYXJ5bC5zYXVlci1u
ZXVtYW5uQG5ldGdvLmRlPoiTBBMWCgA7FiEEAUMBn2JGntWmoBbCGcp2TTdZD58F
AmfS5PoCGwMFCwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4AACgkQGcp2TTdZD5/T
6gEAkVq5UnUPs6poLj2Tdqzlj13wToRpP3WFmDaa4mB9uM0A/1Yfde+hFFKIWPFR
hnfXeBH7HLHLC6EC7U58B8P8/aELuDgEZ9Lk+hIKKwYBBAGXVQEFAQEHQJZ2QRYW
XQ6N/wtLePHyafLb+D4wW4Di5SwoO2P/RwVZAwEIB4h4BBgWCgAgFiEEAUMBn2JG
ntWmoBbCGcp2TTdZD58FAmfS5PoCGwwACgkQGcp2TTdZD5939AD/U1HH5hOyo5n7
660ZFL5PoZpm9yxPwAUPa+Mp63QR/IQA/RNlBVGaCRlgWsPa7COo6n7yc0XfB6bi
on9JkIJgK0oB
=PxAk
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,52 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
TctQLWVga46PdA==
=gy6q
-----END PGP PUBLIC KEY BLOCK-----

@ -1,52 +0,0 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
ivy47t0TrEPQWvKPEVOFaG0Y6l26+37PJsQrNbU=
=r/k0
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1 @@
../../claus.paetow@netgo.de.gpg.pub

@ -0,0 +1 @@
../../hoan.to@netgo.de.gpg.pub

@ -0,0 +1 @@
../../michael.haehnel@netgo.de.gpg.pub

@ -0,0 +1 @@
../../smardigo_automation_buildinfra.gpg.pub

@ -0,0 +1 @@
../../smardigo_automation_demompmx.gpg.pub

@ -0,0 +1 @@
../../smardigo_automation_dev.gpg.pub

@ -0,0 +1 @@
../../smardigo_automation_devnso-adp.gpg.pub

@ -0,0 +1 @@
../../smardigo_automation_devnso.gpg.pub

@ -0,0 +1 @@
../../smardigo_automation_prodnso.gpg.pub

@ -0,0 +1 @@
../../smardigo_automation_sot.gpg.pub

@ -0,0 +1 @@
../../smardigo_automation_sot_test.gpg.pub

@ -0,0 +1 @@
../../bas.cancrinus@netgo.de.gpg.pub

@ -0,0 +1 @@
../../christos.adalis@netgo.de.gpg.pub

@ -0,0 +1 @@
../../daryl.sauer-neumann@netgo.de.gpg.pub

@ -0,0 +1 @@
../../frederik.marticke@netgo.de.gpg.pub

@ -0,0 +1 @@
../../hoan.to@netgo.de.gpg.pub

@ -0,0 +1 @@
../../kleanthis.damianidis@netgo.de.gpg.pub

@ -0,0 +1 @@
../../michael.haehnel@netgo.de.gpg.pub

@ -0,0 +1 @@
../../smardigo_automation_devnso-adp.gpg.pub

@ -0,0 +1,14 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEaPiOmBYJKwYBBAHaRw8BAQdAgwGFW1hsK88TTcY4Iw8GZSVAknR0iRKnOZL3
J+cp2fu0KUphbiBKYW50emVuIChzb3BzKSA8amFuLmphbnR6ZW5AbmV0Z28uZGU+
iJkEExYKAEEWIQS5LdybkIvzkXdY0ihEbFHgSa44ygUCaPiOmAIbAwUJA8JnAAUL
CQgHAgIiAgYVCgkICwIEFgIDAQIeBwIXgAAKCRBEbFHgSa44yphwAQDIKCvEYJ2x
gd8QClL31SGpD2/5fJ4x/9cXa2pwmcPo4AD/dWYsVwX6iisiE46U2IIsL7ojDa2J
IYJPrb/HrL8w2Ay4OARo+I6YEgorBgEEAZdVAQUBAQdA9qvcdBmc2TvcReuAu3YA
ePpddYljq1L7ihWZDUWrtRMDAQgHiH4EGBYKACYWIQS5LdybkIvzkXdY0ihEbFHg
Sa44ygUCaPiOmAIbDAUJA8JnAAAKCRBEbFHgSa44yi14AQDPHLsJLjE7csjNPVGi
9XUcfq54ScEc698xyuk8LFMSKAEA0dzeY7tnfGNr7m2jq3odopRmMo99Xaw5h4YA
cQD/yQo=
=rCLM
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,41 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
DDAehRMkU50i3c9Wjjpb3w==
=UN8R
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,52 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
xXHa4LwZ0rmZQ/wRMm5l8g==
=9/jk
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,13 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEaBTWbhYJKwYBBAHaRw8BAQdAkvaY0BFbzEITBsCR3A8JnjrWZ/4orlFY7Ixe
aUSE/de0Hkt5cmEgS2VyeiA8a3lyYS5rZXJ6QG5ldGdvLmRlPoiTBBMWCgA7FiEE
u6DCZkei2Hq6GG1vPShOpyX5VS4FAmgU1m4CGwMFCwkIBwICIgIGFQoJCAsCBBYC
AwECHgcCF4AACgkQPShOpyX5VS5KCAEA5Fc+i9r1+xVRKqlf+XqX6PT1uhWKyrR4
+p6D0Q8/aCcA+wSuUcrwSNTcxfKF65wKyuOiNw5lWTTYq8vcwjIDYgUIuDgEaBTW
bhIKKwYBBAGXVQEFAQEHQBddu45Nfx+u3scccplH1OBLxSeOn6nKiSyVrrd8ySII
AwEIB4h4BBgWCgAgFiEEu6DCZkei2Hq6GG1vPShOpyX5VS4FAmgU1m4CGwwACgkQ
PShOpyX5VS4XpQD+JFrljM9ywUV17RjxZQEWpvviHGnWXYiayy/LbULb0M0A/iba
nN8E8ow17zqpng5Jqm7a/IYy8yQsNB0FYf6ddMMC
=FqJe
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,41 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
cxkB7wRnyKN9Sw5koKmAtuI8
=OEVw
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,14 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEZi90wBYJKwYBBAHaRw8BAQdA4nK+Y8QvtQpOooWRYjj7TIk9Wt0Vp6JaGuK2
c+WkRJG0OmRldm5zbyBhZHAgKGRldm5zby1hZHAgZ3BnIGtleSkgPE5TTy1UZWFt
LURldk9wc0BuZXRnby5kZT6IkwQTFgoAOxYhBMZ076VtPt/aQEsWhAkNRtjx0MD4
BQJmL3TAAhsDBQsJCAcCAiICBhUKCQgLAgQWAgMBAh4HAheAAAoJEAkNRtjx0MD4
Zi4A/iUA8jCUU0audAhTL0GTEcY8KeUQMZIQN26U2/sjLoB2AP92fGVBMNhut5Gh
SHkCKJ0m9Z+lWzMxICDfuaz+MNtEBrg4BGYvdMASCisGAQQBl1UBBQEBB0B/TdYV
cVP1jtwp1lRzq4b8T+ykUggwA/XnCznhLA2DSwMBCAeIeAQYFgoAIBYhBMZ076Vt
Pt/aQEsWhAkNRtjx0MD4BQJmL3TAAhsMAAoJEAkNRtjx0MD4eSEBAOb9EPsNjR5M
vZvOTzHLvMO22JQaYsNc4CADSNQReuG+AP9TIKzX8Yih9OGInjCBI0TJACbJya2C
DYNcmM3US11bDQ==
=DWd1
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,14 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEZ/fhOxYJKwYBBAHaRw8BAQdAu8VIhoCmqQSnlln72LVE2sW5cE5GS84pxwyh
HMbdeUm0Pm5zby1hZHAtbWdtdCAobnNvLWFkcC1tZ210IGdwZyBrZXkpIDxOU08t
VGVhbS1EZXZPcHNAbmV0Z28uZGU+iJMEExYKADsWIQSStkvV+zaOVwy5b4nKfQzD
RUpClAUCZ/fhOwIbAwULCQgHAgIiAgYVCgkICwIEFgIDAQIeBwIXgAAKCRDKfQzD
RUpClLG8AQCv3LTFvw+SzZWa0sLnvahtSR8wIpNw52+qelWDwaMYmwD+N7KhqarI
V6+TWJu9uxpc+RWk/vjlTGDchPeDoCs+xQ24OARn9+E7EgorBgEEAZdVAQUBAQdA
g8dAmTCmmnYBBqPlZDS+FMUpWMhAvCVUfmYai+ZHDQoDAQgHiHgEGBYKACAWIQSS
tkvV+zaOVwy5b4nKfQzDRUpClAUCZ/fhOwIbDAAKCRDKfQzDRUpClDChAQDI0wF7
PGDmqbGOXVKv0uPbTTLhu7oXiBq//blhkhCrjwD8Du/aEdCYoz9m6tobA01sKU+4
Gt1e4njTYlntGDL2kwo=
=hFQO
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,14 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEaJMgXRYJKwYBBAHaRw8BAQdAE6GbHO8yvEW3377zNntvGCj5lJJ1l0h5Bk/6
+cKgWJ20RG5zby1hZHAtc3RhZ2luZyAobnNvLWFkcC1zdGFnaW5nIGdwZyBrZXkp
IDxOU08tVGVhbS1EZXZPcHNAbmV0Z28uZGU+iJMEExYKADsWIQTJA8BGoGPfv49B
xldrJs9JaBKwCgUCaJMgXQIbAwULCQgHAgIiAgYVCgkICwIEFgIDAQIeBwIXgAAK
CRBrJs9JaBKwCvYpAQDWvMMhe+v3nIttUfEpln+8YQ8KSezLiCpJLQB4o5zt5QD9
Eo/ZIFriX11Y5yxnEjoFkH1LXEj66oGpMTjTojLpaA24OARokyBdEgorBgEEAZdV
AQUBAQdAuvufjrlZjxi5bpQ4MrR/Mk6qxPqU8MFQUc2Df+/alUwDAQgHiHgEGBYK
ACAWIQTJA8BGoGPfv49BxldrJs9JaBKwCgUCaJMgXQIbDAAKCRBrJs9JaBKwCloU
AP4vOcXLiHQ2nkbSm6CeP//0GX0WpsxMniOlqVxkZM5J+gEAu+IulrGA6fNrKNiv
cHh/X5eSsexomJXmxZ8dUOOhFw4=
=sfF9
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,13 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEaPtbMxYJKwYBBAHaRw8BAQdArKya+q6E/VlCAURWAj3Ggnia56yVrWSE7Jdp
cefGole0HW5zby1hZHAtdGF4IDxkZXZvcHNAbmV0Z28uZGU+iJMEExYKADsWIQSR
K9ShLWb5kxw/39GTy+xZ+yN5eQUCaPtbMwIbAwULCQgHAgIiAgYVCgkICwIEFgID
AQIeBwIXgAAKCRCTy+xZ+yN5eS4hAPsG/JbybnexMPfb7gsIiqSheeTvrGQnU1bO
2Ouz6e0FcwEAgQKoO2dbkM3/webS1F7zX0p0o1XZMW1ecHesTvQF6AW4OARo+1sz
EgorBgEEAZdVAQUBAQdA70MTcqVm07fe5cZGkR3evSc0yVRM/7WlVmS3N1JRER0D
AQgHiHgEGBYKACAWIQSRK9ShLWb5kxw/39GTy+xZ+yN5eQUCaPtbMwIbDAAKCRCT
y+xZ+yN5eRveAP49bhetFkuylYLcgEPKIWZom/0clG96YVUIvsCi42SeBQEA4CrN
JEoxwAR/oN1gcCbN2g2fqmirO1PbEQ4yPTLYVwk=
=yjPi
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,41 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
=6R8a
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,14 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEZjj1RxYJKwYBBAHaRw8BAQdAJhwrS/luzWKWDCqG9Tx2dDJhmP9x2ZGGib9A
vHdgOFK0PHNvdCBpbnRlZ3JhdGlvbiAoc290IGludGVncmF0aW9uKSA8TlNPLVRl
YW0tRGV2T3BzQG5ldGdvLmRlPoiTBBMWCgA7FiEE35d6H2WZn0zdchonUW9k1ZMr
itkFAmY49UcCGwMFCwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4AACgkQUW9k1ZMr
itlJTQD/dGHT4r2SQyDBTI08fnmF73jZqdhqveSyR22E6NC3hmQBANGf5bXkL3Ya
Kz1BzJNoAN06lXOS1jc//j/WA8Or5gcIuDgEZjj1RxIKKwYBBAGXVQEFAQEHQLQu
7mSBUJA6jaRGKeTXQd1S7KPKUdCWAFrUGY59bpV6AwEIB4h4BBgWCgAgFiEE35d6
H2WZn0zdchonUW9k1ZMritkFAmY49UcCGwwACgkQUW9k1ZMritmG5gEAhm7QHVDt
fW23v+zTdnNtynPbKp4Vg1aF8nmmbz8Zb/UA/3sZXtUEqcVVVrtAXQDyOkQwRjbV
/ajgNT1oTYhF7McG
=oOMj
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,13 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEZ63x7xYJKwYBBAHaRw8BAQdAxVEnJjkN/0RE6FlxNJVqUyzJUm4uXaCTjJ0d
6eFSI9+0I3NzcC1wcm9kIDxOU08tVGVhbS1EZXZPcHNAbmV0Z28uZGU+iJAEExYI
ADgWIQSsmw21kPSuIBfCrYNhE662bFEMPwUCZ63x7wIbAwULCQgHAgYVCgkICwIE
FgIDAQIeAQIXgAAKCRBhE662bFEMP4IXAQCl/C/HZ0WWmSv31GNlcBsIYdvys8Ny
c7qciu6ZAfuJ5wD/X6gsPohLVKZYT01pkiMRjehgBCeAIdYV7++1MnEloQa4OARn
rfHvEgorBgEEAZdVAQUBAQdAD9ikD606qN9oSWmebuqW2VXldozDndn34K6QnXfX
xHMDAQgHiHgEGBYIACAWIQSsmw21kPSuIBfCrYNhE662bFEMPwUCZ63x7wIbDAAK
CRBhE662bFEMP1zaAP94FZkb3Fm0P4fYSuuBLDUZK2dw1qt4lK2MNnFYUTAeBAD7
BTW3mExgOqq6IXXf0IDvGO1sa6We0Frkm1JZKNR2QwQ=
=4I3G
-----END PGP PUBLIC KEY BLOCK-----

@ -1,52 +0,0 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
H33JS5+8bmRKXVM=
=dTaO
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,41 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
4hXDgcudtCquYStf
=oxRT
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,13 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEZu2JDhYJKwYBBAHaRw8BAQdApQ0qhl1dYbmb8N2TKe9yxvaxRtJcjjIeMY5q
yFwJJOS0JlRob21hcyBTdGV1YmUgPHRob21hcy5zdGV1YmVAbmV0Z28uZGU+iJME
ExYKADsWIQQME291FBAEcK0+yNN78frtsqzKmgUCZu2JDgIbAwULCQgHAgIiAgYV
CgkICwIEFgIDAQIeBwIXgAAKCRB78frtsqzKmo0GAQCQj7lxAlBJqbaVAIDzsx1x
8/QY3RsZXOxdWvMRA0iGrAEAopvj+jKOPsbeyIH+SjZw4fQO+BpDkTJ+P0tEojbI
ZQ64OARm7YkOEgorBgEEAZdVAQUBAQdAfT+hc8h0PzpTjizF6zq1opLSUseFN8Br
r/mMTm2fgFQDAQgHiHgEGBYKACAWIQQME291FBAEcK0+yNN78frtsqzKmgUCZu2J
DgIbDAAKCRB78frtsqzKmpYGAP9FlkRb4d65vGJ6cYfoCw0J7SAuVAHIBoOkxVfj
vNPfrQD+Mtw01kSsjysF9VknNmxohYlM5RsyROkCZ9f5zuU/OAY=
=Q9ji
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,42 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
omEOA9Ja52BBiAbwxNXX5zJr5wq9xAc=
=vKTw
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,41 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
JhujuU9eIqCXYO4i3GW2OMo=
=cYe4
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,69 @@
# PURPOSE: BLUEPRINT for .sops.yaml config
# CAVEAT: DO NOT USE THIS FILE AS-IS in another project; copy it and remove the unauthorised users
# Fingerprint | User Type | User ID
# 533A89DD49FBCDA2BF014A936C962DD77704154A | autom | build-infra <NSO-Team-DevOps@netgo.de>
# EFBBBB131CF1D863005C18868C8C09CA950B1DFF | autom | smardigo automation DEMOMPMX (smardigo automation DEMOMPMX) <NSO-Team-DevOps@netgo.de>
# A7A1D860AA45B6B5B29BC192C55BD9B4CD8DE439 | autom | smardigo automation DEV (smardigo automation DEV) <NSO-Team-DevOps@netgo.de>
# C674EFA56D3EDFDA404B1684090D46D8F1D0C0F8 | autom | devnso adp (devnso-adp gpg key) <NSO-Team-DevOps@netgo.de>
# 0E8955A79FF4687A3ACF78E50B5E444C75867E58 | autom | smardigo automation DEVNSO (smardigo automation DEVNSO) <NSO-Team-DevOps@netgo.de>
# C674EFA56D3EDFDA404B1684090D46D8F1D0C0F8 | autom | devnso adp (devnso-adp gpg key) <NSO-Team-DevOps@netgo.de>
# C903C046A063DFBF8F41C6576B26CF496812B00A | autom | nso-adp-staging (nso-adp-staging gpg key) <NSO-Team-DevOps@netgo.de>
# E5B4FE1E0209DFFE320D2A2E47087747D89B72EC | autom | smardigo automation PRODNSO (smardigo automation PRODNSO) <NSO-Team-DevOps@netgo.de>
# B4BAA59056DC362809388F3F2119881095EA7DED | autom | sot production (sot production gpg key) <NSO-Team-DevOps@netgo.de>
# DF977A1F65999F4CDD721A27516F64D5932B8AD9 | autom | sot integration (sot integration) <NSO-Team-DevOps@netgo.de>
# AC9B0DB590F4AE2017C2AD836113AEB66C510C3F | autom | ssp-prod <NSO-Team-DevOps@netgo.de>
# 43DE8A01ABD706717C36018C48C47C125C022F29 | human | andreas.rother <andreas.rother@netgo.de>
# 1EBAE111F6EAE0CF136358E8625C5A3B8DA21485 | human | Annika Biermann <annika.biermann@netgo.de>
# 9F5341688D2F9024A15541C9E02949D0F7769E2C | human | Bas Cancrinus <bas.cancrinus@netgo.de>
# F7F328F0E4958E4C785977E23B8AA0BAABADAFE4 | human | Christos Adalis (GPG Keys) <christos.adalis@netgo.de>
# 659FDED43DE155FB772A339B343CF1218A664D31 | human | Claus Paetow <claus.paetow@netgo.de>
# 93593B8B0B7B88EA2DCC99F9388B6A662C356822 | human | Daniel Risse <daniel.risse@netgo.de>
# 0143019F62469ED5A6A016C219CA764D37590F9F | human | Daryl Sauer-Neumann (SOPS) <daryl.sauer-neumann@netgo.de>
# 9E561083EACDE14694C73A323A2F6C1D153D753F | human | Frederik Marticke <frederik.marticke@netgo.de>
# 9F08DA9D42379AFE6610E9E615CCEC6801DBA02E | human | Hoan To (Hoan To GPG Key) <hoan.to@netgo.de>
# B92DDC9B908BF3917758D228446C51E049AE38CA | human | Jan Jantzen (sops) <jan.jantzen@netgo.de>
# B643A5D780A01F24E95AA100DE6F8E2C149C3748 | human | johannes.wicovsky <johannes.wicovsky@netgo.de>
# C19A7D807525CE24443CA9A49372E896B41FE700 | human | Kevin Bauske <kevin.bauske@netgo.de>
# 0DB51A7E90AC6418B7DB83724D38970874850C33 | human | Kleanthis Damianidis <kleanthis.damianidis@netgo.de>
# BBA0C26647A2D87ABA186D6F3D284EA725F9552E | human | Kyra Kerz <kyra.kerz@netgo.de>
# 73C2C9954D1BC94DC6682525D2FA233B52AEC75C | human | Michael Haehnel (NSO DevOps) <michael.haehnel@netgo.de>
# 3511D1A5B7B2AC97BAE8AF3EE758168C000375CE | human | Thi Nguyen <thi.nguyen@netgo.de>
# 0C136F7514100470AD3EC8D37BF1FAEDB2ACCA9A | human | Thomas Steube <thomas.steube@netgo.de>
# BB333E772B60EC8A29E8DE641D6B8CC68E09BCA5 | human | Tobias Plöger <tobias.ploeger@netgo.de>
# 57F93F2A6585CF2DF9A3B31F13B9F45E122698D5 | human | Tobias Stroehl <tobias.stroehl@netgo.de>
# D667348F310C57655FCE5D4EA689FF232FD681F0 | human | Ulf Fischer <ulf.fischer@netgo.de>
# keys in https://git.dev-at.de/smardigo-hetzner/communication-keys
creation_rules:
# list of keys for encryption in stage
- pgp: >-
533A89DD49FBCDA2BF014A936C962DD77704154A,
EFBBBB131CF1D863005C18868C8C09CA950B1DFF,
A7A1D860AA45B6B5B29BC192C55BD9B4CD8DE439,
C674EFA56D3EDFDA404B1684090D46D8F1D0C0F8,
0E8955A79FF4687A3ACF78E50B5E444C75867E58,
C674EFA56D3EDFDA404B1684090D46D8F1D0C0F8,
C903C046A063DFBF8F41C6576B26CF496812B00A,
E5B4FE1E0209DFFE320D2A2E47087747D89B72EC,
B4BAA59056DC362809388F3F2119881095EA7DED,
DF977A1F65999F4CDD721A27516F64D5932B8AD9,
AC9B0DB590F4AE2017C2AD836113AEB66C510C3F,
43DE8A01ABD706717C36018C48C47C125C022F29,
1EBAE111F6EAE0CF136358E8625C5A3B8DA21485,
9F5341688D2F9024A15541C9E02949D0F7769E2C,
F7F328F0E4958E4C785977E23B8AA0BAABADAFE4,
659FDED43DE155FB772A339B343CF1218A664D31,
93593B8B0B7B88EA2DCC99F9388B6A662C356822,
0143019F62469ED5A6A016C219CA764D37590F9F,
9E561083EACDE14694C73A323A2F6C1D153D753F,
9F08DA9D42379AFE6610E9E615CCEC6801DBA02E,
B92DDC9B908BF3917758D228446C51E049AE38CA,
B643A5D780A01F24E95AA100DE6F8E2C149C3748,
C19A7D807525CE24443CA9A49372E896B41FE700,
0DB51A7E90AC6418B7DB83724D38970874850C33,
BBA0C26647A2D87ABA186D6F3D284EA725F9552E,
73C2C9954D1BC94DC6682525D2FA233B52AEC75C,
3511D1A5B7B2AC97BAE8AF3EE758168C000375CE,
0C136F7514100470AD3EC8D37BF1FAEDB2ACCA9A,
BB333E772B60EC8A29E8DE641D6B8CC68E09BCA5,
57F93F2A6585CF2DF9A3B31F13B9F45E122698D5,
D667348F310C57655FCE5D4EA689FF232FD681F0

@ -0,0 +1,498 @@
demo:
credentials:
secret: ENC[AES256_GCM,data:B5h1+zKRxQ==,iv:tFdKcG+3U9cwR/f8ubs1wm5p369R5dMEnH77aWt/K5M=,tag:WxWwgE05rWUaB7EOxnoGbQ==,type:str]
sops:
lastmodified: "2025-10-22T08:32:25Z"
mac: ENC[AES256_GCM,data:ByW+jdHSeU3hRj5xvyujFoi38QQBNVUgMHvm4j1kC6XTYbBVRTWccr3boKaRzi7b8sdKE3SA7lz77MVRpYeJXn3ZIf4NvHBxDJv7btGg3c0Lq+bWRsHS9tNFRH8bc96GTWUldKv+tdyGOC8KQ6DwJASFuM3km0t0JuRqY4w0Dj8=,iv:ICVeB4s3Zqsz2uL3Cs/mhNwheK9G3nu5kPE+iQQT5ic=,tag:JZMMvnQtNHfasHDrJOAsvw==,type:str]
pgp:
- created_at: "2025-10-22T08:32:24Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hQGMA49EwzBHBfyRAQv7BsBjoNJanbWUWzFN1fTL6V8zfY2rS+LHqGbZlAMWt89K
qFutxRqjjo96Y1ESFTsr9Lqb5gO3WB2E4JTXqBsAMHdP1tGMj/MJpEjTsnY7Fugt
y1sxcBHCQUWGNZI/z714yNSDokp9S78OVvThS5C5RKn6dkIMfZ6/+FWiAQaR9Bhl
u2u8sDSsAAXBEduNNavBCUvl9WudLu7+j9gdgI6MgdD3W/I12EHDL6aMJdaLmcn6
ZxYSjojqqWfd85fxO9cGzz+mhfglhhRquSrM+nelTgLYNloLLFnol5qAnvCnr8+L
vM7jC+gj+Z5VqtRNmCm1JuGMQqQo4AficMgH6UlQ87k76sFKZN9b9pRNSCP1KQEp
b2OGAmIwSijdhXCPmOYodalwx8N2mt29myRnSWw21KJZ85Nr5xaaF5YUeiFSNnnP
xW5YaVFiGwA9JltOnwTiE3JEHtfox1VNLSbLDEQCMeMLhE6jsciH0SWgzMJm2Xu+
nZ/IqdAGgDvaBV6fNcG10l4BZ16ZAWv/+9NGQWJ0dhasBxSUrFOY5MMLkCYq+BXO
5FaJPSYCO662WSkoReUCFz2ZrhHG0RrREBp1hDJhnpcorSZoV8jWxyS2tY8MGb3f
LCOG771hk3zlqnpgDhxO
=VALa
-----END PGP MESSAGE-----
fp: 533A89DD49FBCDA2BF014A936C962DD77704154A
- created_at: "2025-10-22T08:32:24Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hQIMA/3nDyRfgQqhARAAopdmS/yGWhA3AFEbiVQJgxDRPGR1dC3xUob7o4DF+Nl2
8ma6E8klwWnmigUP9RyIFFWHqrMcapECJSi4eWzNdcd8XuWFeyaorWUqZrQc3TQq
pNjh1B4snCuFwTuNNExH/ieW6YGPcNo/ykoHJTsWwGYwfHRQ996YbYHRtpOuxWVz
vWLkdPu1cSPDmZk5dAyNh6XyBNpQIF30O5gCPLLsZTQDvjroCAKeChAKdsh9Jj/X
zms+0wmRYd+KAm5oCReTtP2dRPYEa6MsmR+F9t+i2KuYBE6cm1/FsKjD3VvIONG5
cDV391FwOn1woU/oK/JTKMCgBk7ifIroMeVbLUFmln0HkJ4M4CV2WIKiui+XevXl
ja9lMRyuh8vYETT8mFKWaUZwlvRtsp2ZDv1YahaSLpOniP/So1LnQsiGs9/um3k8
1siC94WZ0H1KeFgwy2tIjsvJfG59Z3EqmElZlxvH7q90oicrs/OWvO26htkzk7YU
N2gwC3Hjqr0KReD/WniSidQsv1QYeEVQPv6z1WCPybEMviPPPyFRaJ3XmC+YiKhJ
k0C5jo5VAbm0kJYdNrml1LUtoN8PhEqyzOfRCOmr4cs4ndlIJLTz9j1Xvz73iXiD
0MNg8oFJSvYCmeqnGk4W8JdpCbNO0gqfFO2AMdecsejKcvN8I0ekgFrOSlgAKrvS
XgE8Jh/Xbg4PhggxdwDjU710wzfpoLOHJuSQemZainrnYaqeAKrHeK8NrwMx8fa2
q/NFG5ySZBDL8e+T1qEsLO3XkWwBeWlvo8A8sLRJEo07RjrVVT/TZwQa6OmeVEs=
=4p4A
-----END PGP MESSAGE-----
fp: A7A1D860AA45B6B5B29BC192C55BD9B4CD8DE439
- created_at: "2025-10-22T08:32:24Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hF4DuAaR73LFvScSAQdAxxYDXShwKh/6W4ibLuZt7csqihqYHQKV2bkuo8RH31gw
mP0wr6zffEUUUiYyrVx5f65WcKaI1a31nMCfJO+ttTMJ2kl2gVoEHx+7jSP+Tt1G
1GgBCQIQmmC11YaJGJxUFgwnrOTJeVu5mzXOVWjCZRhkyrsyH0hXRY05egXZzMBT
DisTqzIIan1hT+u/35JMeujHe/LrEPyQlhtyaThjz0tfMPXSbEuiUiuuiV7YpiYZ
sX30U6j9Dsm7dg==
=08Mf
-----END PGP MESSAGE-----
fp: C674EFA56D3EDFDA404B1684090D46D8F1D0C0F8
- created_at: "2025-10-22T08:32:24Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hQIMA3LBDEB9lMmaAQ/6A6jPXX1l7J7dmAexDkvOuC2+8azrnM9u8smXbje/xESd
pwYupQa4RYrSu3BUaNNfglysJVNLbw6ntJ7JZYrt6tbQv5/JVcMGzlRPTkfAugVl
521Y5ohKmlYXN4jWb49d8/50JDxsmnZblqDv6qHKkvCmesveHRqif4gZGuBkXVdR
G/TaH8VKGfR6E+WJ8Utbfp1rBmvh0CZB9Mpnf+dKEF+cIPhUhCpQZttULLLwKVca
/C5obxQ3NBITqw1SzTHfmxn2oL/phGmwjXiDy0v6JQBMzDZ0C78YS3q4T4nkA30v
gD4GswOHkR+EfppkSn0k7f4HxLaAMTFzut9B2BdrtZl4UWBNz6CTCf7YuFDBs7eP
Da9ZLzLGiml8rhzY4UJbmJ77zZBvMET3IYkMSayff2IxoHJNRSI4RQ1SSLC+yy1y
C2lcaC5OO8s0gT62gmfi5X/Ebngx06A9X08f0GowP2+KaWZJ+3Q3Q14DjAOtdH0T
yrX2xoLNyXjhspYB9jFCuD9Ct9S23E4Mu00eoK3ABXmF3OqwwIV45HyWB3qbhdYJ
xTDJmP/s3krRTcgiQD5yuHoNgkvAzptmvO9sgGuFHlI5y2vuQ853XjJmOJBfUy9r
WONMbORPqvns4AqPce+UbU0Jib3olUU+BI19q8w2H46Xh1XmYHbMsNAXeKkyX9/U
aAEJAhCT1uQf5MbaPZRAQX4hTgW8mG/soN5wpOV9r1pqfgaZINtivwO9apOhr+CW
MgQBk/zwHinI0mU7x7CJTlTDX6culH0kiFWeZCVxxjh3l2M1NIORyyHMf2tFQu/G
L3WICmtOWf54
=NaqF
-----END PGP MESSAGE-----
fp: 0E8955A79FF4687A3ACF78E50B5E444C75867E58
- created_at: "2025-10-22T08:32:24Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hF4DuAaR73LFvScSAQdANY9s/4ZpJhJaCWVDPtlTo6Ob69MpP3ACFTFccOiIYk0w
1bSb7XRxjZ0YqWkBsmDattH9J/wg/isF3GJR8HIFRgHok+r0PscQR9xr8YlDxoZP
1GgBCQIQfdgQpU1ERezqyr0F7cqGEh6MwmhYz1hrnUEFWdB4c8iPhiR8mJZa9+j8
Ii8yEtmpZgAxvs4hR0JPdw4gDInIT6xre5ErJ3GSefvlug8WQ9cgSFMBf4DgelXQ
u+8VrFR/sV7fcg==
=HIJK
-----END PGP MESSAGE-----
fp: C674EFA56D3EDFDA404B1684090D46D8F1D0C0F8
- created_at: "2025-10-22T08:32:24Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hF4Dq7ZJnmCAxTASAQdAcoI0EFmwEAnlOgW3vI3+CzjI6tuCuLZ/L5LOIwMK+38w
KRjRd5n9WqNTrxwvyYLMP1kM0VzLXppgM+t/Fr4ObkySYxWStdiN9++EkpaKEEhl
1GgBCQIQMAboN3IjFtuQnT98NOVkTaRbWeOfi7IFnLL50yg/BsGNMnMIrBOF3WmO
ny3u2Nzl0//G6NS5sGe3+xoCxAz4gvQaaTPMsbOPpmdP/vQyZNzMhidNOx1fHgt3
u2vrYfnv7cQO4w==
=LzLZ
-----END PGP MESSAGE-----
fp: C903C046A063DFBF8F41C6576B26CF496812B00A
- created_at: "2025-10-22T08:32:24Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hQIMA911WKxzIy2nARAAqDjWKUlpAHXCE7XtvfDJJZ3MqhC5Dq0SrnSQ4Sv6Nk+k
pVz74k+vzPwQumi3MuOOQi8BH0IpiAd2ihWhcr+nu4GOUZ/Xo5OJv72t8qT3lFf0
Unp6Eg/UESilwQkHPhJQOOjHr0CIBxU4SkDBcLlVkOjfZMH/qXkSlOa9Wqi8Z7nw
P4XnUVCOqfRSoBe8sammriO2d9fjjbVy9m0VksR1R3TClpPv1uN3V8INvPhlC3Ml
nqo3zLnkg3lAu28nVXgNb2s4PvmTQAHwhTXF1/nPEPBP1ilrA3amGcR4VcC1Svr8
dp4YfgWnzqzNuOP/4U4R56RbmvxEOan85CwFbHWuFpfzf0fWPs2l4LYgxB33MggW
P+WF9rnSf+y8ph7HVwBnSG0WCmqyuQBnyImdUO/qi/0Zd4MpRMvDhtYNoDfHmph0
rWd77WQUsI9+r5dhLdtkBX6LluhO3FK/L4NnEVsc9M9Ve0nYtGpqunZb5T0VuPyW
7NA+oEXqo3ZZoPvphkuCUNQUljmrFUPhlkTDB3A716LZ3nr5tRHm+iRrTfflgo89
i3m3uXKwVcTw7wFHCwrPI8imc77PLW+H/FjBs+3YX9rOTffFerdPwKobaxB/Fc+P
Ep5nabvn9nzVfzgXh9dov8dajtPj1gkIE0heTkunXARcje8qNwsP6c6mYYAsDYXS
XgHh5C81WdFJVQXTvuuONx10XZk4O22SFI9YOTQ3dWMpZSk0qoN1xgiCO+mvYiPR
fvIMbjihzdTsfKmIJtaR2BS7KkM6hshraGHtGMid9ly3n11dok4+dNMgsrqvqQA=
=x41/
-----END PGP MESSAGE-----
fp: E5B4FE1E0209DFFE320D2A2E47087747D89B72EC
- created_at: "2025-10-22T08:32:24Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hQGMA5pTFdxsndstAQwAuvSwuGLSiTBmFA8rQbFiGYExh6x62ijw7pOaqOK3l4wd
CnEKDBzGK2VjoKoLe0Kp1epMZcgLQhzF1qe7eKLnT11dI5jcYUO6mDzhq/38yWdg
g7NtoZRP4gIC+Xfj3+bhZBfhPt6tTGGw599P7gkXuOnDzeTip9FVysGRjeYm3Q8y
fZNKuT/dhjEgMNZqh8RUFxcQExwiZ4UYWPQV3GsCXuJlvx7NRNhSbacFw+3+OQrX
cimpFzIZQfz3nmEc21kBigCmF9IxSJhFANkPAoiTr/Kszki69z9+oZ/e8aod3flF
ow6tVtjVDH26IiD/5FckBDJcibhw18ghrHh+XuMgzqBX+3pc3UHWRSag5FiA7QuC
cPhUTFdLVC/tb2R4ci0ropUZ3/7Rdd2Lrn7Ccvw0aTaAb3KWxtqN97UaAbkPQYy/
cNwwrVKGGfUGsZoTl7DGeZiP36tu38qLsEA3Wky7+zhwrqlDZPDePZyf4QHr1ZjM
sNZx6RDKfV8uhG8V/LRC0l4B8kXUYTmh8MVebNfEnINgzXyOkIjl+qe3SGAWl+sz
cD1kpLyhuquxwzpNxi28kP+LAv6yM14pVY3tJZn3ZbZhfkV8i4/VF0Fgsp3RPige
SmJHbw9iGMZLu/pbzapv
=frF2
-----END PGP MESSAGE-----
fp: B4BAA59056DC362809388F3F2119881095EA7DED
- created_at: "2025-10-22T08:32:24Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hF4DwvSwby3S138SAQdA0xD9js3d9JcZTJLGHuUZXtA3ot5LOjkqRd7u8/dfAE4w
Zq+vAb89/DHUuKlLC3vMfpSStvtrSUnMBX1jcGjpG25j8yQQMHj2o8CeUBHXv2l2
1GgBCQIQoKb+YHrlK9J77UMKq/05rO6GX8Ro/oG3WbtRw+Ap1roARUkQerjlxeS5
wD5jUhO6IaxTNnRf+zddSoLyD6BWWusDyvAmf2h4+YFKAyc8q+x6Chdik1bQnLyL
YQYEe62pU7JmMg==
=cyBZ
-----END PGP MESSAGE-----
fp: DF977A1F65999F4CDD721A27516F64D5932B8AD9
- created_at: "2025-10-22T08:32:24Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hF4D3RW6IFeToCoSAQdAYzjUM4IJtNT8mTr2eavs7asD3hIesRGtaaM4NixrL3kw
DaMd4Lw+G2b0T3kVwmrur9e61zj+qgHwLmReij97JfW+5ceB3uzl9ILii4BZDWko
0l4BOqi2wZcXuG7nwdLySPn1MnZ7KuEm3KXX03q8kxtS5qhPkOOiG6ZJNuK6RP5c
dcxsESmU/0O4Fxn9MbLYKDJWuMv1tpxwsR2zw1TcV04q8owIFGJDrtCs/+VA9Mjr
=LmAl
-----END PGP MESSAGE-----
fp: AC9B0DB590F4AE2017C2AD836113AEB66C510C3F
- created_at: "2025-10-22T08:32:24Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hQGMA3n4x8uRQRGSAQwAwgeiNm/1ezo/ZZZHaBJytZjVBoy0NKwZ4n6pAVEzoU9a
Hf4lomaBc7bL9aYEWKoUTmsa4UCGvSDaJVzhKLetKodG7wnxGW5yXYfS6WISGq4v
Yc5bzDQrUbvIWibnTh1MyAhsac7gwq1Gnbh1opqNE0kgiFovcdwz2ab8/8foiwFF
d8ER8Zcyb0IeGt+2kRh/QjCanlyU92jwJOBzQVc+/nKIksWKUKYq6IcHOQgeoGKi
GgVHXXo19yukmykL6QeGAJi3lukH7+mqi6sgXp8Zh3E3wu03L8My1mXF3SJ1IpLs
ctp5JPHpQn3nVBsVvbkf9P+AvQsQOXKvaKgsZJ3O33wmz6AiiKY/FrUwlG4r8aEW
hhwAo/sLUYvcGzFJU92tDnskwsNAOPA8Pj0RB4E38JCsK9bwRiUqAKHRdfEeSefw
3mmML1Z6H7CCc76O6lCXjR8W79jMRwq/xE8BWMkB1XffFaRHOhllPBro8uR3Zol3
DYq9WSw8GoLGomwM+E7V1GgBCQIQz26PHsb5dysgZPrFwJqvcaFjMCcZKOOriFfj
14bMNJjAc8yHTkekSmblPuIJ3jwsSoFbTJQYTafIxZ4wrCk75rEGWEjIAaHjN9uw
VBSmK4pj1DliPK4D+OPBkMy15XZSA3yaXA==
=coc1
-----END PGP MESSAGE-----
fp: 43DE8A01ABD706717C36018C48C47C125C022F29
- created_at: "2025-10-22T08:32:24Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hQGMAx5drVN5V7yDAQv+P/6LKdpEL2yWkParQsGIIaqju5T5/iaAvecngHA4FBIo
zUduorElOKC+T92kYss0FDMl3zePMyYXuPReOOntoKOt/T+dlTTKOKhKzEZ7dZyC
Qd8NXPovBqx0Qiznf5hP9oVElrWmD9L8GuzT2c6M2VAclWPNaIjpDoY+ux9mAHqz
CUycoUYNEGFaysWanzXqw9pQiXxOmJ3n6rQ6P1CisCnQiMlgVRamYzaViO/ti4HN
I17Yfr92aarDwvQw3Gqpo5XlBDlZuaiToriOwvsRbynJ9iTaYzAYkDNgebScGWhL
Tl5f0AQaBVQbsuIoqt91NNDgI8ja4vYi3eXd+o9M8t+4FhT9dzoRDxBNH9dZHfFi
8vLNb5dUgz2wn5miLrwFTmbn6C9GofEj18IU/c7GEFGld0ajPjqxAo6AkzRP/ksk
5bCUneJUBg+1/wv5Lq6SkLalDMO+te4I8RDE2+MtJeIIzcLiQxzNl3YO40cU2K3J
c7JO98gACdx5AiwTg4Ze0l4BEvfJ3vTUoM2iZIYEZZ34qGBr4DJSPIRDtftKJ8iM
y4DstvqHtiuBBPogbQd7of9HfLEB/IeMxLX8WfWxrPMhMv+ksF8yblYMKhTcb2Rz
72gsQiAvIOElqeV6X5W9
=/qwi
-----END PGP MESSAGE-----
fp: 1EBAE111F6EAE0CF136358E8625C5A3B8DA21485
- created_at: "2025-10-22T08:32:24Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hF4DRPQAGSQLsJYSAQdAK06N4nEaBoHoqzisngt6Pjfw/j3+az9kkcLz7yuzEXQw
4c/WT258IUaMZw3APc/Cb3/5ckkeWY2iEWGq1CotE7sW1G1MxaisQjSNWVMCvhdB
1GgBCQIQeKyr52qjVGTwr3ul5eY84So8d2GBnF52544vkHmsKdmyE9pZKrbC0l3o
uTPT1oneWpXUguohi4YzLxeENdX8wumnlatck19ivmtDCFtKf2CYsQIFLTj2g9eP
E3nvfD74nt30ag==
=gmxN
-----END PGP MESSAGE-----
fp: 9F5341688D2F9024A15541C9E02949D0F7769E2C
- created_at: "2025-10-22T08:32:24Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hF4DqL0Ka4V5gcISAQdAuEiGMF0+O5sHyuNiUxFTBjClXPI5qZMYykvyne3pXkQw
MnFMOlgqovBanqI1cM3DVZElrMxsLzxseGTbL8UKd0mClzXnqNFkc9NLkDkNO6tF
1GgBCQIQDfe4S+Awl42he4BxG2Roh0KyRv9NqjgyVk9ytevFB4jLbRpcKaimCW55
n9jFLqfOQlbqje4d/b24/lJOkMmhibfpJ7YDQIt/vxoi7GvufiAciJgIW89owYcm
uEiaLNhXb5Kneg==
=fJqe
-----END PGP MESSAGE-----
fp: F7F328F0E4958E4C785977E23B8AA0BAABADAFE4
- created_at: "2025-10-22T08:32:24Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hF4DbFrAcOA5jGISAQdADz7JJxhJrzKxkQ35pdxuSycyV+2IS8/QZBcRBIXV2y0w
OYnbgVgIbCwSWz5XXxfiM5D8e03HkPrh6Cg4mXcMBqFoF5ktMcXnMi0dxyrYIKom
0l4BEjoQpriTjcyBcaoi0LRGRd9l9tuZjMoygeox+d72uEt2NU7ztlPAhCUWEjBT
xHE8Kwz57AF79f8d3/c7dUgyjdlL51OhVNi4pjggK8hskNCZR0Fco00wIKK7tFHT
=WKjm
-----END PGP MESSAGE-----
fp: 659FDED43DE155FB772A339B343CF1218A664D31
- created_at: "2025-10-22T08:32:24Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hQIMA0JLr4yo8A4WAQ//TVI5urdUpi4RQgn2sst/1hF9NIFu9StHg0iGLP0SB+k9
XAKv6q1MUC+ykwU7vsP/scADO+GG/4swuRDR8d6y0wmStXEbAXTY8CzeseIAQA3h
spPP7F1gIanG9pgMBFAuPdudIbzz1H63nBkTAggKRvFz97LbX1ZJ/7cAGcr+ljor
pGfNdkZs2RNp+9D/WOgV022GEOGeqv1pv7RX1Z6rjTCd0FtKFjRTQRnZpFV2S5o7
Hcfp+ntLk0Cz9StCK+9CGzuAdfXLSXzAmafvC/7tqxHLSuExok7OyHxHd8CNAWzO
Wn/3NeT/RF97xL6zUE0ITCRoCjyT/AKxXA03zEForWypkHXSvj7wD6DKX1Vt8NmE
se1t2T7aJuvdxKwwwEgreKcpILPAoefT/JKTcjh0SfTbufhEcDnKjRmjB4wyiYse
wqMgXYA7s1OIkwriGPl0KKoZyc/dN6+2HXbDwDnO77MBRNA/KHd/03o6jM2+5ZxA
XG9nEeauWfB3e2BW6RrVZXHGpOtXIc9/xcISg8cNmqnxuoHeXqNON3QFNkZSpnsR
3bhD1ue9DmCpFKjpcONFU987ev7A60VG0av20R3pLHj472TI5DX5f1NkXxe6Yvf/
u3EF7ddWIkFWX21rRJWEBod51d9Vg5uQfaJVYAfmCtjgfEWtDlNeaGLBqrLyAsXS
XgHnFHa8vUNK2Kj3VfeNi4CNlJaKKSdxVhKnXLq9tVaIxE3l7NsFfKYEeqjZCFoE
QI6fiNp9Z4WCXY4MOTP3s5c+eoGFwzA1iQFJ0W9f8Xf28G3pfQTeU5LzjXg7kcI=
=Uje9
-----END PGP MESSAGE-----
fp: 93593B8B0B7B88EA2DCC99F9388B6A662C356822
- created_at: "2025-10-22T08:32:24Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hF4D9oMBxyVlaokSAQdA9tHAO9kyV6aj0j6XWH7/VK/ML9EuLdz95Tq0mbss5VIw
DaDHuifWmKJ8LpAcxHVx46+/dpyhOozT0miyCmIym2bkVACGz6+redvkwuQE83pz
1GgBCQIQ0pf58HpQQmV7m/Men//N+xIqm135d970FwzxDgsVPpOsxmNpKI8tTMyB
4ovko73ionZ4eVMMEx9ivbyUw70fE17Yp0OZB5WpEYnQa+cbzyqZbyANavcIVWbd
IjZm4O0v4ELm0Q==
=pKAV
-----END PGP MESSAGE-----
fp: 0143019F62469ED5A6A016C219CA764D37590F9F
- created_at: "2025-10-22T08:32:24Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hF4D4oFtgf6gcosSAQdA/ziAtNNZxwqL1CmVr8JeT2OLocQuHYf9SxnMBm6xl1Mw
pYvXfBTchT88Utt6+WOXDyUOAbrJREtJv8o0UA/YiZCVnt3rUJJCqgOiMdOe8EGg
1GgBCQIQWzeWtees9enj7kwxZ2XN5Hu4a/dF2f4XgbqEg34SWhwltb3BGgezS6co
cFh181dESMCzd/+RhcxdHT3HEZdG0DTZcvpn+8Cddc19SRaV46ly8Mo5umQa+hHB
onTCmWIYSibMqA==
=w0Os
-----END PGP MESSAGE-----
fp: 8D600912FD42EF5352D38DD22FD71F457EF7BB8B
- created_at: "2025-10-22T08:32:24Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hQIMA/fyan/DNa3uAQ/9Gtba2jw6Rzb55Ug/tRrOcqbA/9kx12p2yucnHm49DdUl
7f2/bFO5B7LCncGQmno6vXFc3D6B5BxPrXXFOjzdCrTZkl4B/9sVIl0DdvhrszEm
e3qVykJpqj6rl+b2fpKrVjifdYb3/jG/02rIdGcaep0nU7iO3l8cSLhHs9jNRb6g
5gapzO6CG4vgAwfIhSaojtPMIXtkmB0RzGh7OXntonKsAXWnySHCPVOU6DWiVHEb
Obg6QZJycacuSG8ML0GNpTA36p8XRWDmeR1/FO9gzyItzXIfCf5pOnUp4v64vuC4
QqsY127RsS11drnr9NFAMdbNAN9FCT+yLINtDGDSZmh65oHxB1qIItnTW7aZ5Lq0
oGL9h0+uEDcF3HVihic1qs1N0dDCD17VYeiikikMgnyczjvMVHdeHaXKGoeumVlL
QzuBwXyAJ7E/pg8N1Ku8kq0+CmaLmDbYs+7HNRtRw9zpznmX1Z3EsrVGcO8YRq/r
JTBRbC9mr4L4KEDn3ymVAUeQHZAJZjwOM8shsoE6YC8zBmC74xWb4tu9c20gg+28
WLU//3rR+pFfRGK+OBJu2emnEkgm/5sHFXw67bzqru9dTiyLGAOWBsgmMwPjIds7
hO/PMvLX+u7S9qJ1p8DQZ+PJ3zA0saHMg07JeqRxBf87H6fFS9KWjl7dtczk2GzS
XgG6ZoEL5r0su8MIo82lsdDMWeMvs1H40W6d7zkfWI+qVXOLZjNeeotzgVop7YnM
db8zhgtXrMgHODG8519YP8zNaXfQN0pjX0A8rnFhNVPifcjYiOKUB6s/fWe9ovE=
=GLU+
-----END PGP MESSAGE-----
fp: 9E561083EACDE14694C73A323A2F6C1D153D753F
- created_at: "2025-10-22T08:32:24Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hQGMA+cOSmNXMUmKAQv9FJ487BOvGvaLZIGYwLqElDt3GGMvhpbwo+UgS0Po6Gyq
/DsAtMlpES1ieHmfMQcQfb2IWXm3UpgwwLMSbFXsB6OBbZhDpPM3MI33ZmYdLY56
oZdkJk5vf/VwpmSUvWANkFRhDxce2U/szWU+9XdRg3IgVprpu83a+DbYto2lENcu
8Eyuou8bTKcquKcuezUqIfZiuv5G09GUOx59cmVusJ3DRn7ozRadJQLiwd/m3z6v
TrkO0lIfiQT1lQnwtgixhlN1zICQ+ujJzQDNqHrjjxLWjmvVgWjXOyLCx+ivWySg
a58NF38vDQKsQvAv2f1WwW5/xeMGqHPyHPEipEEbDzEB+iwZ5K1YHTj2ocBHiOtt
DheDdmeC9IGNTDc/XrLmlW4grrUNsEl7hmlT75A9R7w5Sal094VNEh9L7bNj2dqg
nIQjU6AgyYm3vd/zcA2ew0gl3FimP4qQO/M+mTe/SNA4C3UvdbNOBwHjp5NiejXv
uFFbZOfgNlHgRlb6bnGh0l4B/jLdc/21pnGrx0MJdYUl8mn0u9A2lssmhXMXgPGm
J1loxnQ9ZskDbnA1g6gXP+vPGyXSzX/R64OM3EKaA+T/LBZ+f58Bo7QYGGDiAnSS
Yy+uj+x84lQGz1kdWjfA
=fOjJ
-----END PGP MESSAGE-----
fp: 9F08DA9D42379AFE6610E9E615CCEC6801DBA02E
- created_at: "2025-10-22T08:32:24Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hF4DrMuSzhFbHkQSAQdAM4iNYf1Kyv22rIy8PxVWrTmtRleonfVYeUCSWuXjx3ww
hRny7s7V/KA7nd5o/XYCZR9kJpD5UI94+DyqVxy7u8TqldDmiivxWks/JejKF0nG
1GgBCQIQzP20RqCgBpJio/WKvvsLd8iFSDiK7BnUJt+aKTVSK0k6I3hTUzTsSmOv
4H26OK2RbI0eqmlCwAiO5EW6SUpIr/4uwTZrUoIJkr4FziAfrqzTrPjxM8eAIPF7
lQ4w7IDFLJ0+qQ==
=0RD3
-----END PGP MESSAGE-----
fp: B92DDC9B908BF3917758D228446C51E049AE38CA
- created_at: "2025-10-22T08:32:24Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hQIMA8YZutSkx0fiAQ//V+rV0GdG9Wl7gtwhOQidk5hFcGi+gWc2V2CX5KRGiNM+
Ej7UwpsozNenBKJPGCgW7A1TviWVN9u97e4a++6fPMQSb+BZ+7jKNHWSU5EHUqm/
TmymPa4HgonKNgI1Uh1T/Mlz/shtugCxS1oThQLIrDyvyzp/B7HWgvtqDKo0zUIQ
7zM/RN/qNdtXWd26pmzk9aH+yOLmtoB2Cepgdcy6yG7wIKge2EmejfM6+mLlRiNQ
WqAqetZVtJYfiy5EqnRNPQIzbr3+2dTsIORpQcFvGB/ULUbcSDt0HKXmWQ+c1hZo
nXDOt9Pz4Wly7M9wXWwWwSDNwM29WEsdZQokBpaN5Lt58CszV6MQRWn852xuOV8H
JfVQxPix8FWrcOOur9n7OrnKf4ANzoqjgbVZ7kTo+hTzClWCMs2hfXnzVhJviNVh
k9kzLeps5BIQ23qSsPBaMWMrXyyxsZd1b+1MUwCliw13zQX5hi6m07SGCJyLKfDG
C221sNKCoaE2hBQ0ZqGp4j0c/0R0AuI66xOyj5J+MOqJlQvK24I1uO/8n6UMNpnT
ZUOvA9umkWDmSHH68SzPjeXsoZcy+mFrdTvTqaiKuxjjlGKMdNPv50gWNylv+r7j
/VkS0h2tTZE7YKKHwo7T4AaPGg/uwxD+u3+i5QYdpJtrY1UPk+uTOmCFtBuur/XS
XgGphqprcxNQ+a8Fm6pgpNQn7F8QGJEbjTR0LdUhTScn8wK567d0Yk+mHszdzZJb
cWDXSe1BNSekAqSpJQDYF+qldkR2F/Mqe+tXiH95C2PCtPkoRak+JZuKoEqBxqc=
=KDxH
-----END PGP MESSAGE-----
fp: B643A5D780A01F24E95AA100DE6F8E2C149C3748
- created_at: "2025-10-22T08:32:24Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hQGMA9vEXLVODHp3AQv/QOoPcsrKBc0fzmPrUbyp7dApHFbwnSF5JSQRQfGzaqP5
Cq8PBKEoORT24eoX11Tr8fba0i+PJBB0w12EtfBOmOwGhqUgOYXw81lfJh/hY3J2
1okk8Sm+tOJ2sBMLYFEKyoOmLmhbhSfe2uloPhObnFiaBramMD6ViudTNAvSVVmG
7xORVno5LNzJ9DHBemeKvfJsoc0nLTDPK78hBoJ6Z/926pZJWGGbufIk9eJ7Ayh+
9WgQfxGwqKbAePydYPgj/HPB0UuZy98SFWVXaoyOL14yoWsDNDRl9cbBQk73IlOG
0MJZQLFs/voEFHtp2vmytEspQYnzoJWAbaYzuv1JuJ7p4lg+KMBCyHzY/C4PyBQ1
01Y1qKyojRUunjHLtOByWf6WoN8BowhaVlDTymjsZxGbbJ4gGPXBZzGwRQLJIJYm
3a+33exsOywTWmXK6eXCe4lT7R0WfUBxnL98uzEyd2MrZwLlrjL6t61yW2DPCQA5
DLNpzg1xDNFOKxrqOaAc0l4BbdMLoLTJyE+bQApW3z+kFWFXBgyIzwn3hhrVaqGF
uo6L2AWvUUvLeOR1APyQi4zM7lZ1TFDRd8j9147P/XyvEpH4KLpOsg6YEtBNL6tK
Gzr1NkPJSLY3m42NUAjy
=vkun
-----END PGP MESSAGE-----
fp: C19A7D807525CE24443CA9A49372E896B41FE700
- created_at: "2025-10-22T08:32:24Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hQIMAztV5cc72nziAQ//XAPd5zFKCAQJ/a483lBmHbF0619H7YnJaWkPyg12pQ/d
XgeZEN54TGW3ItCrw6DDhPM+HU0msRzk1lGqvMLY8ZrBIFQEQab/XAGFI3/LD01S
TWlP/G7xykD3M3DKR9du1VSgFq8VAgZXpxZYjZlFmdG0R2S566E4bRpLahQjc4Ky
IZs8uONA9NW7tXG/uYMqlrvLIsPXDvMCdp0g8tZ0jbzDe6JmjHO8F6X3C3PTj8CW
e1bColDBjFyGjkVjdm560zayt8iyplRV6HFSHJSbZM0aDvxD16woIgtTtcyNgSw5
/kcuUL0j35GHsuyp9MgD3R5aRo6K0hBMQ8BNO+8yMVK5SaUdx0YLfYldsIzCyjQA
bzDPgdVgzynZ4HAUesKm344O1t5yse8zVkXEZcnTaD6B2Peq8d7KebAWeYTdsoSV
D1tCBnDk2K1Z5hizQnpTKqnnxvrN6PBmlebukwBoO4sKbV1HbNLcHw6qPVnPdZwY
XsckI3DAr7N4tHvYPB+/VxGWTDG2YXt5F9uEF1UP2LG9EywKwlv7txVvOODZBdif
oLF3CnHjPwOe72QwMNAAT/NEkvj1zHq7Gbs8sw8wCPGYK8It1pP9S90Twd4wpN8+
GxLYUHviJ2OKeNCpnCScDlZbeSZ73tPCXt4AflHtmR4xm2WeYOGLpYf0qebcWE/S
XgHn+1dCTTZrTwg2a3/KxyZyWjJQlNpelFu01nZqRf+2sfhJ87RO+VC127j2fQ9m
OVQRo7SppJ1bGKePYPCxr3n2yX5OAg59Zosmpol6CmnA69+1XI/9WKO6DjQLhIE=
=T8yr
-----END PGP MESSAGE-----
fp: 0DB51A7E90AC6418B7DB83724D38970874850C33
- created_at: "2025-10-22T08:32:24Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hF4DE0EFwq0sN6cSAQdACZWKgv/UBGhkQYwzobY7i3bjIqf0h2/+tQ8a4Y3OhHUw
QLX6jxqf9v8mm+T6bbIw9dPBii2CcOQuX08snLZND4U2krCDmMje6dXv8vFqaG68
1GgBCQIQI4HHAYaBSQyNs5OzEdnlIQHITx5pHddPWAuRdZjV9HjZlTFAXt2OuyGo
mDJ8Q9IZ3uEryX9QHYj9xMI5EiWPEtG+F/dOZTdDFiaecFShFyT0dtjbKpq9/oLo
Asqs37LyfqxdXA==
=9o84
-----END PGP MESSAGE-----
fp: BBA0C26647A2D87ABA186D6F3D284EA725F9552E
- created_at: "2025-10-22T08:32:24Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hF4DZmNQj/lmIGsSAQdA49S+dmUCPFNLnmDhAxcJauiyU5WRDruQ4/qoUHAhlGww
a/MWR0oHxJ7rjnWORYnrjiL2ZroCpEBylIqFoITN8rJ3+15HdCheYNQUCtqDunux
1GgBCQIQ4tIsGLzPYuMieuk6rQQOxZrraO8kbVwT6CAKWjdHROWlw3tQInIFj+cq
inH1dMovK98BGeoxkTLH5gwyfct5fyopnph9E3fIt5WCXuRV8Ak45Bv0C381a3jQ
/0vMA/o/7+lX4Q==
=0Oor
-----END PGP MESSAGE-----
fp: 73C2C9954D1BC94DC6682525D2FA233B52AEC75C
- created_at: "2025-10-22T08:32:24Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hQGMA6r2J+JSOMNuAQwAmiOT0gsE4YTRfJY0Y6j5Niba4O717IHAPLS4ufvMTtRi
ea0092B1ocXy6ZIW9jxQ69dZ5hlBHo2XOc29XmxJdYNvYMQlF0CDvy/iIidnKk/V
FuoDH3KwHZRXWOdDoasbNdwemB+7b+mKE2QwEtxCMmXfPADjSJVkJshASzzKIqnJ
ezM/2JZi93RNk1kEEy26O5MgjLlx+Hw7MyV9TBvoGAsapIQ0F/8KqdL1TAyS9tZk
kBZK41KZ57OR9/7o9adUoYmQFEEiW7pKPjLsUinn/u1I0savVVUqnF4laZlD0gcN
Rcf614BAdlmatC9L5kyJ8y9MYyfALEAbduX9VCx9Ml53hUMcC2pZZyqrB9vRCc9a
/dMDSTsD3XvwMTufSflZqbqHUxVwZmxdj5XrL6eLtqwPJw3TieU90v8KBuWswbOH
bKU7bJlJTsB2Ybe46INm3hbplw7+6bcmRon94ApWM3BAcMEwHx31jcFdnuhsCj+C
eDdaTmMMhq+iYRFLUy1z0l4Bt456lbnPk53wVh2FTznOmcp+ifs/1un7lA3Hs0Q8
ZKr6tDF1U6VvQz2G5mKXAa3hfgvPMUyLwuaQX60xKeCxaJLyg8xjFuKF+/FVM5SG
1KEM4STkW0U5XTeTCZ3q
=0h3U
-----END PGP MESSAGE-----
fp: 3511D1A5B7B2AC97BAE8AF3EE758168C000375CE
- created_at: "2025-10-22T08:32:24Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hF4DAQRCY74qADkSAQdAvIowg8Xclb585kkv1RbnvQyw/IH3ilglRS8P4/6KrjYw
wDVdFJ1NGxYaZS8GwxABxWUxiPwX3icUpGdkC9V6/SDPt0rLLfrM/nF8bx9qn8m/
1GgBCQIQ2/4+OS0baD4CY+FQxXrrlN7yQwz6hbC2MOmh4UkTDqTPMRX4j6VJClVN
s1gm2K1H3/dwMCNDnShJR0SqFmL7MENClZx4pViLd4R85dirVc/4IK6cWV+wjd4f
NGLewEarDP4Nmg==
=HKnS
-----END PGP MESSAGE-----
fp: 0C136F7514100470AD3EC8D37BF1FAEDB2ACCA9A
- created_at: "2025-10-22T08:32:24Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hQGMA6N7K3Tfl3HGAQwAkX3y1cILzx7sPNoEHjRogEzDhEc20yTSIf9ezCYKaiJr
BxNSSnMqJHCPRYmJduz+BOiQrnDpGVnIJj5FW3cswp4Ua9ez7pVK7XGffyp8pNr6
pc5ONXuoWu6cxvB3J46V1dE5f6dTPANo50eOlhmYqI73R+3lQGal11eq4jiOiHpB
wA/bbrcuuvltam2TilpZgDyC5mpXu4mb37UB1Qmm+2pu6iriQhjgVtDgd9O7dOWQ
G9ow1j45B+P2gnbpew/piqaID3W6Ctv+A76iEUnlfmRt+elwdxoowUjXBYiBqvMA
gpc1rURhMwpFXDZ376LpOu+laqe249vuF8Fv0vpIXtB+ku0c/15Nih9UpMqHE/JI
I68pIH/Bo/PQiZH7R4AYbyzWZEOVyseMOnXxx+nabvSzLKX75OiFOgmFRRwN3SFn
LtiVvmDr29jRQl6jBWT+Hdx3KU269yWHRAs/IDCJ++ahLZcLPtoypUw6Qpzr+NM4
BlYglPvpW+4rIq70o3KN1GgBCQIQPv9A0Itmo4dXEwz9yIPBavcX0m9YHqkNxoxX
WBplWcRtGcLPiGvg84d7hhOkRvkinlns0DjP/74k1knI3Deyxsm64V5NsplyxlHx
tosS1LBdsA4fUxArXp/kzWD8317r3vzyow==
=7SZ5
-----END PGP MESSAGE-----
fp: BB333E772B60EC8A29E8DE641D6B8CC68E09BCA5
- created_at: "2025-10-22T08:32:24Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hQIMA5KoiSc3R+FfARAAhcW4yy5yQAYAfmEqiMpQmwGZZDhHWzWBMO/dkJXke0kk
C6iYT0FNLAgCnG8ONurf/IXteRf00zEsjhel6wanpZnb5w9NlfI9m3KArI/e/zce
Jqea+SxGcTloGeWn1lpgu1Lg6ajP5w6Z8o29HNlMQ/8ikdrNQJrThRFRBaRRsgU0
BYWD6n4yB+SbczVZFjNvuijLerAuRTwEXsbSDuqUdn2YS3yfK5l6CJycEpJJnMrY
36vedeJ2SyiWFHY0W5BRhATkYjFf7FyNYLseWIHVDQ1pa1kItTJzEp9UY5BkjaUL
8LsVDutNCgxz1hgdpC0kwAYB43uhVC+zZTbSIrJstP0NDk7n5q5I5nIXw2O6LpG5
SAKFdAoOMhJanIr/KPGwWcMzbAPJjna8+DdkOPh+Sli4gwKJ1ta/PvPVemt0VraO
/xxj+gmdRQRbtl9bmraLwofOMy4egUNxGubDLIRNWtGIMyKaTsqeb/BoEBM2StBo
/EKeeanHREB36DJTyvUYcplpPivzNJVjsui2RQp9MfdVA2o4bGn4wtfrVJwFXzBQ
5x1eBhaVwdZIq8Eb+9F0eSHFZmz94PhYubb+Wf5YcuKy2cEc16yVgB7CIeReLgjV
PbiqcrB0r/UHAWUER9Urewl6bBmpzNccjGsPQQx7lkAgZqOjgl5bO3sqzriohtzS
XgFFm1ImeTVy5DdtowCYryA/fw9XvI4cG7np9FK6ZEhOjTuneJ8uOc2hyZsiKpkV
41Ia28jLCcl63zVNBbE6QdCzXa4Niy3q0JPRjDZo1y+DfmsPja7QRIlOCd92UJc=
=n3js
-----END PGP MESSAGE-----
fp: 57F93F2A6585CF2DF9A3B31F13B9F45E122698D5
- created_at: "2025-10-22T08:32:24Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hQGMAwTtVaE3mgdcAQv/ZorP3XE4BVsGhz5m92Fch9W7ZeG3S45o1b5pgGR3/Aw4
323PWxqCuR22wtgHw1plfCnFH4O3/3j3bP2fWzYd4HAnxvjaFDdBqG8kC5klkDG0
hAeL2nT8UvpWUZhhqFOwgeYJrrUsWvHEtYyfomqLbwMSKpLUUONWw+lpWOpy8YhK
+VX3qBkZ/KI2mbv9R6wUYbLf81j5LrCcCrx2DJ8B9Q5EXcWn8KaFQAHNQvIlj2m2
kcDJnODx9iHNjMf9lRlJ+wN9vb7+RZlPshGMgXMsn9HipxDbqe0F8+H098heceVw
gPuush8/ZEKAyi6aj/s/bWHjQ2bZW1IMSzT0V6N2r/SpVU6GVDSrnLhyuiJvNypd
7TIDeGXj8eN3s7KY2rHfsMIo7EUI/w//ahFM/SNchfMhyLrD8t169e9xHXQZdgQS
wq4srLq2byM2VZgxMeC0mPjzsl2+GXWM40aFl6N8jQ781946KPUG3At0IsYtcP+1
0RSAUlybEO91cS81iZQY1GgBCQIQpylFCD/qJtg2Gns6Sg0RQIn5jXk6WtO95ZD0
gLimARayL5pocbeAgCW+rKLkW/NhcjjTSAOyeriU9O5vSCFiZ9O9Drr27zjK6o3G
NwHeOhPqwHt7UiCBcBSzxKjiY7VUJBYKWg==
=4BZs
-----END PGP MESSAGE-----
fp: D667348F310C57655FCE5D4EA689FF232FD681F0
unencrypted_suffix: _unencrypted
version: 3.10.2

@ -0,0 +1,147 @@
#!/usr/bin/env bash
# PURPOSE: Test to verify update_sops.sh script
set -ueo pipefail
test_dir="$(realpath $(dirname "${BASH_SOURCE[0]}"))"
cd "${test_dir}"
# opinionated: keys located in current repo, one level up
keys_dir="$(dirname "${test_dir}")"
# deliberate: just "dot" for current dir
sops_cfg_dir=.
secrets_file="mock_secrets.yaml"
# prerequisite: for verification of sops config, idempotent create file with a mock secret, src: https://bash-org-archive.com/?244321
test -e "${secrets_file}" || (yq -n '.demo.credentials.secret = "hunter2"' > "${secrets_file}" && sops -e -i "${secrets_file}" )
# Special Case: Add caveat header
cat <<EOM > .sops.yaml.tmp
# PURPOSE: BLUEPRINT for .sops.yaml config
# CAVEAT: DO NOT USE THIS FILE AS-IS in another project; copy it and remove the unauthorised users
$( cat .sops.yaml )
EOM
mv .sops.yaml.tmp .sops.yaml
# TESTCASES
# define "fixture"
repo_root="$(git rev-parse --show-toplevel)"
# ---
function fn_test_create_sops_cfg_default(){
>&2 echo -e "# ---\n# TEST: create sops cfg in default dir: ${repo_root}"
set -x
rm "${PWD}/.sops.yaml" || :
# note: fail if for any reason sops config defined at top level; this repo should not have this!
test ! -e "${repo_root}/.sops.yaml"
../bin/update_sops.sh -s "${secrets_file}" > /dev/null 2>&1
test ! -e "${PWD}/.sops.yaml"
test -e "${repo_root}/.sops.yaml"
set +x
# teardown
# enmesh: restore, since this particular one is checked in
git checkout "${PWD}/.sops.yaml" > /dev/null 2>&1
rm "${repo_root}/.sops.yaml"
}
# ---
function fn_test_create_sops_cfg_dir_cwd(){
>&2 echo -e "# ---\n# TEST: create sops cfg in curdir: ${PWD}"
set -x
# note: fail if for any reason sops config defined at top level; this repo should not have this!
test ! -e "${repo_root}/.sops.yaml"
rm "${PWD}/.sops.yaml" || :
# minimal operation: update .sops.yaml, update keys in encrypted file
../bin/update_sops.sh -c "${PWD}" "${secrets_file}" > /dev/null 2>&1
test -e "${PWD}/.sops.yaml"
test ! -e "${repo_root}/.sops.yaml"
set +x
# teardown
# not necessary, all tracked in git
# enmesh: restore, since this particular one is checked in
git checkout "${PWD}/.sops.yaml" > /dev/null 2>&1
}
# ---
function fn_test_create_sops_cfg_opts_complex_1(){
>&2 echo -e "# ---\n# TEST: Full Args: specify path to each, also for secrets, mix specified and positional params"
set -x
../bin/update_sops.sh -k "${keys_dir}" -c "${sops_cfg_dir}" -s "${secrets_file}" "${secrets_file}" > /dev/null 2>&1
set +x
# teardown
# not necessary, all tracked in git
# enmesh: restore, since this particular one is checked in
git checkout "${PWD}/.sops.yaml" > /dev/null 2>&1
}
# ---
function fn_test_auto_find_secrets_files(){
>&2 echo -e "# ---\n# TEST: auto-find secrets files"
# SETUP
_tmp_mock_secrets_dir='mock_hierarchy'
_tmp_mock_secrets_filepath_1="${_tmp_mock_secrets_dir}/one/secrets.yaml"
mkdir -p "$(dirname "${_tmp_mock_secrets_filepath_1}")"
touch "${_tmp_mock_secrets_filepath_1}"
_tmp_mock_secrets_filepath_2='mock_hierarchy/Tw o/secrets.yaml'
mkdir -p "$(dirname "${_tmp_mock_secrets_filepath_2}")"
touch "${_tmp_mock_secrets_filepath_2}"
# RUN
# set -x
# suspend strict: check output for errors
set +e
# move 'set -x' within the sub-shell, otherwise all output dumped to tty
# ... bug: stderr still gets printed, not sure why. E.g. '# RUN: sops updatekeys mock_secrets.yaml'
_out="$(set -x; ../bin/update_sops.sh --find_secrets -s "${secrets_file}" 2>&1 )"
echo "$_out}"
# re-enable strict
set -e
set +x
grep "${_tmp_mock_secrets_filepath_1}" <<< "${_out}"
grep "${_tmp_mock_secrets_filepath_2}" <<< "${_out}"
grep "${secrets_file}" <<< "${_out}"
set -e
# TEARDOWN
set -x
rm -rf "${_tmp_mock_secrets_dir}"
# enmesh: restore, since this particular one is checked in
git checkout "${PWD}/.sops.yaml" > /dev/null 2>&1
}
# ---
function fn_test_expect_error_invalid_file(){
>&2 echo -e "# ---\n# TEST: induce error: invalid file"
# dev note: ':' is a noop operator; could also just temporarily disable strict errors
set -x
../bin/update_sops.sh "${secrets_file}" -s non_existing_secrets.yaml > /dev/null 2>&1 || :
set +x
# teardown
# not necessary, all tracked in git
# enmesh: restore, since this particular one is checked in
git checkout "${PWD}/.sops.yaml" > /dev/null 2>&1
}
if [[ 1 -eq 1 ]]; then
fn_test_create_sops_cfg_default
else
>&2 echo "# INFO: skipping ...."
fi
if [[ 1 -eq 1 ]]; then
fn_test_create_sops_cfg_dir_cwd
else
>&2 echo "# INFO: skipping ...."
fi
if [[ 1 -eq 1 ]]; then
fn_test_create_sops_cfg_opts_complex_1
else
>&2 echo "# INFO: skipping ...."
fi
if [[ 1 -eq 1 ]]; then
fn_test_auto_find_secrets_files
else
>&2 echo "# INFO: skipping ...."
fi
if [[ 1 -eq 1 ]]; then
fn_test_expect_error_invalid_file
else
>&2 echo "# INFO: skipping ...."
fi
# ---
echo "TESTCASES PASSED"
exit 0

@ -0,0 +1,28 @@
#!/usr/bin/env bash
set -ueo pipefail
# PURPOSE: Allows User to verify their local SOPS configuration using a sample SOPS config and SOPS-encrypted file
# Usage: 1. Existing User: upon adding key, run this script to update the SOPS Config and encrypted file
# 2. New User: 'Existing User' has added key, run this script to confirm correct local configuration
cd "$(dirname "${BASH_SOURCE[0]}")"
secrets_file="mock_secrets.yaml"
# prerequisite: for verification of sops config, idempotent create file with a mock secret, src: https://bash-org-archive.com/?244321
test -e "${secrets_file}" || (yq -n '.demo.credentials.secret = "hunter2"' > "${secrets_file}" && sops -e -i "${secrets_file}" )
set -x
# within current dir: update .sops.yaml, update keys in encrypted file
../bin/update_sops.sh -c "${PWD}" "${secrets_file}"
# verify: dump secrets, GPG_TTY src: https://www.varokas.com/secrets-in-code-with-mozilla-sops/
GPG_TTY=$(tty) sops -d "${secrets_file}"
# Special Case: Add caveat header
cat <<EOM > .sops.yaml.tmp
# PURPOSE: BLUEPRINT for .sops.yaml config
# CAVEAT: DO NOT USE THIS FILE AS-IS in another project; copy it and remove the unauthorised users
$( cat .sops.yaml )
EOM
mv .sops.yaml.tmp .sops.yaml
# if reached this far, is success, due to bash strict mode. I.e. script would have failed by now.
echo "SUCESS"
Loading…
Cancel
Save