Skip to content

Commit

Permalink
Backmerge 23 02 2022 (#1088)
Browse files Browse the repository at this point in the history
* Doc: Add outline (#815)

* doc: add categories

* refactor: doc structure refactored

* fix: package-lock.json removed

* refactor: create outline sub-directories

* refactor: rename test to testing

* Update netty-all to 4.1.73.Final (#811)

* Disable benchmarks comment on fork pull request (#820)

* Disable benchmarks on fork PR

* run benchmarks on fork PR but disbable PR comment

* Feature: API to modify headers (#824)

* feat(Headers):added new api to update headers

* renamed api

* Feature: Signed Cookie (#751)

* feat(cookie): added secret in cookie

* feat(cookie): added signcookie middleware

* feat(cookie): scalafmt

* fix(cookie): sign cookie while encoding

* scalafmt

* fix(Cookie): added unsign method for cookie

* fix(cookie): minor changes

* fix(signCookieMiddleware: simplified signCookies

* fix(cookie): removed try catch from signContent

* cookie: throw error in verify

* cookie: throw error in verify

* verify method changes

* fixed test cases

* fix: removed decodeResponseSignedCookie

* fix: middlewareSpec

* added modifyheaders in middleware

* removed unwanted changes

* scalafmt

* refactoring

* refactoring

* build fix

* build fix

* fix: decodeResponseCookie

* added modify

* Update sbt-scalafix to 0.9.34 (#805)

* Fix: Echo streaming (#828)

* Failing test

* Fix echo streaming

* Pr Comments

* Docs: Update Basic Examples (#814)

* doc(Getting started): updated examples

* docs: updated basic examples

* docs: update advanced examples (#816)

* maintenance: semanticdb revision usage (#832)

* maintenance: workflow scala version (#833)

* Fix: HasHeader bug (#835)

* #834 - fix and test for the bug.

* applied suggested change

* refactor: fix naming for Http operators (#839)

* Update sbt-bloop to 1.4.12 (#810)

* Update sbt-bloop to 1.4.12

* Update sbt-bloop to 1.4.12

* Update scala-library to 2.13.8 (#801)

* Update scala-library to 2.13.8

* Regenerate workflow with sbt-github-actions

* Add configuration builder methods to zhttp.service.Server (#768)

* Add configuration builder methods to zhttp.service.Server

* Update zio-http/src/main/scala/zhttp/service/Server.scala

Co-authored-by: Tushar Mathur <tusharmath@gmail.com>

* Update zio-http/src/main/scala/zhttp/service/Server.scala

Co-authored-by: Tushar Mathur <tusharmath@gmail.com>

* Update zio-http/src/main/scala/zhttp/service/Server.scala

Co-authored-by: Tushar Mathur <tusharmath@gmail.com>

* Change some server with* builder methods (enable parameter)

* Server withAcceptContinue(enabled)

Co-authored-by: Tushar Mathur <tusharmath@gmail.com>

* maintenance: html template for internal server error string (#851)

Closes #842

* Performance: Improve benchmarking code (#731)

* wip: try server codec without validation

* wip: remove flush consolidator

* wip: use wrapped buffer

* wip: add flush consolidator

* perf: make response encoding checks faster

* use encoder and decoder (#733)

* wip: remove Request creation

* use encoder and decoder

Co-authored-by: Tushar Mathur <tusharmath@gmail.com>

* disable object aggregator

* disable object aggregator

* revert disable object aggregator

* doc: update scala doc

* perf: freeze the HttpResponse

Co-authored-by: Amit Kumar Singh <amit.singh@dream11.com>
Co-authored-by: amitsingh <amitksingh1490@gmail.com>

* Refactor: Support middlewares on Http (#773)

* refactor: remove type-params from Response

* chore: self review

* refactor: rename Middleware to HttpMiddleware

* refactor: add `@@@` to Http as an alternative to `@@`.

* feature: add new Middleware API

* feature: add `flatten` and `ifThenElse`

* feature: add `ifThenElseZIO`

* refactor: fix type params for `identity`

* feature: add `when`

* feature: add `make` constructor

* refactor: make middleware methods final

* refactor: git remains

* refactor: implement HttpMiddleware as Middleware

* scala3 fix

* Refactor CORS middleware (#788)

* Refactor/merge middleware and http middleware (#790)

* Refactor move cors and timeout

* move some httpMiddlewares to Middleware

* move some AuthMiddleware to Middleware

* move remaining AuthMiddleware to Middleware

* move Middlewares to middleware package

* scaladoc

* codec example

* move Middleware to http package

* named alias for `@@`

* rename Auth to AuthMiddlewares

* rename CORSMiddleware to CorsMiddlewares

* rename CSRF to CsrfMiddlewares

* make primitives private

* rename MiddlewareExtensions to HttpMiddlewares

* rename operators in HttpMiddlewares

* scalaDoc

* arg rename

* doc update and general refactor

* simplify cors middleware

* rename CorsConfig

* renames

* Make middlewares package private MiddlewareRequest

* Introduce MiddlewareRequest (#798)

* Introduce MiddlewareRequest

* PR review comments

* Refactor move runAfter to Middleware

* refactor: add `UMiddleware`

* feature: add `contramapZIO`

* refactor: move cors config to Cors file

* refactor: rename files

* refactor: remove AuthSpec from WebSpec

* refactor: fix naming for Http operators

* refactor: add partial type suport for contraMapZIO

* Refactor: Codec (#841)

* Add Run Before (#840)

* Add Run Before

* Add Run Before and After

* use renamed operator

* refactor: add partial type suport for contraMap

* Implement missing operators in Middleware (#807)

* Implement missing operators in Middleware

* fix as operator

* headers Middleware changes

* sign cookie

* extend with HeaderExtensions

* rename suite

* PR comments

* refactor: use `Request` instead of `MiddlewareRequest`

* refactor: rename methods

* refactor: resolve fix me issue

Co-authored-by: amitsingh <amitksingh1490@gmail.com>
Co-authored-by: Amit Kumar Singh <amit.singh@dream11.com>

* refactor: rename ClientParams to ClientRequest (#856)

* refactor: use declarative encoding for http.middleware (#869)

* Move docs to v1.x directory (#861)

* Bug Add host in client from absolute URL (#847)

* feat(Client): Add host in client from absolute URL

* feat(Client): Refactor and add spec for host value

* feat(Client): fmt formatting

* feat(Client): fmt formatting

* feat(Client): use setHeaders from netty

* feat(Client): Add spec for host

* feat(Client): Add spec for host

* feat(Client): Rename clientParams to clientRequest

* Doc website fix (#871)

* Update scala3-library to 3.1.1 (#873)

* Update scala3-library to 3.1.1

* Regenerate workflow with sbt-github-actions

* Doc: Fix getting started link (#874)

* Update scalafmt-core to 3.3.2 (#864)

* Doc: `Headers` documentation (#817)

* doc: add categories

* refactor: doc structure refactored

* fix: package-lock.json removed

* refactor: create outline sub-directories

* initial draft on Headers documentaiton

* refactor: rename test to testing

* migrated Headers doc in the right structure

* re-organized the section. added more examples on the service, client and middleware side.

* updated documentation

* updated based on review

* more updates

* more updates

* minor changes

* minor changes

* Update docs/website/docs/v1.x/dsl/headers/index.md

* Update docs/website/docs/v1.x/dsl/headers/index.md

Co-authored-by: Shubham Girdhar <girdharshubham@hotmail.com>
Co-authored-by: amitsingh <amitksingh1490@gmail.com>
Co-authored-by: Amit Kumar Singh <amit.singh@dream11.com>

* Fix collapsible Headers Doc (#876)

* Test: Added Integration tests for `HExit.Success` (#852)

* feat: added validation app for HExit without zio

* feat: removed type from validationAppSpec

* test: Iterating using HttpGen.Method

* test: rearranged status method params

* test: name fixes

* Update scalafmt-core to 3.3.3 (#881)

* Update scalafmt-core to 3.3.3 (#884)

* Fix: EncodeClientParams (#868)

* fix: encodeClientParams

* test(client): added test for req url string

* test(client): variable name changed

* test: added test in encodeClientSpec

* simplifies test case

* doc: add comment on why relative path needs to be used.

Co-authored-by: Tushar Mathur <tusharmath@gmail.com>

* Refactor: HttpRunnableSpec clean up (#857)

* refactor: reduce HttpRunnableSpec boilerplate

* refactor: remove all helpers from HttpRunnableSpec and inline the method

* doc: update documentation for test module

* refactor: add type-constraints to Http for specialized methods

* refactor: use IsResponse type constraint

* style(*): apply scala fmt

* doc: update documentation

* update doc (#897)

* Docs: Getting started (#887)

* fix: added more content

* fixed comments

* fix: getting started

* modifications

* added more

* minor changes

* minor changes

* changes

* refactor: rename asString to encode in URI (#898)

* refactor: rename asString to encode in Scheme (#904)

* fix: example links (#906)

* Update getting-started.md (#907)

* refactor: rename asString to encode in Scheme (#905)

* Doc: setup (#886)

* doc: setup

* resolve: PR comments

* Update netty-incubator-transport-native-io_uring to 0.0.12.Final (#908)

* Documentation for Server (#885)

* removed config.md and make configurations part of Server page

* added server configurations

* markdwon appearing fine in docusaurus generated page

* added one missing configuration

* Server documentation changed according to PR comments

* change note to tip

Co-authored-by: Sumant Awasthi <sumant.awasthi@D11-Sumant.Awasthi>
Co-authored-by: amitsingh <amitksingh1490@gmail.com>

* Performance: Improve performance of `collectM` (#882)

* Use ZIO response

* fix: improve cancellation performance

* refactor: use sticky server

* refactor: reduce allocations

* revert example

* Doc: Added <> operator in getting started (#910)

* fix: ++ operator doc

* fix: composition

* feature: Add `collectManaged` to Http (#909)

* Add collectManaged

* comment typo

* feature: add `echo` operator to `Socket` (#900)

* feature: add `Socket.empty` (#901)

* feature: add `Socket.empty`

* test: add unit test case for Socket#empty

Co-authored-by: Shubham Girdhar <girdharshubham@hotmail.com>

* feature: add `toHttp` to Socket.scala (#902)

* feature: add `toHttp` to Socket.scala

* test: add unit test for `toApp` to Socket.scala

Co-authored-by: Shubham Girdhar <girdharshubham@hotmail.com>

* refactor: merge Request for Client and Server (#894)

* Revert "refactor: merge Request for Client and Server (#894)" (#915)

This reverts commit fc8b9b5.

* Feature: add `toHttp` to Response (#903)

* feature: add `wrapHttp` to Response

* test: add unit test for wrapHttp in Response.scala

* refactor: operator name changed to `toHttp`

Co-authored-by: Shubham Girdhar <girdharshubham@hotmail.com>

* Update scalafmt-core to 3.4.0 (#920)

* Update sbt to 1.6.2 (#931)

* Remove outdated benchmark.md (#940)

* removed benchmark file

* removed benchmark hyperlink from readme

* refactor: rename `getHeaders` to `headers` in `ClientRequest` (#928)

* refactor: rename `getHeaders` to `headers` in `ClientRequest`

* fix: compiler errors

* fix: compiler errors

* Refactor: rename `asString` to `encode` in `Path` (#927)

* refactor: rename `asString` to `encode` in Path

* fix: compiler errors

* Disable flow Control (#854)

* Add builder pattern for URL (#930)

* Add builder pattern for URL

* Compare encoded value to string literal

* Documentation: Http (#888)

* initial commit for http documentation

* refactor: adding bold formatting for HTTP and resolving review comments

* refactor: Chnage app to application in http documentation

* refactor:fixed review comments

* added combinators section

* style: formatting the code blocks

* added getBodyAsString to http documentation

* added HttpApp section

* fixing typos

* added mapZIO and contamapZIO documentation for http

* provide layer documentation for http

* doc: added a secion- Running an HttpApp

Co-authored-by: Dino John <dinojohn@D11-Dino.John>

* feature: add `Http.apply` (#949)

* Refactor: Drop `toZIO` and `wrapZIO` APIs  (#950)

* feature: add `Http.apply`

* refactor: remove ZIO wrapping APIs

* Fix: Server KeepAlive true by default and enable client to set Http version on requests (#792)

* IT cases for KeepAlive included in ServerConfigSpec

* Allow possibility of modifying server conf in HttpRunnableSpec

* reverted Header.scala

* reverted Header.scala

* reverted Header.scala

* struggling with fmt

* pull latest from main

* reverting changes in ci files

* included review recommendations

* Concise test description

* removed extra comments

* readjusted ServerConfigSpec

* enable keep alive by default; added more test cases for Http 1.0; tweaked test cases and description

* removed configurableServe

* removed unnecessary lines; shorter tests

* reverted Server disabled and some spec changes

* Test/keepalive httpversion (#800)

* make httpVersion first param in request methods

* tweaked test cases even further using requestHeaderValueByName

* changed names

* resolved comments, and more tweaking of test

* deleted extra line

Co-authored-by: Sumant Awasthi <sumant.awasthi@D11-Sumant.Awasthi>

* Renamed ServerConfigSpec to KeepAliveSpec

* made httpVersion first param in ClientParams, made relevant changes

* in EncodeClientParams use http version from ClientParams

* a minor change

* changed server keepAlive = true by default, also rebased with main

Co-authored-by: Sumant Awasthi <sumant.awasthi@D11-Sumant.Awasthi>

* feat: url add `isAbsolute` and `isRelative` operators (#946)

* refactor: add type-params

* feat: url add `isAbsolute` and `isRelative` operators

# Conflicts:
#	zio-http/src/main/scala/zhttp/http/URL.scala

* WebSocket Client Support (#933)

* wip: websocket client support

* test: add unit test for WebSocket using native websocket client

* fix: fromZIO in websocket client spec

* refactor: queue usage simplified

* feat: websocket client support

* refactor: imports optimized

* doc: for ClientSocketHandler

* refactor: bootstrap method

* websocket client with response support

* feat: wss support

* refactor: SocketProtocol

* refactor: add SocketClient
example: add WebSocketSimpleClient

* refactor: SocketProtocol with type evidence
refactor: general clean up

* test: for Scheme

* refactor: rename asString to encode in URI

* refactor: remove example of SecureClient

* refactor: url doesn't need to be part of the protocol. Url can be passed as an additional parameter for now. This simplifies the overall design.

* refactor: socket client for now will take the complete url

* refactor: update client example

* refactor: add `connect` operator to SocketApp

* refactor: use `url` as a string instead of URL type

* refactor: re-order methods

* style(*): apply scala fmt

* revert: unnecessary changes

* feature: add `echo` operator to `Socket`

* refactor: update type info

* feature: add `Socket.empty`

* feature: add `wrapHttp` to Response

* feature: add `toHttp` to Socket.scala

* style(*): apply scala fmt

* refactor: rename asString to encode in Scheme

* refactor: cleanup Scheme changes

* test: update test assertion

* refactor: combine server and client handlers

* refactor: add hint in touch for ClientSocketUpgradeHandler

* refactor: change package for SocketAppHandler

* refactor: rename methods  in SocketProtocol

* fix: add host header and port in Request automatically

* fix: example links (#906)

* Update getting-started.md (#907)

* refactor: rename asString to encode in Scheme (#905)

* Doc: setup (#886)

* doc: setup

* resolve: PR comments

* Update netty-incubator-transport-native-io_uring to 0.0.12.Final (#908)

* Documentation for Server (#885)

* removed config.md and make configurations part of Server page

* added server configurations

* markdwon appearing fine in docusaurus generated page

* added one missing configuration

* Server documentation changed according to PR comments

* change note to tip

Co-authored-by: Sumant Awasthi <sumant.awasthi@D11-Sumant.Awasthi>
Co-authored-by: amitsingh <amitksingh1490@gmail.com>

* Performance: Improve performance of `collectM` (#882)

* Use ZIO response

* fix: improve cancellation performance

* refactor: use sticky server

* refactor: reduce allocations

* revert example

* Doc: Added <> operator in getting started (#910)

* fix: ++ operator doc

* fix: composition

* feature: Add `collectManaged` to Http (#909)

* Add collectManaged

* comment typo

* feature: add `echo` operator to `Socket` (#900)

* feature: add `Socket.empty` (#901)

* feature: add `Socket.empty`

* test: add unit test case for Socket#empty

Co-authored-by: Shubham Girdhar <girdharshubham@hotmail.com>

* refactor: add attribute to Request created by Handler

* refactor: remove "case" from ClientInboundHandler

* refactor: rename to WebSocketAppHandler

* feature: add `toHttp` to Socket.scala (#902)

* feature: add `toHttp` to Socket.scala

* test: add unit test for `toApp` to Socket.scala

Co-authored-by: Shubham Girdhar <girdharshubham@hotmail.com>

* cleaning up residue files

* refactor: rename `asString` to `encode` in Path

* refactor: rename `getHeaders` to `headers` in `ClientRequest`

* refactor: simplify client API

* refactor: update client params encoder

* style: ordering methods in URL.scala

* refactor: ClientRequest will throw if the url is invalid

* refactor: pass URL instead of String in ClientRequest

* test: fix `GetBodyAsStringSpec`

* style(*): apply scala fmt

* refactor: fix invalid url being passed in HttpRunnableSpec

* refactor: Move SSL requirements to ClientAttirbute

* feature: add `scheme` operator on URL

* feature: add `IsWebSocket` and `isSecure` operators on Scheme

* refactor: use named imports in WebSocketAppHandler

* test: fix base url for websockets

* refactor: update how flags are set inside client

* test: add non-zio spec to the spec list

* refactor: fix client test

* style: scalafmt error and remove TODO

* refactor: remove unused handler

* refactor: remove host header changes and RequestSpec (#945)

* refactor: move java scheme generators to SchemeSpec (#944)

* refactor: move java scheme generators to SchemeSpec

* refactor: resolve PR comments

* feat: url add `isAbsolute` and `isRelative` operators

* refactor: rename EncodeClientParams.scala to EncodeClientRequest

* fix: handle errors on client connection

* style(*): apply scala fmt

* refactor: simplify multiple websocket upgrades test (#948)

* refactor: resolve PR comments
style: fmt fix

* refactor: general refactor and style changes

Co-authored-by: Shubham Girdhar <girdharshubham@hotmail.com>
Co-authored-by: Shruti Verma <62893271+ShrutiVerma97@users.noreply.github.com>
Co-authored-by: Amit Kumar Singh <amit.singh@dream11.com>
Co-authored-by: Scala Steward <43047562+scala-steward@users.noreply.github.com>
Co-authored-by: sumawa <awasthi.sumant@gmail.com>
Co-authored-by: Sumant Awasthi <sumant.awasthi@D11-Sumant.Awasthi>
Co-authored-by: amitsingh <amitksingh1490@gmail.com>
Co-authored-by: James Beem <beem132@gmail.com>

* Documentation: Request (#926)

* docs: request

* doc: added client request docs

* added query param section

* doc: refactoring

* WIP

* fix: doc

* fix: doc

* request

* request

* example fixed

* Fix ssl issue due to missing peer host port hint (#952)

* feature: add connect operator on Socket (#955)

* Style: Update scala doc wrapping (#959)

* chore: update scalafmt config

* style(*): apply scala fmt

* remove get prefix (#958)

* Update scalafmt-core to 3.4.1 (#960)

* Update scalafmt-core to 3.4.2 (#962)

* Update scalafmt-core to 3.4.2 (#961)

* remove declarative API (#957)

* Update sbt-updates to 0.6.2 (#966)

* Doc: Readme (#970)

* fix: readme

* changed note

* style: rearrange methods in files (#963)

* Doc: Cookie (#974)

* doc: cookie

* doc: cookie

* cookie: changes

* refactor: drop `CanBeSilent` type-constraint from Http (#964)

* refactor: drop `CanBeSilent` type-constraint from Http

* update usage of `silent` operator

* Feature: add `Version` (#965)

* refactor: rename `asHttpMethod` to `toJava`

* refactor: add `Version` domain

* style(*): apply scala fmt

* Fix: Fire response instead of error in HExit.Failure() (#980)

* Bug fix: fixes #979

* Made changes to nonZIOSpec in ServerSpec to include tests for HExit.Failure()

* fix: typo in bug_report.md (#981)

* Update netty-all to 4.1.74.Final (#982)

* refactor: remove sealed modifier from Middleware trait (#984)

* refactor: rename method on Client (#985)

* fix: request doc (#989)

* Use a Gen of methods without HEAD for Responses with content (#992)

* doc: setup g8 (#988)

* doc: setup g8

* refactor: bump zhttp version

* Doc: for WebSocketFrame (#953)

* doc: for WebSocketFrame

* resolve: PR comments

* resolve: PR comments

* Documentation for HttpData (#987)

* Documentation for HttpData

* added server and client side usage of HttpData

* Update docs/website/docs/v1.x/dsl/http-data/index.md

Co-authored-by: Amit Kumar Singh <amit.singh@dream11.com>

* refactor: rename `provide` and `provideSome` (#996)

* Fix: `Content-Type` header gets incorrect values.  (#899)

* initial work

* Fix tests

* Perf enhancements

* compilation error fix

* rename getContentType

* Update zio-http/src/main/scala/zhttp/http/MediaType.scala

Co-authored-by: Tushar Mathur <tusharmath@gmail.com>

* Make MediaType private, and final.

Co-authored-by: Tushar Mathur <tusharmath@gmail.com>

* Feat: Http from HExit (#986)

* added 2 operators to create http from HExit

* added tests for collectHExit and fromFunctionHExit

* rewrote nonZIO app in serverSpec using collectHExit

* Refactor: Remove Collect and FromFunctionZIO (#1002)

* Refactor: Implemented FromFunctionZIO using FromFunctionHExit

* Refactor: Implement Collect using FromFunctionHExit

* Fix: Binary WebSocketFrame (#1005)

* fix: change binary websocket frame arg to Chunk[Byte] from ByteBuf
Closes #1004

* test: add unit test for binary websocketframe

* style: fix formatting

* feature: add `fromFileZIO` (#1010)

* refactor: `fromFile` uses `fromFileZIO`

* feature: add `Http.fromResource` (#1009)

* Refactor: Content Type Fixes (#1008)

* style: scalafmt fixes

* style: sorting alphabetically

* fix: set conten-type only if not set already

* refactor: make internal fields private

* doc: add todo

* refactor: make caching optional

* refactor: use `Http.fromResource` in test

* refactor: fix test

* doc: fix binary constructor usage (#1014)

* Add data in `Request` trait (#1017)

* maintenance: run scalafmt once (#1027)

* Build(deps): Bump follow-redirects in /docs/website (#1029)

Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.14.7 to 1.14.8.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](follow-redirects/follow-redirects@v1.14.7...v1.14.8)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Update scalafmt-core to 3.4.3 (#1022)

* Remove tuple from ResponseHandler (#1033)

* Remove tuple from ResponseHandler

* cleanup

* restructuring (#1040)

* added more examples (#1038)

* Doc: Response (#967)

* updated with main

* added operators

* revert

* setstatus change

* renaming (#1047)

* Fix: Releasing request twice (#1046)

* refactor: not releasing request

* Added failing test

* optimize path encode method (#1035)

* Feature: Static Server (#1024)

* WIP : static server from file path

* fix CI errrors

* format

* Basic functionalities work without options

* Fix errors on java8

* Fix errors on java8

* Fix refactoring error

* clean up

* Fixig tests

* working around file type detection bug

* Method not allowed.

* Better comments.

* Update zio-http/src/main/scala/zhttp/http/Http.scala

Co-authored-by: Tushar Mathur <tusharmath@gmail.com>

* Refactor

* More tests.

* Fix PR comments

* Moved headers to fromPath

* Update zio-http/src/main/scala/zhttp/http/Http.scala

Co-authored-by: Tushar Mathur <tusharmath@gmail.com>

* Update zio-http/src/main/scala/zhttp/http/Http.scala

Co-authored-by: Tushar Mathur <tusharmath@gmail.com>

* Fixes.

* Fixing tests

* Update zio-http/src/main/scala/zhttp/http/HttpData.scala

Co-authored-by: Tushar Mathur <tusharmath@gmail.com>

* Update zio-http/src/main/scala/zhttp/http/HttpData.scala

Co-authored-by: Tushar Mathur <tusharmath@gmail.com>

* Update zio-http/src/main/scala/zhttp/http/Http.scala

Co-authored-by: Tushar Mathur <tusharmath@gmail.com>

* PR is closed

* Used Http.fromFile in implementation

* Remove unwanted commits

* Fixing compile issues.

* feature: add `withMediaType` operator in HeaderModifier

* refactor: drop `setMediaType` from Response

* refactor: inline file creation

* refactor: simplify implementation for fromFile and fromFileZIO

* doc: add todo comments

* refactor: update listFilesHtml implementation

* refactor: update scaladoc

* test: fix refactored misses

* test: use `+` instead of `,`

* style: scalafmt

* feature: add `mediaType` to HeaderGetters

* feature: add Http.attempt` operator

* refactor: MediaType works on extensions directly

* refactor: add tests for fromResource

* test: StaticFileServerSpec add tests for directory

* refactor: make `fromPath` use `fromFile` internally

* refactor: simplify `fromPath`

* refactor: update scala docs for Http operators

* refactor: fix type info of `Http.response`

* feature: add `listDirectory` operator

* feature: add StyledContainerHtml

* refactor: drop `Util`

* refactor: inline util HTML constructors

* test: add test for invalid file size

* doc: update comments

* style: reorder methods in Http

Co-authored-by: ashprakasan <prakasanaiswarya@gmail.com>

* Revert "Feature: Static Server (#1024)" (#1060)

This reverts commit 33ac08d.

* Performance: Use `CharSequence` for ServerTime (#1064)

* feature: use CharSequence in for ServerTime

* style: scalafmt

* Feature: add `dropLast` to Path (#1065)

* feature: add `dropLast` to Path

* style: scalafmt

* feature: Response.html now supports taking in Status also (#1067)

* feature: add `code` method on Status (#1068)

* refactor: fix type info of `Http.response` (#1073)

* feature: add `foldCause` to HttpError (#1066)

* feature: add `withMediaType` operator in HeaderModifier (#1071)

* Feature: add `Http.attempt` operator (#1070)

* feature: add Http.attempt` operator

* test: add tests for Http.attempt

* feature: add `getResource` and `getResourceAsFile` operators on Http (#1074)

* Update jwt-core to 9.0.4 (#1056)

* Update sbt-bloop to 1.4.13 (#1055)

* Build(deps): Bump url-parse from 1.5.4 to 1.5.7 in /docs/website (#1062)

Bumps [url-parse](https://github.com/unshiftio/url-parse) from 1.5.4 to 1.5.7.
- [Release notes](https://github.com/unshiftio/url-parse/releases)
- [Commits](unshiftio/url-parse@1.5.4...1.5.7)

---
updated-dependencies:
- dependency-name: url-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* feature: add `ifModifiedSinceDecoded` (#1075)

* Feature: Static Server (#1061)

* WIP : static server from file path

* fix CI errrors

* format

* Basic functionalities work without options

* Fix errors on java8

* Fix errors on java8

* Fix refactoring error

* clean up

* Fixig tests

* working around file type detection bug

* Method not allowed.

* Better comments.

* Update zio-http/src/main/scala/zhttp/http/Http.scala

Co-authored-by: Tushar Mathur <tusharmath@gmail.com>

* Refactor

* More tests.

* Fix PR comments

* Moved headers to fromPath

* Update zio-http/src/main/scala/zhttp/http/Http.scala

Co-authored-by: Tushar Mathur <tusharmath@gmail.com>

* Update zio-http/src/main/scala/zhttp/http/Http.scala

Co-authored-by: Tushar Mathur <tusharmath@gmail.com>

* Fixes.

* Fixing tests

* Update zio-http/src/main/scala/zhttp/http/HttpData.scala

Co-authored-by: Tushar Mathur <tusharmath@gmail.com>

* Update zio-http/src/main/scala/zhttp/http/HttpData.scala

Co-authored-by: Tushar Mathur <tusharmath@gmail.com>

* Update zio-http/src/main/scala/zhttp/http/Http.scala

Co-authored-by: Tushar Mathur <tusharmath@gmail.com>

* PR is closed

* Used Http.fromFile in implementation

* Remove unwanted commits

* Fixing compile issues.

* feature: add `withMediaType` operator in HeaderModifier

* refactor: drop `setMediaType` from Response

* refactor: inline file creation

* refactor: simplify implementation for fromFile and fromFileZIO

* doc: add todo comments

* refactor: update listFilesHtml implementation

* refactor: update scaladoc

* test: fix refactored misses

* test: use `+` instead of `,`

* style: scalafmt

* feature: add `mediaType` to HeaderGetters

* feature: add Http.attempt` operator

* refactor: MediaType works on extensions directly

* refactor: add tests for fromResource

* test: StaticFileServerSpec add tests for directory

* refactor: make `fromPath` use `fromFile` internally

* refactor: simplify `fromPath`

* refactor: update scala docs for Http operators

* refactor: fix type info of `Http.response`

* feature: add `listDirectory` operator

* feature: add StyledContainerHtml

* refactor: drop `Util`

* refactor: inline util HTML constructors

* test: add test for invalid file size

* doc: update comments

* style: reorder methods in Http

* refactor: improve style of StyledContainerHtml

* refactor: drop directory support

* refactor: drop directory listing

* refactor: add a color to background

* feature: add `getResource` and `getResourceAsFile` operators on Http

* feature: add `foldCause` to HttpError

* feature: add `code` method on Status

* feature: StyleContainerHtml max-width updated

* feature: Handler uses `HttpError` for empty responses

* feature: Response.html now supports taking in Status also

* feature: beautify Response.fromHttpError

* refactor: rename file to Template

* feature: add `dropLast` to Path

* feature: add `Http.template` operator

* example: update static server example

* style: scalafmt updates

* feature: use CharSequence in for ServerTime

* feature: add `ifModifiedSinceDecoded`

* feature: add `ifModifiedSinceDecoded`

* feature: add `ifModifiedSinceDecoded`

Co-authored-by: ashprakasan <prakasanaiswarya@gmail.com>

* issue 715 Support custom ChannelInitializer (#932)

* doc: socket (#1036)

* doc: socket

* refactor: clean up

* refactor: resolve PR comment

* fix: resolve PR comment and fix typo in `merge`

* Stylefmt

* Update example/src/main/scala/example/StaticServer.scala

Co-authored-by: Shubham Girdhar <girdharshubham@hotmail.com>
Co-authored-by: Shruti Verma <62893271+ShrutiVerma97@users.noreply.github.com>
Co-authored-by: Gabriel Ciuloaica <95849448+gciuloaica@users.noreply.github.com>
Co-authored-by: Tushar Mathur <tushar@dream11.com>
Co-authored-by: Javier Goday <jgoday@gmail.com>
Co-authored-by: Tushar Mathur <tusharmath@gmail.com>
Co-authored-by: Brendan McKee <brendan.mckee@outlook.com>
Co-authored-by: kaushik143 <kaushik@dream11.com>
Co-authored-by: zsfVishnu-d11 <66246684+zsfVishnu-d11@users.noreply.github.com>
Co-authored-by: Scala Steward <43047562+scala-steward@users.noreply.github.com>
Co-authored-by: sumawa <awasthi.sumant@gmail.com>
Co-authored-by: Sumant Awasthi <sumant.awasthi@D11-Sumant.Awasthi>
Co-authored-by: James Beem <beem132@gmail.com>
Co-authored-by: Dino Babu John <66246799+dinojohn@users.noreply.github.com>
Co-authored-by: Dino John <dinojohn@D11-Dino.John>
Co-authored-by: AshPrakasan <prakasanaiswarya@gmail.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: RAJKUMAR NATARAJAN <raj.cs.psg@gmail.com>
  • Loading branch information
19 people authored Feb 23, 2022
1 parent 7c2f06c commit c782fda
Show file tree
Hide file tree
Showing 76 changed files with 10,297 additions and 312 deletions.
1 change: 1 addition & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ jobs:
key: ${{ runner.os }}-sbt-cache-v2-${{ hashFiles('**/*.sbt') }}-${{ hashFiles('project/build.properties') }}

- name: Check formatting
if: matrix.scala == '2.13.8'
run: sbt ++2.13.8 fmtCheck

- name: Check that workflows are up to date
Expand Down
2 changes: 1 addition & 1 deletion .scalafmt.conf
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
version = 3.4.2
version = 3.4.3
maxColumn = 120

align.preset = more
Expand Down
16 changes: 7 additions & 9 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -60,15 +60,13 @@ ThisBuild / githubWorkflowPublish :=
)
//scala fix isn't available for scala 3 so ensure we only run the fmt check
//using the latest scala 2.13
ThisBuild / githubWorkflowBuildPreamble :=
WorkflowJob(
"fmtCheck",
"Format",
List(
WorkflowStep.Run(List(s"sbt ++${Scala213} fmtCheck"), name = Some("Check formatting")),
),
scalas = List(Scala213),
).steps
ThisBuild / githubWorkflowBuildPreamble := Seq(
WorkflowStep.Run(
name = Some("Check formatting"),
commands = List(s"sbt ++${Scala213} fmtCheck"),
cond = Some(s"matrix.scala == '${Scala213}'"),
),
)

ThisBuild / githubWorkflowBuildPostamble :=
WorkflowJob(
Expand Down
110 changes: 110 additions & 0 deletions docs/website/docs/v1.x/dsl/cookies.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
# Cookie

**ZIO HTTP** has special support for Cookie headers using the `Cookie` Domain to add and invalidate cookies. Adding a cookie will generate the correct [Set-Cookie](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie) headers

## Create a Cookie

`Cookie` can be created with params `name`, `content`, `expires`, `domain`, `path`, `isSecure`, `isHttpOnly`, `maxAge`, `sameSite` and `secret` according to HTTP [Set-Cookie](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie)

The below snippet creates a cookie `name` as `id` and `content` as `abc` with default params.
```scala
val cookie: Cookie = Cookie("id", "abc")
```
### Update a Cookie

- `withContent` updates the content of cookie
```scala
val newCookie = cookie.withContent("def")
```
- `withExpiry` updates the expiration date of cookie
```scala
val newCookie = cookie.withExpiry(Instant.MAX)
```
- `withMaxAge` updates the max-age of the cookie
```scala
val newCookie = cookie.withMaxAge(5 days)
```
- `withDomain` updates the host to which the cookie will be sent
```scala
val newCookie = cookie.withDomain("example.com")
```
- `withPath` updates the path of the cookie
```scala
val newCookie = cookie.withPath(!! / "cookie")
```
- `withSecure` enables cookie only on https server
```scala
val newCookie = cookie.withSecure
```
- `withHttpOnly` forbids JavaScript from accessing the cookie
```scala
val newCookie = cookie.withHttpOnly
```
- `withSameSite` updates whether or not a cookie is sent with cross-origin requests
```scala
val newCookie = cookie.withSameSite(Instant.MAX)
```

## Reset a Cookie

you can reset cookie params using:
- `withoutSecure` resets `isSecure` to `false` in cookie
- `withoutHttpOnly` resets `isHttpOnly` to `false` in cookie
- `withoutExpiry` resets `expires` to `None`
- `withoutDomain` resets `domain` to `None`
- `withoutPath` resets `path` to `None`
- `withoutMaxAge` resets `maxAge` to `None`
- `withoutSameSite` resets `sameSite` to `None`

## Sign a Cookie

The cookies can be signed with a signature:

- Using `sign`
To sign a cookie, you can use `sign`
```scala
val cookie = Cookie("key", "hello").withMaxAge(5 days)
val app = Http.collect[Request] { case Method.GET -> !! / "cookie" =>
Response.ok.addCookie(cookie.sign("secret"))
}
```
- Using `signCookies` middleware

To sign all the cookies in your `HttpApp`, you can use `signCookies` middleware:
```scala
private val cookie = Cookie("key", "hello").withMaxAge(5 days)
private val app = Http.collect[Request] {
case Method.GET -> !! / "cookie" => Response.ok.addCookie(cookie)
case Method.GET -> !! / "secure-cookie" => Response.ok.addCookie(cookie.withSecure)
}

// Run it like any simple app
override def run(args: List[String]): URIO[zio.ZEnv, ExitCode] =
Server.start(8090, app @@ signCookies("secret")).exitCode
```

## Adding Cookie in Response

The cookies can be added in `Response` headers:
```scala
val cookie1: Cookie = Cookie("id", "abc")
val res = Response.ok.addCookie(cookie1)
```
It updates the response header `Set-Cookie` as

```Set-Cookie: <cookie-name>=<cookie-value>```

## Getting Cookie from Request

In HTTP requests, cookies are stored in the `cookie` header.
`cookiesDecoded` can be used to get all the cookies in the request.

```scala
private val app = Http.collect[Request] {
case req @ Method.GET -> !! / "cookie" =>
Response.text(req.cookiesDecoded.mkString(""))
}
```



224 changes: 224 additions & 0 deletions docs/website/docs/v1.x/dsl/headers.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,224 @@
# Headers

**ZIO HTTP** provides support for all HTTP headers (as defined in [RFC2616](https://datatracker.ietf.org/doc/html/rfc2616) ) along with custom headers.

## Server-side

### Attaching Headers to `Response`
On the server-side, `ZIO-HTTP` is adding a collection of pre-defined headers to the response, according to the HTTP specification, additionally, users may add other headers, including custom headers.

There are multiple ways to attach headers to a response:
- Using `addHeaders` helper on response.
```scala
val res = Response.ok.addHeader("content-length", "0")
```

- Through `Response` constructors.
```scala
val res = Response(
status = Status.OK,
// Setting response header
headers = Headers.contentLength(0L),
data = HttpData.empty
```
- Using `Middlewares`.
```scala
val app = Http.ok @@ Middleware.addHeader("content-length", "0")
```

### Reading Headers from `Request`

On the Server-side you can read Request headers as given below

```scala
case req @ Method.GET -> !! / "streamOrNot" =>
req.getHeaders
```

<details>
<summary><b>Detailed examples </b></summary>


- Example below shows how the Headers could be added to a response by using `Response` constructors and how a custom header is added to `Response` through `addHeader`:

```scala
import zhttp.http._
import zhttp.service.Server
import zio.{App, Chunk, ExitCode, URIO}
import zio.stream.ZStream

object SimpleResponseDispatcher extends App {
override def run(args: List[String]): URIO[zio.ZEnv, ExitCode] = {

// Starting the server (for more advanced startup configuration checkout `HelloWorldAdvanced`)
Server.start(8090, app.silent).exitCode
}

// Create a message as a Chunk[Byte]
val message = Chunk.fromArray("Hello world !\r\n".getBytes(HTTP_CHARSET))
// Use `Http.collect` to match on route
val app: HttpApp[Any, Nothing] = Http.collect[Request] {

// Simple (non-stream) based route
case Method.GET -> !! / "health" => Response.ok

// From Request(req), the headers are accessible.
case req @ Method.GET -> !! / "streamOrNot" =>
// Checking if client is able to handle streaming response
val acceptsStreaming: Boolean = req.hasHeader(HeaderNames.accept, HeaderValues.applicationOctetStream)
if (acceptsStreaming)
Response(
status = Status.OK,
// Setting response header
headers = Headers.contentLength(message.length.toLong), // adding CONTENT-LENGTH header
data = HttpData.fromStream(ZStream.fromChunk(message)), // Encoding content using a ZStream
)
else {
// Adding a custom header to Response
Response(status = Status.ACCEPTED, data = HttpData.fromChunk(message)).addHeader("X-MY-HEADER", "test")
}
}
}

```
- The following example shows how Headers could be added to `Response` in the `Middleware` implementation:

```scala

/**
* Creates an authentication middleware that only allows authenticated requests to be passed on to the app.
*/
final def customAuth(
verify: Headers => Boolean,
responseHeaders: Headers = Headers.empty,
): HttpMiddleware[Any, Nothing] =
Middleware.ifThenElse[Request](req => verify(req.getHeaders))(
_ => Middleware.identity,
_ => Middleware.fromHttp(Http.status(Status.FORBIDDEN).addHeaders(responseHeaders)),
)

```

- More examples:
- [BasicAuth](https://github.com/dream11/zio-http/blob/main/example/src/main/scala/BasicAuth.scala)
- [Authentication](https://github.com/dream11/zio-http/blob/main/example/src/main/scala/Authentication.scala)

</details>

## Client-side

### Adding headers to `Request`

ZIO-HTTP provides a simple way to add headers to a client `Request`.

```scala
val headers = Headers.host("sports.api.decathlon.com").withAccept(HeaderValues.applicationJson)
val response = Client.request(url, headers)
```

### Reading headers from `Response`

```scala
val responseHeaders: Task[Headers] = Client.request(url).map(_.headers)
```

<details>
<summary><b>Detailed examples</b> </summary>

- The sample below shows how a header could be added to a client request:

```scala
import zhttp.http._
import zhttp.service._
import zio._

object SimpleClientJson extends App {
val env = ChannelFactory.auto ++ EventLoopGroup.auto()
val url = "http://sports.api.decathlon.com/groups/water-aerobics"
// Construct headers
val headers = Headers.host("sports.api.decathlon.com").withAccept(HeaderValues.applicationJson)

val program = for {
// Pass headers to request
res <- Client.request(url, headers)
// List all response headers
_ <- console.putStrLn(res.headers.toList.mkString("\n"))
data <-
// Check if response contains a specified header with a specified value.
if (res.hasHeader(HeaderNames.contentType, HeaderValues.applicationJson))
res.getBodyAsString
else
res.getBodyAsString
_ <- console.putStrLn { data }
} yield ()

override def run(args: List[String]): URIO[zio.ZEnv, ExitCode] = program.exitCode.provideCustomLayer(env)

}
```

</details>

## Headers DSL

Headers DSL provides plenty of powerful operators that can be used to add, remove, modify and verify headers. Headers APIs could be used on client, server, and middleware.

`zhttp.http.Headers` - represents an immutable collection of headers i.e. essentially a `Chunk[(String, String)]`.

`zhttp.http.HeaderNames` - commonly used header names.

`zhttp.http.HeaderValues` - commonly used header values

`Headers` have following type of helpers
- Constructors - Provides a list of helpful methods that can create `Headers`.

```scala
import zhttp.http._

// create a simple Accept header:
val acceptHeader: Headers = Headers.accept(HeaderValues.applicationJson)

// create a basic authentication header:
val basicAuthHeader: Headers = Headers.basicAuthorizationHeader("username", "password")
```

- Getters - Provides a list of operators that parse and extract data from the `Headers`.

```scala
import zhttp.http._

// retrieving the value of Accept header value:
val acceptHeader: Headers = Headers.accept(HeaderValues.applicationJson)
val acceptHeaderValue: Option[CharSequence] = acceptHeader.getAccept


// retrieving a bearer token from Authorization header:
val authorizationHeader: Headers = Headers.authorization("Bearer test")
val authorizationHeaderValue: Option[String] = authorizationHeader.getBearerToken
```

- Modifiers - Provides a list of operators that modify the current `Headers`. Once modified, a new instance of the same type is returned.

```scala
import zhttp.http._

// add Accept header:
val headers = Headers.empty
val updatedHeadersList: Headers = headers.addHeaders(Headers.accept(HeaderValues.applicationJson))

// or if you prefer the builder pattern:

// add Host header:
val moreHeaders: Headers = headers.withHost("zio-http.dream11.com")

```

- Checks - Provides a list of operators that checks if the `Headers` meet the give constraints.

```scala
val contentTypeHeader: Headers = Headers.contentType(HeaderValues.applicationJson)
val isHeaderPresent: Boolean = contentTypeHeader.hasHeader(HeaderNames.contentType)
val isJsonContentType: Boolean = contentTypeHeader.hasJsonContentType


```
Loading

0 comments on commit c782fda

Please sign in to comment.