Bug 28772: Make Koha::ApiKey->store encrypt the secret
authorTomas Cohen Arazi <tomascohen@theke.io>
Thu, 26 Aug 2021 23:24:43 +0000 (20:24 -0300)
committerKyle M Hall <kyle@bywatersolutions.com>
Wed, 15 Sep 2021 14:47:11 +0000 (10:47 -0400)
commitef1002c420a9e8e4502828f4c28cca838c91c12f
treebcbf5b1829526d755923b9740b9cd42fc7d10320
parent921e3ac50fb4e3411bb4122c830cf0e874dc24bb
Bug 28772: Make Koha::ApiKey->store encrypt the secret

This patch refactors the Koha::ApiKey class so:
- It encrypts the generated secret
- Allows accessing the plain text secret only immediately after the key
  creation (this implies that it won't be accessible if the key is
  fetched from the DB).
- It implements an allow list for attributes, that are not read only.
  Changing any other of them will make ->store throw an exception.
- A method for validating plain text secrets against the encrypted one
  is added.
- A method for accessing the plain text secret is added. Returns undef
  if the object is not 'fresh'.

To test:
1. Apply this patch
2. Run:
   $ kshell
  k$ prove t/db_dependent/Koha/ApiKey.t
=> SUCCESS: Tests pass! Expected behavior is confirmed
3. Sign off :-D

Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Koha/ApiKey.pm
t/db_dependent/Koha/ApiKey.t [new file with mode: 0755]
t/db_dependent/Koha/ApiKeys.t [deleted file]