
as.zio-servlet_2.12.1.2.2.source-code.Request.scala Maven / Gradle / Ivy
The newest version!
package com.earldouglas.zio.servlet
import javax.servlet.ServletRequest
import javax.servlet.ServletResponse
import javax.servlet.http.HttpServletRequest
import javax.servlet.http.HttpUpgradeHandler
import scala.collection.JavaConverters._
import zio.ZIO
object Request {
def effect[A](
k: HttpServletRequest => A
): ZIO[RequestIO, Throwable, A] =
ZIO.environmentWithZIO { e => ZIO.attempt { k(e.get.request) } }
def effectO[A](
k: HttpServletRequest => A
): ZIO[RequestIO, Throwable, Option[A]] =
ZIO.environmentWithZIO { e =>
ZIO.attempt { Option(k(e.get.request)) }
}
def route[A, R <: RequestIO](
k: PartialFunction[List[String], ZIO[R, Throwable, A]]
): ZIO[R, Throwable, A] =
for {
method <- getMethod()
context <- getServletPath()
uri <- getRequestURI()
a <- k(
method :: uri
.substring(context.length)
.split("/")
.drop(1)
.toList
)
} yield a
val headers: ZIO[RequestIO, Throwable, Map[String, List[String]]] =
getHeaderNames() flatMap { namesO =>
ZIO.collectAll {
namesO
.map(_.asScala.toList)
.getOrElse(Nil)
.map({ name =>
getHeaders(name) map { valuesO =>
(
name,
valuesO
.map(_.asScala.toList)
.getOrElse(Nil)
)
}
})
} map {
_.toMap
}
}
// ServletRequest methods:
def getAsyncContext() =
effect(_.getAsyncContext())
def getAttribute(name: String) =
effectO(_.getAttribute(name))
def getAttributeNames() =
effect(_.getAttributeNames())
def getCharacterEncoding() =
effectO(_.getCharacterEncoding())
def getContentLength() =
effect(_.getContentLength())
def getContentLengthLong() =
effect(_.getContentLengthLong())
def getContentType() =
effectO(_.getContentType())
def getDispatcherType() =
effect(_.getDispatcherType())
def getInputStream() =
effect(_.getInputStream())
def getLocalAddr() =
effect(_.getLocalAddr())
def getLocalName() =
effect(_.getLocalName())
def getLocalPort() =
effect(_.getLocalPort())
def getLocale() =
effect(_.getLocale())
def getLocales() =
effect(_.getLocales())
def getParameter(name: String) =
effectO(_.getParameter(name))
def getParameterMap() =
effect(_.getParameterMap())
def getParameterNames() =
effect(_.getParameterNames())
def getParameterValues(name: String) =
effectO(_.getParameterValues(name))
def getProtocol() =
effect(_.getProtocol())
def getReader() =
effect(_.getReader())
def getRemoteAddr() =
effect(_.getRemoteAddr())
def getRemoteHost() =
effect(_.getRemoteHost())
def getRemotePort() =
effect(_.getRemotePort())
def getRequestDispatcher(path: String) =
effectO(_.getRequestDispatcher(path))
def getScheme() =
effect(_.getScheme())
def getServerName() =
effect(_.getServerName())
def getServerPort() =
effect(_.getServerPort())
def getServletContext() =
effect(_.getServletContext())
def isAsyncStarted() =
effect(_.isAsyncStarted())
def isAsyncSupported() =
effect(_.isAsyncSupported())
def isSecure() =
effect(_.isSecure())
def removeAttribute(name: String) =
effect(_.removeAttribute(name))
def setAttribute(name: String, o: Object) =
effect(_.setAttribute(name, o))
def setCharacterEncoding(env: String) =
effect(_.setCharacterEncoding(env))
def startAsync() =
effect(_.startAsync())
def startAsync(
servletRequest: ServletRequest,
servletResponse: ServletResponse
) =
effect(_.startAsync(servletRequest, servletResponse))
// HttpServletRequest methods:
def authenticate: ZIO[RequestIO with ResponseIO, Throwable, Boolean] =
ZIO.environmentWithZIO { e =>
ZIO.attempt {
e.get[RequestIO]
.request
.authenticate(e.get[ResponseIO].response)
}
}
def changeSessionId() =
effect(_.changeSessionId())
def getAuthType() =
effectO(_.getAuthType())
def getContextPath() =
effect(_.getContextPath())
def getCookies() =
effectO(_.getCookies())
def getDateHeader(name: String) =
effect(_.getDateHeader(name))
def getHeader(name: String) =
effectO(_.getHeader(name))
def getHeaderNames() =
effectO(_.getHeaderNames())
def getHeaders(name: String) =
effectO(_.getHeaders(name))
def getIntHeader(name: String) =
effect(_.getIntHeader(name))
def getMethod() =
effect(_.getMethod())
def getPart(name: String) =
effectO(_.getPart(name))
def getParts() =
effect(_.getParts())
def getPathInfo() =
effectO(_.getPathInfo())
def getPathTranslated() =
effectO(_.getPathTranslated())
def getQueryString() =
effectO(_.getQueryString())
def getRemoteUser() =
effectO(_.getRemoteUser())
def getRequestURI() =
effect(_.getRequestURI())
def getRequestURL() =
effect(_.getRequestURL())
def getRequestedSessionId() =
effectO(_.getRequestedSessionId())
def getServletPath() =
effect(_.getServletPath())
def getSession() =
effect(_.getSession())
def getSession(create: Boolean) =
effectO(_.getSession(create))
def getUserPrincipal() =
effectO(_.getUserPrincipal())
def isRequestedSessionIdFromCookie() =
effect(_.isRequestedSessionIdFromCookie())
def isRequestedSessionIdFromURL() =
effect(_.isRequestedSessionIdFromURL())
def isRequestedSessionIdValid() =
effect(_.isRequestedSessionIdValid())
def isUserInRole(role: String) =
effect(_.isUserInRole(role))
def login(username: String, password: String) =
effect(_.login(username, password))
def logout() =
effect(_.logout())
def upgrade[T <: HttpUpgradeHandler](handlerClass: Class[T]) =
effect(_.upgrade(handlerClass))
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy