Files
2014-12-13 18:04:48 +01:00

60 lines
1.9 KiB
Scala

package controllers
import models.{Model, UserData, UserDataTable, Login}
import play.api.db.slick.{DBAction, DBSessionRequest}
import play.api.libs.json.Json
import play.api.mvc._
import play.api.db.slick.Config.driver.simple._
import play.mvc.Results.Redirect
import scala.slick.lifted.{Query, TableQuery}
/**
* Created by mar on 18.11.14.
*/
trait Secured {
def username(request: RequestHeader) = request.session.get(Security.username)
def onUnauthorized(request: RequestHeader) = Results.Redirect(routes.Application.login).withSession("url" -> request.uri)
def onUnauthorizedJsonCall(request: RequestHeader) = Results.Unauthorized(Json.obj("status" -> "unauthorized operation"))
// def withAuth(f: => String => Request[AnyContent] => Result) = {
// Security.Authenticated(username, onUnauthorized) { user =>
// Action(request => f(user)(request))
// }
// }
def withAuth(f: => String => DBSessionRequest[AnyContent] => Result) = {
Security.Authenticated(username, onUnauthorized) { user =>
DBAction(request =>
{
f(user)(request)
})
}
}
def withJsonAuth(f: => String => DBSessionRequest[AnyContent] => Result) = {
Security.Authenticated(username, onUnauthorizedJsonCall) { user =>
DBAction(request =>
{
f(user)(request)
})
}
}
/**
* This method shows how you could wrap the withAuth method to also fetch your user
* You will need to implement UserDAO.findOneByUsername
*/
def withUser(f: UserData => DBSessionRequest[AnyContent] => Result) = withAuth { username => implicit request =>
Model.findUserByName(username).map { user =>
f(user)(request)
}.getOrElse(onUnauthorized(request))
}
def withJsonUser(f: UserData => DBSessionRequest[AnyContent] => Result) = withJsonAuth { username => implicit request =>
Model.findUserByName(username).map { user =>
f(user)(request)
}.getOrElse(onUnauthorizedJsonCall(request))
}
}