aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/xyz/driver/pdsuicommon/domain/PasswordHash.scala
blob: 82cba8dc150a35415cd5a0a789f88f5d1dfbf7e8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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"))
}