diff options
Diffstat (limited to 'src/main/scala/xyz/driver/pdsuicommon/domain/PasswordHash.scala')
-rw-r--r-- | src/main/scala/xyz/driver/pdsuicommon/domain/PasswordHash.scala | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/main/scala/xyz/driver/pdsuicommon/domain/PasswordHash.scala b/src/main/scala/xyz/driver/pdsuicommon/domain/PasswordHash.scala new file mode 100644 index 0000000..82cba8d --- /dev/null +++ b/src/main/scala/xyz/driver/pdsuicommon/domain/PasswordHash.scala @@ -0,0 +1,36 @@ +package xyz.driver.pdsuicommon.domain + +import java.nio.charset.Charset + +import org.mindrot.jbcrypt.BCrypt + +final 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")) +} |