aboutsummaryrefslogblamecommitdiff
path: root/src/main/scala/xyz/driver/pdsuicommon/domain/PasswordHash.scala
blob: 337d925d8fbb463d189d37c534f9bb3e18b1283a (plain) (tree)
1
2
3
4
5
6
7
                                     




                                 
                                                   









                                                                                        
                                          


     
                                
                                              
 
                                     
                                        



                     
                                             
                                       
 
                                                 
                                                                           
 
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"))
}