diff options
author | vlad <vlad@driver.xyz> | 2017-06-13 10:25:55 -0700 |
---|---|---|
committer | vlad <vlad@driver.xyz> | 2017-06-13 10:25:55 -0700 |
commit | 0000a65ab4479a2a40e2d6468036438e9705b4aa (patch) | |
tree | 60c868828741e7e5367aa7b6d167abbdaf91d5b8 /src/main/scala/xyz/driver/common/domain/PasswordHash.scala | |
download | rest-query-0000a65ab4479a2a40e2d6468036438e9705b4aa.tar.gz rest-query-0000a65ab4479a2a40e2d6468036438e9705b4aa.tar.bz2 rest-query-0000a65ab4479a2a40e2d6468036438e9705b4aa.zip |
Initial extraction of Driver non-specific utilities
Diffstat (limited to 'src/main/scala/xyz/driver/common/domain/PasswordHash.scala')
-rw-r--r-- | src/main/scala/xyz/driver/common/domain/PasswordHash.scala | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/main/scala/xyz/driver/common/domain/PasswordHash.scala b/src/main/scala/xyz/driver/common/domain/PasswordHash.scala new file mode 100644 index 0000000..7b25799 --- /dev/null +++ b/src/main/scala/xyz/driver/common/domain/PasswordHash.scala @@ -0,0 +1,42 @@ +package xyz.driver.common.domain + +import java.nio.charset.Charset + +import org.mindrot.jbcrypt.BCrypt + +case class PasswordHash(value: Array[Byte]) { + + lazy val hashString: String = new String(value, Charset.forName("UTF-8")) + + override def toString: String = { + s"${this.getClass.getSimpleName}($hashString)" + } + + override def equals(that: Any): Boolean = { + that match { + case thatHash: PasswordHash => java.util.Arrays.equals(this.value, thatHash.value) + case _ => false + } + } + + override def hashCode(): Int = { + 42 + java.util.Arrays.hashCode(this.value) + } + + def is(password: String): Boolean = { + BCrypt.checkpw(password, hashString) + } + +} + +object PasswordHash { + + def apply(password: String): PasswordHash = { + new PasswordHash(getHash(password)) + } + + private def getHash(str: String): Array[Byte] = { + BCrypt.hashpw(str, BCrypt.gensalt()).getBytes(Charset.forName("UTF-8")) + } + +} |