From 1ec27f18cc767fac5c9e70434f0a5171ec9d2071 Mon Sep 17 00:00:00 2001 From: Sasha Koshka Date: Sat, 14 Dec 2024 02:21:43 -0500 Subject: [PATCH] providers: Add crypto provider with bcrypt comparison --- providers/all.go | 2 ++ providers/crypto/crypto.go | 28 ++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 providers/crypto/crypto.go diff --git a/providers/all.go b/providers/all.go index 00c6fe2..edf95d8 100644 --- a/providers/all.go +++ b/providers/all.go @@ -8,6 +8,7 @@ import fppath "git.tebibyte.media/sashakoshka/step/providers/path" import fpmime "git.tebibyte.media/sashakoshka/step/providers/mime" import fpsprig "git.tebibyte.media/sashakoshka/step/providers/sprig" import fpimport "git.tebibyte.media/sashakoshka/step/providers/import" +import fpcrypto "git.tebibyte.media/sashakoshka/step/providers/crypto" import fpstrings "git.tebibyte.media/sashakoshka/step/providers/strings" import fpsession "git.tebibyte.media/sashakoshka/step/providers/session" import fpvalidate "git.tebibyte.media/sashakoshka/step/providers/validate" @@ -23,6 +24,7 @@ func All () []step.Provider { new(fpmime.Provider), new(fpsprig.Provider), new(fpimport.Provider), + new(fpcrypto.Provider), new(fpsession.Provider), new(fpstrings.Provider), new(fpvalidate.Provider), diff --git a/providers/crypto/crypto.go b/providers/crypto/crypto.go new file mode 100644 index 0000000..b7992b9 --- /dev/null +++ b/providers/crypto/crypto.go @@ -0,0 +1,28 @@ +package crypto + +import "html/template" +import "golang.org/x/crypto/bcrypt" +import "git.tebibyte.media/sashakoshka/step" + +var _ step.FuncProvider = new(Provider) + +// Provider provides cryptographic functions. +type Provider struct { + +} + +// Package fulfills the step.Provider interface. +func (this *Provider) Package () string { + return "crypto" +} + +// FuncMap fulfills the step.FuncProvider interface. +func (this *Provider) FuncMap () template.FuncMap { + return template.FuncMap { + "bcryptCompare": funcBcryptCompare, + } +} + +func funcBcryptCompare (hash string, text string) bool { + return bcrypt.CompareHashAndPassword([]byte(hash), []byte(text)) == nil +}