All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.mle.play.auth.Auth.scala Maven / Gradle / Ivy

The newest version!
package com.mle.play.auth

import org.apache.commons.codec.binary.Base64
import play.api.http.HeaderNames
import play.api.mvc.{RequestHeader, Security}

/**
 * @author Michael
 */
object Auth {
  def basicCredentials(request: RequestHeader): Option[BasicCredentials] = {
    authHeaderParser(request)(decoded => {
      decoded.split(":", 2) match {
        case Array(user, pass) => Some(BasicCredentials(user, pass))
        case _ => None
      }
    })
  }

  /**
   *
   * @param request
   * @param f decoded credentials => T
   * @tparam T
   * @return
   */
  def authHeaderParser[T](request: RequestHeader)(f: String => Option[T]): Option[T] = {
    request.headers.get(HeaderNames.AUTHORIZATION).flatMap(authInfo => {
      authInfo.split(" ") match {
        case Array(authMethod, encodedCredentials) =>
          val decoded = new String(Base64.decodeBase64(encodedCredentials.getBytes))
          f(decoded)
        case _ => None
      }
    })
  }

  def credentialsFromQuery(req: RequestHeader, userKey: String = "u", passKey: String = "p"): Option[BasicCredentials] = {
    val qString = req.queryString
    for (
      u <- qString get userKey;
      p <- qString get passKey;
      user <- u.headOption;
      pass <- p.headOption
    ) yield BasicCredentials(user, pass)
  }

  def authenticateFromSession(implicit request: RequestHeader): Option[String] =
    request.session.get(Security.username) //.filter(_.nonEmpty)

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy