From 9fdb47848906d026af346e77da29a9fe54cf7691 Mon Sep 17 00:00:00 2001 From: Mikkel Ricky Date: Mon, 13 May 2024 10:25:17 +0200 Subject: [PATCH] Updated documentation --- .github/PULL_REQUEST_TEMPLATE.md | 25 ++++++++++++++++++++++++ CHANGELOG.md | 5 +++++ README.md | 28 ++++++++++++++++++++------- docs/assets/key-type-certificate.png | Bin 0 -> 288912 bytes docs/assets/key-type-oidc.png | Bin 0 -> 223808 bytes 5 files changed, 51 insertions(+), 7 deletions(-) create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 docs/assets/key-type-certificate.png create mode 100644 docs/assets/key-type-oidc.png diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..dc5b4ae --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,25 @@ +#### Link to ticket + +Please add a link to the ticket being addressed by this change. + +#### Description + +Please include a short description of the suggested change and the reasoning behind the approach you have chosen. + +#### Screenshot of the result + +If your change affects the user interface you should include a screenshot of the result with the pull request. + +#### Checklist + +- [ ] My code is covered by test cases. +- [ ] My code passes our test (all our tests). +- [ ] My code passes our static analysis suite. +- [ ] My code passes our continuous integration process. + +If your code does not pass all the requirements on the checklist you have to add a comment explaining why this change +should be exempt from the list. + +#### Additional comments or questions + +If you have any further comments or questions for the reviewer please add them here. diff --git a/CHANGELOG.md b/CHANGELOG.md index 261668c..0dcae0a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,4 +7,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +* [PR-2](https://github.com/OS2web/os2web_key/pull/2) + Updated documentation +* [PR-1](https://github.com/OS2web/os2web_key/pull/1) + Added OS2Web key module + [Unreleased]: https://github.com/rimi-itk/os2web_key diff --git a/README.md b/README.md index c48c830..002f7b9 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,13 @@ Key types and providers for OS2Web built on the [Key module](https://www.drupal.org/project/key). +The OS2Web key module provides two _key types_, [Certificate](#certificate) and [OpenID Connect +(OIDC)](#openid-connect-oidc). Two _key providers_, [Azure Key Vault](#azure-key-vault) and [Infisical](#infisical), are +planned, but not yet implemented. + +See [the Key Developer Guide](https://www.drupal.org/docs/contributed-modules/key/developer-guide) for details in how to +use keys in Drupal. + ## Installation ``` shell @@ -9,6 +16,8 @@ composer require os2web/os2web_key drush pm:install os2web_key ``` +Keys are managed on `/admin/config/system/keys`. + ## Key types ### Certificate @@ -16,6 +25,10 @@ drush pm:install os2web_key This key type handles [PKCS 12](https://en.wikipedia.org/wiki/PKCS_12) or [Privacy-Enhanced Mail (PEM)](https://en.wikipedia.org/wiki/Privacy-Enhanced_Mail) certificate with an optional password (passphrase). +Managing the key: + +!["Certificate" key type form](docs/assets/key-type-certificate.png) + Use in a form: ``` php @@ -56,6 +69,10 @@ $key = $repository->getKey('my_key'); ### OpenID Connect (OIDC) +Managing the key: + +!["OpenID Connect (OIDC)" key type form](docs/assets/key-type-oidc.png) + Example use in a form: ``` php @@ -87,18 +104,15 @@ $key = $repository->getKey('openid_connect_ad'); ] = $helper->getOidcValues($key); ``` -See [the Key Developer Guide](https://www.drupal.org/docs/contributed-modules/key/developer-guide) for details and more -examples. - ## Providers -### `@todo` Azure Key Vault +### Azure Key Vault - +`@todo` -### `@todo` Infisical +### Infisical - +`@todo` ## Coding standards diff --git a/docs/assets/key-type-certificate.png b/docs/assets/key-type-certificate.png new file mode 100644 index 0000000000000000000000000000000000000000..29f0a129f910536b1208579bcffc7b7f7ab9ecb3 GIT binary patch literal 288912 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%0D3NQ_Y4#Rn#)ogPc-00#P?K`2cAI{ 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