All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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