├── gradle.properties ├── wasabi-core ├── src │ ├── test │ │ ├── resources │ │ │ └── fileupload-test.txt │ │ └── main │ │ │ └── kotlin │ │ │ └── org │ │ │ └── wasabifx │ │ │ └── wasabi │ │ │ └── test │ │ │ ├── BinaryContentSpecs.kt │ │ │ ├── InMemorySessionStorageSpec.kt │ │ │ ├── FavIconInterceptorSpecs.kt │ │ │ ├── Http2ClientTest.kt │ │ │ ├── CachingSpecs.kt │ │ │ ├── StartupShutdownSpecs.kt │ │ │ ├── RedirectSpecs.kt │ │ │ ├── ResponseSpecs.kt │ │ │ ├── AutoLocationInterceptorSpecs.kt │ │ │ ├── FileUploadSpec.kt │ │ │ ├── FileBasedErrorInterceptorSpecs.kt │ │ │ ├── BasicAuthenticationInterceptorSpecs.kt │ │ │ ├── UrlRequestingSpecs.kt │ │ │ ├── ConfigSpecs.kt │ │ │ ├── SerializerSpecs.kt │ │ │ ├── AutoOptionsInterceptorSpecs.kt │ │ │ ├── ExceptionHandlerSpecs.kt │ │ │ ├── ConfigStorageSpecs.kt │ │ │ ├── SessionManagementInterceptorSpecs.kt │ │ │ ├── Tester.kt │ │ │ ├── BodyParametersSpecs.kt │ │ │ ├── ContentNegotiatioParserInterceptorSpecs.kt │ │ │ ├── StaticFileInterceptorSpecs.kt │ │ │ ├── Helpers.kt │ │ │ ├── TestClient.kt │ │ │ ├── RoutesSpecs.kt │ │ │ ├── CorsSpecs.kt │ │ │ ├── HeaderSpecs.kt │ │ │ ├── ContentNegotiationSpecs.kt │ │ │ └── TestClientSpecs.kt │ └── main │ │ ├── kotlin │ │ └── org │ │ │ └── wasabifx │ │ │ └── wasabi │ │ │ ├── app │ │ │ ├── FileUpload.kt │ │ │ ├── AppConfiguration.kt │ │ │ └── AppServer.kt │ │ │ ├── protocol │ │ │ ├── http │ │ │ │ ├── InvalidHeaderNameException.kt │ │ │ │ ├── NegotiateOn.kt │ │ │ │ ├── Cookie.kt │ │ │ │ ├── Session.kt │ │ │ │ ├── CacheControl.kt │ │ │ │ ├── CORSEntry.kt │ │ │ │ ├── StatusCodes.kt │ │ │ │ ├── ProtocolNegotiator.kt │ │ │ │ ├── HttpServer.kt │ │ │ │ ├── ContentType.kt │ │ │ │ ├── Response.kt │ │ │ │ └── Request.kt │ │ │ ├── websocket │ │ │ │ ├── Channel.kt │ │ │ │ ├── Response.kt │ │ │ │ ├── ChannelHandler.kt │ │ │ │ ├── Utilities.kt │ │ │ │ ├── WebSocketProtocolHandler.kt │ │ │ │ └── WebSocketFrameHandler.kt │ │ │ └── http2 │ │ │ │ ├── Http2HandlerBuilder.kt │ │ │ │ └── Http2Handler.kt │ │ │ ├── routing │ │ │ ├── RouteNotFoundException.kt │ │ │ ├── ExceptionHandlerLocator.kt │ │ │ ├── InvalidMethodException.kt │ │ │ ├── RouteAlreadyExistsException.kt │ │ │ ├── RouteLocator.kt │ │ │ ├── ExceptionHandler.kt │ │ │ ├── ChannelLocator.kt │ │ │ ├── ChannelAlreadyExistsException.kt │ │ │ ├── RouteException.kt │ │ │ ├── RouteHandler.kt │ │ │ ├── ClassMatchingExceptionHandlerLocator.kt │ │ │ ├── Route.kt │ │ │ ├── PatternMatchingChannelLocator.kt │ │ │ ├── PatternAndVerbMatchingRouteLocator.kt │ │ │ └── Routes.kt │ │ │ ├── configuration │ │ │ ├── InvalidConfigurationException.kt │ │ │ └── ConfigurationStorage.kt │ │ │ ├── interceptors │ │ │ ├── InterceptOn.kt │ │ │ ├── InterceptorEntry.kt │ │ │ ├── SessionStorage.kt │ │ │ ├── Interceptor.kt │ │ │ ├── LoggingInterceptor.kt │ │ │ ├── AutoLocationInterceptor.kt │ │ │ ├── FavIconInterceptor.kt │ │ │ ├── AuthenticationInterceptor.kt │ │ │ ├── FileBasedErrorInterceptor.kt │ │ │ ├── ETagInterceptor.kt │ │ │ ├── AutoOptionsInterceptor.kt │ │ │ ├── ContentNegotiationInterceptor.kt │ │ │ ├── SessionManagementInterceptor.kt │ │ │ ├── StaticFileInterceptor.kt │ │ │ ├── ContentNegotiationParserInterceptor.kt │ │ │ └── CORSInterceptor.kt │ │ │ ├── serializers │ │ │ ├── TextPlainSerializer.kt │ │ │ ├── JsonSerializer.kt │ │ │ ├── Serializer.kt │ │ │ └── XmlSerializer.kt │ │ │ ├── authentication │ │ │ ├── Authentication.kt │ │ │ └── BasicAuthentication.kt │ │ │ ├── events │ │ │ └── events.kt │ │ │ ├── encoding │ │ │ └── EncodingDecoding.kt │ │ │ ├── deserializers │ │ │ ├── JsonDeserializer.kt │ │ │ ├── Deserializer.kt │ │ │ └── MultiPartFormDataDeserializer.kt │ │ │ ├── storage │ │ │ └── InMemorySessionStorage.kt │ │ │ └── core │ │ │ ├── NettyPipelineInitializer.kt │ │ │ └── HttpPipelineInitializer.kt │ │ └── resources │ │ └── wasabi.yaml ├── testData │ ├── public │ │ ├── file with spaces in filename.txt │ │ ├── style.css │ │ ├── second.html │ │ ├── 404.html │ │ ├── error.html │ │ ├── pic.png │ │ ├── favicon.ico │ │ ├── test.html │ │ └── index.html │ ├── production_bad_json.json │ ├── production_bad_property.json │ └── production.json ├── build.gradle └── tools │ ├── sample.gradle │ └── build.gradle ├── settings.gradle ├── gradle ├── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── package.gradle └── publish.gradle ├── wasabi-samples ├── src │ └── main │ │ └── kotlin │ │ └── org │ │ └── wasabifx │ │ └── wasabi │ │ └── samples │ │ ├── servingStaticFiles.kt │ │ ├── helloWorld.kt │ │ └── websocket.kt └── build.gradle ├── .gitignore ├── gradlew.bat └── gradlew /gradle.properties: -------------------------------------------------------------------------------- 1 | BINTRAY_USER= 2 | BINTRAY_KEY= 3 | -------------------------------------------------------------------------------- /wasabi-core/src/test/resources/fileupload-test.txt: -------------------------------------------------------------------------------- 1 | Text -------------------------------------------------------------------------------- /wasabi-core/testData/public/file with spaces in filename.txt: -------------------------------------------------------------------------------- 1 | lorem ipsum -------------------------------------------------------------------------------- /wasabi-core/testData/production_bad_json.json: -------------------------------------------------------------------------------- 1 | { 2 | p ort: 5000, 3 | 4 | } -------------------------------------------------------------------------------- /wasabi-core/testData/public/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | background-color: aqua; 3 | } -------------------------------------------------------------------------------- /wasabi-core/testData/production_bad_property.json: -------------------------------------------------------------------------------- 1 | { 2 | "invalid_property": "whatever" 3 | } -------------------------------------------------------------------------------- /wasabi-core/testData/public/second.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | a second file 4 | 5 | 6 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'wasabi' 2 | include 'wasabi-core' 3 | include 'wasabi-samples' 4 | 5 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wasabifx/wasabi/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /wasabi-core/testData/public/404.html: -------------------------------------------------------------------------------- 1 |