/src/main/scala/com/mycotrack/api/auth/SprayMongoAuthenticator.scala

https://github.com/JanxSpirit/mycotrack-api · Scala · 57 lines · 25 code · 6 blank · 26 comment · 0 complexity · c3b9ece0a1f90aa6d585a856c20d4b29 MD5 · raw file

  1. package com.mycotrack.api.auth
  2. import org.bson.types.ObjectId
  3. import cc.spray._
  4. import cc.spray.http.{BasicHttpCredentials, HttpCredentials}
  5. import com.mongodb.casbah.MongoConnection._
  6. import com.mongodb.casbah.MongoConnection
  7. import com.mongodb.casbah.commons.MongoDBObject
  8. import com.mongodb.casbah.commons.Imports._
  9. import com.novus.salat._
  10. import com.novus.salat.global._
  11. import akka.event.EventHandler
  12. /**
  13. * @author chris_carrier
  14. * @version 10/19/11
  15. */
  16. /*trait MongoAuthenticator[U] extends HttpAuthenticator[U] {
  17. def apply(ctx: RequestContext) = {
  18. val authHeader = ctx.request.headers.findByType[`Authorization`]
  19. val credentials = authHeader.map { case Authorization(credentials) => credentials }
  20. authenticate(credentials, ctx) match {
  21. case Some(userContext) => Right(userContext)
  22. case None => Left {
  23. if (authHeader.isEmpty) AuthenticationRequiredRejection(scheme, realm, params(ctx))
  24. else AuthenticationFailedRejection(realm)
  25. }
  26. }
  27. }
  28. def scheme: String
  29. def realm: String
  30. def params(ctx: RequestContext): Map[String, String]
  31. def authenticate(credentials: Option[HttpCredentials], ctx: RequestContext): Option[U]
  32. }*/
  33. object FromMongoUserPassAuthenticator extends UserPassAuthenticator[BasicUserContext] {
  34. def apply(userPass: Option[(String, String)]) = {
  35. EventHandler.info(this, "Mongo auth")
  36. userPass.flatMap {
  37. case (user, pass) => {
  38. val db = MongoConnection()("mycotrack")("users")
  39. val userResult = db.findOne(MongoDBObject("username" -> user) ++ ("password" -> pass))
  40. userResult.map(grater[BasicUserContext].asObject(_))
  41. }
  42. case _ => None
  43. }
  44. }
  45. }
  46. case class BasicUserContext(_id: ObjectId, username: String, password: String)