Skip to content

Instantly share code, notes, and snippets.

@gakuzzzz
Created June 29, 2011 14:54
Show Gist options
  • Save gakuzzzz/1053992 to your computer and use it in GitHub Desktop.
Save gakuzzzz/1053992 to your computer and use it in GitHub Desktop.
for式でのパターンマッチ
trait Secure {
self: Controller =>
@Before
def check = parseAuthHeader match {
case None => Unauthorized("Basic")
case Some(user) =>
renderArgs += "user" -> user
Continue
}
private def parseAuthHeader: Option[User] = for {
auth <- request.headers.lift("authorization")
(email, password) <- parseAuthHeader(auth)
user <- User.connect(email, password)
} yield user
/** returns Some(user, password) if header is parsable. */
private def parseAuthHeader(header: Header): Option[(String, String)] = allCatch opt {
val array = new String(decodeBase64(header.value.drop(6))).split(':')
(array(0), array(1))
}
def logined: User = renderArgs.get("user", classOf[User])
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment