├── .editorconfig ├── .github ├── dependabot.yml └── workflows │ ├── check-readme-links.sh │ └── ci.yml ├── .gitignore ├── .idea ├── .gitignore ├── .name ├── codeStyles │ ├── Project.xml │ └── codeStyleConfig.xml ├── compiler.xml ├── dataSources.xml ├── file.template.settings.xml ├── gradle.xml ├── inspectionProfiles │ └── Project_Default.xml ├── jarRepositories.xml ├── kotlinc.xml ├── misc.xml ├── runConfigurations │ ├── All_tests.xml │ └── sample_Launcher.xml ├── sqldialects.xml └── vcs.xml ├── .jitpack.yml ├── CHANGELOG.md ├── CNAME ├── LICENSE ├── README.md ├── TUTORIAL.md ├── build.gradle.kts ├── core ├── README.md ├── build.gradle.kts ├── src │ ├── Cache.kt │ ├── Config.kt │ ├── Converter.kt │ ├── Decimal.kt │ ├── Extensions.kt │ ├── Logger.kt │ ├── Registry.kt │ ├── TSID.kt │ ├── Types.kt │ ├── Values.kt │ └── http │ │ └── TypedHttpClient.kt └── test │ ├── CacheTest.kt │ ├── ConverterTest.kt │ ├── DecimalTest.kt │ ├── LoggerTest.kt │ ├── TSIDTest.kt │ ├── TypesTest.kt │ ├── ValuesTest.kt │ └── http │ └── TypedHttpClientTest.kt ├── csv ├── README.md ├── build.gradle.kts ├── src │ ├── CSVGenerator.kt │ └── CSVParser.kt └── test │ ├── CSVGeneratorTest.kt │ └── CSVParserTest.kt ├── docs ├── Comparisons.md └── Kotlin.md ├── google2834a0f0b505c168.html ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── i18n ├── README.md ├── build.gradle.kts ├── src │ └── Lang.kt └── test │ └── LangTest.kt ├── jackson ├── README.md ├── build.gradle.kts ├── src │ ├── Extensions.kt │ ├── JsonBody.kt │ └── JsonHttpClient.kt └── test │ ├── JsonBodyTest.kt │ └── JsonHttpClientTest.kt ├── jdbc-test ├── README.md ├── build.gradle.kts └── src │ └── DBTest.kt ├── jdbc ├── README.md ├── TEX.md ├── build.gradle.kts ├── src │ ├── Annotations.kt │ ├── ConfigDataSource.kt │ ├── DBModule.kt │ ├── DockerCompose.kt │ ├── Exceptions.kt │ ├── GeneratedKey.kt │ ├── HikariModule.kt │ ├── JdbcConverter.kt │ ├── JdbcExtensions.kt │ ├── PooledDataSource.kt │ ├── PostgresExtensions.kt │ ├── PostgresNotifier.kt │ ├── Repository.kt │ ├── RequestTransactionHandler.kt │ ├── ResultSets.kt │ ├── SqlExpr.kt │ ├── Transaction.kt │ ├── Values.kt │ └── migrator │ │ ├── ChangeSet.kt │ │ ├── ChangeSetFileReader.kt │ │ ├── DBMigrator.kt │ │ ├── init.sql │ │ └── liquibase.sql └── test │ ├── AlreadyExistsExceptionTest.kt │ ├── BaseCrudRepositoryTest.kt │ ├── JdbcConverterTest.kt │ ├── JdbcExtensionsTest.kt │ ├── PooledDataSourceTest.kt │ ├── PostgresExtensionsTest.kt │ ├── RequestTransactionHandlerTest.kt │ ├── SqlExprTest.kt │ ├── TransactionContextTest.kt │ ├── TransactionTest.kt │ ├── ValuesTest.kt │ └── migrator │ ├── ChangeSetFileReaderTest.kt │ ├── ChangeSetTest.kt │ ├── invalid.sql │ └── test.sql ├── jobs ├── README.md ├── build.gradle.kts ├── src │ └── JobRunner.kt └── test │ └── JobRunnerTest.kt ├── json ├── README.md ├── build.gradle.kts ├── src │ ├── JsonBody.kt │ ├── JsonHttpClient.kt │ ├── JsonMapper.kt │ ├── JsonNode.kt │ ├── JsonParser.kt │ ├── JsonRenderer.kt │ └── TSGenerator.kt └── test │ ├── JsonParserTest.kt │ ├── JsonRendererTest.kt │ └── TSGeneratorTest.kt ├── liquibase ├── README.md ├── build.gradle.kts └── src │ └── LiquibaseModule.kt ├── logo.png ├── oauth ├── README.md ├── build.gradle.kts ├── src │ ├── AuthRoutes.kt │ ├── JWT.kt │ ├── OAuthClient.kt │ ├── OAuthRoutes.kt │ └── OAuthUser.kt └── test │ ├── JWTTest.kt │ ├── OAuthRoutesTest.kt │ ├── en.json │ └── langs.json ├── openapi ├── README.md ├── build.gradle.kts ├── src │ ├── Generate.kt │ └── OpenAPI.kt └── test │ ├── JsonSerializationTest.kt │ └── OpenAPITest.kt ├── sample ├── .env ├── Dockerfile ├── README.md ├── build.gradle.kts ├── db │ ├── create_test_db.sh │ ├── db.sql │ └── users.sql ├── docker-compose.override.yml ├── docker-compose.yml ├── i18n │ ├── en.json │ ├── et.json │ └── langs.json ├── public │ ├── favicon.ico │ ├── favicon.ico.gz │ ├── index.html │ └── robots.txt ├── src │ ├── APIRoutes.kt │ ├── AdminChecker.kt │ ├── Launcher.kt │ ├── SSERoutes.kt │ └── users │ │ ├── Id.kt │ │ ├── User.kt │ │ └── UserRepository.kt └── test │ ├── DBTest.kt │ ├── ServerIntegrationTest.kt │ ├── TempTableDBTest.kt │ ├── klite │ ├── ConfigTest.kt │ └── jdbc │ │ ├── BaseRepositoryTest.kt │ │ ├── DBMigratorTest.kt │ │ └── JdbcExtensionsTest.kt │ └── users │ ├── UserRepositoryTest.kt │ ├── UserTest.kt │ └── users │ └── TestData.kt ├── serialization ├── README.md ├── build.gradle.kts ├── src │ └── JsonBody.kt └── test │ └── JsonBodyTest.kt ├── server ├── README.md ├── build.gradle.kts ├── src │ └── klite │ │ ├── AppScope.kt │ │ ├── AssetsHandler.kt │ │ ├── Body.kt │ │ ├── Browser.kt │ │ ├── Cookie.kt │ │ ├── CorsHandler.kt │ │ ├── Decorators.kt │ │ ├── ErrorHandler.kt │ │ ├── Exceptions.kt │ │ ├── FormDataParser.kt │ │ ├── FormDataRenderer.kt │ │ ├── HttpExchange.kt │ │ ├── MimeTypes.kt │ │ ├── RequestIdGenerator.kt │ │ ├── RequestLogger.kt │ │ ├── Router.kt │ │ ├── Server.kt │ │ ├── Session.kt │ │ ├── StatusCode.kt │ │ ├── UtilDecorators.kt │ │ ├── Utils.kt │ │ ├── XForwardedHttpExchange.kt │ │ ├── annotations │ │ └── Annotations.kt │ │ ├── crypto │ │ ├── KeyCipher.kt │ │ └── KeyGenerator.kt │ │ ├── html │ │ └── Helpers.kt │ │ └── sse │ │ └── Event.kt └── test │ └── klite │ ├── AssetsHandlerTest.kt │ ├── BrowserTest.kt │ ├── CookieTest.kt │ ├── CorsHandlerTest.kt │ ├── DecoratorsTest.kt │ ├── DependencyInjectingRegistryTest.kt │ ├── ErrorHandlerTest.kt │ ├── FormDataParserTest.kt │ ├── FormDataRendererTest.kt │ ├── HttpExchangeTest.kt │ ├── MimeTypesTest.kt │ ├── PathParamRegexerTest.kt │ ├── RequestLogFormatterTest.kt │ ├── RouteTest.kt │ ├── RouterConfigTest.kt │ ├── ServerTest.kt │ ├── SimpleRegistryTest.kt │ ├── StatusCodeTest.kt │ ├── UtilsTest.kt │ ├── annotations │ ├── AnnotationsTest.kt │ └── CustomAnnotation.kt │ ├── crypto │ └── KeyCipherTest.kt │ └── sse │ └── EventTest.kt ├── settings.gradle.kts ├── slf4j ├── README.md ├── build.gradle.kts ├── src │ ├── KliteLogger.kt │ ├── KliteLoggerFactory.kt │ ├── KliteLoggerProvider.kt │ ├── META-INF │ │ └── services │ │ │ ├── java.lang.System$LoggerFinder │ │ │ └── org.slf4j.spi.SLF4JServiceProvider │ ├── Slf4jRedirector.kt │ ├── Slf4jRedirectorCreator.kt │ ├── StackTraceOptimizingJsonLogger.kt │ └── StackTraceOptimizingLogger.kt └── test │ ├── KliteLoggerFactoryTest.kt │ ├── KliteLoggerTest.kt │ ├── StackTraceOptimizingJsonLoggerTest.kt │ └── StackTraceOptimizingLoggerTest.kt └── smtp ├── .env ├── README.md ├── build.gradle.kts ├── src ├── EmailContent.kt ├── EmailSender.kt └── SmtpEmailSender.kt └── test ├── EmailSenderTest.kt └── SmtpEmailSenderTest.kt /.editorconfig: -------------------------------------------------------------------------------- 1 | [*] 2 | indent_style = space 3 | indent_size = 2 4 | charset = UTF-8 5 | trim_trailing_whitespace = true 6 | insert_final_newline = true 7 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # To get started with Dependabot version updates, you'll need to specify which 2 | # package ecosystems to update and where the package manifests are located. 3 | # Please see the documentation for all configuration options: 4 | # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 5 | 6 | version: 2 7 | updates: 8 | - package-ecosystem: "gradle" 9 | directory: "/" 10 | schedule: 11 | interval: "weekly" 12 | - package-ecosystem: "docker" 13 | directory: "sample" 14 | schedule: 15 | interval: "weekly" 16 | ignore: 17 | - dependency-name: "openjdk" 18 | -------------------------------------------------------------------------------- /.github/workflows/check-readme-links.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | for f in `find . -name '*.md'`; do 4 | echo "Checking $f" 5 | PATHS=`grep -oP "(?<=\]\()[^)]*(?=\))" $f | grep -v '^http'` 6 | for l in $PATHS; do 7 | path=`dirname $f`/$l 8 | if [ ! -e "$path" ]; then 9 | echo "$path doesn't exist" && exit 1 10 | fi 11 | done 12 | done 13 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: Build & Test 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | pull_request: 8 | 9 | jobs: 10 | build: 11 | runs-on: ubuntu-latest 12 | permissions: 13 | contents: write # The Dependency Submission API requires write permission 14 | packages: write 15 | steps: 16 | - uses: actions/checkout@v4 17 | - uses: actions/setup-java@v4 18 | with: 19 | java-version: '11' 20 | distribution: 'temurin' 21 | cache: 'gradle' 22 | 23 | - run: ./gradlew jar testClasses 24 | - run: cd sample && docker compose up -d db && cd - 25 | - run: ./gradlew test --info 26 | - run: cd sample && docker compose stop db && cd - 27 | - run: cd sample && docker compose build && cd - 28 | - run: .github/workflows/check-readme-links.sh 29 | 30 | - uses: mikepenz/gradle-dependency-submission@v0.8.6 31 | if: ${{ github.ref == 'refs/heads/master' }} 32 | with: 33 | gradle-build-module: |- 34 | :server 35 | :slf4j 36 | :jackson 37 | :liquibase 38 | :sample 39 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /.gradle/ 2 | build/ 3 | out 4 | .kotlin 5 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | # Datasource local storage ignored files 5 | /dataSources/ 6 | /dataSources.local.xml 7 | # Editor-based HTTP Client requests 8 | /httpRequests/ 9 | # GitHub Copilot persisted chat sessions 10 | /copilot/chatSessions 11 | -------------------------------------------------------------------------------- /.idea/.name: -------------------------------------------------------------------------------- 1 | klite -------------------------------------------------------------------------------- /.idea/codeStyles/codeStyleConfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/dataSources.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | postgresql 6 | true 7 | org.postgresql.Driver 8 | jdbc:postgresql://localhost:65432/postgres 9 | $ProjectFileDir$ 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/file.template.settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |