From bd526755ebdf84a5f54d019dca4f66307e54308a Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Tue, 26 Dec 2023 21:44:48 -0500 Subject: [PATCH 01/68] dev container + vscode extensions --- .devcontainer/Dockerfile | 8 ++++++++ .devcontainer/devcontainer.json | 13 +++++++++++++ .gitignore | 6 +++++- .vscode/extensions.json | 10 ++++++++++ 4 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 .devcontainer/Dockerfile create mode 100644 .devcontainer/devcontainer.json create mode 100644 .vscode/extensions.json diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 000000000..999e79f86 --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,8 @@ +FROM ubuntu:22.04 + +RUN export DEBIAN_FRONTEND=noninteractive \ + && apt-get update \ + && apt-get -y install git g++ cmake libssl-dev \ + libgtest-dev clang-format clang-tidy doxygen + +ENV CMAKE_CXX_CLANG_TIDY="clang-tidy;-fix" diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 000000000..08052ae18 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,13 @@ +{ + "name": "Ubuntu 22.04 with OpenSSL 3.0", + "build": { + "dockerfile": "Dockerfile" + }, + "customizations": { + "vscode": { + "extensions": [ + "streetsidesoftware.code-spell-checker" + ] + } + } +} diff --git a/.gitignore b/.gitignore index dc994bd2c..641d41edb 100644 --- a/.gitignore +++ b/.gitignore @@ -306,7 +306,11 @@ $RECYCLE.BIN/ test *.o *.o.d -.vscode + +# IDE-specific files +.vscode/ +.vscode/!extensions.json # Allow to provide recommended extensions + # ClangD cache files .cache diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 000000000..59e6f7d8f --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,10 @@ +{ + "recommendations": [ + "ms-vscode.cpptools", + "ms-vscode.cpptools-extension-pack", + "ms-vscode.cmake-tools", + "twxs.cmake", + "matepek.vscode-catch2-test-adapter", + "GitHub.vscode-github-actions" + ] +} From ebc6ed518267d367975b87ea8b1c6e016bc6a03f Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Sun, 31 Dec 2023 09:23:11 -0500 Subject: [PATCH 02/68] exploring cmake presets for CI --- .github/workflows/cross-platform.yml | 30 +++------ CMakePresets.json | 92 ++++++++++++++++++++++++++++ example/CMakeLists.txt | 3 + 3 files changed, 104 insertions(+), 21 deletions(-) create mode 100644 CMakePresets.json diff --git a/.github/workflows/cross-platform.yml b/.github/workflows/cross-platform.yml index 1716d9cc9..859e8aa49 100644 --- a/.github/workflows/cross-platform.yml +++ b/.github/workflows/cross-platform.yml @@ -13,36 +13,24 @@ jobs: os: [macos-latest, windows-latest, ubuntu-latest] steps: + # Setup Dependencies + - if: matrix.os == 'windows-latest' + run: choco install openssl - if: matrix.os == 'macos-latest' run: sudo cp /usr/local/opt/openssl@1.1/lib/pkgconfig/*.pc /usr/local/lib/pkgconfig/ - - uses: actions/checkout@v4 - - run: cmake -E make_directory ${{ github.workspace }}/build + - uses: actions/checkout@v3 - name: configure - shell: bash # access regardless of the host operating system - working-directory: ${{ github.workspace }}/build - run: cmake $GITHUB_WORKSPACE -DJWT_BUILD_EXAMPLES=ON + run: cmake --preset ci-examples - name: build - working-directory: ${{ github.workspace }}/build - shell: bash - run: cmake --build . - - - if: matrix.os != 'windows-latest' - name: test - working-directory: ${{ github.workspace }}/build - shell: bash - run: | - ./example/rsa-create - ./example/rsa-verify + run: cmake --build --preset ci-examples - - if: matrix.os == 'windows-latest' - name: test - working-directory: ${{ github.workspace }}/build + - name: test run: | - example\Debug\rsa-create.exe - example\Debug\rsa-verify.exe + cmake --build --preset ci-examples --target rsa-create-run + cmake --build --preset ci-examples --target rsa-verify-run - if: github.event_name == 'push' && always() uses: ./.github/actions/badge diff --git a/CMakePresets.json b/CMakePresets.json new file mode 100644 index 000000000..11fcb3176 --- /dev/null +++ b/CMakePresets.json @@ -0,0 +1,92 @@ +{ + "version": 6, + "cmakeMinimumRequired": { + "major": 3, + "minor": 25, + "patch": 0 + }, + "configurePresets": [ + { + "name": "default", + "displayName": "Default Config", + "hidden": true, + "binaryDir": "${sourceDir}/build", + "cacheVariables": { + "JWT_BUILD_EXAMPLES": "OFF", + "JWT_BUILD_TESTS": "OFF" + } + }, + { + "name": "debug", + "displayName": "Debug", + "inherits": "default", + "environment": { + "CMAKE_BUILD_TYPE": "Debug" + } + }, + { + "name": "release", + "displayName": "Release", + "inherits": "default", + "environment": { + "CMAKE_BUILD_TYPE": "Release" + } + }, + { + "name": "ci-examples", + "displayName": "Build Examples", + "inherits": "release", + "cacheVariables": { + "JWT_BUILD_EXAMPLES": "ON" + } + }, + { + "name": "dev", + "displayName": "Development", + "inherits": "debug", + "environment": { + "CMAKE_EXPORT_COMPILE_COMMANDS": "ON" + }, + "cacheVariables": { + "JWT_BUILD_EXAMPLES": "ON", + "JWT_BUILD_TESTS": "ON" + } + }, + { + "name": "coverage", + "inherits": "dev", + "displayName": "Coverage", + "description": "This is only available on Linux with GCC", + "condition": { + "type": "equals", + "lhs": "${hostSystemName}", + "rhs": "Linux" + }, + "cacheVariables": { + "JWT_ENABLE_COVERAGE": "ON" + } + } + ], + "buildPresets": [ + { + "name": "debug", + "configurePreset": "debug" + }, + { + "name": "release", + "configurePreset": "release" + }, + { + "name": "ci-examples", + "configurePreset": "ci-examples", + "targets": [ + "rsa-create", + "rsa-verify" + ] + }, + { + "name": "dev", + "configurePreset": "dev" + } + ] +} \ No newline at end of file diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt index a153b57b1..f0ab7f4e4 100644 --- a/example/CMakeLists.txt +++ b/example/CMakeLists.txt @@ -13,15 +13,18 @@ endif() add_executable(print-claims print-claims.cpp) target_link_libraries(print-claims jwt-cpp::jwt-cpp) +add_custom_target(print-claims-run COMMAND print-claims) add_executable(private-claims private-claims.cpp) target_link_libraries(private-claims jwt-cpp::jwt-cpp) add_executable(rsa-create rsa-create.cpp) target_link_libraries(rsa-create jwt-cpp::jwt-cpp) +add_custom_target(rsa-create-run COMMAND rsa-create) add_executable(rsa-verify rsa-verify.cpp) target_link_libraries(rsa-verify jwt-cpp::jwt-cpp) +add_custom_target(rsa-verify-run COMMAND rsa-verify) add_executable(jwks-verify jwks-verify.cpp) target_link_libraries(jwks-verify jwt-cpp::jwt-cpp) From 2c0c8f6e39b2e8acb742f3484a4fb566126b7dbd Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Sun, 31 Dec 2023 09:26:06 -0500 Subject: [PATCH 03/68] ignore user presets --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 641d41edb..a594c29b7 100644 --- a/.gitignore +++ b/.gitignore @@ -316,3 +316,5 @@ test build/* package-lock.json + +CMakeUserPresets.json From 0e9ec1fedf8ba2088450929305d0d8c532f309e4 Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Sun, 31 Dec 2023 09:31:57 -0500 Subject: [PATCH 04/68] add configure to build preset windows ran in debug, which means the multi config needs more help --- CMakePresets.json | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/CMakePresets.json b/CMakePresets.json index 11fcb3176..fc761ac1b 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -70,15 +70,18 @@ "buildPresets": [ { "name": "debug", - "configurePreset": "debug" + "configurePreset": "debug", + "configuration": "Debug" }, { "name": "release", - "configurePreset": "release" + "configurePreset": "release", + "configuration": "Release" }, { "name": "ci-examples", "configurePreset": "ci-examples", + "configuration": "Release", "targets": [ "rsa-create", "rsa-verify" From 5cb12cf444e19da8456a13fb09451903bc80408e Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Sun, 31 Dec 2023 09:45:23 -0500 Subject: [PATCH 05/68] coverage preset --- .github/workflows/jwt.yml | 8 ++------ CMakePresets.json | 13 ++++++++++++- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/.github/workflows/jwt.yml b/.github/workflows/jwt.yml index 6bd10ffe2..9d9450a65 100644 --- a/.github/workflows/jwt.yml +++ b/.github/workflows/jwt.yml @@ -18,14 +18,10 @@ jobs: - uses: ./.github/actions/install/open-source-parsers-jsoncpp - name: configure - run: | - mkdir build - cd build - cmake .. -DJWT_BUILD_EXAMPLES=OFF -DJWT_BUILD_TESTS=ON -DJWT_ENABLE_COVERAGE=ON -DCMAKE_BUILD_TYPE=Debug + run: cmake --preset coverage - name: run - working-directory: build - run: make jwt-cpp-test coverage + run: cmake --build --preset coverage - uses: coverallsapp/github-action@v2 with: diff --git a/CMakePresets.json b/CMakePresets.json index fc761ac1b..98a2e4f72 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -63,6 +63,7 @@ "rhs": "Linux" }, "cacheVariables": { + "JWT_BUILD_TESTS": "ON", "JWT_ENABLE_COVERAGE": "ON" } } @@ -89,7 +90,17 @@ }, { "name": "dev", - "configurePreset": "dev" + "configurePreset": "dev", + "configuration": "Debug" + }, + { + "name": "coverage", + "configurePreset": "coverage", + "configuration": "Debug", + "targets": [ + "jwt-cpp-test", + "coverage" + ] } ] } \ No newline at end of file From 4906953f43685ef6a0236444fee2249c3d08011d Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Sun, 31 Dec 2023 09:53:03 -0500 Subject: [PATCH 06/68] creating a fuzzing preset --- .github/workflows/jwt.yml | 13 +++++-------- CMakePresets.json | 25 ++++++++++++++++++++++++- tests/fuzz/CMakeLists.txt | 16 +++++++++------- 3 files changed, 38 insertions(+), 16 deletions(-) diff --git a/.github/workflows/jwt.yml b/.github/workflows/jwt.yml index 9d9450a65..1686adc44 100644 --- a/.github/workflows/jwt.yml +++ b/.github/workflows/jwt.yml @@ -37,18 +37,15 @@ jobs: - uses: ./.github/actions/install/gtest - name: configure - run: | - mkdir build - cd build - cmake .. -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DJWT_ENABLE_FUZZING=ON + run: cmake --preset ci-fuzzing -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ - name: run working-directory: build run: | - make jwt-cpp-fuzz-BaseEncodeFuzz jwt-cpp-fuzz-BaseDecodeFuzz jwt-cpp-fuzz-TokenDecodeFuzz - ./tests/fuzz/jwt-cpp-fuzz-BaseEncodeFuzz -runs=100000 - ./tests/fuzz/jwt-cpp-fuzz-BaseDecodeFuzz -runs=100000 ../tests/fuzz/decode-corpus - ./tests/fuzz/jwt-cpp-fuzz-TokenDecodeFuzz -runs=100000 ../tests/fuzz/token-corpus + cmake --build --preset ci-fuzzing + cmake --build --preset ci-fuzzing --target jwt-cpp-fuzz-BaseEncodeFuzz-run + cmake --build --preset ci-fuzzing --target jwt-cpp-fuzz-BaseDecodeFuzz-run + cmake --build --preset ci-fuzzing --target jwt-cpp-fuzz-TokenDecodeFuzz-run asan: # Based on https://gist.github.com/jlblancoc/44be9d4d466f0a973b1f3808a8e56782 runs-on: ubuntu-latest diff --git a/CMakePresets.json b/CMakePresets.json index 98a2e4f72..0efa413bb 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -54,7 +54,7 @@ }, { "name": "coverage", - "inherits": "dev", + "inherits": "debug", "displayName": "Coverage", "description": "This is only available on Linux with GCC", "condition": { @@ -66,6 +66,20 @@ "JWT_BUILD_TESTS": "ON", "JWT_ENABLE_COVERAGE": "ON" } + }, + { + "name": "ci-fuzzing", + "inherits": "debug", + "displayName": "Fuzz Testing", + "description": "This is only available on Linux with Clang", + "condition": { + "type": "equals", + "lhs": "${hostSystemName}", + "rhs": "Linux" + }, + "cacheVariables": { + "JWT_ENABLE_FUZZING": "ON" + } } ], "buildPresets": [ @@ -101,6 +115,15 @@ "jwt-cpp-test", "coverage" ] + }, + { + "name": "ci-fuzzing", + "configurePreset": "ci-fuzzing", + "targets": [ + "jwt-cpp-fuzz-BaseEncodeFuzz", + "jwt-cpp-fuzz-BaseDecodeFuzz", + "jwt-cpp-fuzz-TokenDecodeFuzz" + ] } ] } \ No newline at end of file diff --git a/tests/fuzz/CMakeLists.txt b/tests/fuzz/CMakeLists.txt index 1860731fe..ab2cf5306 100644 --- a/tests/fuzz/CMakeLists.txt +++ b/tests/fuzz/CMakeLists.txt @@ -5,16 +5,18 @@ endif() function(ADD_FUZZING_EXECUTABLE TARGET) add_executable(jwt-cpp-fuzz-${TARGET} "${TARGET}.cpp") target_compile_options( - jwt-cpp-fuzz-${TARGET} - PRIVATE -g -O1 -fsanitize=fuzzer,address,signed-integer-overflow,undefined - -fno-omit-frame-pointer) - target_link_options( - jwt-cpp-fuzz-${TARGET} PRIVATE - -fsanitize=fuzzer,address,signed-integer-overflow,undefined - -fno-omit-frame-pointer) + jwt-cpp-fuzz-${TARGET} PRIVATE -g -O1 -fsanitize=fuzzer,address,signed-integer-overflow,undefined + -fno-omit-frame-pointer) + target_link_options(jwt-cpp-fuzz-${TARGET} PRIVATE -fsanitize=fuzzer,address,signed-integer-overflow,undefined + -fno-omit-frame-pointer) target_link_libraries(jwt-cpp-fuzz-${TARGET} PRIVATE jwt-cpp::jwt-cpp) endfunction() add_fuzzing_executable(BaseEncodeFuzz) +add_custom_target(jwt-cpp-fuzz-BaseEncodeFuzz-run COMMAND jwt-cpp-fuzz-BaseEncodeFuzz -runs=100000) add_fuzzing_executable(BaseDecodeFuzz) +add_custom_target(jwt-cpp-fuzz-BaseDecodeFuzz-run COMMAND jwt-cpp-fuzz-BaseDecodeFuzz -runs=100000 + ../tests/fuzz/decode-corpus) add_fuzzing_executable(TokenDecodeFuzz) +add_custom_target(jwt-cpp-fuzz-TokenDecodeFuzz-run COMMAND jwt-cpp-fuzz-TokenDecodeFuzz -runs=100000 + ../tests/fuzz/token-corpus) From 5a0f434a0557e2923b2a2c0f78a8ae050726cf56 Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Sun, 31 Dec 2023 10:15:34 -0500 Subject: [PATCH 07/68] fuzzing fix cwd + more configs to preset --- .github/workflows/jwt.yml | 4 +--- CMakePresets.json | 4 ++++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/jwt.yml b/.github/workflows/jwt.yml index 1686adc44..49a1c31e0 100644 --- a/.github/workflows/jwt.yml +++ b/.github/workflows/jwt.yml @@ -34,13 +34,11 @@ jobs: steps: - uses: actions/checkout@v4 - uses: lukka/get-cmake@latest - - uses: ./.github/actions/install/gtest - name: configure - run: cmake --preset ci-fuzzing -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ + run: cmake --preset ci-fuzzing - name: run - working-directory: build run: | cmake --build --preset ci-fuzzing cmake --build --preset ci-fuzzing --target jwt-cpp-fuzz-BaseEncodeFuzz-run diff --git a/CMakePresets.json b/CMakePresets.json index 0efa413bb..35f17b869 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -77,6 +77,10 @@ "lhs": "${hostSystemName}", "rhs": "Linux" }, + "environment": { + "CMAKE_C_COMPILER": "clang", + "CMAKE_CXX_COMPILER": "clang++" + }, "cacheVariables": { "JWT_ENABLE_FUZZING": "ON" } From d2b011070c5a51e784670a14cec55b8cbf5a9959 Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Sun, 31 Dec 2023 10:22:09 -0500 Subject: [PATCH 08/68] move cmake set vars to right section https://learn.microsoft.com/en-us/cpp/build/cmake-presets-vs?view=msvc-170 "You can set C and C++ compilers by using cacheVariables.CMAKE_C_COMPILER and cacheVariables.CMAKE_CXX_COMPILER in a Configure Preset. It's equivalent to passing -D CMAKE_C_COMPILER= and -D CMAKE_CXX_COMPILER= to CMake from the command line." --- CMakePresets.json | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/CMakePresets.json b/CMakePresets.json index 35f17b869..e81afe3e7 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -20,7 +20,7 @@ "name": "debug", "displayName": "Debug", "inherits": "default", - "environment": { + "cacheVariables": { "CMAKE_BUILD_TYPE": "Debug" } }, @@ -28,7 +28,7 @@ "name": "release", "displayName": "Release", "inherits": "default", - "environment": { + "cacheVariables": { "CMAKE_BUILD_TYPE": "Release" } }, @@ -56,7 +56,7 @@ "name": "coverage", "inherits": "debug", "displayName": "Coverage", - "description": "This is only available on Linux with GCC", + "description": "This is only available on Linux", "condition": { "type": "equals", "lhs": "${hostSystemName}", @@ -77,11 +77,9 @@ "lhs": "${hostSystemName}", "rhs": "Linux" }, - "environment": { - "CMAKE_C_COMPILER": "clang", - "CMAKE_CXX_COMPILER": "clang++" - }, "cacheVariables": { + "CMAKE_C_COMPILER": "clang", + "CMAKE_CXX_COMPILER": "clang++", "JWT_ENABLE_FUZZING": "ON" } } From feaad45431bc1db6c6b93efd0b1686cab319304e Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Sun, 31 Dec 2023 10:30:48 -0500 Subject: [PATCH 09/68] fix workdir for new fuzz run targets --- tests/fuzz/CMakeLists.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/fuzz/CMakeLists.txt b/tests/fuzz/CMakeLists.txt index ab2cf5306..72fc85fd2 100644 --- a/tests/fuzz/CMakeLists.txt +++ b/tests/fuzz/CMakeLists.txt @@ -15,8 +15,8 @@ endfunction() add_fuzzing_executable(BaseEncodeFuzz) add_custom_target(jwt-cpp-fuzz-BaseEncodeFuzz-run COMMAND jwt-cpp-fuzz-BaseEncodeFuzz -runs=100000) add_fuzzing_executable(BaseDecodeFuzz) -add_custom_target(jwt-cpp-fuzz-BaseDecodeFuzz-run COMMAND jwt-cpp-fuzz-BaseDecodeFuzz -runs=100000 - ../tests/fuzz/decode-corpus) +add_custom_target(jwt-cpp-fuzz-BaseDecodeFuzz-run COMMAND jwt-cpp-fuzz-BaseDecodeFuzz -runs=100000 decode-corpus + WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}) add_fuzzing_executable(TokenDecodeFuzz) -add_custom_target(jwt-cpp-fuzz-TokenDecodeFuzz-run COMMAND jwt-cpp-fuzz-TokenDecodeFuzz -runs=100000 - ../tests/fuzz/token-corpus) +add_custom_target(jwt-cpp-fuzz-TokenDecodeFuzz-run COMMAND jwt-cpp-fuzz-TokenDecodeFuzz -runs=100000 token-corpus + WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}) From cc84b4d783df3cb4572a9ec7ff6acab777c224c8 Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Sun, 31 Dec 2023 10:52:35 -0500 Subject: [PATCH 10/68] split up presets into more files --- CMakePresets.json | 70 +++------------------------------------ example/CMakePresets.json | 29 ++++++++++++++++ tests/CMakePresets.json | 61 ++++++++++++++++++++++++++++++++++ 3 files changed, 94 insertions(+), 66 deletions(-) create mode 100644 example/CMakePresets.json create mode 100644 tests/CMakePresets.json diff --git a/CMakePresets.json b/CMakePresets.json index e81afe3e7..2dc44044d 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -5,6 +5,10 @@ "minor": 25, "patch": 0 }, + "include": [ + "example/CMakePresets.json", + "tests/CMakePresets.json" + ], "configurePresets": [ { "name": "default", @@ -32,14 +36,6 @@ "CMAKE_BUILD_TYPE": "Release" } }, - { - "name": "ci-examples", - "displayName": "Build Examples", - "inherits": "release", - "cacheVariables": { - "JWT_BUILD_EXAMPLES": "ON" - } - }, { "name": "dev", "displayName": "Development", @@ -51,37 +47,6 @@ "JWT_BUILD_EXAMPLES": "ON", "JWT_BUILD_TESTS": "ON" } - }, - { - "name": "coverage", - "inherits": "debug", - "displayName": "Coverage", - "description": "This is only available on Linux", - "condition": { - "type": "equals", - "lhs": "${hostSystemName}", - "rhs": "Linux" - }, - "cacheVariables": { - "JWT_BUILD_TESTS": "ON", - "JWT_ENABLE_COVERAGE": "ON" - } - }, - { - "name": "ci-fuzzing", - "inherits": "debug", - "displayName": "Fuzz Testing", - "description": "This is only available on Linux with Clang", - "condition": { - "type": "equals", - "lhs": "${hostSystemName}", - "rhs": "Linux" - }, - "cacheVariables": { - "CMAKE_C_COMPILER": "clang", - "CMAKE_CXX_COMPILER": "clang++", - "JWT_ENABLE_FUZZING": "ON" - } } ], "buildPresets": [ @@ -95,37 +60,10 @@ "configurePreset": "release", "configuration": "Release" }, - { - "name": "ci-examples", - "configurePreset": "ci-examples", - "configuration": "Release", - "targets": [ - "rsa-create", - "rsa-verify" - ] - }, { "name": "dev", "configurePreset": "dev", "configuration": "Debug" - }, - { - "name": "coverage", - "configurePreset": "coverage", - "configuration": "Debug", - "targets": [ - "jwt-cpp-test", - "coverage" - ] - }, - { - "name": "ci-fuzzing", - "configurePreset": "ci-fuzzing", - "targets": [ - "jwt-cpp-fuzz-BaseEncodeFuzz", - "jwt-cpp-fuzz-BaseDecodeFuzz", - "jwt-cpp-fuzz-TokenDecodeFuzz" - ] } ] } \ No newline at end of file diff --git a/example/CMakePresets.json b/example/CMakePresets.json new file mode 100644 index 000000000..a6ab51122 --- /dev/null +++ b/example/CMakePresets.json @@ -0,0 +1,29 @@ +{ + "version": 6, + "cmakeMinimumRequired": { + "major": 3, + "minor": 25, + "patch": 0 + }, + "configurePresets": [ + { + "name": "ci-examples", + "displayName": "Build Examples", + "inherits": "release", + "cacheVariables": { + "JWT_BUILD_EXAMPLES": "ON" + } + } + ], + "buildPresets": [ + { + "name": "ci-examples", + "configurePreset": "ci-examples", + "configuration": "Release", + "targets": [ + "rsa-create", + "rsa-verify" + ] + } + ] +} \ No newline at end of file diff --git a/tests/CMakePresets.json b/tests/CMakePresets.json new file mode 100644 index 000000000..5373a8bcf --- /dev/null +++ b/tests/CMakePresets.json @@ -0,0 +1,61 @@ +{ + "version": 6, + "cmakeMinimumRequired": { + "major": 3, + "minor": 25, + "patch": 0 + }, + "configurePresets": [ + { + "name": "coverage", + "inherits": "debug", + "displayName": "Coverage", + "description": "This is only available on Linux", + "condition": { + "type": "equals", + "lhs": "${hostSystemName}", + "rhs": "Linux" + }, + "cacheVariables": { + "JWT_BUILD_TESTS": "ON", + "JWT_ENABLE_COVERAGE": "ON" + } + }, + { + "name": "ci-fuzzing", + "inherits": "debug", + "displayName": "Fuzz Testing", + "description": "This is only available on Linux with Clang", + "condition": { + "type": "equals", + "lhs": "${hostSystemName}", + "rhs": "Linux" + }, + "cacheVariables": { + "CMAKE_C_COMPILER": "clang", + "CMAKE_CXX_COMPILER": "clang++", + "JWT_ENABLE_FUZZING": "ON" + } + } + ], + "buildPresets": [ + { + "name": "coverage", + "configurePreset": "coverage", + "configuration": "Debug", + "targets": [ + "jwt-cpp-test", + "coverage" + ] + }, + { + "name": "ci-fuzzing", + "configurePreset": "ci-fuzzing", + "targets": [ + "jwt-cpp-fuzz-BaseEncodeFuzz", + "jwt-cpp-fuzz-BaseDecodeFuzz", + "jwt-cpp-fuzz-TokenDecodeFuzz" + ] + } + ] +} \ No newline at end of file From 03e7c9f54457803faf2aed00adf60ba594781bce Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Sun, 31 Dec 2023 11:03:26 -0500 Subject: [PATCH 11/68] fix include order (liking this less) --- CMakePresets.json | 26 -------------------------- cmake/CMakePresets.json | 36 ++++++++++++++++++++++++++++++++++++ example/CMakePresets.json | 3 +++ tests/CMakePresets.json | 3 +++ 4 files changed, 42 insertions(+), 26 deletions(-) create mode 100644 cmake/CMakePresets.json diff --git a/CMakePresets.json b/CMakePresets.json index 2dc44044d..1c05112cb 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -10,32 +10,6 @@ "tests/CMakePresets.json" ], "configurePresets": [ - { - "name": "default", - "displayName": "Default Config", - "hidden": true, - "binaryDir": "${sourceDir}/build", - "cacheVariables": { - "JWT_BUILD_EXAMPLES": "OFF", - "JWT_BUILD_TESTS": "OFF" - } - }, - { - "name": "debug", - "displayName": "Debug", - "inherits": "default", - "cacheVariables": { - "CMAKE_BUILD_TYPE": "Debug" - } - }, - { - "name": "release", - "displayName": "Release", - "inherits": "default", - "cacheVariables": { - "CMAKE_BUILD_TYPE": "Release" - } - }, { "name": "dev", "displayName": "Development", diff --git a/cmake/CMakePresets.json b/cmake/CMakePresets.json new file mode 100644 index 000000000..ba3a00aca --- /dev/null +++ b/cmake/CMakePresets.json @@ -0,0 +1,36 @@ +{ + "version": 6, + "cmakeMinimumRequired": { + "major": 3, + "minor": 25, + "patch": 0 + }, + "configurePresets": [ + { + "name": "default", + "displayName": "Default Config", + "hidden": true, + "binaryDir": "${sourceDir}/build", + "cacheVariables": { + "JWT_BUILD_EXAMPLES": "OFF", + "JWT_BUILD_TESTS": "OFF" + } + }, + { + "name": "debug", + "displayName": "Debug", + "inherits": "default", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug" + } + }, + { + "name": "release", + "displayName": "Release", + "inherits": "default", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Release" + } + } + ] +} \ No newline at end of file diff --git a/example/CMakePresets.json b/example/CMakePresets.json index a6ab51122..dcffcf209 100644 --- a/example/CMakePresets.json +++ b/example/CMakePresets.json @@ -5,6 +5,9 @@ "minor": 25, "patch": 0 }, + "include": [ + "../cmake/CMakePresets.json" + ], "configurePresets": [ { "name": "ci-examples", diff --git a/tests/CMakePresets.json b/tests/CMakePresets.json index 5373a8bcf..cf9a05a6a 100644 --- a/tests/CMakePresets.json +++ b/tests/CMakePresets.json @@ -5,6 +5,9 @@ "minor": 25, "patch": 0 }, + "include": [ + "../cmake/CMakePresets.json" + ], "configurePresets": [ { "name": "coverage", From c902f89d931e2758a72bf5f10dc755ff14c3a1a0 Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Sun, 31 Dec 2023 11:18:16 -0500 Subject: [PATCH 12/68] add asan to presets --- .github/workflows/jwt.yml | 20 ++++++-------------- example/CMakeLists.txt | 1 + tests/CMakeLists.txt | 1 + tests/CMakePresets.json | 16 ++++++++++++++++ 4 files changed, 24 insertions(+), 14 deletions(-) diff --git a/.github/workflows/jwt.yml b/.github/workflows/jwt.yml index 49a1c31e0..a3059a316 100644 --- a/.github/workflows/jwt.yml +++ b/.github/workflows/jwt.yml @@ -62,23 +62,15 @@ jobs: version: ${{ matrix.openssl.tag }} - name: configure - run: | - mkdir build - cd build - cmake .. -DJWT_BUILD_TESTS=ON -DCMAKE_CXX_FLAGS="-fsanitize=address -fsanitize=leak -g" \ - -DCMAKE_C_FLAGS="-fsanitize=address -fsanitize=leak -g" \ - -DCMAKE_EXE_LINKER_FLAGS="-fsanitize=address -fsanitize=leak" \ - -DCMAKE_MODULE_LINKER_FLAGS="-fsanitize=address -fsanitize=leak" + run: cmake --preset ci-asan - name: run - working-directory: build run: | - make - export ASAN_OPTIONS=check_initialization_order=true:detect_stack_use_after_return=true:fast_unwind_on_malloc=0 - ./example/rsa-create - ./example/rsa-verify - ./example/jwks-verify - ./tests/jwt-cpp-test + cmake --build --preset ci-asan + cmake --build --preset ci-asan --target rsa-create-run + cmake --build --preset ci-asan --target rsa-verify-run + cmake --build --preset ci-asan --target jwks-verify-run + cmake --build --preset ci-asan --target jwt-cpp-test-run ubsan: runs-on: ubuntu-20.04 diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt index f0ab7f4e4..94b749ecb 100644 --- a/example/CMakeLists.txt +++ b/example/CMakeLists.txt @@ -28,6 +28,7 @@ add_custom_target(rsa-verify-run COMMAND rsa-verify) add_executable(jwks-verify jwks-verify.cpp) target_link_libraries(jwks-verify jwt-cpp::jwt-cpp) +add_custom_target(jwks-verify-run COMMAND jwks-verify) add_executable(es256k es256k.cpp) target_link_libraries(es256k jwt-cpp::jwt-cpp) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index c41809f7d..356aa3b80 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -75,6 +75,7 @@ target_link_libraries(jwt-cpp-test PRIVATE jwt-cpp nlohmann_json::nlohmann_json $<$>:${CMAKE_DL_LIBS}>) gtest_discover_tests(jwt-cpp-test) +add_custom_target(jwt-cpp-test-run COMMAND jwt-cpp-test) if(JWT_ENABLE_COVERAGE) include("code-coverage") diff --git a/tests/CMakePresets.json b/tests/CMakePresets.json index cf9a05a6a..b7fe75693 100644 --- a/tests/CMakePresets.json +++ b/tests/CMakePresets.json @@ -39,6 +39,22 @@ "CMAKE_CXX_COMPILER": "clang++", "JWT_ENABLE_FUZZING": "ON" } + }, + { + "name": "ci-asan", + "inherits": "debug", + "displayName": "Address/Leak Sanitizer", + "environment": { + "ASAN_OPTIONS": "check_initialization_order=true:detect_stack_use_after_return=true:fast_unwind_on_malloc=0" + }, + "cacheVariables": { + "JWT_BUILD_EXAMPLES": "ON", + "JWT_BUILD_TESTS": "ON", + "CMAKE_C_FLAGS": "-fsanitize=address -fsanitize=leak -g", + "CMAKE_CXX_FLAGS": "-fsanitize=address -fsanitize=leak -g", + "CMAKE_EXE_LINKER_FLAGS": "-fsanitize=address -fsanitize=leak", + "CMAKE_MODULE_LINKER_FLAGS": "-fsanitize=address -fsanitize=leak", + } } ], "buildPresets": [ From 5e5557afa1971b82fca1c9138c89f3d00bdc717a Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Sun, 31 Dec 2023 15:40:14 -0500 Subject: [PATCH 13/68] fix copy paste --- tests/CMakePresets.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/CMakePresets.json b/tests/CMakePresets.json index b7fe75693..3d5b2e1b9 100644 --- a/tests/CMakePresets.json +++ b/tests/CMakePresets.json @@ -53,7 +53,7 @@ "CMAKE_C_FLAGS": "-fsanitize=address -fsanitize=leak -g", "CMAKE_CXX_FLAGS": "-fsanitize=address -fsanitize=leak -g", "CMAKE_EXE_LINKER_FLAGS": "-fsanitize=address -fsanitize=leak", - "CMAKE_MODULE_LINKER_FLAGS": "-fsanitize=address -fsanitize=leak", + "CMAKE_MODULE_LINKER_FLAGS": "-fsanitize=address -fsanitize=leak" } } ], From 2e60684d80fac42fdc9e7e97548be38aede8e7a8 Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Sun, 31 Dec 2023 15:48:58 -0500 Subject: [PATCH 14/68] add asan build preset --- tests/CMakePresets.json | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tests/CMakePresets.json b/tests/CMakePresets.json index 3d5b2e1b9..e0fa770cd 100644 --- a/tests/CMakePresets.json +++ b/tests/CMakePresets.json @@ -75,6 +75,16 @@ "jwt-cpp-fuzz-BaseDecodeFuzz", "jwt-cpp-fuzz-TokenDecodeFuzz" ] + }, + { + "name": "ci-asan", + "configurePreset": "ci-asan", + "targets": [ + "rsa-create", + "rsa-verify", + "jwks-verify", + "jwt-cpp-test" + ] } ] } \ No newline at end of file From 95d0f99a4ba7c8224b8be68d87d666bf144aaeb2 Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Sun, 31 Dec 2023 15:55:24 -0500 Subject: [PATCH 15/68] move ubsan to presets --- .github/workflows/jwt.yml | 31 +++++++++++++------------------ tests/CMakePresets.json | 26 ++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 18 deletions(-) diff --git a/.github/workflows/jwt.yml b/.github/workflows/jwt.yml index a3059a316..d8655ec3c 100644 --- a/.github/workflows/jwt.yml +++ b/.github/workflows/jwt.yml @@ -37,15 +37,16 @@ jobs: - name: configure run: cmake --preset ci-fuzzing + - name: build + run: cmake --build --preset ci-fuzzing - name: run run: | - cmake --build --preset ci-fuzzing cmake --build --preset ci-fuzzing --target jwt-cpp-fuzz-BaseEncodeFuzz-run cmake --build --preset ci-fuzzing --target jwt-cpp-fuzz-BaseDecodeFuzz-run cmake --build --preset ci-fuzzing --target jwt-cpp-fuzz-TokenDecodeFuzz-run - asan: # Based on https://gist.github.com/jlblancoc/44be9d4d466f0a973b1f3808a8e56782 + asan: runs-on: ubuntu-latest strategy: fail-fast: false @@ -63,37 +64,31 @@ jobs: - name: configure run: cmake --preset ci-asan + - name: build + run: cmake --build --preset ci-asan - name: run run: | - cmake --build --preset ci-asan cmake --build --preset ci-asan --target rsa-create-run cmake --build --preset ci-asan --target rsa-verify-run cmake --build --preset ci-asan --target jwks-verify-run cmake --build --preset ci-asan --target jwt-cpp-test-run ubsan: - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: lukka/get-cmake@latest - uses: ./.github/actions/install/gtest - name: configure - run: | - mkdir build - cd build - cmake .. -DJWT_BUILD_TESTS=ON -DCMAKE_CXX_STANDARD=20 \ - -DCMAKE_CXX_FLAGS="-fsanitize=undefined -fsanitize=return -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fno-sanitize-recover=all -g" \ - -DCMAKE_C_FLAGS="-fsanitize=undefined -fsanitize=return -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fno-sanitize-recover=all -g" \ - -DCMAKE_EXE_LINKER_FLAGS="-fsanitize=undefined -fsanitize=return -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fno-sanitize-recover=all" \ - -DCMAKE_MODULE_LINKER_FLAGS="-fsanitize=undefined -fsanitize=return -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fno-sanitize-recover=all" + run: cmake --preset ci-ubsan + - name: build + run: cmake --build --preset ci-ubsan -DCMAKE_CXX_STANDARD=20 - name: run - working-directory: build run: | - make - export UBSAN_OPTIONS=print_stacktrace=1 - ./example/rsa-create - ./example/rsa-verify - ./tests/jwt-cpp-test + cmake --build --preset ci-ubsan --target rsa-create-run + cmake --build --preset ci-ubsan --target rsa-verify-run + cmake --build --preset ci-ubsan --target jwks-verify-run + cmake --build --preset ci-ubsan --target jwt-cpp-test-run diff --git a/tests/CMakePresets.json b/tests/CMakePresets.json index e0fa770cd..f6cdda3fa 100644 --- a/tests/CMakePresets.json +++ b/tests/CMakePresets.json @@ -55,6 +55,22 @@ "CMAKE_EXE_LINKER_FLAGS": "-fsanitize=address -fsanitize=leak", "CMAKE_MODULE_LINKER_FLAGS": "-fsanitize=address -fsanitize=leak" } + }, + { + "name": "ci-ubsan", + "inherits": "debug", + "displayName": "Undefined Behavior Sanitizer", + "environment": { + "UBSAN_OPTIONS": "print_stacktrace=1" + }, + "cacheVariables": { + "JWT_BUILD_EXAMPLES": "ON", + "JWT_BUILD_TESTS": "ON", + "CMAKE_C_FLAGS": "-fsanitize=undefined -fsanitize=return -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fno-sanitize-recover=all -g", + "CMAKE_CXX_FLAGS": "-fsanitize=undefined -fsanitize=return -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fno-sanitize-recover=all -g", + "CMAKE_EXE_LINKER_FLAGS": "-fsanitize=undefined -fsanitize=return -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fno-sanitize-recover=all", + "CMAKE_MODULE_LINKER_FLAGS": "-fsanitize=undefined -fsanitize=return -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fno-sanitize-recover=all" + } } ], "buildPresets": [ @@ -85,6 +101,16 @@ "jwks-verify", "jwt-cpp-test" ] + }, + { + "name": "ci-ubsan", + "configurePreset": "ci-ubsan", + "targets": [ + "rsa-create", + "rsa-verify", + "jwks-verify", + "jwt-cpp-test" + ] } ] } \ No newline at end of file From 8f5f00396cf6ec7e244fd1ce189b50b5970cc9c3 Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Sun, 31 Dec 2023 16:45:39 -0500 Subject: [PATCH 16/68] replace mustache with a cmake script --- .github/actions/render/defaults/action.yml | 53 +++---------------- cmake/render-defaults.cmake | 23 ++++++++ include/jwt-cpp/traits/boost-json/defaults.h | 36 ++++++------- .../{defaults.h.mustache => defaults.h.in} | 40 +++++++------- 4 files changed, 68 insertions(+), 84 deletions(-) create mode 100644 cmake/render-defaults.cmake rename include/jwt-cpp/traits/{defaults.h.mustache => defaults.h.in} (54%) diff --git a/.github/actions/render/defaults/action.yml b/.github/actions/render/defaults/action.yml index 4942e00d4..387b419a1 100644 --- a/.github/actions/render/defaults/action.yml +++ b/.github/actions/render/defaults/action.yml @@ -2,7 +2,7 @@ name: "Render `defaults.h` Template" description: "Generate the `defaults.h` header file for a JSON library" inputs: traits_name: - description: "Name of the traits structure to be used. Typically in the format `author_repository` or equivilant" + description: "Name of the traits structure to be used. Typically in the format `author_repository` or equivalent" required: true library_name: description: "Name of the JSON library." @@ -16,52 +16,15 @@ inputs: default: "true" outputs: file_path: - description: "Relative path which the 'defaults.h' was written to" + description: "Absolute path which the 'defaults.h' was written to" value: ${{ steps.script.outputs.result }} runs: using: composite steps: - - uses: actions/setup-node@v3 - with: - node-version: 14 - - run: npm install mustache - shell: bash - - uses: actions/github-script@v6 + - shell: bash id: script - env: - TRAITS_NAME: ${{ inputs.traits_name }} - LIBRARY_NAME: ${{ inputs.library_name }} - LIBRARY_URL: ${{ inputs.library_url }} - DISABLE_DEFAULT_TRAITS: ${{ inputs.disable_default_traits }} - with: - result-encoding: string - script: | - const mustache = require('mustache') - const path = require('path') - const fs = require('fs') - - const { TRAITS_NAME, LIBRARY_NAME, LIBRARY_URL, DISABLE_DEFAULT_TRAITS } = process.env - console.log(`Rendering ${TRAITS_NAME}!`) - - const disableDefault = DISABLE_DEFAULT_TRAITS === 'true' - - const template = fs.readFileSync(path.join('include', 'jwt-cpp', 'traits', 'defaults.h.mustache'), 'utf8') - const content = mustache.render(template, { - traits_name: TRAITS_NAME, - traits_name_upper: TRAITS_NAME.toUpperCase(), - library_name: LIBRARY_NAME, - library_url: LIBRARY_URL, - disable_default_traits: disableDefault, - }) - // https://dmitripavlutin.com/replace-all-string-occurrences-javascript/ - function replaceAll(string, search, replace) { - return string.split(search).join(replace); - } - - const outputDir = path.join('include', 'jwt-cpp', 'traits', replaceAll(TRAITS_NAME, '_', '-')) - fs.mkdirSync(outputDir, { recursive: true }) - - const filePath = path.join(outputDir, 'defaults.h') - fs.writeFileSync(filePath, content) - - return filePath + run: | + cmake -P cmake/render-defaults.cmake -DTRAITS_NAME=${{ inputs.traits_name }} \ + -DLIBRARY_NAME=${{ inputs.library_name }} -DLIBRARY_URL="${{ inputs.library_url }}" \ + -DJWT_DISABLE_PICOJSON=${{ inputs.disable_default_traits }} + echo "result=$(echo $OUTPUT_FILE)" >> $GITHUB_OUTPUT diff --git a/cmake/render-defaults.cmake b/cmake/render-defaults.cmake new file mode 100644 index 000000000..833672f7b --- /dev/null +++ b/cmake/render-defaults.cmake @@ -0,0 +1,23 @@ +if(NOT TRAITS_NAME) + message(FATAL_ERROR "Missing '-DTRAITS_NAME' for this script to work") +endif() +if(NOT LIBRARY_NAME) + message(FATAL_ERROR "Missing '-DLIBRARY_NAME' for this script to work") +endif() +if(NOT LIBRARY_URL) + message(FATAL_ERROR "Missing '-DLIBRARY_URL' for this script to work") +endif() +if(NOT JWT_DISABLE_PICOJSON) + message(FATAL_ERROR "Missing '-DJWT_DISABLE_PICOJSON' for this script to work") +endif() +message(STATUS "Rendering ${TRAITS_NAME}!") +string(TOUPPER "${TRAITS_NAME}" TRAITS_NAME_UPPER) +string(REPLACE "_" "-" TRAITS_DIR_FOLDER "${TRAITS_NAME}") + +cmake_path(GET CMAKE_SCRIPT_MODE_FILE PARENT_PATH SCRIPT_DIR) +set(OUTPUT_DIR "${SCRIPT_DIR}/../include/jwt-cpp/traits/${TRAITS_DIR_FOLDER}") +file(MAKE_DIRECTORY "${OUTPUT_DIR}") + +configure_file("${SCRIPT_DIR}/../include/jwt-cpp/traits/defaults.h.in" "${OUTPUT_DIR}/defaults.h" @ONLY) + +set(ENV{OUTPUT_FILE} "${OUTPUT_DIR}/defaults.h") diff --git a/include/jwt-cpp/traits/boost-json/defaults.h b/include/jwt-cpp/traits/boost-json/defaults.h index 21aea7f52..2756afe17 100644 --- a/include/jwt-cpp/traits/boost-json/defaults.h +++ b/include/jwt-cpp/traits/boost-json/defaults.h @@ -1,5 +1,5 @@ -#ifndef JWT_CPP_BOOST_JSON_DEFAULTS_H -#define JWT_CPP_BOOST_JSON_DEFAULTS_H +#ifndef JWT_CPP__DEFAULTS_H +#define JWT_CPP__DEFAULTS_H #ifndef JWT_DISABLE_PICOJSON #define JWT_DISABLE_PICOJSON @@ -9,27 +9,27 @@ namespace jwt { /** - * \brief a class to store a generic [Boost.JSON](https://github.com/boostorg/json) value as claim + * \brief a class to store a generic [](@{library_url@}) value as claim * * This type is the specialization of the \ref basic_claim class which * uses the standard template types. */ - using claim = basic_claim; + using claim = basic_claim; /** * Create a verifier using the default clock * \return verifier instance */ - inline verifier verify() { - return verify(default_clock{}); + inline verifier verify() { + return verify(default_clock{}); } /** * Create a builder using the default clock * \return builder instance to create a new token */ - inline builder create() { - return builder(default_clock{}); + inline builder create() { + return builder(default_clock{}); } #ifndef JWT_DISABLE_BASE64 @@ -40,8 +40,8 @@ namespace jwt { * \throw std::invalid_argument Token is not in correct format * \throw std::runtime_error Base64 decoding failed or invalid json */ - inline decoded_jwt decode(const std::string& token) { - return decoded_jwt(token); + inline decoded_jwt decode(const std::string& token) { + return decoded_jwt(token); } #endif @@ -57,8 +57,8 @@ namespace jwt { * \throw std::runtime_error Base64 decoding failed or invalid json */ template - decoded_jwt decode(const std::string& token, Decode decode) { - return decoded_jwt(token, decode); + decoded_jwt decode(const std::string& token, Decode decode) { + return decoded_jwt(token, decode); } /** @@ -67,8 +67,8 @@ namespace jwt { * \return Parsed JWK * \throw std::runtime_error Token is not in correct format */ - inline jwk parse_jwk(const traits::boost_json::string_type& token) { - return jwk(token); + inline jwk parse_jwk(const traits::::string_type& token) { + return jwk(token); } /** @@ -77,15 +77,15 @@ namespace jwt { * \return Parsed JWKs * \throw std::runtime_error Token is not in correct format */ - inline jwks parse_jwks(const traits::boost_json::string_type& token) { - return jwks(token); + inline jwks parse_jwks(const traits::::string_type& token) { + return jwks(token); } /** * This type is the specialization of the \ref verify_ops::verify_context class which * uses the standard template types. */ - using verify_context = verify_ops::verify_context; + using verify_context = verify_ops::verify_context; } // namespace jwt -#endif // JWT_CPP_BOOST_JSON_DEFAULTS_H +#endif // JWT_CPP__DEFAULTS_H diff --git a/include/jwt-cpp/traits/defaults.h.mustache b/include/jwt-cpp/traits/defaults.h.in similarity index 54% rename from include/jwt-cpp/traits/defaults.h.mustache rename to include/jwt-cpp/traits/defaults.h.in index 82a67aeb7..6d36f20b7 100644 --- a/include/jwt-cpp/traits/defaults.h.mustache +++ b/include/jwt-cpp/traits/defaults.h.in @@ -1,37 +1,35 @@ -#ifndef JWT_CPP_{{traits_name_upper}}_DEFAULTS_H -#define JWT_CPP_{{traits_name_upper}}_DEFAULTS_H -{{#disable_default_traits}} +#ifndef JWT_CPP_@traits_name_upper@_DEFAULTS_H +#define JWT_CPP_@traits_name_upper@_DEFAULTS_H #ifndef JWT_DISABLE_PICOJSON -#define JWT_DISABLE_PICOJSON +#cmakedefine JWT_DISABLE_PICOJSON #endif -{{/disable_default_traits}} #include "traits.h" namespace jwt { /** - * \brief a class to store a generic [{{library_name}}]({{{library_url}}}) value as claim + * \brief a class to store a generic [@library_name@](@{library_url@}) value as claim * * This type is the specialization of the \ref basic_claim class which * uses the standard template types. */ - using claim = basic_claim; + using claim = basic_claim; /** * Create a verifier using the default clock * \return verifier instance */ - inline verifier verify() { - return verify(default_clock{}); + inline verifier verify() { + return verify(default_clock{}); } /** * Create a builder using the default clock * \return builder instance to create a new token */ - inline builder create() { - return builder(default_clock{}); + inline builder create() { + return builder(default_clock{}); } #ifndef JWT_DISABLE_BASE64 @@ -42,8 +40,8 @@ namespace jwt { * \throw std::invalid_argument Token is not in correct format * \throw std::runtime_error Base64 decoding failed or invalid json */ - inline decoded_jwt decode(const std::string& token) { - return decoded_jwt(token); + inline decoded_jwt decode(const std::string& token) { + return decoded_jwt(token); } #endif @@ -59,8 +57,8 @@ namespace jwt { * \throw std::runtime_error Base64 decoding failed or invalid json */ template - decoded_jwt decode(const std::string& token, Decode decode) { - return decoded_jwt(token, decode); + decoded_jwt decode(const std::string& token, Decode decode) { + return decoded_jwt(token, decode); } /** @@ -69,8 +67,8 @@ namespace jwt { * \return Parsed JWK * \throw std::runtime_error Token is not in correct format */ - inline jwk parse_jwk(const traits::{{traits_name}}::string_type& token) { - return jwk(token); + inline jwk parse_jwk(const traits::@traits_name@::string_type& token) { + return jwk(token); } /** @@ -79,15 +77,15 @@ namespace jwt { * \return Parsed JWKs * \throw std::runtime_error Token is not in correct format */ - inline jwks parse_jwks(const traits::{{traits_name}}::string_type& token) { - return jwks(token); + inline jwks parse_jwks(const traits::@traits_name@::string_type& token) { + return jwks(token); } /** * This type is the specialization of the \ref verify_ops::verify_context class which * uses the standard template types. */ - using verify_context = verify_ops::verify_context; + using verify_context = verify_ops::verify_context; } // namespace jwt -#endif // JWT_CPP_{{traits_name_upper}}_DEFAULTS_H +#endif // JWT_CPP_@traits_name_upper@_DEFAULTS_H From ca511579a9b0d40c5b9a9dd4feae27caf4d427b8 Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Sun, 31 Dec 2023 21:27:59 -0500 Subject: [PATCH 17/68] touch ups --- .github/actions/render/defaults/action.yml | 1 + cmake/render-defaults.cmake | 2 ++ 2 files changed, 3 insertions(+) diff --git a/.github/actions/render/defaults/action.yml b/.github/actions/render/defaults/action.yml index 387b419a1..990501a16 100644 --- a/.github/actions/render/defaults/action.yml +++ b/.github/actions/render/defaults/action.yml @@ -21,6 +21,7 @@ outputs: runs: using: composite steps: + - uses: lukka/get-cmake@latest - shell: bash id: script run: | diff --git a/cmake/render-defaults.cmake b/cmake/render-defaults.cmake index 833672f7b..39c85c783 100644 --- a/cmake/render-defaults.cmake +++ b/cmake/render-defaults.cmake @@ -1,3 +1,5 @@ +cmake_minimum_required(VERSION 3.20) + if(NOT TRAITS_NAME) message(FATAL_ERROR "Missing '-DTRAITS_NAME' for this script to work") endif() From e80e6547af6bedfb270914dd651211a61bb453c5 Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Sun, 31 Dec 2023 21:29:21 -0500 Subject: [PATCH 18/68] restore file to void merge conflicts --- include/jwt-cpp/traits/defaults.h.mustache | 93 ++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 include/jwt-cpp/traits/defaults.h.mustache diff --git a/include/jwt-cpp/traits/defaults.h.mustache b/include/jwt-cpp/traits/defaults.h.mustache new file mode 100644 index 000000000..e3c8fb88b --- /dev/null +++ b/include/jwt-cpp/traits/defaults.h.mustache @@ -0,0 +1,93 @@ +#ifndef JWT_CPP_{{traits_name_upper}}_DEFAULTS_H +#define JWT_CPP_{{traits_name_upper}}_DEFAULTS_H +{{#disable_default_traits}} + +#ifndef JWT_DISABLE_PICOJSON +#define JWT_DISABLE_PICOJSON +#endif +{{/disable_default_traits}} + +#include "traits.h" + +namespace jwt { + /** + * \brief a class to store a generic [{{library_name}}]({{{library_url}}}) value as claim + * + * This type is the specialization of the \ref basic_claim class which + * uses the standard template types. + */ + using claim = basic_claim; + + /** + * Create a verifier using the default clock + * \return verifier instance + */ + inline verifier verify() { + return verify(default_clock{}); + } + + /** + * Create a builder using the default clock + * \return builder instance to create a new token + */ + inline builder create() { + return builder(default_clock{}); + } + +#ifndef JWT_DISABLE_BASE64 + /** + * Decode a token + * \param token Token to decode + * \return Decoded token + * \throw std::invalid_argument Token is not in correct format + * \throw std::runtime_error Base64 decoding failed or invalid json + */ + inline decoded_jwt decode(const std::string& token) { + return decoded_jwt(token); + } +#endif + + /** + * Decode a token + * \tparam Decode is callabled, taking a string_type and returns a string_type. + * It should ensure the padding of the input and then base64url decode and + * return the results. + * \param token Token to decode + * \param decode The token to parse + * \return Decoded token + * \throw std::invalid_argument Token is not in correct format + * \throw std::runtime_error Base64 decoding failed or invalid json + */ + template + decoded_jwt decode(const std::string& token, Decode decode) { + return decoded_jwt(token, decode); + } + + /** + * Parse a jwk + * \param token JWK Token to parse + * \return Parsed JWK + * \throw std::runtime_error Token is not in correct format + */ + inline jwk parse_jwk(const traits::{{traits_name}}::string_type& token) { + return jwk(token); + } + + /** + * Parse a jwks + * \param token JWKs Token to parse + * \return Parsed JWKs + * \throw std::runtime_error Token is not in correct format + */ + inline jwks parse_jwks(const traits::{{traits_name}}::string_type& token) { + return jwks(token); + } + + /** + * This type is the specialization of the \ref verify_ops::verify_context class which + * uses the standard template types. + */ + using verify_context = verify_ops::verify_context; +} // namespace jwt + +#endif // JWT_CPP_{{traits_name_upper}}_DEFAULTS_H From 3f8e5b36be98605fb793555f53aeb57b95c6ea06 Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Sun, 31 Dec 2023 21:37:25 -0500 Subject: [PATCH 19/68] fix order for args --- .github/actions/render/defaults/action.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/actions/render/defaults/action.yml b/.github/actions/render/defaults/action.yml index 990501a16..5312c0e29 100644 --- a/.github/actions/render/defaults/action.yml +++ b/.github/actions/render/defaults/action.yml @@ -25,7 +25,9 @@ runs: - shell: bash id: script run: | - cmake -P cmake/render-defaults.cmake -DTRAITS_NAME=${{ inputs.traits_name }} \ - -DLIBRARY_NAME=${{ inputs.library_name }} -DLIBRARY_URL="${{ inputs.library_url }}" \ - -DJWT_DISABLE_PICOJSON=${{ inputs.disable_default_traits }} + cmake -DTRAITS_NAME=${{ inputs.traits_name }} \ + -DLIBRARY_NAME=${{ inputs.library_name }} \ + -DLIBRARY_URL="${{ inputs.library_url }}" \ + -DJWT_DISABLE_PICOJSON=${{ inputs.disable_default_traits }} \ + -P cmake/render-defaults.cmake echo "result=$(echo $OUTPUT_FILE)" >> $GITHUB_OUTPUT From 49fd744133253eefc65806b882dfa24d40547fa3 Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Sun, 31 Dec 2023 21:53:13 -0500 Subject: [PATCH 20/68] remove action wrapper more quotes for inputs --- .github/actions/render/defaults/action.yml | 33 ---------------------- .github/workflows/lint.yml | 22 +++++++-------- cmake/render-defaults.cmake | 8 +++--- 3 files changed, 15 insertions(+), 48 deletions(-) delete mode 100644 .github/actions/render/defaults/action.yml diff --git a/.github/actions/render/defaults/action.yml b/.github/actions/render/defaults/action.yml deleted file mode 100644 index 5312c0e29..000000000 --- a/.github/actions/render/defaults/action.yml +++ /dev/null @@ -1,33 +0,0 @@ -name: "Render `defaults.h` Template" -description: "Generate the `defaults.h` header file for a JSON library" -inputs: - traits_name: - description: "Name of the traits structure to be used. Typically in the format `author_repository` or equivalent" - required: true - library_name: - description: "Name of the JSON library." - required: true - library_url: - description: "URL to the JSON library." - required: true - disable_default_traits: - description: "Set the macro to disable the default traits" - required: false - default: "true" -outputs: - file_path: - description: "Absolute path which the 'defaults.h' was written to" - value: ${{ steps.script.outputs.result }} -runs: - using: composite - steps: - - uses: lukka/get-cmake@latest - - shell: bash - id: script - run: | - cmake -DTRAITS_NAME=${{ inputs.traits_name }} \ - -DLIBRARY_NAME=${{ inputs.library_name }} \ - -DLIBRARY_URL="${{ inputs.library_url }}" \ - -DJWT_DISABLE_PICOJSON=${{ inputs.disable_default_traits }} \ - -P cmake/render-defaults.cmake - echo "result=$(echo $OUTPUT_FILE)" >> $GITHUB_OUTPUT diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index ced7ca450..dd9e701c2 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -78,17 +78,17 @@ jobs: - { name: "open_source_parsers_jsoncpp", library: "jsoncpp", url: "https://github.com/open-source-parsers/jsoncpp", disable_pico: true } name: render-defaults (${{ matrix.traits.name }}) steps: - - uses: actions/checkout@v4 - - run: | - sudo apt-get install clang-format-14 - - uses: ./.github/actions/render/defaults - id: render - with: - traits_name: ${{ matrix.traits.name }} - library_name: ${{ matrix.traits.library }} - library_url: ${{ matrix.traits.url }} - disable_default_traits: ${{ matrix.traits.disable_pico }} - - run: clang-format-14 -i ${{ steps.render.outputs.file_path }} + - uses: actions/checkout@v3 + - uses: lukka/get-cmake@latest + - id: render + run: | + cmake -DTRAITS_NAME="${{ matrix.traits.name }}" \ + -DLIBRARY_NAME="${{ matrix.traits.library }}" \ + -DLIBRARY_URL="${{ matrix.traits.url }}" \ + -DJWT_DISABLE_PICOJSON=${{ matrix.traits.disable_pico }} \ + -P cmake/render-defaults.cmake + echo "file_path=$(echo $OUTPUT_FILE)" >> $GITHUB_OUTPUT + - run: clang-format -i ${{ steps.render.outputs.file_path }} - run: git add ${{ steps.render.outputs.file_path }} - uses: ./.github/actions/process-linting-results with: diff --git a/cmake/render-defaults.cmake b/cmake/render-defaults.cmake index 39c85c783..a6deaac9a 100644 --- a/cmake/render-defaults.cmake +++ b/cmake/render-defaults.cmake @@ -1,15 +1,15 @@ cmake_minimum_required(VERSION 3.20) -if(NOT TRAITS_NAME) +if(NOT DEFINED TRAITS_NAME) message(FATAL_ERROR "Missing '-DTRAITS_NAME' for this script to work") endif() -if(NOT LIBRARY_NAME) +if(NOT DEFINED LIBRARY_NAME) message(FATAL_ERROR "Missing '-DLIBRARY_NAME' for this script to work") endif() -if(NOT LIBRARY_URL) +if(NOT DEFINED LIBRARY_URL) message(FATAL_ERROR "Missing '-DLIBRARY_URL' for this script to work") endif() -if(NOT JWT_DISABLE_PICOJSON) +if(NOT DEFINED JWT_DISABLE_PICOJSON) message(FATAL_ERROR "Missing '-DJWT_DISABLE_PICOJSON' for this script to work") endif() message(STATUS "Rendering ${TRAITS_NAME}!") From 836814739fbd64f5b6b9f594fc41c6086763bf59 Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Sun, 31 Dec 2023 21:54:52 -0500 Subject: [PATCH 21/68] revert bad render of boost_json --- include/jwt-cpp/traits/boost-json/defaults.h | 36 ++++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/include/jwt-cpp/traits/boost-json/defaults.h b/include/jwt-cpp/traits/boost-json/defaults.h index 2756afe17..21aea7f52 100644 --- a/include/jwt-cpp/traits/boost-json/defaults.h +++ b/include/jwt-cpp/traits/boost-json/defaults.h @@ -1,5 +1,5 @@ -#ifndef JWT_CPP__DEFAULTS_H -#define JWT_CPP__DEFAULTS_H +#ifndef JWT_CPP_BOOST_JSON_DEFAULTS_H +#define JWT_CPP_BOOST_JSON_DEFAULTS_H #ifndef JWT_DISABLE_PICOJSON #define JWT_DISABLE_PICOJSON @@ -9,27 +9,27 @@ namespace jwt { /** - * \brief a class to store a generic [](@{library_url@}) value as claim + * \brief a class to store a generic [Boost.JSON](https://github.com/boostorg/json) value as claim * * This type is the specialization of the \ref basic_claim class which * uses the standard template types. */ - using claim = basic_claim; + using claim = basic_claim; /** * Create a verifier using the default clock * \return verifier instance */ - inline verifier verify() { - return verify(default_clock{}); + inline verifier verify() { + return verify(default_clock{}); } /** * Create a builder using the default clock * \return builder instance to create a new token */ - inline builder create() { - return builder(default_clock{}); + inline builder create() { + return builder(default_clock{}); } #ifndef JWT_DISABLE_BASE64 @@ -40,8 +40,8 @@ namespace jwt { * \throw std::invalid_argument Token is not in correct format * \throw std::runtime_error Base64 decoding failed or invalid json */ - inline decoded_jwt decode(const std::string& token) { - return decoded_jwt(token); + inline decoded_jwt decode(const std::string& token) { + return decoded_jwt(token); } #endif @@ -57,8 +57,8 @@ namespace jwt { * \throw std::runtime_error Base64 decoding failed or invalid json */ template - decoded_jwt decode(const std::string& token, Decode decode) { - return decoded_jwt(token, decode); + decoded_jwt decode(const std::string& token, Decode decode) { + return decoded_jwt(token, decode); } /** @@ -67,8 +67,8 @@ namespace jwt { * \return Parsed JWK * \throw std::runtime_error Token is not in correct format */ - inline jwk parse_jwk(const traits::::string_type& token) { - return jwk(token); + inline jwk parse_jwk(const traits::boost_json::string_type& token) { + return jwk(token); } /** @@ -77,15 +77,15 @@ namespace jwt { * \return Parsed JWKs * \throw std::runtime_error Token is not in correct format */ - inline jwks parse_jwks(const traits::::string_type& token) { - return jwks(token); + inline jwks parse_jwks(const traits::boost_json::string_type& token) { + return jwks(token); } /** * This type is the specialization of the \ref verify_ops::verify_context class which * uses the standard template types. */ - using verify_context = verify_ops::verify_context; + using verify_context = verify_ops::verify_context; } // namespace jwt -#endif // JWT_CPP__DEFAULTS_H +#endif // JWT_CPP_BOOST_JSON_DEFAULTS_H From bc0de82111d4ae56180c1454f09159115330519c Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Sun, 31 Dec 2023 22:00:13 -0500 Subject: [PATCH 22/68] fix casing --- include/jwt-cpp/traits/defaults.h.in | 36 ++++++++++++++-------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/include/jwt-cpp/traits/defaults.h.in b/include/jwt-cpp/traits/defaults.h.in index 6d36f20b7..92cbf852f 100644 --- a/include/jwt-cpp/traits/defaults.h.in +++ b/include/jwt-cpp/traits/defaults.h.in @@ -1,5 +1,5 @@ -#ifndef JWT_CPP_@traits_name_upper@_DEFAULTS_H -#define JWT_CPP_@traits_name_upper@_DEFAULTS_H +#ifndef JWT_CPP_@TRAITS_NAME_UPPER@_DEFAULTS_H +#define JWT_CPP_@TRAITS_NAME_UPPER@_DEFAULTS_H #ifndef JWT_DISABLE_PICOJSON #cmakedefine JWT_DISABLE_PICOJSON @@ -9,27 +9,27 @@ namespace jwt { /** - * \brief a class to store a generic [@library_name@](@{library_url@}) value as claim + * \brief a class to store a generic [@LIBRARY_NAME@](@LIBRARY_URL@) value as claim * * This type is the specialization of the \ref basic_claim class which * uses the standard template types. */ - using claim = basic_claim; + using claim = basic_claim; /** * Create a verifier using the default clock * \return verifier instance */ - inline verifier verify() { - return verify(default_clock{}); + inline verifier verify() { + return verify(default_clock{}); } /** * Create a builder using the default clock * \return builder instance to create a new token */ - inline builder create() { - return builder(default_clock{}); + inline builder create() { + return builder(default_clock{}); } #ifndef JWT_DISABLE_BASE64 @@ -40,8 +40,8 @@ namespace jwt { * \throw std::invalid_argument Token is not in correct format * \throw std::runtime_error Base64 decoding failed or invalid json */ - inline decoded_jwt decode(const std::string& token) { - return decoded_jwt(token); + inline decoded_jwt decode(const std::string& token) { + return decoded_jwt(token); } #endif @@ -57,8 +57,8 @@ namespace jwt { * \throw std::runtime_error Base64 decoding failed or invalid json */ template - decoded_jwt decode(const std::string& token, Decode decode) { - return decoded_jwt(token, decode); + decoded_jwt decode(const std::string& token, Decode decode) { + return decoded_jwt(token, decode); } /** @@ -67,8 +67,8 @@ namespace jwt { * \return Parsed JWK * \throw std::runtime_error Token is not in correct format */ - inline jwk parse_jwk(const traits::@traits_name@::string_type& token) { - return jwk(token); + inline jwk parse_jwk(const traits::@TRAITS_NAME@::string_type& token) { + return jwk(token); } /** @@ -77,15 +77,15 @@ namespace jwt { * \return Parsed JWKs * \throw std::runtime_error Token is not in correct format */ - inline jwks parse_jwks(const traits::@traits_name@::string_type& token) { - return jwks(token); + inline jwks parse_jwks(const traits::@TRAITS_NAME@::string_type& token) { + return jwks(token); } /** * This type is the specialization of the \ref verify_ops::verify_context class which * uses the standard template types. */ - using verify_context = verify_ops::verify_context; + using verify_context = verify_ops::verify_context; } // namespace jwt -#endif // JWT_CPP_@traits_name_upper@_DEFAULTS_H +#endif // JWT_CPP_@TRAITS_NAME_UPPER@_DEFAULTS_H From 622a254e27d8f723fa9064db6cd4e7f919df54f9 Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Sun, 31 Dec 2023 22:19:55 -0500 Subject: [PATCH 23/68] format changes --- include/jwt-cpp/traits/kazuho-picojson/defaults.h | 4 ++++ .../jwt-cpp/traits/open-source-parsers-jsoncpp/defaults.h | 6 ++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/include/jwt-cpp/traits/kazuho-picojson/defaults.h b/include/jwt-cpp/traits/kazuho-picojson/defaults.h index eae9789ae..61ac632c3 100644 --- a/include/jwt-cpp/traits/kazuho-picojson/defaults.h +++ b/include/jwt-cpp/traits/kazuho-picojson/defaults.h @@ -1,6 +1,10 @@ #ifndef JWT_CPP_KAZUHO_PICOJSON_DEFAULTS_H #define JWT_CPP_KAZUHO_PICOJSON_DEFAULTS_H +#ifndef JWT_DISABLE_PICOJSON +/* #undef JWT_DISABLE_PICOJSON */ +#endif + #include "traits.h" namespace jwt { diff --git a/include/jwt-cpp/traits/open-source-parsers-jsoncpp/defaults.h b/include/jwt-cpp/traits/open-source-parsers-jsoncpp/defaults.h index 76663e601..7c7155ba3 100644 --- a/include/jwt-cpp/traits/open-source-parsers-jsoncpp/defaults.h +++ b/include/jwt-cpp/traits/open-source-parsers-jsoncpp/defaults.h @@ -67,8 +67,7 @@ namespace jwt { * \return Parsed JWK * \throw std::runtime_error Token is not in correct format */ - inline jwk - parse_jwk(const traits::open_source_parsers_jsoncpp::string_type& token) { + inline jwk parse_jwk(const traits::open_source_parsers_jsoncpp::string_type& token) { return jwk(token); } @@ -78,8 +77,7 @@ namespace jwt { * \return Parsed JWKs * \throw std::runtime_error Token is not in correct format */ - inline jwks - parse_jwks(const traits::open_source_parsers_jsoncpp::string_type& token) { + inline jwks parse_jwks(const traits::open_source_parsers_jsoncpp::string_type& token) { return jwks(token); } From c6d55692080302bb623b1920a39f8de68778102b Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Sun, 31 Dec 2023 22:29:15 -0500 Subject: [PATCH 24/68] test to see if output is working --- .github/workflows/lint.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index dd9e701c2..5b7052234 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -87,6 +87,7 @@ jobs: -DLIBRARY_URL="${{ matrix.traits.url }}" \ -DJWT_DISABLE_PICOJSON=${{ matrix.traits.disable_pico }} \ -P cmake/render-defaults.cmake + echo $OUTPUT_FILE echo "file_path=$(echo $OUTPUT_FILE)" >> $GITHUB_OUTPUT - run: clang-format -i ${{ steps.render.outputs.file_path }} - run: git add ${{ steps.render.outputs.file_path }} From 03d4a9d04d7bbbc62d82586b3cdd37fddd0a0cb5 Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Sun, 31 Dec 2023 22:50:29 -0500 Subject: [PATCH 25/68] last try --- cmake/render-defaults.cmake | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cmake/render-defaults.cmake b/cmake/render-defaults.cmake index a6deaac9a..b9731e7b7 100644 --- a/cmake/render-defaults.cmake +++ b/cmake/render-defaults.cmake @@ -12,7 +12,6 @@ endif() if(NOT DEFINED JWT_DISABLE_PICOJSON) message(FATAL_ERROR "Missing '-DJWT_DISABLE_PICOJSON' for this script to work") endif() -message(STATUS "Rendering ${TRAITS_NAME}!") string(TOUPPER "${TRAITS_NAME}" TRAITS_NAME_UPPER) string(REPLACE "_" "-" TRAITS_DIR_FOLDER "${TRAITS_NAME}") @@ -22,4 +21,4 @@ file(MAKE_DIRECTORY "${OUTPUT_DIR}") configure_file("${SCRIPT_DIR}/../include/jwt-cpp/traits/defaults.h.in" "${OUTPUT_DIR}/defaults.h" @ONLY) -set(ENV{OUTPUT_FILE} "${OUTPUT_DIR}/defaults.h") +message(STATUS "${OUTPUT_DIR}/defaults.h") From f5f5d4d2863fe406d4e648b8f16e2e466a3e933e Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Sun, 31 Dec 2023 22:54:33 -0500 Subject: [PATCH 26/68] git revert moving mustache to cmake --- .github/actions/render/defaults/action.yml | 67 ++++++++++++++ .github/workflows/lint.yml | 17 ++-- cmake/render-defaults.cmake | 24 ----- include/jwt-cpp/traits/defaults.h.in | 91 ------------------- .../jwt-cpp/traits/kazuho-picojson/defaults.h | 4 - .../open-source-parsers-jsoncpp/defaults.h | 6 +- 6 files changed, 78 insertions(+), 131 deletions(-) create mode 100644 .github/actions/render/defaults/action.yml delete mode 100644 cmake/render-defaults.cmake delete mode 100644 include/jwt-cpp/traits/defaults.h.in diff --git a/.github/actions/render/defaults/action.yml b/.github/actions/render/defaults/action.yml new file mode 100644 index 000000000..4942e00d4 --- /dev/null +++ b/.github/actions/render/defaults/action.yml @@ -0,0 +1,67 @@ +name: "Render `defaults.h` Template" +description: "Generate the `defaults.h` header file for a JSON library" +inputs: + traits_name: + description: "Name of the traits structure to be used. Typically in the format `author_repository` or equivilant" + required: true + library_name: + description: "Name of the JSON library." + required: true + library_url: + description: "URL to the JSON library." + required: true + disable_default_traits: + description: "Set the macro to disable the default traits" + required: false + default: "true" +outputs: + file_path: + description: "Relative path which the 'defaults.h' was written to" + value: ${{ steps.script.outputs.result }} +runs: + using: composite + steps: + - uses: actions/setup-node@v3 + with: + node-version: 14 + - run: npm install mustache + shell: bash + - uses: actions/github-script@v6 + id: script + env: + TRAITS_NAME: ${{ inputs.traits_name }} + LIBRARY_NAME: ${{ inputs.library_name }} + LIBRARY_URL: ${{ inputs.library_url }} + DISABLE_DEFAULT_TRAITS: ${{ inputs.disable_default_traits }} + with: + result-encoding: string + script: | + const mustache = require('mustache') + const path = require('path') + const fs = require('fs') + + const { TRAITS_NAME, LIBRARY_NAME, LIBRARY_URL, DISABLE_DEFAULT_TRAITS } = process.env + console.log(`Rendering ${TRAITS_NAME}!`) + + const disableDefault = DISABLE_DEFAULT_TRAITS === 'true' + + const template = fs.readFileSync(path.join('include', 'jwt-cpp', 'traits', 'defaults.h.mustache'), 'utf8') + const content = mustache.render(template, { + traits_name: TRAITS_NAME, + traits_name_upper: TRAITS_NAME.toUpperCase(), + library_name: LIBRARY_NAME, + library_url: LIBRARY_URL, + disable_default_traits: disableDefault, + }) + // https://dmitripavlutin.com/replace-all-string-occurrences-javascript/ + function replaceAll(string, search, replace) { + return string.split(search).join(replace); + } + + const outputDir = path.join('include', 'jwt-cpp', 'traits', replaceAll(TRAITS_NAME, '_', '-')) + fs.mkdirSync(outputDir, { recursive: true }) + + const filePath = path.join(outputDir, 'defaults.h') + fs.writeFileSync(filePath, content) + + return filePath diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 5b7052234..94bcb2b9f 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -79,16 +79,13 @@ jobs: name: render-defaults (${{ matrix.traits.name }}) steps: - uses: actions/checkout@v3 - - uses: lukka/get-cmake@latest - - id: render - run: | - cmake -DTRAITS_NAME="${{ matrix.traits.name }}" \ - -DLIBRARY_NAME="${{ matrix.traits.library }}" \ - -DLIBRARY_URL="${{ matrix.traits.url }}" \ - -DJWT_DISABLE_PICOJSON=${{ matrix.traits.disable_pico }} \ - -P cmake/render-defaults.cmake - echo $OUTPUT_FILE - echo "file_path=$(echo $OUTPUT_FILE)" >> $GITHUB_OUTPUT + - uses: ./.github/actions/render/defaults + id: render + with: + traits_name: ${{ matrix.traits.name }} + library_name: ${{ matrix.traits.library }} + library_url: ${{ matrix.traits.url }} + disable_default_traits: ${{ matrix.traits.disable_pico }} - run: clang-format -i ${{ steps.render.outputs.file_path }} - run: git add ${{ steps.render.outputs.file_path }} - uses: ./.github/actions/process-linting-results diff --git a/cmake/render-defaults.cmake b/cmake/render-defaults.cmake deleted file mode 100644 index b9731e7b7..000000000 --- a/cmake/render-defaults.cmake +++ /dev/null @@ -1,24 +0,0 @@ -cmake_minimum_required(VERSION 3.20) - -if(NOT DEFINED TRAITS_NAME) - message(FATAL_ERROR "Missing '-DTRAITS_NAME' for this script to work") -endif() -if(NOT DEFINED LIBRARY_NAME) - message(FATAL_ERROR "Missing '-DLIBRARY_NAME' for this script to work") -endif() -if(NOT DEFINED LIBRARY_URL) - message(FATAL_ERROR "Missing '-DLIBRARY_URL' for this script to work") -endif() -if(NOT DEFINED JWT_DISABLE_PICOJSON) - message(FATAL_ERROR "Missing '-DJWT_DISABLE_PICOJSON' for this script to work") -endif() -string(TOUPPER "${TRAITS_NAME}" TRAITS_NAME_UPPER) -string(REPLACE "_" "-" TRAITS_DIR_FOLDER "${TRAITS_NAME}") - -cmake_path(GET CMAKE_SCRIPT_MODE_FILE PARENT_PATH SCRIPT_DIR) -set(OUTPUT_DIR "${SCRIPT_DIR}/../include/jwt-cpp/traits/${TRAITS_DIR_FOLDER}") -file(MAKE_DIRECTORY "${OUTPUT_DIR}") - -configure_file("${SCRIPT_DIR}/../include/jwt-cpp/traits/defaults.h.in" "${OUTPUT_DIR}/defaults.h" @ONLY) - -message(STATUS "${OUTPUT_DIR}/defaults.h") diff --git a/include/jwt-cpp/traits/defaults.h.in b/include/jwt-cpp/traits/defaults.h.in deleted file mode 100644 index 92cbf852f..000000000 --- a/include/jwt-cpp/traits/defaults.h.in +++ /dev/null @@ -1,91 +0,0 @@ -#ifndef JWT_CPP_@TRAITS_NAME_UPPER@_DEFAULTS_H -#define JWT_CPP_@TRAITS_NAME_UPPER@_DEFAULTS_H - -#ifndef JWT_DISABLE_PICOJSON -#cmakedefine JWT_DISABLE_PICOJSON -#endif - -#include "traits.h" - -namespace jwt { - /** - * \brief a class to store a generic [@LIBRARY_NAME@](@LIBRARY_URL@) value as claim - * - * This type is the specialization of the \ref basic_claim class which - * uses the standard template types. - */ - using claim = basic_claim; - - /** - * Create a verifier using the default clock - * \return verifier instance - */ - inline verifier verify() { - return verify(default_clock{}); - } - - /** - * Create a builder using the default clock - * \return builder instance to create a new token - */ - inline builder create() { - return builder(default_clock{}); - } - -#ifndef JWT_DISABLE_BASE64 - /** - * Decode a token - * \param token Token to decode - * \return Decoded token - * \throw std::invalid_argument Token is not in correct format - * \throw std::runtime_error Base64 decoding failed or invalid json - */ - inline decoded_jwt decode(const std::string& token) { - return decoded_jwt(token); - } -#endif - - /** - * Decode a token - * \tparam Decode is callable, taking a string_type and returns a string_type. - * It should ensure the padding of the input and then base64url decode and - * return the results. - * \param token Token to decode - * \param decode The token to parse - * \return Decoded token - * \throw std::invalid_argument Token is not in correct format - * \throw std::runtime_error Base64 decoding failed or invalid json - */ - template - decoded_jwt decode(const std::string& token, Decode decode) { - return decoded_jwt(token, decode); - } - - /** - * Parse a jwk - * \param token JWK Token to parse - * \return Parsed JWK - * \throw std::runtime_error Token is not in correct format - */ - inline jwk parse_jwk(const traits::@TRAITS_NAME@::string_type& token) { - return jwk(token); - } - - /** - * Parse a jwks - * \param token JWKs Token to parse - * \return Parsed JWKs - * \throw std::runtime_error Token is not in correct format - */ - inline jwks parse_jwks(const traits::@TRAITS_NAME@::string_type& token) { - return jwks(token); - } - - /** - * This type is the specialization of the \ref verify_ops::verify_context class which - * uses the standard template types. - */ - using verify_context = verify_ops::verify_context; -} // namespace jwt - -#endif // JWT_CPP_@TRAITS_NAME_UPPER@_DEFAULTS_H diff --git a/include/jwt-cpp/traits/kazuho-picojson/defaults.h b/include/jwt-cpp/traits/kazuho-picojson/defaults.h index 61ac632c3..eae9789ae 100644 --- a/include/jwt-cpp/traits/kazuho-picojson/defaults.h +++ b/include/jwt-cpp/traits/kazuho-picojson/defaults.h @@ -1,10 +1,6 @@ #ifndef JWT_CPP_KAZUHO_PICOJSON_DEFAULTS_H #define JWT_CPP_KAZUHO_PICOJSON_DEFAULTS_H -#ifndef JWT_DISABLE_PICOJSON -/* #undef JWT_DISABLE_PICOJSON */ -#endif - #include "traits.h" namespace jwt { diff --git a/include/jwt-cpp/traits/open-source-parsers-jsoncpp/defaults.h b/include/jwt-cpp/traits/open-source-parsers-jsoncpp/defaults.h index 7c7155ba3..76663e601 100644 --- a/include/jwt-cpp/traits/open-source-parsers-jsoncpp/defaults.h +++ b/include/jwt-cpp/traits/open-source-parsers-jsoncpp/defaults.h @@ -67,7 +67,8 @@ namespace jwt { * \return Parsed JWK * \throw std::runtime_error Token is not in correct format */ - inline jwk parse_jwk(const traits::open_source_parsers_jsoncpp::string_type& token) { + inline jwk + parse_jwk(const traits::open_source_parsers_jsoncpp::string_type& token) { return jwk(token); } @@ -77,7 +78,8 @@ namespace jwt { * \return Parsed JWKs * \throw std::runtime_error Token is not in correct format */ - inline jwks parse_jwks(const traits::open_source_parsers_jsoncpp::string_type& token) { + inline jwks + parse_jwks(const traits::open_source_parsers_jsoncpp::string_type& token) { return jwks(token); } From 9f95f737ca6bbba07c6e0529d1b33157e1bbce77 Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Tue, 2 Jan 2024 12:02:02 -0500 Subject: [PATCH 27/68] cmake not enough for presets --- .github/workflows/cmake.yml | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index fc68a85b2..e02a386be 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -95,6 +95,29 @@ jobs: cmake . -DTEST:STRING="defaults-enabled" cmake --build . + preset-support-but-not-enough: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v3 + - uses: ./.github/actions/install/cmake + with: + version: "3.24.4" + url: "https://cmake.org/files/v3.24/cmake-3.24.4.tar.gz" + - uses: ./.github/actions/install/gtest + + - name: setup + run: | + mkdir build + cd build + cmake .. -DJWT_BUILD_EXAMPLES=ON -DJWT_BUILD_TESTS=ON + sudo make install + + - name: test + run: | + cd tests/cmake + cmake . -DTEST:STRING="defaults-enabled" + cmake --build . + custom-install-linux: runs-on: ubuntu-latest steps: From ba8e485da617e001e48dd7a94b11587ce734878a Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Tue, 2 Jan 2024 12:10:17 -0500 Subject: [PATCH 28/68] drop ci prefix --- .github/workflows/cross-platform.yml | 8 ++++---- example/CMakePresets.json | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/cross-platform.yml b/.github/workflows/cross-platform.yml index 859e8aa49..f8452e1e5 100644 --- a/.github/workflows/cross-platform.yml +++ b/.github/workflows/cross-platform.yml @@ -22,15 +22,15 @@ jobs: - uses: actions/checkout@v3 - name: configure - run: cmake --preset ci-examples + run: cmake --preset examples - name: build - run: cmake --build --preset ci-examples + run: cmake --build --preset examples - name: test run: | - cmake --build --preset ci-examples --target rsa-create-run - cmake --build --preset ci-examples --target rsa-verify-run + cmake --build --preset examples --target rsa-create-run + cmake --build --preset examples --target rsa-verify-run - if: github.event_name == 'push' && always() uses: ./.github/actions/badge diff --git a/example/CMakePresets.json b/example/CMakePresets.json index dcffcf209..b4838835a 100644 --- a/example/CMakePresets.json +++ b/example/CMakePresets.json @@ -10,7 +10,7 @@ ], "configurePresets": [ { - "name": "ci-examples", + "name": "examples", "displayName": "Build Examples", "inherits": "release", "cacheVariables": { @@ -20,8 +20,8 @@ ], "buildPresets": [ { - "name": "ci-examples", - "configurePreset": "ci-examples", + "name": "examples", + "configurePreset": "examples", "configuration": "Release", "targets": [ "rsa-create", From 9d5943afcefe5940fc6ef1d0352a196910f290e8 Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Tue, 2 Jan 2024 12:10:50 -0500 Subject: [PATCH 29/68] new test for `library_ROOT` search path --- .github/workflows/cmake.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index e02a386be..1fb01fac8 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -137,6 +137,25 @@ jobs: cmake . -DCMAKE_PREFIX_PATH="/opt/jwt-cpp" -DTEST:STRING="defaults-enabled" -DCMAKE_FIND_DEBUG_MODE=1 cmake --build . + root-hint-install-linux: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: lukka/get-cmake@latest + + - name: setup + run: | + mkdir build + cd build + cmake .. -DCMAKE_INSTALL_PREFIX:STRING="/opt/jwt-cpp" -DJWT_BUILD_EXAMPLES=OFF + make install + + - name: test + run: | + cd tests/cmake + cmake . -Djwt-cpp_ROOT="/opt/jwt-cpp" -DTEST:STRING="defaults-enabled" -DCMAKE_FIND_DEBUG_MODE=1 + cmake --build . + custom-install-win: runs-on: windows-latest steps: From ab5397b647020a030afb536cded97de23631283e Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Tue, 2 Jan 2024 12:11:04 -0500 Subject: [PATCH 30/68] install with presets --- .github/workflows/cmake.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 1fb01fac8..4fb29f26b 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -52,6 +52,23 @@ jobs: cmake . -DTEST:STRING="defaults-enabled" cmake --build . + presets-linux-with-examples: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: lukka/get-cmake@latest + + - name: setup + run: | + cmake --preset release + sudo cmake --install . --preset release + + - name: test + working-directory: tests/cmake + run: | + cmake . -DTEST:STRING="defaults-enabled" + cmake --build . + default-win: runs-on: windows-latest steps: From 61c642c5dc4930316d128dc91086e5f0eb446705 Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Tue, 2 Jan 2024 12:15:46 -0500 Subject: [PATCH 31/68] cmake --install does not take a preset --- .github/workflows/cmake.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 4fb29f26b..86075c665 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -61,7 +61,7 @@ jobs: - name: setup run: | cmake --preset release - sudo cmake --install . --preset release + sudo cmake --install . - name: test working-directory: tests/cmake From f3f7c5910c82680c324865575e548ae8e2ad9d9f Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Tue, 2 Jan 2024 12:32:17 -0500 Subject: [PATCH 32/68] install with preset is not yet supported https://gitlab.kitware.com/cmake/cmake/-/issues/23208 --- .github/workflows/cmake.yml | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 86075c665..ba193222d 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -52,17 +52,6 @@ jobs: cmake . -DTEST:STRING="defaults-enabled" cmake --build . - presets-linux-with-examples: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: lukka/get-cmake@latest - - - name: setup - run: | - cmake --preset release - sudo cmake --install . - - name: test working-directory: tests/cmake run: | From 7464334e734c9661cfd7ea8886dfc0ff2787f48a Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Tue, 2 Jan 2024 12:51:19 -0500 Subject: [PATCH 33/68] add missing build step --- .github/workflows/targets.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/targets.yml b/.github/workflows/targets.yml index d331c4a2e..5b070df08 100644 --- a/.github/workflows/targets.yml +++ b/.github/workflows/targets.yml @@ -37,6 +37,7 @@ jobs: mkdir build cd build cmake .. + cmake --build . cmake --install . - name: test working-directory: tests/cmake @@ -45,6 +46,7 @@ jobs: cmake --build . gcc-12: + name: GCC 18 runs-on: ubuntu-latest container: image: ubuntu:jammy-20231004 # 22.04 @@ -66,6 +68,7 @@ jobs: mkdir build cd build cmake .. + cmake --build . cmake --install . - name: test From 3b15555df1ae276760cc0c0c5599fec48e674459 Mon Sep 17 00:00:00 2001 From: Chris Mc Date: Tue, 9 Jan 2024 15:49:04 -0500 Subject: [PATCH 34/68] more global fuzzing flags to toolchain file --- cmake/ci-fuzzing-toolchain.cmake | 7 +++++++ cmake/linux-clang-toolchain.cmake | 4 ++++ tests/CMakePresets.json | 3 +-- tests/fuzz/CMakeLists.txt | 7 ++----- 4 files changed, 14 insertions(+), 7 deletions(-) create mode 100644 cmake/ci-fuzzing-toolchain.cmake create mode 100644 cmake/linux-clang-toolchain.cmake diff --git a/cmake/ci-fuzzing-toolchain.cmake b/cmake/ci-fuzzing-toolchain.cmake new file mode 100644 index 000000000..7769b5bcb --- /dev/null +++ b/cmake/ci-fuzzing-toolchain.cmake @@ -0,0 +1,7 @@ +include("linux-clang-toolchain.cmake") + +set(CMAKE_BUILD_TYPE "Debug") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O1 -fsanitize=fuzzer,address,signed-integer-overflow,undefined -fno-omit-frame-pointer") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O1 -fsanitize=fuzzer,address,signed-integer-overflow,undefined -fno-omit-frame-pointer") +set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -g -O1 -fsanitize=fuzzer,address,signed-integer-overflow,undefined -fno-omit-frame-pointer") +set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -g -O1 -fsanitize=fuzzer,address,signed-integer-overflow,undefined -fno-omit-frame-pointer") diff --git a/cmake/linux-clang-toolchain.cmake b/cmake/linux-clang-toolchain.cmake new file mode 100644 index 000000000..3d5de7020 --- /dev/null +++ b/cmake/linux-clang-toolchain.cmake @@ -0,0 +1,4 @@ +set(CMAKE_SYSTEM_NAME Linux) + +set(CMAKE_C_COMPILER clang) +set(CMAKE_CXX_COMPILER clang++) diff --git a/tests/CMakePresets.json b/tests/CMakePresets.json index f6cdda3fa..960b1eb39 100644 --- a/tests/CMakePresets.json +++ b/tests/CMakePresets.json @@ -29,14 +29,13 @@ "inherits": "debug", "displayName": "Fuzz Testing", "description": "This is only available on Linux with Clang", + "toolchain": "../cmake/ci-fuzzing-toolchain.cmake", "condition": { "type": "equals", "lhs": "${hostSystemName}", "rhs": "Linux" }, "cacheVariables": { - "CMAKE_C_COMPILER": "clang", - "CMAKE_CXX_COMPILER": "clang++", "JWT_ENABLE_FUZZING": "ON" } }, diff --git a/tests/fuzz/CMakeLists.txt b/tests/fuzz/CMakeLists.txt index 72fc85fd2..fa1b99e0a 100644 --- a/tests/fuzz/CMakeLists.txt +++ b/tests/fuzz/CMakeLists.txt @@ -4,19 +4,16 @@ endif() function(ADD_FUZZING_EXECUTABLE TARGET) add_executable(jwt-cpp-fuzz-${TARGET} "${TARGET}.cpp") - target_compile_options( - jwt-cpp-fuzz-${TARGET} PRIVATE -g -O1 -fsanitize=fuzzer,address,signed-integer-overflow,undefined - -fno-omit-frame-pointer) - target_link_options(jwt-cpp-fuzz-${TARGET} PRIVATE -fsanitize=fuzzer,address,signed-integer-overflow,undefined - -fno-omit-frame-pointer) target_link_libraries(jwt-cpp-fuzz-${TARGET} PRIVATE jwt-cpp::jwt-cpp) endfunction() add_fuzzing_executable(BaseEncodeFuzz) add_custom_target(jwt-cpp-fuzz-BaseEncodeFuzz-run COMMAND jwt-cpp-fuzz-BaseEncodeFuzz -runs=100000) + add_fuzzing_executable(BaseDecodeFuzz) add_custom_target(jwt-cpp-fuzz-BaseDecodeFuzz-run COMMAND jwt-cpp-fuzz-BaseDecodeFuzz -runs=100000 decode-corpus WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}) + add_fuzzing_executable(TokenDecodeFuzz) add_custom_target(jwt-cpp-fuzz-TokenDecodeFuzz-run COMMAND jwt-cpp-fuzz-TokenDecodeFuzz -runs=100000 token-corpus WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}) From 36e39046b83aad1b089217028ffcef1e619766dc Mon Sep 17 00:00:00 2001 From: Chris Mc Date: Wed, 10 Jan 2024 12:17:52 -0500 Subject: [PATCH 35/68] fixup toolchain in presets --- tests/CMakePresets.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/CMakePresets.json b/tests/CMakePresets.json index 960b1eb39..e24bae7e9 100644 --- a/tests/CMakePresets.json +++ b/tests/CMakePresets.json @@ -29,7 +29,7 @@ "inherits": "debug", "displayName": "Fuzz Testing", "description": "This is only available on Linux with Clang", - "toolchain": "../cmake/ci-fuzzing-toolchain.cmake", + "toolchainFile": "${sourceParentDir}/cmake/ci-fuzzing-toolchain.cmake", "condition": { "type": "equals", "lhs": "${hostSystemName}", @@ -112,4 +112,4 @@ ] } ] -} \ No newline at end of file +} From 735ec33bb996ac513bbbbee4bd66b9df42d8ffce Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Wed, 10 Jan 2024 15:55:01 -0500 Subject: [PATCH 36/68] fix pathing and limit configs to tested platforms --- cmake/ci-fuzzing-toolchain.cmake | 2 +- tests/CMakePresets.json | 14 +++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/cmake/ci-fuzzing-toolchain.cmake b/cmake/ci-fuzzing-toolchain.cmake index 7769b5bcb..afa7ce01d 100644 --- a/cmake/ci-fuzzing-toolchain.cmake +++ b/cmake/ci-fuzzing-toolchain.cmake @@ -1,4 +1,4 @@ -include("linux-clang-toolchain.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/linux-clang-toolchain.cmake") set(CMAKE_BUILD_TYPE "Debug") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O1 -fsanitize=fuzzer,address,signed-integer-overflow,undefined -fno-omit-frame-pointer") diff --git a/tests/CMakePresets.json b/tests/CMakePresets.json index e24bae7e9..bd3a8f9b4 100644 --- a/tests/CMakePresets.json +++ b/tests/CMakePresets.json @@ -29,12 +29,12 @@ "inherits": "debug", "displayName": "Fuzz Testing", "description": "This is only available on Linux with Clang", - "toolchainFile": "${sourceParentDir}/cmake/ci-fuzzing-toolchain.cmake", "condition": { "type": "equals", "lhs": "${hostSystemName}", "rhs": "Linux" }, + "toolchainFile": "${sourceDir}/cmake/ci-fuzzing-toolchain.cmake", "cacheVariables": { "JWT_ENABLE_FUZZING": "ON" } @@ -43,6 +43,12 @@ "name": "ci-asan", "inherits": "debug", "displayName": "Address/Leak Sanitizer", + "description": "This is only available on Linux", + "condition": { + "type": "equals", + "lhs": "${hostSystemName}", + "rhs": "Linux" + }, "environment": { "ASAN_OPTIONS": "check_initialization_order=true:detect_stack_use_after_return=true:fast_unwind_on_malloc=0" }, @@ -59,6 +65,12 @@ "name": "ci-ubsan", "inherits": "debug", "displayName": "Undefined Behavior Sanitizer", + "description": "This is only available on Linux", + "condition": { + "type": "equals", + "lhs": "${hostSystemName}", + "rhs": "Linux" + }, "environment": { "UBSAN_OPTIONS": "print_stacktrace=1" }, From 011f5380b84c88c61930130ede0890b1ce92e04d Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Wed, 10 Jan 2024 16:08:27 -0500 Subject: [PATCH 37/68] clean up + use presets for clang-tidy --- .github/workflows/lint.yml | 8 ++------ CMakePresets.json | 10 ---------- cmake/CMakePresets.json | 12 ++++++++++++ 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 94bcb2b9f..34c0eec4f 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -54,13 +54,9 @@ jobs: - uses: lukka/get-cmake@latest - uses: actions/checkout@v4 - name: configure - run: | - mkdir build - cd build - cmake .. -DCMAKE_CXX_CLANG_TIDY="clang-tidy;-fix" + run: cmake --preset dev -DCMAKE_CXX_CLANG_TIDY="clang-tidy;-fix" - name: run - working-directory: build - run: make + run: cmake --build --preset dev --target all - uses: ./.github/actions/process-linting-results with: linter_name: clang-tidy diff --git a/CMakePresets.json b/CMakePresets.json index 1c05112cb..03dc92250 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -24,16 +24,6 @@ } ], "buildPresets": [ - { - "name": "debug", - "configurePreset": "debug", - "configuration": "Debug" - }, - { - "name": "release", - "configurePreset": "release", - "configuration": "Release" - }, { "name": "dev", "configurePreset": "dev", diff --git a/cmake/CMakePresets.json b/cmake/CMakePresets.json index ba3a00aca..8c4fb85af 100644 --- a/cmake/CMakePresets.json +++ b/cmake/CMakePresets.json @@ -32,5 +32,17 @@ "CMAKE_BUILD_TYPE": "Release" } } + ], + "buildPresets": [ + { + "name": "debug", + "configurePreset": "debug", + "configuration": "Debug" + }, + { + "name": "release", + "configurePreset": "release", + "configuration": "Release" + } ] } \ No newline at end of file From 06892aa4f2b97c4f0b425a8a2a62e0e02c063959 Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Wed, 10 Jan 2024 16:22:19 -0500 Subject: [PATCH 38/68] dry up sanitizer flags --- cmake/ci-fuzzing-toolchain.cmake | 7 ------- tests/CMakePresets.json | 31 ++++++++++++++++++++----------- 2 files changed, 20 insertions(+), 18 deletions(-) delete mode 100644 cmake/ci-fuzzing-toolchain.cmake diff --git a/cmake/ci-fuzzing-toolchain.cmake b/cmake/ci-fuzzing-toolchain.cmake deleted file mode 100644 index afa7ce01d..000000000 --- a/cmake/ci-fuzzing-toolchain.cmake +++ /dev/null @@ -1,7 +0,0 @@ -include("${CMAKE_CURRENT_LIST_DIR}/linux-clang-toolchain.cmake") - -set(CMAKE_BUILD_TYPE "Debug") -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O1 -fsanitize=fuzzer,address,signed-integer-overflow,undefined -fno-omit-frame-pointer") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O1 -fsanitize=fuzzer,address,signed-integer-overflow,undefined -fno-omit-frame-pointer") -set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -g -O1 -fsanitize=fuzzer,address,signed-integer-overflow,undefined -fno-omit-frame-pointer") -set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -g -O1 -fsanitize=fuzzer,address,signed-integer-overflow,undefined -fno-omit-frame-pointer") diff --git a/tests/CMakePresets.json b/tests/CMakePresets.json index bd3a8f9b4..811b74774 100644 --- a/tests/CMakePresets.json +++ b/tests/CMakePresets.json @@ -34,9 +34,16 @@ "lhs": "${hostSystemName}", "rhs": "Linux" }, - "toolchainFile": "${sourceDir}/cmake/ci-fuzzing-toolchain.cmake", + "toolchainFile": "${sourceDir}/cmake/linux-clang-toolchain.cmake", + "environment": { + "FUZZING_FLAGS": "-fsanitize=fuzzer,address,signed-integer-overflow,undefined -fno-omit-frame-pointer" + }, "cacheVariables": { - "JWT_ENABLE_FUZZING": "ON" + "JWT_ENABLE_FUZZING": "ON", + "CMAKE_C_FLAGS": "$env{FUZZING_FLAGS} -g -O1", + "CMAKE_CXX_FLAGS": "$env{FUZZING_FLAGS} -g -O1", + "CMAKE_EXE_LINKER_FLAGS": "$env{FUZZING_FLAGS}", + "CMAKE_MODULE_LINKER_FLAGS": "$env{FUZZING_FLAGS}" } }, { @@ -50,15 +57,16 @@ "rhs": "Linux" }, "environment": { + "ASAN_FLAGS": "-fsanitize=address -fsanitize=leak", "ASAN_OPTIONS": "check_initialization_order=true:detect_stack_use_after_return=true:fast_unwind_on_malloc=0" }, "cacheVariables": { "JWT_BUILD_EXAMPLES": "ON", "JWT_BUILD_TESTS": "ON", - "CMAKE_C_FLAGS": "-fsanitize=address -fsanitize=leak -g", - "CMAKE_CXX_FLAGS": "-fsanitize=address -fsanitize=leak -g", - "CMAKE_EXE_LINKER_FLAGS": "-fsanitize=address -fsanitize=leak", - "CMAKE_MODULE_LINKER_FLAGS": "-fsanitize=address -fsanitize=leak" + "CMAKE_C_FLAGS": "$env{ASAN_FLAGS}", + "CMAKE_CXX_FLAGS": "$env{ASAN_FLAGS}", + "CMAKE_EXE_LINKER_FLAGS": "$env{ASAN_FLAGS}", + "CMAKE_MODULE_LINKER_FLAGS": "$env{ASAN_FLAGS}" } }, { @@ -72,15 +80,16 @@ "rhs": "Linux" }, "environment": { + "UBSAN_FLAGS": "-fsanitize=undefined -fsanitize=return -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fno-sanitize-recover=all", "UBSAN_OPTIONS": "print_stacktrace=1" }, "cacheVariables": { "JWT_BUILD_EXAMPLES": "ON", "JWT_BUILD_TESTS": "ON", - "CMAKE_C_FLAGS": "-fsanitize=undefined -fsanitize=return -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fno-sanitize-recover=all -g", - "CMAKE_CXX_FLAGS": "-fsanitize=undefined -fsanitize=return -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fno-sanitize-recover=all -g", - "CMAKE_EXE_LINKER_FLAGS": "-fsanitize=undefined -fsanitize=return -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fno-sanitize-recover=all", - "CMAKE_MODULE_LINKER_FLAGS": "-fsanitize=undefined -fsanitize=return -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fno-sanitize-recover=all" + "CMAKE_C_FLAGS": "$env{UBSAN_FLAGS}", + "CMAKE_CXX_FLAGS": "$env{UBSAN_FLAGS}", + "CMAKE_EXE_LINKER_FLAGS": "$env{UBSAN_FLAGS}", + "CMAKE_MODULE_LINKER_FLAGS": "$env{UBSAN_FLAGS}" } } ], @@ -124,4 +133,4 @@ ] } ] -} +} \ No newline at end of file From 30b1086e4aa5a3223ace5763578e5bbc299965b6 Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Wed, 10 Jan 2024 16:31:18 -0500 Subject: [PATCH 39/68] try install with a preset --- .github/workflows/cmake.yml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index ba193222d..9e3023ca9 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -22,14 +22,12 @@ jobs: - name: setup run: | - mkdir build - cd build - cmake .. -DJWT_BUILD_EXAMPLES=OFF - sudo make install + cmake --preset release + sudo cmake --build --preset release --target install - name: test + working-directory: tests/cmake run: | - cd tests/cmake cmake . -DTEST:STRING="defaults-enabled" -DCMAKE_FIND_DEBUG_MODE=1 cmake --build . From 17e12029a044ff80c778acffc3027862d9773843 Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Wed, 10 Jan 2024 16:31:33 -0500 Subject: [PATCH 40/68] remove duplicated test --- .github/workflows/cmake.yml | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 9e3023ca9..d2258ae0a 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -41,15 +41,9 @@ jobs: run: | mkdir build cd build - cmake .. + cmake .. -DJWT_BUILD_EXAMPLES=ON sudo cmake --install . - - name: test - run: | - cd tests/cmake - cmake . -DTEST:STRING="defaults-enabled" - cmake --build . - - name: test working-directory: tests/cmake run: | From 79198e5e313097db22bd56fe08d99bb079158ac7 Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Wed, 10 Jan 2024 16:31:47 -0500 Subject: [PATCH 41/68] notes about hunter test --- .github/workflows/cmake.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index d2258ae0a..155cbad37 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -254,7 +254,7 @@ jobs: cmake . -DTEST:STRING="wolfssl-is-used" cmake --build . - with-hunter: + with-hunter: # This is actually testing the integration with the package management runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 From a1f5bd19602fab2020d9ac254d33896257aa765b Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Wed, 10 Jan 2024 16:40:21 -0500 Subject: [PATCH 42/68] skip checking the compiler since this causes errors with the same CMake uses in combinations with the fuzz sanitizer flag https://github.com/prince-chrismc/jwt-cpp/actions/runs/7481024827/job/20361722539?pr=33 ``` /usr/bin/ld: /usr/bin/ld: DWARF error: invalid or unhandled FORM value: 0x22 CMakeFiles/cmTC_ff7c6.dir/testCCompiler.c.o: in function `main': testCCompiler.c:(.text.main[main]+0x0): multiple definition of `main'; /usr/lib/llvm-14/lib/clang/14.0.0/lib/linux/libclang_rt.fuzzer-x86_64.a(FuzzerMain.cpp.o):(.text.main+0x0): first defined here /usr/bin/ld: /usr/lib/llvm-14/lib/clang/14.0.0/lib/linux/libclang_rt.fuzzer-x86_64.a(FuzzerMain.cpp.o): in function `main': (.text.main+0x12): undefined reference to `LLVMFuzzerTestOneInput' ``` --- tests/CMakePresets.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/CMakePresets.json b/tests/CMakePresets.json index 811b74774..b119ab69c 100644 --- a/tests/CMakePresets.json +++ b/tests/CMakePresets.json @@ -40,6 +40,8 @@ }, "cacheVariables": { "JWT_ENABLE_FUZZING": "ON", + "CMAKE_C_COMPILER_WORKS": "ON", + "CMAKE_CXX_COMPILER_WORKS": "ON", "CMAKE_C_FLAGS": "$env{FUZZING_FLAGS} -g -O1", "CMAKE_CXX_FLAGS": "$env{FUZZING_FLAGS} -g -O1", "CMAKE_EXE_LINKER_FLAGS": "$env{FUZZING_FLAGS}", From 5042c7d3f3ad9c6428bd75272bd4de596d4766a9 Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Wed, 10 Jan 2024 16:58:36 -0500 Subject: [PATCH 43/68] remove system name to disable cross compiling --- cmake/linux-clang-toolchain.cmake | 2 -- 1 file changed, 2 deletions(-) diff --git a/cmake/linux-clang-toolchain.cmake b/cmake/linux-clang-toolchain.cmake index 3d5de7020..daa8f7bba 100644 --- a/cmake/linux-clang-toolchain.cmake +++ b/cmake/linux-clang-toolchain.cmake @@ -1,4 +1,2 @@ -set(CMAKE_SYSTEM_NAME Linux) - set(CMAKE_C_COMPILER clang) set(CMAKE_CXX_COMPILER clang++) From 12211c4ff5ce8e22eedbbb9937072da7faaddc88 Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Wed, 10 Jan 2024 17:05:13 -0500 Subject: [PATCH 44/68] tests do not pass clang-tidy --- .github/workflows/lint.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 34c0eec4f..284c96b17 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -54,9 +54,9 @@ jobs: - uses: lukka/get-cmake@latest - uses: actions/checkout@v4 - name: configure - run: cmake --preset dev -DCMAKE_CXX_CLANG_TIDY="clang-tidy;-fix" + run: cmake --preset examples -DCMAKE_CXX_CLANG_TIDY="clang-tidy;-fix" - name: run - run: cmake --build --preset dev --target all + run: cmake --build --preset examples - uses: ./.github/actions/process-linting-results with: linter_name: clang-tidy From 75be63744de9e5496be518a1e6fbbc2f5d339824 Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Wed, 10 Jan 2024 17:14:55 -0500 Subject: [PATCH 45/68] drop toolchain, use target specific flags --- cmake/linux-clang-toolchain.cmake | 2 -- tests/CMakePresets.json | 9 ++------- tests/fuzz/CMakeLists.txt | 2 ++ 3 files changed, 4 insertions(+), 9 deletions(-) delete mode 100644 cmake/linux-clang-toolchain.cmake diff --git a/cmake/linux-clang-toolchain.cmake b/cmake/linux-clang-toolchain.cmake deleted file mode 100644 index daa8f7bba..000000000 --- a/cmake/linux-clang-toolchain.cmake +++ /dev/null @@ -1,2 +0,0 @@ -set(CMAKE_C_COMPILER clang) -set(CMAKE_CXX_COMPILER clang++) diff --git a/tests/CMakePresets.json b/tests/CMakePresets.json index b119ab69c..b9028dc8a 100644 --- a/tests/CMakePresets.json +++ b/tests/CMakePresets.json @@ -34,18 +34,13 @@ "lhs": "${hostSystemName}", "rhs": "Linux" }, - "toolchainFile": "${sourceDir}/cmake/linux-clang-toolchain.cmake", "environment": { "FUZZING_FLAGS": "-fsanitize=fuzzer,address,signed-integer-overflow,undefined -fno-omit-frame-pointer" }, "cacheVariables": { "JWT_ENABLE_FUZZING": "ON", - "CMAKE_C_COMPILER_WORKS": "ON", - "CMAKE_CXX_COMPILER_WORKS": "ON", - "CMAKE_C_FLAGS": "$env{FUZZING_FLAGS} -g -O1", - "CMAKE_CXX_FLAGS": "$env{FUZZING_FLAGS} -g -O1", - "CMAKE_EXE_LINKER_FLAGS": "$env{FUZZING_FLAGS}", - "CMAKE_MODULE_LINKER_FLAGS": "$env{FUZZING_FLAGS}" + "CMAKE_C_COMPILER": "clang", + "CMAKE_CXX_COMPILER": "clang++" } }, { diff --git a/tests/fuzz/CMakeLists.txt b/tests/fuzz/CMakeLists.txt index fa1b99e0a..f25e5913a 100644 --- a/tests/fuzz/CMakeLists.txt +++ b/tests/fuzz/CMakeLists.txt @@ -4,6 +4,8 @@ endif() function(ADD_FUZZING_EXECUTABLE TARGET) add_executable(jwt-cpp-fuzz-${TARGET} "${TARGET}.cpp") + target_compile_options(jwt-cpp-fuzz-${TARGET} PRIVATE -g -O1 $ENV{FUZZING_FLAGS}) + target_link_options(jwt-cpp-fuzz-${TARGET} PRIVATE $ENV{FUZZING_FLAGS}) target_link_libraries(jwt-cpp-fuzz-${TARGET} PRIVATE jwt-cpp::jwt-cpp) endfunction() From 096b68218b70ecd5dc9e9c6bca7c5dc9c56796d2 Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Wed, 10 Jan 2024 17:17:00 -0500 Subject: [PATCH 46/68] leave flags in cmake --- tests/CMakePresets.json | 3 --- tests/fuzz/CMakeLists.txt | 7 +++++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/CMakePresets.json b/tests/CMakePresets.json index b9028dc8a..29e5a3169 100644 --- a/tests/CMakePresets.json +++ b/tests/CMakePresets.json @@ -34,9 +34,6 @@ "lhs": "${hostSystemName}", "rhs": "Linux" }, - "environment": { - "FUZZING_FLAGS": "-fsanitize=fuzzer,address,signed-integer-overflow,undefined -fno-omit-frame-pointer" - }, "cacheVariables": { "JWT_ENABLE_FUZZING": "ON", "CMAKE_C_COMPILER": "clang", diff --git a/tests/fuzz/CMakeLists.txt b/tests/fuzz/CMakeLists.txt index f25e5913a..4bacf5c24 100644 --- a/tests/fuzz/CMakeLists.txt +++ b/tests/fuzz/CMakeLists.txt @@ -4,8 +4,11 @@ endif() function(ADD_FUZZING_EXECUTABLE TARGET) add_executable(jwt-cpp-fuzz-${TARGET} "${TARGET}.cpp") - target_compile_options(jwt-cpp-fuzz-${TARGET} PRIVATE -g -O1 $ENV{FUZZING_FLAGS}) - target_link_options(jwt-cpp-fuzz-${TARGET} PRIVATE $ENV{FUZZING_FLAGS}) + target_compile_options( + jwt-cpp-fuzz-${TARGET} PRIVATE -g -O1 -fsanitize=fuzzer,address,signed-integer-overflow,undefined + -fno-omit-frame-pointer) + target_link_options(jwt-cpp-fuzz-${TARGET} PRIVATE -fsanitize=fuzzer,address,signed-integer-overflow,undefined + -fno-omit-frame-pointer) target_link_libraries(jwt-cpp-fuzz-${TARGET} PRIVATE jwt-cpp::jwt-cpp) endfunction() From 0d6fc4335fe14f96b0276f34a3d26231e658be3d Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Wed, 10 Jan 2024 17:29:19 -0500 Subject: [PATCH 47/68] missing deps + clean apt files --- .devcontainer/Dockerfile | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 999e79f86..d8634d94c 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,8 +1,17 @@ FROM ubuntu:22.04 RUN export DEBIAN_FRONTEND=noninteractive \ - && apt-get update \ - && apt-get -y install git g++ cmake libssl-dev \ - libgtest-dev clang-format clang-tidy doxygen + && apt-get update && apt-get -y install \ + clang++ \ + clang-format \ + clang-tidy \ + cmake \ + doxygen \ + graphviz \ + git \ + g++ \ + libssl-dev \ + libgtest-dev \ + && rm -rf /var/lib/apt/lists/* ENV CMAKE_CXX_CLANG_TIDY="clang-tidy;-fix" From 488a133d003d27f6a6eced293d0e6c07d88f9e09 Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Wed, 10 Jan 2024 17:35:14 -0500 Subject: [PATCH 48/68] remove some code duplication --- tests/CMakePresets.json | 34 ++++++++++++---------------------- 1 file changed, 12 insertions(+), 22 deletions(-) diff --git a/tests/CMakePresets.json b/tests/CMakePresets.json index 29e5a3169..fd12a3f92 100644 --- a/tests/CMakePresets.json +++ b/tests/CMakePresets.json @@ -10,15 +10,20 @@ ], "configurePresets": [ { - "name": "coverage", - "inherits": "debug", - "displayName": "Coverage", + "name": "linux", + "hidden": true, "description": "This is only available on Linux", "condition": { "type": "equals", "lhs": "${hostSystemName}", "rhs": "Linux" - }, + } + }, + { + "name": "coverage", + "inherits": ["debug", "linux"], + "displayName": "Coverage", + "description": "This is only available on Linux", "cacheVariables": { "JWT_BUILD_TESTS": "ON", "JWT_ENABLE_COVERAGE": "ON" @@ -26,14 +31,9 @@ }, { "name": "ci-fuzzing", - "inherits": "debug", + "inherits": ["debug", "linux"], "displayName": "Fuzz Testing", "description": "This is only available on Linux with Clang", - "condition": { - "type": "equals", - "lhs": "${hostSystemName}", - "rhs": "Linux" - }, "cacheVariables": { "JWT_ENABLE_FUZZING": "ON", "CMAKE_C_COMPILER": "clang", @@ -42,14 +42,9 @@ }, { "name": "ci-asan", - "inherits": "debug", + "inherits": ["debug", "linux"], "displayName": "Address/Leak Sanitizer", "description": "This is only available on Linux", - "condition": { - "type": "equals", - "lhs": "${hostSystemName}", - "rhs": "Linux" - }, "environment": { "ASAN_FLAGS": "-fsanitize=address -fsanitize=leak", "ASAN_OPTIONS": "check_initialization_order=true:detect_stack_use_after_return=true:fast_unwind_on_malloc=0" @@ -65,14 +60,9 @@ }, { "name": "ci-ubsan", - "inherits": "debug", + "inherits": ["debug", "linux"], "displayName": "Undefined Behavior Sanitizer", "description": "This is only available on Linux", - "condition": { - "type": "equals", - "lhs": "${hostSystemName}", - "rhs": "Linux" - }, "environment": { "UBSAN_FLAGS": "-fsanitize=undefined -fsanitize=return -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fno-sanitize-recover=all", "UBSAN_OPTIONS": "print_stacktrace=1" From f2f728cab156d6586898e3fde627414b9909895e Mon Sep 17 00:00:00 2001 From: Chris Mc Date: Thu, 11 Jan 2024 11:21:02 -0500 Subject: [PATCH 49/68] fix typo --- .github/workflows/targets.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/targets.yml b/.github/workflows/targets.yml index 5b070df08..dfda4986f 100644 --- a/.github/workflows/targets.yml +++ b/.github/workflows/targets.yml @@ -46,7 +46,7 @@ jobs: cmake --build . gcc-12: - name: GCC 18 + name: GCC 12 runs-on: ubuntu-latest container: image: ubuntu:jammy-20231004 # 22.04 From d374c3a30b23a816d4caeb38eaed07ae9f3fad6a Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Thu, 11 Jan 2024 16:24:00 -0500 Subject: [PATCH 50/68] devcontainers fix, test and add wolfssl refactored installer to have a script that could be reused --- .devcontainer/Dockerfile | 4 +++- .devcontainer/wolfssl/Dockerfile | 25 ++++++++++++++++++++++ .devcontainer/wolfssl/devcontainer.json | 0 .github/actions/install/wolfssl/action.yml | 12 ++--------- .github/actions/install/wolfssl/install.sh | 25 ++++++++++++++++++++++ .github/workflows/jwt.yml | 7 ++++++ 6 files changed, 62 insertions(+), 11 deletions(-) create mode 100644 .devcontainer/wolfssl/Dockerfile create mode 100644 .devcontainer/wolfssl/devcontainer.json create mode 100755 .github/actions/install/wolfssl/install.sh diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index d8634d94c..dcc3ec1ba 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -2,7 +2,6 @@ FROM ubuntu:22.04 RUN export DEBIAN_FRONTEND=noninteractive \ && apt-get update && apt-get -y install \ - clang++ \ clang-format \ clang-tidy \ cmake \ @@ -14,4 +13,7 @@ RUN export DEBIAN_FRONTEND=noninteractive \ libgtest-dev \ && rm -rf /var/lib/apt/lists/* +ENV CMAKE_C_FLAGS="-DOPENSSL_NO_DEPRECATED=1" +ENV CMAKE_CXX_FLAGS="-DOPENSSL_NO_DEPRECATED=1" +ENV CMAKE_C_CLANG_TIDY="clang-tidy;-fix" ENV CMAKE_CXX_CLANG_TIDY="clang-tidy;-fix" diff --git a/.devcontainer/wolfssl/Dockerfile b/.devcontainer/wolfssl/Dockerfile new file mode 100644 index 000000000..64eb243b7 --- /dev/null +++ b/.devcontainer/wolfssl/Dockerfile @@ -0,0 +1,25 @@ +FROM ubuntu:22.04 + +RUN export DEBIAN_FRONTEND=noninteractive \ + && apt-get update && apt-get -y install \ + autoconf \ + build-essential \ + clang-format \ + clang-tidy \ + cmake \ + doxygen \ + graphviz \ + git \ + g++ \ + libgtest-dev \ + libtool \ + wget \ + && rm -rf /var/lib/apt/lists/* + +# https://www.warp.dev/terminus/dockerfile-run-sh +COPY ./.github/actions/install/wolfssl/install.sh /wolfssl/install.sh +RUN /wolfssl/install.sh + +ENV JWT_SSL_LIBRARY="wolfSSL" +ENV CMAKE_C_CLANG_TIDY="clang-tidy;-fix" +ENV CMAKE_CXX_CLANG_TIDY="clang-tidy;-fix" diff --git a/.devcontainer/wolfssl/devcontainer.json b/.devcontainer/wolfssl/devcontainer.json new file mode 100644 index 000000000..e69de29bb diff --git a/.github/actions/install/wolfssl/action.yml b/.github/actions/install/wolfssl/action.yml index bced14743..64dd7ce99 100644 --- a/.github/actions/install/wolfssl/action.yml +++ b/.github/actions/install/wolfssl/action.yml @@ -9,14 +9,6 @@ runs: using: composite steps: - run: | - cd /tmp - wget -O wolfssl.tar.gz https://github.com/wolfSSL/wolfssl/archive/${{ inputs.version }}.tar.gz - tar -zxf /tmp/wolfssl.tar.gz - cd wolfssl-* - autoreconf -fiv - ./configure --enable-opensslall --enable-opensslextra --disable-examples --disable-crypttests --enable-harden --enable-all --enable-all-crypto - make - sudo make install - shell: bash - - run: sudo rm -rf /usr/include/openssl + ./.github/actions/install/wolfssl/install.sh + sudo rm -rf /usr/include/openssl shell: bash diff --git a/.github/actions/install/wolfssl/install.sh b/.github/actions/install/wolfssl/install.sh new file mode 100755 index 000000000..4bd33cb5e --- /dev/null +++ b/.github/actions/install/wolfssl/install.sh @@ -0,0 +1,25 @@ +#! /bin/sh +set -e # Exit on error +DEFAULT_VERSION="v5.3.0-stable" +VERSION="${1:-$DEFAULT_VERSION}" + +cd /tmp +wget -O wolfssl.tar.gz https://github.com/wolfSSL/wolfssl/archive/$VERSION.tar.gz +tar -zxf wolfssl.tar.gz +cd wolfssl-* +autoreconf -fiv +./configure --prefix=/usr/local --enable-opensslall --enable-opensslextra --disable-examples --disable-crypttests --enable-harden --enable-all --enable-all-crypto +make + +# Depending if we run in on a GitHub Actions or from within a Docker image we have different permissions +if [[ $EUID > 0 ]]; then + # If we are not root then we need to sudo + sudo make install +else + # Default docker image does not have users setup so we are only root and can not sudo + make install +fi + +cd /tmp +rm wolfssl.tar.gz +rm -rf wolfssl-* diff --git a/.github/workflows/jwt.yml b/.github/workflows/jwt.yml index d8655ec3c..41ab87633 100644 --- a/.github/workflows/jwt.yml +++ b/.github/workflows/jwt.yml @@ -92,3 +92,10 @@ jobs: cmake --build --preset ci-ubsan --target rsa-verify-run cmake --build --preset ci-ubsan --target jwks-verify-run cmake --build --preset ci-ubsan --target jwt-cpp-test-run + + devcontainers: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - run: docker build -t default -f .devcontainer/Dockerfile + - run: docker build -t wolfssl -f .devcontainer/wolfssl/Dockerfile From 7cbea5136263f66b6fd6b1fc68ca335cc7e5469d Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Thu, 11 Jan 2024 16:28:53 -0500 Subject: [PATCH 51/68] add missing build context --- .github/workflows/jwt.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/jwt.yml b/.github/workflows/jwt.yml index 41ab87633..62997590b 100644 --- a/.github/workflows/jwt.yml +++ b/.github/workflows/jwt.yml @@ -97,5 +97,5 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - run: docker build -t default -f .devcontainer/Dockerfile - - run: docker build -t wolfssl -f .devcontainer/wolfssl/Dockerfile + - run: docker build -t default -f .devcontainer/Dockerfile . + - run: docker build -t wolfssl -f .devcontainer/wolfssl/Dockerfile . From 1e3ccc7bd10ea8e6b552252b6542f63e3322c1c3 Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Thu, 11 Jan 2024 17:44:12 -0500 Subject: [PATCH 52/68] pass version to script --- .github/actions/install/wolfssl/action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/install/wolfssl/action.yml b/.github/actions/install/wolfssl/action.yml index 64dd7ce99..c13355527 100644 --- a/.github/actions/install/wolfssl/action.yml +++ b/.github/actions/install/wolfssl/action.yml @@ -9,6 +9,6 @@ runs: using: composite steps: - run: | - ./.github/actions/install/wolfssl/install.sh + ./.github/actions/install/wolfssl/install.sh ${{ input.version }} sudo rm -rf /usr/include/openssl shell: bash From d0e8929b10aef94c746b7c19c73e34abf3d204a6 Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Thu, 11 Jan 2024 17:44:21 -0500 Subject: [PATCH 53/68] dont use bash syntax --- .github/actions/install/wolfssl/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/install/wolfssl/install.sh b/.github/actions/install/wolfssl/install.sh index 4bd33cb5e..73c9754eb 100755 --- a/.github/actions/install/wolfssl/install.sh +++ b/.github/actions/install/wolfssl/install.sh @@ -12,7 +12,7 @@ autoreconf -fiv make # Depending if we run in on a GitHub Actions or from within a Docker image we have different permissions -if [[ $EUID > 0 ]]; then +if [ "$(id -u)" -ne 0 ]; then # If we are not root then we need to sudo sudo make install else From d9f4643d34cefccd99feac1895a74e947b6437c5 Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Fri, 12 Jan 2024 12:33:43 -0500 Subject: [PATCH 54/68] fix typo --- .github/actions/install/wolfssl/action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/install/wolfssl/action.yml b/.github/actions/install/wolfssl/action.yml index c13355527..b7e2600fa 100644 --- a/.github/actions/install/wolfssl/action.yml +++ b/.github/actions/install/wolfssl/action.yml @@ -9,6 +9,6 @@ runs: using: composite steps: - run: | - ./.github/actions/install/wolfssl/install.sh ${{ input.version }} + ./.github/actions/install/wolfssl/install.sh ${{ inputs.version }} sudo rm -rf /usr/include/openssl shell: bash From 73e197d6b5aa20d2f8ca8257ecb0d0fe96124fd6 Mon Sep 17 00:00:00 2001 From: Chris Mc Date: Thu, 28 Dec 2023 23:11:27 -0500 Subject: [PATCH 55/68] upload tar.gz for new releases --- .github/workflows/release.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7cd7ef531..2cb15e9ec 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,4 +1,4 @@ -name: Nuget CD +name: Release CD on: # Allows you to run this workflow manually from the Actions tab @@ -41,4 +41,5 @@ jobs: - uses: shogo82148/actions-upload-release-asset@v1 with: upload_url: ${{ github.event.release.upload_url }} - asset_path: /tmp/jwt-cpp-${{ github.event.release.tag_name }}.zip + asset_path: /tmp/jwt-cpp-${{ github.event.release.tag_name }}.zipelease.upload_url }} + From 37d0b892e0000b62724de0beaaee7e5e0c725fc1 Mon Sep 17 00:00:00 2001 From: Chris Mc Date: Wed, 3 Jan 2024 14:02:23 -0500 Subject: [PATCH 56/68] revert name to manually trigger it --- .github/workflows/{release.yml => nuget.yml} | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) rename .github/workflows/{release.yml => nuget.yml} (98%) diff --git a/.github/workflows/release.yml b/.github/workflows/nuget.yml similarity index 98% rename from .github/workflows/release.yml rename to .github/workflows/nuget.yml index 2cb15e9ec..aecab589e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/nuget.yml @@ -1,4 +1,4 @@ -name: Release CD +name: Nuget CD on: # Allows you to run this workflow manually from the Actions tab @@ -9,6 +9,7 @@ on: jobs: nuget: + if: false runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 From 6f86e3770330cede9472fa23fd5d03d1a7737276 Mon Sep 17 00:00:00 2001 From: Chris Mc Date: Wed, 3 Jan 2024 14:12:21 -0500 Subject: [PATCH 57/68] Update and rename nuget.yml to release.yml --- .github/workflows/{nuget.yml => release.yml} | 1 - 1 file changed, 1 deletion(-) rename .github/workflows/{nuget.yml => release.yml} (99%) diff --git a/.github/workflows/nuget.yml b/.github/workflows/release.yml similarity index 99% rename from .github/workflows/nuget.yml rename to .github/workflows/release.yml index aecab589e..5de0556b4 100644 --- a/.github/workflows/nuget.yml +++ b/.github/workflows/release.yml @@ -9,7 +9,6 @@ on: jobs: nuget: - if: false runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 From 87ff65c657965b1ccc7b1245b275e0b575e18950 Mon Sep 17 00:00:00 2001 From: Chris Mc Date: Thu, 11 Jan 2024 11:24:53 -0500 Subject: [PATCH 58/68] disable nuget for testing --- .github/workflows/release.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5de0556b4..aecab589e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -9,6 +9,7 @@ on: jobs: nuget: + if: false runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 From 94adcd9d5d24e8fc5bbe24d453ccc4eb90123afe Mon Sep 17 00:00:00 2001 From: Chris Mc Date: Thu, 11 Jan 2024 11:40:02 -0500 Subject: [PATCH 59/68] add a zip as well --- .github/workflows/release.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index aecab589e..1b54a0e99 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -29,6 +29,8 @@ jobs: release-asset: if: github.event_name != 'workflow_dispatch' runs-on: ubuntu-latest + env: + NAME: jwt-cpp-${{ github.event.release.tag_name }} steps: - uses: actions/checkout@v4 @@ -36,7 +38,7 @@ jobs: - uses: shogo82148/actions-upload-release-asset@v1 with: upload_url: ${{ github.event.release.upload_url }} - asset_path: /tmp/jwt-cpp-${{ github.event.release.tag_name }}.tar.gz + asset_path: /tmp/$NAME.tar.gz - run: zip -x './.git/*' -r /tmp/jwt-cpp-${{ github.event.release.tag_name }}.zip . - uses: shogo82148/actions-upload-release-asset@v1 From f155b50990aadf691d6e802f8eec64182442e2e8 Mon Sep 17 00:00:00 2001 From: Chris Mc Date: Tue, 16 Jan 2024 18:30:41 -0500 Subject: [PATCH 60/68] back to basics --- .github/workflows/release.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 1b54a0e99..aecab589e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -29,8 +29,6 @@ jobs: release-asset: if: github.event_name != 'workflow_dispatch' runs-on: ubuntu-latest - env: - NAME: jwt-cpp-${{ github.event.release.tag_name }} steps: - uses: actions/checkout@v4 @@ -38,7 +36,7 @@ jobs: - uses: shogo82148/actions-upload-release-asset@v1 with: upload_url: ${{ github.event.release.upload_url }} - asset_path: /tmp/$NAME.tar.gz + asset_path: /tmp/jwt-cpp-${{ github.event.release.tag_name }}.tar.gz - run: zip -x './.git/*' -r /tmp/jwt-cpp-${{ github.event.release.tag_name }}.zip . - uses: shogo82148/actions-upload-release-asset@v1 From 7ba8ce489e16a1195ceeac85d7eab462a987d650 Mon Sep 17 00:00:00 2001 From: Chris Mc Date: Tue, 16 Jan 2024 20:01:07 -0500 Subject: [PATCH 61/68] remove remove testing code --- .github/workflows/release.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index aecab589e..5de0556b4 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -9,7 +9,6 @@ on: jobs: nuget: - if: false runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 From ceaa359f219db119e450bb19ee1b3a27a087e9f3 Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Sat, 20 Apr 2024 13:41:17 -0700 Subject: [PATCH 62/68] update workflow name --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5de0556b4..2cb15e9ec 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,4 +1,4 @@ -name: Nuget CD +name: Release CD on: # Allows you to run this workflow manually from the Actions tab From b9eb7bf140498124d3dfae68fabb5cd337f94fa9 Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Tue, 23 Apr 2024 21:20:11 -0700 Subject: [PATCH 63/68] enable testing needs to be in the root --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index ad9632a35..474605c00 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -158,6 +158,7 @@ if(JWT_BUILD_EXAMPLES) endif() if(JWT_BUILD_TESTS) + enable_testing() add_subdirectory(tests) endif() From 43cfb96610190585fb693731fbdf8a3024aa485f Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Tue, 23 Apr 2024 21:20:29 -0700 Subject: [PATCH 64/68] add a test preset and use it in some workflows --- .github/workflows/jwt.yml | 1 - .github/workflows/ssl.yml | 24 +++++++++++++----------- tests/CMakeLists.txt | 1 - tests/CMakePresets.json | 26 ++++++++++++++++++++++++++ 4 files changed, 39 insertions(+), 13 deletions(-) diff --git a/.github/workflows/jwt.yml b/.github/workflows/jwt.yml index 62997590b..59962586b 100644 --- a/.github/workflows/jwt.yml +++ b/.github/workflows/jwt.yml @@ -19,7 +19,6 @@ jobs: - name: configure run: cmake --preset coverage - - name: run run: cmake --build --preset coverage diff --git a/.github/workflows/ssl.yml b/.github/workflows/ssl.yml index a60c6f7a6..d96e3ddbb 100644 --- a/.github/workflows/ssl.yml +++ b/.github/workflows/ssl.yml @@ -27,10 +27,10 @@ jobs: version: ${{ matrix.openssl.tag }} - name: configure - run: cmake . -DJWT_BUILD_TESTS=ON -DOPENSSL_ROOT_DIR=/tmp - - run: make + run: cmake --preset unit-tests -DOPENSSL_ROOT_DIR=/tmp + - run: cmake --build --preset unit-tests - name: test - run: ./tests/jwt-cpp-test + run: ctest --preset unit-tests - if: github.event_name == 'push' && always() uses: ./.github/actions/badge @@ -50,8 +50,10 @@ jobs: version: "openssl-3.0.5" - name: configure - run: cmake . -DJWT_BUILD_TESTS=ON -DOPENSSL_ROOT_DIR=/tmp -DCMAKE_CXX_FLAGS="-DOPENSSL_NO_DEPRECATED=1" -DCMAKE_C_FLAGS="-DOPENSSL_NO_DEPRECATED=1" - - run: make + run: cmake --preset unit-tests -DOPENSSL_ROOT_DIR=/tmp -DCMAKE_CXX_FLAGS="-DOPENSSL_NO_DEPRECATED=1" -DCMAKE_C_FLAGS="-DOPENSSL_NO_DEPRECATED=1" + - run: cmake --build --preset unit-tests + - name: test + run: ctest --preset unit-tests libressl: runs-on: ubuntu-latest @@ -69,10 +71,10 @@ jobs: version: ${{ matrix.libressl }} - name: configure - run: cmake . -DJWT_BUILD_TESTS=ON -DJWT_SSL_LIBRARY:STRING=LibreSSL - - run: make + run: cmake --preset unit-tests -DJWT_SSL_LIBRARY:STRING=LibreSSL + - run: cmake --build --preset unit-tests - name: test - run: ./tests/jwt-cpp-test + run: ctest --preset unit-tests - if: github.event_name == 'push' && always() uses: ./.github/actions/badge @@ -98,10 +100,10 @@ jobs: version: ${{ matrix.wolfssl.ref }} - name: configure - run: cmake . -DJWT_BUILD_TESTS=ON -DJWT_SSL_LIBRARY:STRING=wolfSSL - - run: make + run: cmake --preset unit-tests -DJWT_SSL_LIBRARY:STRING=wolfSSL + - run: cmake --build --preset unit-tests - name: test - run: ./tests/jwt-cpp-test + run: ctest --preset unit-tests - if: github.event_name == 'push' && always() uses: ./.github/actions/badge diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 356aa3b80..6c7b75504 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -6,7 +6,6 @@ if(JWT_DISABLE_PICOJSON) message(FATAL_ERROR "Tests requires the picojson support to be enabled!") endif() -enable_testing() include(GoogleTest) if(HUNTER_ENABLED) hunter_add_package(GTest) diff --git a/tests/CMakePresets.json b/tests/CMakePresets.json index fd12a3f92..ee1af5b39 100644 --- a/tests/CMakePresets.json +++ b/tests/CMakePresets.json @@ -29,6 +29,14 @@ "JWT_ENABLE_COVERAGE": "ON" } }, + { + "name": "unit-tests", + "inherits": ["debug"], + "displayName": "Unit Tests", + "cacheVariables": { + "JWT_BUILD_TESTS": "ON" + } + }, { "name": "ci-fuzzing", "inherits": ["debug", "linux"], @@ -87,6 +95,14 @@ "coverage" ] }, + { + "name": "unit-tests", + "configurePreset": "unit-tests", + "configuration": "Debug", + "targets": [ + "jwt-cpp-test" + ] + }, { "name": "ci-fuzzing", "configurePreset": "ci-fuzzing", @@ -116,5 +132,15 @@ "jwt-cpp-test" ] } + ], + "testPresets": [ + { + "name": "unit-tests", + "description": "Run the unit tests", + "configurePreset": "unit-tests", + "execution": { + "noTestsAction": "error" + } + } ] } \ No newline at end of file From bcac723d71ce18a41c62d5842cf658e3b253b8c2 Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Tue, 23 Apr 2024 21:22:45 -0700 Subject: [PATCH 65/68] fix linting tests --- include/jwt-cpp/traits/defaults.h.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/jwt-cpp/traits/defaults.h.mustache b/include/jwt-cpp/traits/defaults.h.mustache index e3c8fb88b..82a67aeb7 100644 --- a/include/jwt-cpp/traits/defaults.h.mustache +++ b/include/jwt-cpp/traits/defaults.h.mustache @@ -49,7 +49,7 @@ namespace jwt { /** * Decode a token - * \tparam Decode is callabled, taking a string_type and returns a string_type. + * \tparam Decode is callable, taking a string_type and returns a string_type. * It should ensure the padding of the input and then base64url decode and * return the results. * \param token Token to decode From 7f99bffaa914daf09d4f832e350caf5c84c8e5f3 Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Tue, 23 Apr 2024 21:25:58 -0700 Subject: [PATCH 66/68] bump github actions --- .github/workflows/cmake.yml | 4 ++-- .github/workflows/cross-platform.yml | 2 +- .github/workflows/lint.yml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 155cbad37..12e8a884b 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -96,7 +96,7 @@ jobs: preset-support-but-not-enough: runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: ./.github/actions/install/cmake with: version: "3.24.4" @@ -138,7 +138,7 @@ jobs: root-hint-install-linux: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: lukka/get-cmake@latest - name: setup diff --git a/.github/workflows/cross-platform.yml b/.github/workflows/cross-platform.yml index f8452e1e5..da5124b31 100644 --- a/.github/workflows/cross-platform.yml +++ b/.github/workflows/cross-platform.yml @@ -19,7 +19,7 @@ jobs: - if: matrix.os == 'macos-latest' run: sudo cp /usr/local/opt/openssl@1.1/lib/pkgconfig/*.pc /usr/local/lib/pkgconfig/ - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: configure run: cmake --preset examples diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 284c96b17..75f985123 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -74,7 +74,7 @@ jobs: - { name: "open_source_parsers_jsoncpp", library: "jsoncpp", url: "https://github.com/open-source-parsers/jsoncpp", disable_pico: true } name: render-defaults (${{ matrix.traits.name }}) steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: ./.github/actions/render/defaults id: render with: From a14c6e3563ea07cf5f689da1b6c49fdd4dfec8ad Mon Sep 17 00:00:00 2001 From: Christopher McArthur Date: Tue, 23 Apr 2024 21:28:25 -0700 Subject: [PATCH 67/68] bump python setup --- .github/workflows/lint.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 75f985123..3b5ea8e94 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -36,7 +36,7 @@ jobs: matrix: files: ["**/CMakeLists.txt", "cmake/code-coverage.cmake"] steps: - - uses: actions/setup-python@v2 + - uses: actions/setup-python@v5 with: python-version: "3.x" - run: pip install cmakelang From b77303da1649b54cb03ea850438fae7f4ba3677a Mon Sep 17 00:00:00 2001 From: Chris Mc Date: Wed, 19 Jun 2024 15:16:14 -0700 Subject: [PATCH 68/68] Update release.yml --- .github/workflows/release.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2cb15e9ec..0e824d226 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -41,5 +41,4 @@ jobs: - uses: shogo82148/actions-upload-release-asset@v1 with: upload_url: ${{ github.event.release.upload_url }} - asset_path: /tmp/jwt-cpp-${{ github.event.release.tag_name }}.zipelease.upload_url }} - + asset_path: /tmp/jwt-cpp-${{ github.event.release.tag_name }}.zip