diff --git a/scentry/src/main/scala/org/scalatra/auth/ScalatraKernelProxy.scala b/scentry/src/main/scala/org/scalatra/auth/ScalatraKernelProxy.scala index e48375028..e23580ad3 100644 --- a/scentry/src/main/scala/org/scalatra/auth/ScalatraKernelProxy.scala +++ b/scentry/src/main/scala/org/scalatra/auth/ScalatraKernelProxy.scala @@ -15,6 +15,8 @@ class ScalatraKernelProxy { private var _session: () => HttpSession = _ private var _params: () => collection.Map[String, String] = _ private var _redirect: String => Unit = _ + private var _request: () => HttpServletRequest = _ + private var _response: () => HttpServletResponse = _ def session = _session() private[auth] def session_=(sess: => HttpSession) = { @@ -29,14 +31,22 @@ class ScalatraKernelProxy { def redirect(uri: String) = _redirect(uri) private[auth] def redirect_=(redirectFunction: String => Unit) = _redirect = redirectFunction + def request = _request() + def response = _response() + def request_=(req: => HttpServletRequest) = _request = () => req + def response_=(res: => HttpServletResponse) = _response = () => res + } object ScalatraKernelProxy { - def apply(session: => HttpSession, params: => collection.Map[String, String], redirect: String => Unit) ={ + def apply(session: => HttpSession, params: => collection.Map[String, String], redirect: String => Unit, + request: => HttpServletRequest, response: => HttpServletResponse ) ={ val ctxt = new ScalatraKernelProxy ctxt.session = session ctxt.params = params ctxt.redirect_=(redirect) + ctxt.response = response + ctxt.request = request ctxt } diff --git a/scentry/src/main/scala/org/scalatra/auth/ScentrySupport.scala b/scentry/src/main/scala/org/scalatra/auth/ScentrySupport.scala index 86a05baff..e2fea51e8 100644 --- a/scentry/src/main/scala/org/scalatra/auth/ScentrySupport.scala +++ b/scentry/src/main/scala/org/scalatra/auth/ScentrySupport.scala @@ -31,7 +31,7 @@ trait ScentrySupport[TypeForUser <: AnyRef] extends Handler with Initializable { } abstract override def handle(servletRequest: HttpServletRequest, servletResponse: HttpServletResponse) = { - val app = ScalatraKernelProxy(session, params, redirect _) + val app = ScalatraKernelProxy(session, params, redirect _, request, response) _scentry.withValue(new Scentry[UserType](app, toSession, fromSession)) { registerStrategiesFromConfig registerAuthStrategies diff --git a/scentry/src/test/scala/org/scalatra/auth/ScentrySpec.scala b/scentry/src/test/scala/org/scalatra/auth/ScentrySpec.scala index 3b4d7e644..b336fa9d7 100644 --- a/scentry/src/test/scala/org/scalatra/auth/ScentrySpec.scala +++ b/scentry/src/test/scala/org/scalatra/auth/ScentrySpec.scala @@ -4,9 +4,7 @@ import org.specs._ import mock.Mockito import org.mockito.Matchers._ import runner.{ScalaTest, JUnit} -import javax.servlet.http.HttpSession - - +import javax.servlet.http.{HttpServletResponse, HttpServletRequest, HttpSession} object ScentrySpec extends Specification with Mockito with JUnit with ScalaTest { detailedDiffs @@ -18,7 +16,12 @@ object ScentrySpec extends Specification with Mockito with JUnit with ScalaTest session.getAttribute(Scentry.scentryAuthKey) returns "6789" var invalidateCalled = false session.invalidate answers { _ => invalidateCalled = true } - val context = ScalatraKernelProxy(session, smartMock[scala.collection.Map[String, String]], s => "redirected to: " + s) + val context = ScalatraKernelProxy( + session, + smartMock[scala.collection.Map[String, String]], + s => "redirected to: " + s, + smartMock[HttpServletRequest], + smartMock[HttpServletResponse]) val theScentry = new Scentry[User](context, { case User(id) => id }, { case s: String => User(s)}) var beforeFetchCalled = false var afterFetchCalled = false