diff --git a/CMakeLists.txt b/CMakeLists.txt
index bb5b241..608c49f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -4,7 +4,7 @@ set(CMAKE_CXX_STANDARD 17)
include_directories(./src/libs/)
-find_package(jwt-cpp REQUIRED)
+add_subdirectory(./src/libs/jwt-cpp-0.7.0)
add_executable(
auth_service
@@ -23,4 +23,5 @@ add_executable(
src/security/cors.cpp
)
+
target_link_libraries(auth_service jwt-cpp::jwt-cpp)
diff --git a/src/libs/jwt-cpp-0.7.0/.clang-format b/src/libs/jwt-cpp-0.7.0/.clang-format
new file mode 100644
index 0000000..2a60a0a
--- /dev/null
+++ b/src/libs/jwt-cpp-0.7.0/.clang-format
@@ -0,0 +1,22 @@
+BasedOnStyle: LLVM
+BreakBeforeBraces: Attach
+
+ColumnLimit: 120 # Match GitHub UI
+
+UseTab: Always
+TabWidth: 4
+IndentWidth: 4
+AccessModifierOffset: -4
+ContinuationIndentWidth: 4
+NamespaceIndentation: All
+IndentCaseLabels: false
+
+PointerAlignment: Left
+AlwaysBreakTemplateDeclarations: Yes
+SpaceAfterTemplateKeyword: false
+AllowShortCaseLabelsOnASingleLine: true
+AllowShortIfStatementsOnASingleLine: WithoutElse
+AllowShortBlocksOnASingleLine: Always
+
+FixNamespaceComments: true
+ReflowComments: false
diff --git a/src/libs/jwt-cpp-0.7.0/.clang-tidy b/src/libs/jwt-cpp-0.7.0/.clang-tidy
new file mode 100644
index 0000000..e35b615
--- /dev/null
+++ b/src/libs/jwt-cpp-0.7.0/.clang-tidy
@@ -0,0 +1,41 @@
+Checks: '-*,
+ bugprone-*,
+ cert-*,
+ clang-analyzer-*,
+ clang-diagnostic-*,
+ -clang-diagnostic-c++17-extensions,
+ google-*,
+ -google-runtime-references,
+ -google-readability-braces-around-statements,
+ hicpp-*,
+ -hicpp-braces-around-statements,
+ -hicpp-signed-bitwise,
+ misc-*,
+ -misc-non-private-member-variables-in-classes,
+ llvm-*,
+ modernize-*,
+ -modernize-use-trailing-return-type,
+ performance-*,
+ portability-*,
+ readability-*,
+ -readability-magic-numbers,
+ -readability-braces-around-statements,
+ -readability-uppercase-literal-suffix'
+
+CheckOptions:
+ - key: readability-identifier-naming.TypedefCase
+ value: lower_case
+ - key: readability-identifier-naming.StructCase
+ value: lower_case
+ - key: readability-identifier-naming.ClassCase
+ value: lower_case
+ - key: readability-identifier-naming.VariableCase
+ value: lower_case
+ - key: readability-identifier-naming.ParameterCase
+ value: lower_case
+ - key: readability-identifier-naming.FunctionCase
+ value: lower_case
+ - key: readability-identifier-naming.NamespaceCase
+ value: lower_case
+ - key: readability-identifier-naming.GlobalConstantCase
+ value: lower_case
\ No newline at end of file
diff --git a/src/libs/jwt-cpp-0.7.0/.cmake-format b/src/libs/jwt-cpp-0.7.0/.cmake-format
new file mode 100644
index 0000000..e2a32f9
--- /dev/null
+++ b/src/libs/jwt-cpp-0.7.0/.cmake-format
@@ -0,0 +1,208 @@
+# ----------------------------------
+# Options affecting listfile parsing
+# ----------------------------------
+with section("parse"):
+
+ # Specify structure for custom cmake functions
+ additional_commands = { 'foo': { 'flags': ['BAR', 'BAZ'],
+ 'kwargs': {'DEPENDS': '*', 'HEADERS': '*', 'SOURCES': '*'}}}
+
+# -----------------------------
+# Options effecting formatting.
+# -----------------------------
+with section("format"):
+
+ # How wide to allow formatted cmake files
+ line_width = 120
+
+ # How many spaces to tab for indent
+ tab_size = 2
+
+ # If an argument group contains more than this many sub-groups (parg or kwarg
+ # groups) then force it to a vertical layout.
+ max_subgroups_hwrap = 12
+
+ # If a positional argument group contains more than this many arguments, then
+ # force it to a vertical layout.
+ max_pargs_hwrap = 24
+
+ # If true, separate flow control names from their parentheses with a space
+ separate_ctrl_name_with_space = False
+
+ # If true, separate function names from parentheses with a space
+ separate_fn_name_with_space = False
+
+ # If a statement is wrapped to more than one line, than dangle the closing
+ # parenthesis on its own line.
+ dangle_parens = False
+
+ # If the trailing parenthesis must be 'dangled' on its on line, then align it
+ # to this reference: `prefix`: the start of the statement, `prefix-indent`:
+ # the start of the statement, plus one indentation level, `child`: align to
+ # the column of the arguments
+ dangle_align = 'prefix'
+
+ # If the statement spelling length (including space and parenthesis) is
+ # smaller than this amount, then force reject nested layouts.
+ min_prefix_chars = 4
+
+ # If the statement spelling length (including space and parenthesis) is larger
+ # than the tab width by more than this amount, then force reject un-nested
+ # layouts.
+ max_prefix_chars = 10
+
+ # If a candidate layout is wrapped horizontally but it exceeds this many
+ # lines, then reject the layout.
+ max_lines_hwrap = 12
+
+ # What style line endings to use in the output.
+ line_ending = 'unix'
+
+ # Format command names consistently as 'lower' or 'upper' case
+ command_case = 'lower'
+
+ # Format keywords consistently as 'lower' or 'upper' case
+ keyword_case = 'upper'
+
+ # A list of command names which should always be wrapped
+ always_wrap = []
+
+ # If true, the argument lists which are known to be sortable will be sorted
+ # lexicographicall
+ enable_sort = True
+
+ # If true, the parsers may infer whether or not an argument list is sortable
+ # (without annotation).
+ autosort = False
+
+ # By default, if cmake-format cannot successfully fit everything into the
+ # desired linewidth it will apply the last, most agressive attempt that it
+ # made. If this flag is True, however, cmake-format will print error, exit
+ # with non-zero status code, and write-out nothing
+ require_valid_layout = False
+
+ # A dictionary mapping layout nodes to a list of wrap decisions. See the
+ # documentation for more information.
+ layout_passes = {}
+
+# ------------------------------------------------
+# Options affecting comment reflow and formatting.
+# ------------------------------------------------
+with section("markup"):
+
+ # What character to use for bulleted lists
+ bullet_char = '*'
+
+ # What character to use as punctuation after numerals in an enumerated list
+ enum_char = '.'
+
+ # If comment markup is enabled, don't reflow the first comment block in each
+ # listfile. Use this to preserve formatting of your copyright/license
+ # statements.
+ first_comment_is_literal = False
+
+ # If comment markup is enabled, don't reflow any comment block which matches
+ # this (regex) pattern. Default is `None` (disabled).
+ literal_comment_pattern = None
+
+ # Regular expression to match preformat fences in comments
+ # default=r'^\s*([`~]{3}[`~]*)(.*)$'
+ fence_pattern = '^\\s*([`~]{3}[`~]*)(.*)$'
+
+ # Regular expression to match rulers in comments
+ # default=r'^\s*[^\w\s]{3}.*[^\w\s]{3}$'
+ ruler_pattern = '^\\s*[^\\w\\s]{3}.*[^\\w\\s]{3}$'
+
+ # If a comment line matches starts with this pattern then it is explicitly a
+ # trailing comment for the preceeding argument. Default is '#<'
+ explicit_trailing_pattern = '#<'
+
+ # If a comment line starts with at least this many consecutive hash
+ # characters, then don't lstrip() them off. This allows for lazy hash rulers
+ # where the first hash char is not separated by space
+ hashruler_min_length = 10
+
+ # If true, then insert a space between the first hash char and remaining hash
+ # chars in a hash ruler, and normalize its length to fill the column
+ canonicalize_hashrulers = True
+
+ # enable comment markup parsing and reflow
+ enable_markup = True
+
+# ----------------------------
+# Options affecting the linter
+# ----------------------------
+with section("lint"):
+
+ # a list of lint codes to disable
+ disabled_codes = []
+
+ # regular expression pattern describing valid function names
+ function_pattern = '[0-9a-z_]+'
+
+ # regular expression pattern describing valid macro names
+ macro_pattern = '[0-9A-Z_]+'
+
+ # regular expression pattern describing valid names for variables with global
+ # scope
+ global_var_pattern = '[0-9A-Z][0-9A-Z_]+'
+
+ # regular expression pattern describing valid names for variables with global
+ # scope (but internal semantic)
+ internal_var_pattern = '_[0-9A-Z][0-9A-Z_]+'
+
+ # regular expression pattern describing valid names for variables with local
+ # scope
+ local_var_pattern = '[0-9a-z_]+'
+
+ # regular expression pattern describing valid names for privatedirectory
+ # variables
+ private_var_pattern = '_[0-9a-z_]+'
+
+ # regular expression pattern describing valid names for publicdirectory
+ # variables
+ public_var_pattern = '[0-9A-Z][0-9A-Z_]+'
+
+ # regular expression pattern describing valid names for keywords used in
+ # functions or macros
+ keyword_pattern = '[0-9A-Z_]+'
+
+ # In the heuristic for C0201, how many conditionals to match within a loop in
+ # before considering the loop a parser.
+ max_conditionals_custom_parser = 2
+
+ # Require at least this many newlines between statements
+ min_statement_spacing = 1
+
+ # Require no more than this many newlines between statements
+ max_statement_spacing = 1
+ max_returns = 6
+ max_branches = 12
+ max_arguments = 5
+ max_localvars = 15
+ max_statements = 50
+
+# -------------------------------
+# Options effecting file encoding
+# -------------------------------
+with section("encode"):
+
+ # If true, emit the unicode byte-order mark (BOM) at the start of the file
+ emit_byteorder_mark = False
+
+ # Specify the encoding of the input file. Defaults to utf-8
+ input_encoding = 'utf-8'
+
+ # Specify the encoding of the output file. Defaults to utf-8. Note that cmake
+ # only claims to support utf-8 so be careful when using anything else
+ output_encoding = 'utf-8'
+
+# -------------------------------------
+# Miscellaneous configurations options.
+# -------------------------------------
+with section("misc"):
+
+ # A dictionary containing any per-command configuration overrides. Currently
+ # only `command_case` is supported.
+ per_command = {}
+
diff --git a/src/libs/jwt-cpp-0.7.0/.editorconfig b/src/libs/jwt-cpp-0.7.0/.editorconfig
new file mode 100644
index 0000000..33af44c
--- /dev/null
+++ b/src/libs/jwt-cpp-0.7.0/.editorconfig
@@ -0,0 +1,17 @@
+root = true
+
+[!*.{h,cpp}]
+indent_style = space
+indent_size = 2
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+
+[*.{h,cpp}]
+indent_style = tab
+trim_trailing_whitespace = true
+insert_final_newline = true
+
+[*.md]
+trim_trailing_whitespace = false
diff --git a/src/libs/jwt-cpp-0.7.0/.gitattributes b/src/libs/jwt-cpp-0.7.0/.gitattributes
new file mode 100644
index 0000000..bdb0cab
--- /dev/null
+++ b/src/libs/jwt-cpp-0.7.0/.gitattributes
@@ -0,0 +1,17 @@
+# Auto detect text files and perform LF normalization
+* text=auto
+
+# Custom for Visual Studio
+*.cs diff=csharp
+
+# Standard to msysgit
+*.doc diff=astextplain
+*.DOC diff=astextplain
+*.docx diff=astextplain
+*.DOCX diff=astextplain
+*.dot diff=astextplain
+*.DOT diff=astextplain
+*.pdf diff=astextplain
+*.PDF diff=astextplain
+*.rtf diff=astextplain
+*.RTF diff=astextplain
diff --git a/src/libs/jwt-cpp-0.7.0/.github/FUNDING.yml b/src/libs/jwt-cpp-0.7.0/.github/FUNDING.yml
new file mode 100644
index 0000000..72a5540
--- /dev/null
+++ b/src/libs/jwt-cpp-0.7.0/.github/FUNDING.yml
@@ -0,0 +1,2 @@
+github: [Thalhammer,prince-chrismc]
+patreon: Thalhammer
diff --git a/src/libs/jwt-cpp-0.7.0/.github/ISSUE_TEMPLATE/bug-report.yml b/src/libs/jwt-cpp-0.7.0/.github/ISSUE_TEMPLATE/bug-report.yml
new file mode 100644
index 0000000..3bd2cbf
--- /dev/null
+++ b/src/libs/jwt-cpp-0.7.0/.github/ISSUE_TEMPLATE/bug-report.yml
@@ -0,0 +1,83 @@
+name: Bug Report 🐛
+description: File a bug report
+
+labels: ["bug"]
+body:
+ - type: markdown
+ attributes:
+ value: |
+ Thanks for taking the time to fill out this bug report!
+ validations:
+ required: false
+ - type: textarea
+ id: what-happened
+ attributes:
+ label: What happened?
+ description: Also tell us, what did you expect to happen? Feel free to include some screenshots
+ placeholder: Tell us what you see!
+ value: "A bug happened!"
+ validations:
+ required: true
+ - type: textarea
+ id: reproduce
+ attributes:
+ label: How To Reproduce?
+ description: Please provide a small snippet to reproduce the issue
+ placeholder: Some C++ code or Shell code to recreate th problem
+ value: |
+ ```c++
+ #include "jwt-cpp/jwt.h"
+ int main() {
+ return 0;
+ }
+ ```
+ - type: dropdown
+ id: version
+ attributes:
+ label: Version
+ description: What version of our software are you running?
+ options:
+ - 0.7.0
+ - 0.6.0
+ - 0.5.2
+ - Older (please let us know if the "What happened" box)
+ validations:
+ required: true
+ - type: dropdown
+ id: operating-system
+ attributes:
+ label: What OS are you seeing the problem on?
+ multiple: true
+ options:
+ - Windows
+ - Linux
+ - MacOS
+ - Other (please let us know if the "What happened" box)
+ validations:
+ required: true
+ - type: dropdown
+ id: compiler
+ attributes:
+ label: What compiler are you seeing the problem on?
+ multiple: true
+ options:
+ - GCC
+ - Clang
+ - MSVC
+ - Other (please let us know if the "What happened" box)
+ validations:
+ required: true
+ - type: textarea
+ id: logs
+ attributes:
+ label: Relevant log output
+ description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks.
+ render: shell
+ - type: checkboxes
+ id: terms
+ attributes:
+ label: Code of Conduct
+ description: By submitting this issue, you agree to follow our [Code of Conduct](https://example.com)
+ options:
+ - label: I agree to follow this project's Code of Conduct
+ required: true
diff --git a/src/libs/jwt-cpp-0.7.0/.github/ISSUE_TEMPLATE/feature-request.yml b/src/libs/jwt-cpp-0.7.0/.github/ISSUE_TEMPLATE/feature-request.yml
new file mode 100644
index 0000000..1912553
--- /dev/null
+++ b/src/libs/jwt-cpp-0.7.0/.github/ISSUE_TEMPLATE/feature-request.yml
@@ -0,0 +1,20 @@
+name: Feature Request 🧪
+description: Have a great idea? Find something is missing?
+labels: ["enhancement"]
+body:
+ - type: markdown
+ attributes:
+ value: |
+ We'd love to hear your idea(s)!
+ - type: input
+ id: question
+ attributes:
+ label: "What would you like to see added?"
+ validations:
+ required: true
+ - type: textarea
+ id: context
+ attributes:
+ label: Additional Context
+ validations:
+ required: true
diff --git a/src/libs/jwt-cpp-0.7.0/.github/ISSUE_TEMPLATE/support-question.yml b/src/libs/jwt-cpp-0.7.0/.github/ISSUE_TEMPLATE/support-question.yml
new file mode 100644
index 0000000..13912c0
--- /dev/null
+++ b/src/libs/jwt-cpp-0.7.0/.github/ISSUE_TEMPLATE/support-question.yml
@@ -0,0 +1,20 @@
+name: Support Question 🤹
+description: Have some questions? We can offer help.
+labels: ["question"]
+body:
+ - type: markdown
+ attributes:
+ value: |
+ Don't hesitate to ask any question you might have!
+ - type: input
+ id: question
+ attributes:
+ label: "What's your question?"
+ validations:
+ required: true
+ - type: textarea
+ id: context
+ attributes:
+ label: Additional Context
+ validations:
+ required: true
diff --git a/src/libs/jwt-cpp-0.7.0/.github/actions/badge/action.yml b/src/libs/jwt-cpp-0.7.0/.github/actions/badge/action.yml
new file mode 100644
index 0000000..acac733
--- /dev/null
+++ b/src/libs/jwt-cpp-0.7.0/.github/actions/badge/action.yml
@@ -0,0 +1,31 @@
+name: Regular badging sequence
+description: Publishes a badge based on the job status
+inputs:
+ category:
+ description: The subfolder where to group the badges
+ required: true
+ label:
+ description: The label to you in the badge (this should be unique for each badge in a category)
+ required: true
+ github_token:
+ description: The token to use to publish the changes
+ required: false
+ default: ${{ github.token }}
+runs:
+ using: composite
+ steps:
+ - if: job.status == 'success'
+ uses: ./.github/actions/badge/write
+ with:
+ category: ${{ inputs.category }}
+ label: ${{ inputs.label }}
+ - if: job.status == 'failure'
+ uses: ./.github/actions/badge/write
+ with:
+ category: ${{ inputs.category }}
+ label: ${{ inputs.label }}
+ message: Failing
+ color: red
+ - uses: ./.github/actions/badge/publish
+ with:
+ github_token: ${{ inputs.github_token }}
diff --git a/src/libs/jwt-cpp-0.7.0/.github/actions/badge/write/action.yml b/src/libs/jwt-cpp-0.7.0/.github/actions/badge/write/action.yml
new file mode 100644
index 0000000..1e0384c
--- /dev/null
+++ b/src/libs/jwt-cpp-0.7.0/.github/actions/badge/write/action.yml
@@ -0,0 +1,24 @@
+name: Make a Badge
+description: Creates a JSON file for use with Sheilds.io. The default is a "brightgreen" "Passing" badge
+inputs:
+ category:
+ description: The subfolder where to group the badges
+ required: true
+ label:
+ description: The label to you in the badge (this should be unqie for each badge in a category)
+ required: true
+ message:
+ description: The message you wish to have in the badge
+ required: false
+ default: "Passing"
+ color:
+ description: The color you wish the badge to be
+ required: false
+ default: "brightgreen"
+runs:
+ using: composite
+ steps:
+ - run: |
+ mkdir -p badges/${{ inputs.category }}/${{ inputs.label }}
+ echo '{ "schemaVersion": 1, "label": "${{ inputs.label }}", "message": "${{ inputs.message }}", "color": "${{ inputs.color }}" }' > badges/${{ inputs.category }}/${{ inputs.label }}/shields.json
+ shell: bash
diff --git a/src/libs/jwt-cpp-0.7.0/.github/actions/install/boost-json/action.yml b/src/libs/jwt-cpp-0.7.0/.github/actions/install/boost-json/action.yml
new file mode 100644
index 0000000..28504f9
--- /dev/null
+++ b/src/libs/jwt-cpp-0.7.0/.github/actions/install/boost-json/action.yml
@@ -0,0 +1,17 @@
+name: Install Boost.JSON
+description: Install Boost.JSON for building test application
+inputs:
+ version:
+ description: The desired Boost.JSON version to install
+ required: false
+ default: "1.78.0"
+runs:
+ using: composite
+ steps:
+ - run: |
+ cd /tmp
+ wget https://github.com/boostorg/json/archive/boost-${{ inputs.version }}.tar.gz
+ tar -zxf /tmp/boost-${{ inputs.version }}.tar.gz
+ cd json-boost-${{ inputs.version }}
+ sudo cp -vR include/boost /usr/local/include
+ shell: bash
diff --git a/src/libs/jwt-cpp-0.7.0/.github/actions/install/cmake/action.yml b/src/libs/jwt-cpp-0.7.0/.github/actions/install/cmake/action.yml
new file mode 100644
index 0000000..8627f7e
--- /dev/null
+++ b/src/libs/jwt-cpp-0.7.0/.github/actions/install/cmake/action.yml
@@ -0,0 +1,39 @@
+name: Install CMake
+description: Download, Build and Cache CMake
+inputs:
+ version:
+ description: The desired CMake version to install
+ required: true
+ url:
+ description: "The corresponding URL to download the source code from"
+ required: true
+runs:
+ using: composite
+ steps:
+ - name: Cache CMake
+ id: cache-cmake
+ uses: actions/cache@v3
+ with:
+ path: cmake-${{ inputs.version }}
+ key: ${{ runner.name }}-${{ runner.os }}-${{ runner.arch }}-cmake-${{ inputs.version }}
+ - name: Build cmake
+ if: steps.cache-cmake.outputs.cache-hit != 'true'
+ run: |
+ wget ${{ inputs.url }}
+ tar -zxf cmake-${{ inputs.version }}.tar.gz
+ cd cmake-${{ inputs.version }}
+ ./bootstrap
+ make -j $(nproc)
+ shell: bash
+ - name: Install cmake
+ run: |
+ cd cmake-${{ inputs.version }}
+ # 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
+ shell: bash
diff --git a/src/libs/jwt-cpp-0.7.0/.github/actions/install/danielaparker-jsoncons/action.yml b/src/libs/jwt-cpp-0.7.0/.github/actions/install/danielaparker-jsoncons/action.yml
new file mode 100644
index 0000000..729d2d3
--- /dev/null
+++ b/src/libs/jwt-cpp-0.7.0/.github/actions/install/danielaparker-jsoncons/action.yml
@@ -0,0 +1,18 @@
+name: Install jsoncons
+description: Install jsoncons for building test application
+inputs:
+ version:
+ description: The desired jsoncons version to install
+ required: false
+ default: "0.168.7"
+runs:
+ using: composite
+ steps:
+ - run: |
+ cd /tmp
+ wget https://github.com/danielaparker/jsoncons/archive/v${{ inputs.version }}.tar.gz
+ tar -zxf /tmp/v${{ inputs.version }}.tar.gz
+ cd jsoncons-${{ inputs.version }}
+ cmake .
+ sudo cmake --install .
+ shell: bash
diff --git a/src/libs/jwt-cpp-0.7.0/.github/actions/install/gtest/action.yml b/src/libs/jwt-cpp-0.7.0/.github/actions/install/gtest/action.yml
new file mode 100644
index 0000000..11a6c5f
--- /dev/null
+++ b/src/libs/jwt-cpp-0.7.0/.github/actions/install/gtest/action.yml
@@ -0,0 +1,15 @@
+name: Install GTest
+description: Install and setup GTest for linking and building test application
+runs:
+ using: composite
+ steps:
+ - run: sudo apt-get install libgtest-dev lcov
+ shell: bash
+ - run: (cd /usr/src/gtest && sudo `which cmake` .)
+ shell: bash
+ - run: sudo make -j $(nproc) -C /usr/src/gtest
+ shell: bash
+ - run: sudo ln -s /usr/src/gtest/libgtest.a /usr/lib/libgtest.a
+ shell: bash
+ - run: sudo ln -s /usr/src/gtest/libgtest_main.a /usr/lib/libgtest_main.a
+ shell: bash
diff --git a/src/libs/jwt-cpp-0.7.0/.github/actions/install/kazuho-picojson/action.yml b/src/libs/jwt-cpp-0.7.0/.github/actions/install/kazuho-picojson/action.yml
new file mode 100644
index 0000000..caf8875
--- /dev/null
+++ b/src/libs/jwt-cpp-0.7.0/.github/actions/install/kazuho-picojson/action.yml
@@ -0,0 +1,17 @@
+name: Install PicoJSON
+description: Install PicoJSON for building test application
+inputs:
+ version:
+ description: The desired PicoJSON version to install
+ required: false
+ default: "v1.3.0"
+runs:
+ using: composite
+ steps:
+ - run: |
+ cd /tmp
+ wget https://github.com/kazuho/picojson/archive/${{ inputs.version }}.tar.gz
+ tar -zxf /tmp/${{ inputs.version }}.tar.gz
+ cd picojson-${{ inputs.version }}
+ sudo cp -v picojson.h /usr/local/include/picojson
+ shell: bash
diff --git a/src/libs/jwt-cpp-0.7.0/.github/actions/install/libressl/action.yml b/src/libs/jwt-cpp-0.7.0/.github/actions/install/libressl/action.yml
new file mode 100644
index 0000000..709ad70
--- /dev/null
+++ b/src/libs/jwt-cpp-0.7.0/.github/actions/install/libressl/action.yml
@@ -0,0 +1,19 @@
+name: Install LibreSSL
+description: Install and setup LibreSSL for linking and building test application
+inputs:
+ version:
+ description: The desired LibreSSL version to install
+ required: false
+ default: "3.3.0"
+runs:
+ using: composite
+ steps:
+ - run: |
+ wget https://raw.githubusercontent.com/libressl-portable/portable/v${{ inputs.version }}/FindLibreSSL.cmake -P cmake/
+ cd /tmp
+ wget https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-${{ inputs.version }}.tar.gz
+ tar -zvxf /tmp/libressl-${{ inputs.version }}.tar.gz
+ cd libressl-${{ inputs.version }}
+ ./configure
+ sudo make -j $(nproc) install
+ shell: bash
diff --git a/src/libs/jwt-cpp-0.7.0/.github/actions/install/nlohmann-json/action.yml b/src/libs/jwt-cpp-0.7.0/.github/actions/install/nlohmann-json/action.yml
new file mode 100644
index 0000000..7300aea
--- /dev/null
+++ b/src/libs/jwt-cpp-0.7.0/.github/actions/install/nlohmann-json/action.yml
@@ -0,0 +1,18 @@
+name: Install nlohmann-json
+description: Install nlohmann-json for building test application
+inputs:
+ version:
+ description: The desired nlohmann-json version to install
+ required: false
+ default: "3.11.2"
+runs:
+ using: composite
+ steps:
+ - run: |
+ cd /tmp
+ wget https://github.com/nlohmann/json/archive/v${{ inputs.version }}.tar.gz
+ tar -zxf /tmp/v${{ inputs.version }}.tar.gz
+ cd json-${{ inputs.version }}
+ cmake .
+ sudo cmake --install .
+ shell: bash
diff --git a/src/libs/jwt-cpp-0.7.0/.github/actions/install/openssl/action.yml b/src/libs/jwt-cpp-0.7.0/.github/actions/install/openssl/action.yml
new file mode 100644
index 0000000..7b161b6
--- /dev/null
+++ b/src/libs/jwt-cpp-0.7.0/.github/actions/install/openssl/action.yml
@@ -0,0 +1,19 @@
+name: Install OpenSSL
+description: Install and setup OpenSSL for linking and building test application
+inputs:
+ version:
+ description: The desired OpenSSL version to install
+ required: false
+ default: "openssl-3.0.0"
+runs:
+ using: composite
+ steps:
+ - run: |
+ cd /tmp
+ wget https://github.com/openssl/openssl/archive/refs/tags/${{ inputs.version }}.tar.gz
+ tar -zxf /tmp/${{ inputs.version }}.tar.gz
+ cd openssl-${{ inputs.version }}
+ ./config --prefix=/tmp --libdir=lib
+ make -j $(nproc)
+ sudo make -j $(nproc) install_sw
+ shell: bash
diff --git a/src/libs/jwt-cpp-0.7.0/.github/actions/install/wolfssl/action.yml b/src/libs/jwt-cpp-0.7.0/.github/actions/install/wolfssl/action.yml
new file mode 100644
index 0000000..bced147
--- /dev/null
+++ b/src/libs/jwt-cpp-0.7.0/.github/actions/install/wolfssl/action.yml
@@ -0,0 +1,22 @@
+name: Install wolfSSL
+description: Install and setup wolfSSL for linking and building test application
+inputs:
+ version:
+ description: The desired stable wolfSSL version to install
+ required: false
+ default: "v4.8.1-stable"
+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
+ shell: bash
diff --git a/src/libs/jwt-cpp-0.7.0/.github/actions/process-linting-results/action.yml b/src/libs/jwt-cpp-0.7.0/.github/actions/process-linting-results/action.yml
new file mode 100644
index 0000000..7b0749d
--- /dev/null
+++ b/src/libs/jwt-cpp-0.7.0/.github/actions/process-linting-results/action.yml
@@ -0,0 +1,26 @@
+name: Process Linting Results
+description: Add a comment to a pull request with when `git diff` present and save the changes as an artifact so they can be applied manually
+inputs:
+ linter_name:
+ description: The name of the tool to credit in the comment
+ required: true
+runs:
+ using: "composite"
+ steps:
+ - run: git add --update
+ shell: bash
+ - id: stage
+ #continue-on-error: true
+ uses: Thalhammer/patch-generator-action@v2
+
+ # Unfortunately the previous action reports a failure so nothing else can run
+ # partially a limitation on composite actions since `continue-on-error` is not
+ # yet supported
+ - if: steps.stage.outputs.result == 'dirty'
+ uses: actions-ecosystem/action-create-comment@v1
+ with:
+ github_token: ${{ github.token }}
+ body: |
+ Hello, @${{ github.actor }}! `${{ inputs.linter_name }}` had some concerns :scream:
+ - run: exit $(git status -uno -s | wc -l)
+ shell: bash
diff --git a/src/libs/jwt-cpp-0.7.0/.github/actions/render/defaults/action.yml b/src/libs/jwt-cpp-0.7.0/.github/actions/render/defaults/action.yml
new file mode 100644
index 0000000..af28f79
--- /dev/null
+++ b/src/libs/jwt-cpp-0.7.0/.github/actions/render/defaults/action.yml
@@ -0,0 +1,52 @@
+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"
+runs:
+ using: composite
+ steps:
+ - uses: actions/setup-node@v3
+ with:
+ node-version: 14
+ - run: npm install mustache
+ shell: bash
+ - uses: actions/github-script@v6
+ env:
+ TRAITS_NAME: ${{ inputs.traits_name }}
+ LIBRARY_NAME: ${{ inputs.library_name }}
+ LIBRARY_URL: ${{ inputs.library_url }}
+ DISABLE_DEFAULT_TRAITS: ${{ inputs.disable_default_traits }}
+ with:
+ 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,
+ })
+ const outputDir = path.join('include', 'jwt-cpp', 'traits', TRAITS_NAME.replace('_', '-'))
+ fs.mkdirSync(outputDir, { recursive: true })
+ fs.writeFileSync(path.join(outputDir, 'defaults.h'), content)
diff --git a/src/libs/jwt-cpp-0.7.0/.github/actions/render/tests/action.yml b/src/libs/jwt-cpp-0.7.0/.github/actions/render/tests/action.yml
new file mode 100644
index 0000000..7f79862
--- /dev/null
+++ b/src/libs/jwt-cpp-0.7.0/.github/actions/render/tests/action.yml
@@ -0,0 +1,39 @@
+name: "Render `TraitsTests.cpp` Template"
+description: "Generate the `TraitsTests.cpp` 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
+ test_suite_name:
+ description: "Name of the JSON library."
+ required: true
+runs:
+ using: composite
+ steps:
+ - uses: actions/setup-node@v3
+ with:
+ node-version: 14
+ - run: npm install mustache
+ shell: bash
+ - uses: actions/github-script@v6
+ env:
+ TRAITS_NAME: ${{ inputs.traits_name }}
+ SUITE_NAME: ${{ inputs.test_suite_name }}
+ with:
+ script: |
+ const mustache = require('mustache')
+ const path = require('path')
+ const fs = require('fs')
+
+ const { TRAITS_NAME, SUITE_NAME } = process.env
+ console.log(`Rendering ${TRAITS_NAME}!`)
+
+ const template = fs.readFileSync(path.join('tests', 'traits', 'TraitsTest.cpp.mustache'), 'utf8')
+ const content = mustache.render(template, {
+ traits_name: TRAITS_NAME,
+ traits_dir: TRAITS_NAME.replace('_', '-'),
+ test_suite_name: SUITE_NAME,
+ })
+ const outputDir = path.join('tests', 'traits')
+ fs.mkdirSync(outputDir, { recursive: true })
+ fs.writeFileSync(path.join(outputDir, `${SUITE_NAME}.cpp`), content)
diff --git a/src/libs/jwt-cpp-0.7.0/.github/logo.svg b/src/libs/jwt-cpp-0.7.0/.github/logo.svg
new file mode 100644
index 0000000..63017cb
--- /dev/null
+++ b/src/libs/jwt-cpp-0.7.0/.github/logo.svg
@@ -0,0 +1,16 @@
+
+
\ No newline at end of file
diff --git a/src/libs/jwt-cpp-0.7.0/.github/overrides.css b/src/libs/jwt-cpp-0.7.0/.github/overrides.css
new file mode 100644
index 0000000..42d2421
--- /dev/null
+++ b/src/libs/jwt-cpp-0.7.0/.github/overrides.css
@@ -0,0 +1,19 @@
+@media (prefers-color-scheme: dark) {
+ table.markdownTable, table.fieldtable {
+ width: auto;
+ }
+
+ html:not(.light-mode) {
+ /* define dark-mode variable overrides here if you DON'T use doxygen-awesome-darkmode-toggle.js */
+ }
+
+ html:not(.light-mode) div.contents table img {
+ filter: none;
+ }
+
+ html:not(.light-mode) div.qindex,
+ html:not(.light-mode) div.navtab {
+ background-color: var(--side-nav-background);
+ border: 1px solid var(--separator-color);
+ }
+}
diff --git a/src/libs/jwt-cpp-0.7.0/.github/security.md b/src/libs/jwt-cpp-0.7.0/.github/security.md
new file mode 100644
index 0000000..7680001
--- /dev/null
+++ b/src/libs/jwt-cpp-0.7.0/.github/security.md
@@ -0,0 +1,21 @@
+# Reporting Security Issues
+
+If you believe you have found a security vulnerability in JWT-CPP, we encourage you to let us know right away.
+We will investigate all legitimate reports and do our best to quickly fix the problem.
+
+Please refer to the section below for our responsible disclosure policy:
+
+## Disclosure Policy
+
+Please contact one or more of the maintainers using the email advertised on our GitHub profiles:
+
+- [@Thalhammer](https://github.com/Thalhammer)
+- [@prince-chrismc](https://github.com/prince-chrismc)
+
+Please provide as many details as possible about version, platform, and workflow as possible.
+Having steps and reproducible code is better and is always greatly appreciated.
+
+## Supported Version
+
+Typically, fixes will be immediately released as a new patch release. However, older affected versions may receive
+a new patch upon request.
diff --git a/src/libs/jwt-cpp-0.7.0/.github/workflows/cmake.yml b/src/libs/jwt-cpp-0.7.0/.github/workflows/cmake.yml
new file mode 100644
index 0000000..b7b53ed
--- /dev/null
+++ b/src/libs/jwt-cpp-0.7.0/.github/workflows/cmake.yml
@@ -0,0 +1,233 @@
+name: CMake CI
+
+on:
+ push:
+ branches: [master]
+ pull_request:
+ branches: [master]
+ paths:
+ - "CMakeLists.txt"
+ - "cmake/**"
+ - "include/jwt-cpp/**"
+ - "tests/cmake/**"
+ - ".github/actions/**"
+ - ".github/workflows/cmake.yml"
+
+jobs:
+ default-linux:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: lukka/get-cmake@latest
+
+ - name: setup
+ run: |
+ mkdir build
+ cd build
+ cmake .. -DJWT_BUILD_EXAMPLES=OFF
+ sudo make install
+
+ - name: test
+ run: |
+ cd tests/cmake
+ cmake . -DTEST:STRING="defaults-enabled" -DCMAKE_FIND_DEBUG_MODE=1
+ cmake --build .
+
+ default-linux-with-examples:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: lukka/get-cmake@latest
+
+ - name: setup
+ run: |
+ mkdir build
+ cd build
+ cmake ..
+ sudo cmake --install .
+
+ - name: test
+ run: |
+ cd tests/cmake
+ cmake . -DTEST:STRING="defaults-enabled"
+ cmake --build .
+
+ default-win:
+ runs-on: windows-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: lukka/get-cmake@latest
+ - run: choco install openssl
+
+ - name: setup
+ run: |
+ cmake -E make_directory build
+ cd build
+ cmake .. -DJWT_BUILD_EXAMPLES=OFF
+ cmake --install .
+
+ - name: test
+ run: |
+ cd tests/cmake
+ cmake . -DTEST:STRING="defaults-enabled" -DCMAKE_FIND_DEBUG_MODE=1
+ cmake --build .
+
+ min-req:
+ runs-on: ubuntu-20.04
+ steps:
+ - uses: actions/checkout@v3
+ - uses: ./.github/actions/install/cmake
+ with:
+ version: "3.14.7"
+ url: "https://cmake.org/files/v3.14/cmake-3.14.7.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:
+ - 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 . -DCMAKE_PREFIX_PATH="/opt/jwt-cpp" -DTEST:STRING="defaults-enabled" -DCMAKE_FIND_DEBUG_MODE=1
+ cmake --build .
+
+ custom-install-win:
+ runs-on: windows-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: lukka/get-cmake@latest
+ - run: choco install openssl
+
+ - name: setup
+ run: |
+ cmake -E make_directory build
+ cd build
+ cmake .. -DCMAKE_INSTALL_PREFIX:STRING="C:/jwt-cpp" -DJWT_BUILD_EXAMPLES=OFF
+ cmake --install .
+
+ - name: test
+ run: |
+ cd tests/cmake
+ cmake . -DCMAKE_PREFIX_PATH="C:/jwt-cpp" -DTEST:STRING="defaults-enabled" -DCMAKE_FIND_DEBUG_MODE=1
+ cmake --build .
+
+ no-pico:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: lukka/get-cmake@latest
+
+ - name: setup
+ run: |
+ mkdir build
+ cd build
+ cmake .. -DJWT_DISABLE_PICOJSON=ON -DJWT_BUILD_EXAMPLES=OFF
+ sudo make install
+
+ - name: test
+ run: |
+ cd tests/cmake
+ cmake . -DCMAKE_PREFIX_PATH=/usr/local/cmake -DTEST:STRING="picojson-is-disabled"
+ cmake --build .
+
+ no-base64:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: lukka/get-cmake@latest
+
+ - name: setup
+ run: |
+ mkdir build
+ cd build
+ cmake .. -DJWT_DISABLE_BASE64=ON -DJWT_BUILD_EXAMPLES=OFF
+ sudo make install
+
+ - name: test
+ run: |
+ cd tests/cmake
+ cmake . -DCMAKE_PREFIX_PATH=/usr/local/cmake -DTEST:STRING="base64-is-disabled"
+ cmake --build .
+
+ with-libressl:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: lukka/get-cmake@latest
+ - uses: ./.github/actions/install/libressl
+
+ - name: setup
+ run: |
+ mkdir build
+ cd build
+ cmake .. -DJWT_SSL_LIBRARY:STRING="LibreSSL" -DJWT_BUILD_EXAMPLES=OFF
+ sudo make install
+
+ - name: test
+ run: |
+ cd tests/cmake
+ cmake . -DCMAKE_PREFIX_PATH=/usr/local/cmake -DCMAKE_MODULE_PATH=../../cmake -DTEST:STRING="libressl-is-used"
+ cmake --build .
+
+ with-wolfssl:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: lukka/get-cmake@latest
+ - uses: ./.github/actions/install/wolfssl
+ with:
+ version: ab3bbf11e9d39b52e24bf42bbc6babc16d4a669b
+
+ - name: setup
+ run: |
+ mkdir build
+ cd build
+ cmake .. -DJWT_SSL_LIBRARY:STRING="wolfSSL" -DJWT_BUILD_EXAMPLES=OFF
+ sudo make install
+
+ - name: test
+ run: |
+ cd tests/cmake
+ cmake . -DTEST:STRING="wolfssl-is-used"
+ cmake --build .
+
+ with-hunter:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: lukka/get-cmake@latest
+
+ - name: setup
+ run: |
+ mkdir build
+ cd build
+ cmake .. -DJWT_BUILD_TESTS=ON -DJWT_BUILD_EXAMPLES=ON -DJWT_ENABLE_COVERAGE=OFF -DHUNTER_ENABLED=ON
+ make
+
+ - name: test
+ run: |
+ cd build
+ ./tests/jwt-cpp-test
diff --git a/src/libs/jwt-cpp-0.7.0/.github/workflows/cross-platform.yml b/src/libs/jwt-cpp-0.7.0/.github/workflows/cross-platform.yml
new file mode 100644
index 0000000..5a1211e
--- /dev/null
+++ b/src/libs/jwt-cpp-0.7.0/.github/workflows/cross-platform.yml
@@ -0,0 +1,54 @@
+name: Cross-Platform CI
+
+on:
+ push:
+ branches: [master]
+ pull_request:
+ branches: [master]
+jobs:
+ build:
+ runs-on: ${{ matrix.os }}
+ strategy:
+ matrix:
+ os: [macos-latest, windows-latest, ubuntu-latest]
+
+ steps:
+ - 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@v3
+ - run: cmake -E make_directory ${{ github.workspace }}/build
+
+ - name: configure
+ shell: bash # access regardless of the host operating system
+ working-directory: ${{ github.workspace }}/build
+ run: cmake $GITHUB_WORKSPACE -DJWT_BUILD_EXAMPLES=ON
+
+ - 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
+
+ - if: matrix.os == 'windows-latest'
+ name: test
+ working-directory: ${{ github.workspace }}/build
+ run: |
+ example\Debug\rsa-create.exe
+ example\Debug\rsa-verify.exe
+
+ - if: github.event_name == 'push' && always()
+ uses: ./.github/actions/badge
+ with:
+ category: cross-platform
+ label: ${{ matrix.os }}
diff --git a/src/libs/jwt-cpp-0.7.0/.github/workflows/documentation.yml b/src/libs/jwt-cpp-0.7.0/.github/workflows/documentation.yml
new file mode 100644
index 0000000..da68441
--- /dev/null
+++ b/src/libs/jwt-cpp-0.7.0/.github/workflows/documentation.yml
@@ -0,0 +1,21 @@
+name: Documentation CI
+
+on:
+ push:
+ branches: [master]
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - run: sudo apt install graphviz
+ - run: wget https://raw.githubusercontent.com/jothepro/doxygen-awesome-css/v1.6.1/doxygen-awesome.css
+ - run: wget https://raw.githubusercontent.com/jothepro/doxygen-awesome-css/v1.6.1/doxygen-awesome-sidebar-only.css
+ - uses: mattnotmitt/doxygen-action@v1
+ - name: deploy
+ uses: peaceiris/actions-gh-pages@v3
+ with:
+ github_token: ${{ secrets.GITHUB_TOKEN }}
+ publish_dir: ./doxy/html
+ force_orphan: true
diff --git a/src/libs/jwt-cpp-0.7.0/.github/workflows/jwt.yml b/src/libs/jwt-cpp-0.7.0/.github/workflows/jwt.yml
new file mode 100644
index 0000000..04ab707
--- /dev/null
+++ b/src/libs/jwt-cpp-0.7.0/.github/workflows/jwt.yml
@@ -0,0 +1,104 @@
+name: JWT CI
+
+on:
+ push:
+ branches: [master]
+ pull_request:
+ branches: [master]
+
+jobs:
+ coverage:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: lukka/get-cmake@latest
+ - uses: ./.github/actions/install/gtest
+ - uses: ./.github/actions/install/danielaparker-jsoncons
+ - uses: ./.github/actions/install/boost-json
+
+ - name: configure
+ run: |
+ mkdir build
+ cd build
+ cmake .. -DJWT_BUILD_EXAMPLES=OFF -DJWT_BUILD_TESTS=ON -DJWT_ENABLE_COVERAGE=ON -DCMAKE_BUILD_TYPE=Debug
+
+ - name: run
+ working-directory: build
+ run: make jwt-cpp-test coverage
+
+ - uses: coverallsapp/github-action@1.1.3
+ with:
+ github-token: ${{ secrets.GITHUB_TOKEN }}
+ path-to-lcov: build/coverage.info
+
+ fuzzing:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: lukka/get-cmake@latest
+ - 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
+
+ - 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
+
+ asan: ## Based on https://gist.github.com/jlblancoc/44be9d4d466f0a973b1f3808a8e56782
+ runs-on: ubuntu-20.04
+ steps:
+ - uses: actions/checkout@v3
+ - uses: lukka/get-cmake@latest
+ - uses: ./.github/actions/install/gtest
+
+ - 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"
+
+ - 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
+ ./tests/jwt-cpp-test
+
+ ubsan:
+ runs-on: ubuntu-20.04
+ steps:
+ - uses: actions/checkout@v3
+ - 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"
+
+ - name: run
+ working-directory: build
+ run: |
+ make
+ export UBSAN_OPTIONS=print_stacktrace=1
+ ./example/rsa-create
+ ./example/rsa-verify
+ ./tests/jwt-cpp-test
diff --git a/src/libs/jwt-cpp-0.7.0/.github/workflows/lint.yml b/src/libs/jwt-cpp-0.7.0/.github/workflows/lint.yml
new file mode 100644
index 0000000..bff4a71
--- /dev/null
+++ b/src/libs/jwt-cpp-0.7.0/.github/workflows/lint.yml
@@ -0,0 +1,123 @@
+name: Lint CI
+
+on:
+ push:
+ branches: [master]
+ pull_request:
+ branches: [master]
+
+jobs:
+ clang-format:
+ runs-on: ubuntu-22.04
+ strategy:
+ fail-fast: false
+ matrix:
+ files:
+ - "include/jwt-cpp/*.h"
+ - "include/jwt-cpp/traits/**/*.h"
+ - "tests/*.cpp"
+ - "tests/**/*.cpp"
+ - "example/*.cpp"
+ - "example/**/*.cpp"
+ steps:
+ - run: |
+ sudo apt-get install clang-format-14
+ shopt -s globstar
+ - uses: actions/checkout@v3
+ - run: clang-format-14 -i ${{ matrix.files }}
+ - uses: ./.github/actions/process-linting-results
+ with:
+ linter_name: clang-format
+
+ cmake-format:
+ runs-on: ubuntu-20.04
+ strategy:
+ fail-fast: false
+ matrix:
+ files: ["**/CMakeLists.txt", "cmake/code-coverage.cmake"]
+ steps:
+ - uses: actions/setup-python@v2
+ with:
+ python-version: "3.x"
+ - run: pip install cmakelang
+ - run: shopt -s globstar
+ - uses: actions/checkout@v3
+ - run: cmake-format -i ${{ matrix.files }}
+ - uses: ./.github/actions/process-linting-results
+ with:
+ linter_name: cmake-format
+
+ clang-tidy:
+ runs-on: ubuntu-20.04
+ steps:
+ - run: sudo apt-get install clang-tidy
+ - uses: lukka/get-cmake@latest
+ - uses: actions/checkout@v3
+ - name: configure
+ run: |
+ mkdir build
+ cd build
+ cmake .. -DCMAKE_CXX_CLANG_TIDY="clang-tidy;-fix"
+ - name: run
+ working-directory: build
+ run: make
+ - uses: ./.github/actions/process-linting-results
+ with:
+ linter_name: clang-tidy
+
+ render-defaults:
+ runs-on: ubuntu-20.04
+ strategy:
+ fail-fast: false
+ matrix:
+ traits:
+ - { name: "boost_json", library: "Boost.JSON", url: "https://github.com/boostorg/json", disable_pico: true }
+ - { name: "danielaparker_jsoncons", library: "jsoncons", url: "https://github.com/danielaparker/jsoncons", disable_pico: true }
+ - { name: "kazuho_picojson", library: "picojson", url: "https://github.com/kazuho/picojson", disable_pico: false }
+ - { name: "nlohmann_json", library: "JSON for Modern C++", url: "https://github.com/nlohmann/json", disable_pico: true }
+ name: render-defaults (${{ matrix.traits.name }})
+ steps:
+ - uses: actions/checkout@v3
+ - uses: ./.github/actions/render/defaults
+ with:
+ traits_name: ${{ matrix.traits.name }}
+ library_name: ${{ matrix.traits.library }}
+ library_url: ${{ matrix.traits.url }}
+ disable_default_traits: ${{ matrix.traits.disable_pico }}
+ - run: git add include/jwt-cpp/traits/*
+ - uses: ./.github/actions/process-linting-results
+ with:
+ linter_name: render-defaults
+
+ render-tests:
+ runs-on: ubuntu-20.04
+ strategy:
+ fail-fast: false
+ matrix:
+ traits:
+ # - { name: "boost_json", suite: "BoostJsonTest" } # Currently needs work arounds for API limitations
+ - { name: "danielaparker_jsoncons", suite: "JsonconsTest" }
+ # - { name: "kazuho_picojson", suite: "PicoJsonTest" } # Currently the default everything tests against this!
+ - { name: "nlohmann_json", suite: "NlohmannTest" }
+ name: render-tests (${{ matrix.traits.name }})
+ steps:
+ - uses: actions/checkout@v3
+ - run: shopt -s globstar
+ - uses: ./.github/actions/render/tests
+ with:
+ traits_name: ${{ matrix.traits.name }}
+ test_suite_name: ${{ matrix.traits.suite }}
+ - run: clang-format -i tests/**/*.cpp
+ - run: git add tests/traits/*
+ - uses: ./.github/actions/process-linting-results
+ with:
+ linter_name: render-tests
+
+ line-ending:
+ runs-on: ubuntu-20.04
+ steps:
+ - uses: actions/checkout@v3
+ - run: git add --renormalize .
+ - uses: ./.github/actions/process-linting-results
+ with:
+ linter_name: line-ending
diff --git a/src/libs/jwt-cpp-0.7.0/.github/workflows/nuget.yml b/src/libs/jwt-cpp-0.7.0/.github/workflows/nuget.yml
new file mode 100644
index 0000000..03d5776
--- /dev/null
+++ b/src/libs/jwt-cpp-0.7.0/.github/workflows/nuget.yml
@@ -0,0 +1,27 @@
+name: Nuget CD
+
+on:
+ # Allows you to run this workflow manually from the Actions tab
+ workflow_dispatch:
+ # https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#release
+ release:
+ types: [published]
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - name: Setup NuGet
+ uses: NuGet/setup-nuget@v1
+ with:
+ nuget-api-key: ${{ secrets.nuget_api_key }}
+
+ - name: Create NuGet pkg
+ working-directory: ./nuget
+ run: nuget pack jwt-cpp.nuspec
+
+ - name: Publish NuGet pkg
+ working-directory: ./nuget
+ run: nuget push *.nupkg -Source 'https://api.nuget.org/v3/index.json'
+
diff --git a/src/libs/jwt-cpp-0.7.0/.github/workflows/ssl.yml b/src/libs/jwt-cpp-0.7.0/.github/workflows/ssl.yml
new file mode 100644
index 0000000..fd9115d
--- /dev/null
+++ b/src/libs/jwt-cpp-0.7.0/.github/workflows/ssl.yml
@@ -0,0 +1,110 @@
+name: SSL Compatibility CI
+
+on:
+ push:
+ branches: [master]
+ pull_request:
+ branches: [master]
+
+jobs:
+ openssl:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ openssl:
+ - { tag: "openssl-3.0.5", name: "3.0.5" }
+ - { tag: "OpenSSL_1_1_1q", name: "1.1.1q" }
+ - { tag: "OpenSSL_1_1_0i", name: "1.1.0i" } # Do not bump, there's a broken in the autoconfig script and it's not maintained
+ - { tag: "OpenSSL_1_0_2u", name: "1.0.2u" }
+ - { tag: "OpenSSL_1_0_1u", name: "1.0.1u" }
+ name: OpenSSL ${{ matrix.openssl.name }}
+ steps:
+ - uses: actions/checkout@v3
+ - uses: lukka/get-cmake@latest
+ - uses: ./.github/actions/install/gtest
+ - uses: ./.github/actions/install/openssl
+ with:
+ version: ${{ matrix.openssl.tag }}
+
+ - name: configure
+ run: cmake . -DJWT_BUILD_TESTS=ON -DOPENSSL_ROOT_DIR=/tmp
+ - run: make
+ - name: test
+ run: ./tests/jwt-cpp-test
+
+ - if: github.event_name == 'push' && always()
+ uses: ./.github/actions/badge
+ with:
+ category: openssl
+ label: ${{ matrix.openssl.name }}
+
+ openssl-no-deprecated:
+ runs-on: ubuntu-latest
+ name: OpenSSL 3.0 No Deprecated
+ steps:
+ - uses: actions/checkout@v3
+ - uses: lukka/get-cmake@latest
+ - uses: ./.github/actions/install/gtest
+ - uses: ./.github/actions/install/openssl
+ with:
+ 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
+
+ libressl:
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ libressl: ["3.5.3", "3.4.3", "3.3.6"]
+ name: LibreSSL ${{ matrix.libressl }}
+ steps:
+ - uses: actions/checkout@v3
+ - uses: lukka/get-cmake@latest
+ - uses: ./.github/actions/install/gtest
+ - uses: ./.github/actions/install/libressl
+ with:
+ version: ${{ matrix.libressl }}
+
+ - name: configure
+ run: cmake . -DJWT_BUILD_TESTS=ON -DJWT_SSL_LIBRARY:STRING=LibreSSL
+ - run: make
+ - name: test
+ run: ./tests/jwt-cpp-test
+
+ - if: github.event_name == 'push' && always()
+ uses: ./.github/actions/badge
+ with:
+ category: libressl
+ label: ${{ matrix.libressl }}
+
+ wolfssl:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ wolfssl:
+ - { ref: "v5.1.1-stable", name: "5.1.1"}
+ - { ref: "v5.2.0-stable", name: "5.2.0" }
+ - { ref: "v5.3.0-stable", name: "5.3.0"}
+ name: wolfSSL ${{ matrix.wolfssl.name }}
+ steps:
+ - uses: actions/checkout@v3
+ - uses: lukka/get-cmake@latest
+ - uses: ./.github/actions/install/gtest
+ - uses: ./.github/actions/install/wolfssl
+ with:
+ version: ${{ matrix.wolfssl.ref }}
+
+ - name: configure
+ run: cmake . -DJWT_BUILD_TESTS=ON -DJWT_SSL_LIBRARY:STRING=wolfSSL
+ - run: make
+ - name: test
+ run: ./tests/jwt-cpp-test
+
+ - if: github.event_name == 'push' && always()
+ uses: ./.github/actions/badge
+ with:
+ category: wolfssl
+ label: ${{ matrix.wolfssl.name }}
diff --git a/src/libs/jwt-cpp-0.7.0/.github/workflows/targets.yml b/src/libs/jwt-cpp-0.7.0/.github/workflows/targets.yml
new file mode 100644
index 0000000..b30e2a8
--- /dev/null
+++ b/src/libs/jwt-cpp-0.7.0/.github/workflows/targets.yml
@@ -0,0 +1,75 @@
+name: Specific Targets CI
+
+on:
+ push:
+ branches: [master]
+ pull_request:
+ branches: [master]
+ paths:
+ - "CMakeLists.txt"
+ - "cmake/**"
+ - "include/jwt-cpp/**"
+ - "tests/cmake/**"
+ - ".github/actions/**"
+ - ".github/workflows/targets.yml"
+
+jobs:
+ gcc-4-8:
+ name: GCC 4.8
+ runs-on: ubuntu-latest
+ container:
+ image: ubuntu:bionic-20230530 # 18.04
+ env:
+ CC: /usr/bin/gcc-4.8
+ CXX: /usr/bin/g++-4.8
+ steps:
+ - run: |
+ apt-get update
+ apt-get install -y g++-4.8 wget make libssl-dev
+ - uses: actions/checkout@v3
+ - uses: ./.github/actions/install/cmake
+ with:
+ version: "3.26.3"
+ url: "https://cmake.org/files/v3.26/cmake-3.26.3.tar.gz"
+
+ - name: setup
+ run: |
+ mkdir build
+ cd build
+ cmake ..
+ cmake --install .
+ - name: test
+ working-directory: tests/cmake
+ run: |
+ CC=gcc-4.8 CXX=g++-4.8 cmake . -DTEST:STRING="defaults-enabled"
+ cmake --build .
+
+ gcc-12:
+ runs-on: ubuntu-latest
+ container:
+ image: ubuntu:jammy-20231004 # 22.04
+ env:
+ CC: /usr/bin/gcc-12
+ CXX: /usr/bin/g++-12
+ steps:
+ - run: |
+ apt-get update
+ apt-get install -y g++-12 wget make libssl-dev
+ - uses: actions/checkout@v3
+ - uses: ./.github/actions/install/cmake
+ with:
+ version: "3.26.3"
+ url: "https://cmake.org/files/v3.26/cmake-3.26.3.tar.gz"
+
+ - name: setup
+ run: |
+ mkdir build
+ cd build
+ cmake ..
+ cmake --install .
+
+ - name: test
+ working-directory: tests/cmake
+ run: |
+ CC=gcc-12 CXX=g++-12 cmake . -DCMAKE_CXX_STANDARD=20 -DTEST:STRING="defaults-enabled"
+ cmake --build .
diff --git a/src/libs/jwt-cpp-0.7.0/.github/workflows/traits.yml b/src/libs/jwt-cpp-0.7.0/.github/workflows/traits.yml
new file mode 100644
index 0000000..a86568f
--- /dev/null
+++ b/src/libs/jwt-cpp-0.7.0/.github/workflows/traits.yml
@@ -0,0 +1,79 @@
+name: Traits CI
+
+on:
+ push:
+ branches: [master]
+ pull_request:
+ branches: [master]
+
+jobs:
+ traits:
+ name: Traits (${{ matrix.target.name }})
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ target:
+ - { name: "danielaparker-jsoncons", tag: "0.168.7", version: "v0.168.7" }
+ - { name: "boost-json", tag: "1.78.0", version: "v1.80.0" }
+ - { name: "nlohmann-json", tag: "3.11.2", version: "v3.11.2" }
+ - { name: "kazuho-picojson", tag: "111c9be5188f7350c2eac9ddaedd8cca3d7bf394", version: "111c9be" }
+ steps:
+ - uses: actions/checkout@v3
+ - uses: lukka/get-cmake@latest
+ - name: setup
+ run: |
+ mkdir build
+ cd build
+ cmake .. -DJWT_BUILD_EXAMPLES=OFF
+ sudo cmake --install .
+
+ # Install the JSON library
+ - if: matrix.target.name == 'danielaparker-jsoncons'
+ uses: ./.github/actions/install/danielaparker-jsoncons
+ with:
+ version: ${{matrix.target.tag}}
+
+ - if: matrix.target.name == 'boost-json'
+ uses: ./.github/actions/install/boost-json
+ with:
+ version: ${{matrix.target.tag}}
+
+ - if: matrix.target.name == 'nlohmann-json'
+ uses: ./.github/actions/install/nlohmann-json
+ with:
+ version: ${{matrix.target.tag}}
+
+ - if: matrix.target.name == 'kazuho-picojson'
+ run: rm -rf include/picojson
+ - if: matrix.target.name == 'kazuho-picojson'
+ uses: ./.github/actions/install/kazuho-picojson
+ with:
+ version: ${{matrix.target.tag}}
+
+ - name: test
+ working-directory: example/traits
+ run: |
+ cmake . -DCMAKE_FIND_DEBUG_MODE=1
+ cmake --build . --target ${{ matrix.target.name }}
+ ./${{ matrix.target.name }}
+
+ - name: badge success
+ if: github.event_name == 'push' && success()
+ uses: ./.github/actions/badge/write
+ with:
+ category: traits
+ label: ${{ matrix.target.name }}
+ message: ${{ matrix.target.version }}
+ color: lightblue # turquoise
+ - name: badge failure
+ if: github.event_name == 'push' && !success()
+ uses: ./.github/actions/badge/write
+ with:
+ category: traits
+ label: ${{ matrix.target.name }}
+ message: ${{ matrix.target.version }}
+ color: orange
+ - if: github.event_name == 'push' && always()
+ uses: ./.github/actions/badge/publish
+ with:
+ github_token: ${{ secrets.GITHUB_TOKEN }}
diff --git a/src/libs/jwt-cpp-0.7.0/.gitignore b/src/libs/jwt-cpp-0.7.0/.gitignore
new file mode 100644
index 0000000..751d595
--- /dev/null
+++ b/src/libs/jwt-cpp-0.7.0/.gitignore
@@ -0,0 +1,317 @@
+## Ignore Visual Studio temporary files, build results, and
+## files generated by popular Visual Studio add-ons.
+
+# User-specific files
+*.suo
+*.user
+*.userosscache
+*.sln.docstates
+
+# User-specific files (MonoDevelop/Xamarin Studio)
+*.userprefs
+
+# Build results
+[Dd]ebug/
+[Dd]ebugPublic/
+[Rr]elease/
+[Rr]eleases/
+x64/
+x86/
+bld/
+[Bb]in/
+[Oo]bj/
+[Ll]og/
+
+# Visual Studio 2015 cache/options directory
+.vs/
+# Uncomment if you have tasks that create the project's static files in wwwroot
+#wwwroot/
+
+# MSTest test Results
+[Tt]est[Rr]esult*/
+[Bb]uild[Ll]og.*
+
+# NUNIT
+*.VisualState.xml
+TestResult.xml
+
+# Build Results of an ATL Project
+[Dd]ebugPS/
+[Rr]eleasePS/
+dlldata.c
+
+# DNX
+project.lock.json
+artifacts/
+
+*_i.c
+*_p.c
+*_i.h
+*.ilk
+*.meta
+*.obj
+*.pch
+*.pdb
+*.pgc
+*.pgd
+*.rsp
+*.sbr
+*.tlb
+*.tli
+*.tlh
+*.tmp
+*.tmp_proj
+*.log
+*.vspscc
+*.vssscc
+.builds
+*.pidb
+*.svclog
+*.scc
+
+# Chutzpah Test files
+_Chutzpah*
+
+# Visual C++ cache files
+ipch/
+*.aps
+*.ncb
+*.opendb
+*.opensdf
+*.sdf
+*.cachefile
+*.VC.db
+*.VC.VC.opendb
+
+# Visual Studio profiler
+*.psess
+*.vsp
+*.vspx
+*.sap
+
+# TFS 2012 Local Workspace
+$tf/
+
+# Guidance Automation Toolkit
+*.gpState
+
+# ReSharper is a .NET coding add-in
+_ReSharper*/
+*.[Rr]e[Ss]harper
+*.DotSettings.user
+
+# JustCode is a .NET coding add-in
+.JustCode
+
+# TeamCity is a build add-in
+_TeamCity*
+
+# DotCover is a Code Coverage Tool
+*.dotCover
+
+# NCrunch
+_NCrunch_*
+.*crunch*.local.xml
+nCrunchTemp_*
+
+# MightyMoose
+*.mm.*
+AutoTest.Net/
+
+# Web workbench (sass)
+.sass-cache/
+
+# Installshield output folder
+[Ee]xpress/
+
+# DocProject is a documentation generator add-in
+DocProject/buildhelp/
+DocProject/Help/*.HxT
+DocProject/Help/*.HxC
+DocProject/Help/*.hhc
+DocProject/Help/*.hhk
+DocProject/Help/*.hhp
+DocProject/Help/Html2
+DocProject/Help/html
+
+# Click-Once directory
+publish/
+
+# Publish Web Output
+*.[Pp]ublish.xml
+*.azurePubxml
+# TODO: Comment the next line if you want to checkin your web deploy settings
+# but database connection strings (with potential passwords) will be unencrypted
+*.pubxml
+*.publishproj
+
+# Microsoft Azure Web App publish settings. Comment the next line if you want to
+# checkin your Azure Web App publish settings, but sensitive information contained
+# in these scripts will be unencrypted
+PublishScripts/
+
+# NuGet Packages
+*.nupkg
+# The packages folder can be ignored because of Package Restore
+**/packages/*
+# except build/, which is used as an MSBuild target.
+!**/packages/build/
+# Uncomment if necessary however generally it will be regenerated when needed
+#!**/packages/repositories.config
+# NuGet v3's project.json files produces more ignoreable files
+*.nuget.props
+*.nuget.targets
+
+# Microsoft Azure Build Output
+csx/
+*.build.csdef
+
+# Microsoft Azure Emulator
+ecf/
+rcf/
+
+# Windows Store app package directories and files
+AppPackages/
+BundleArtifacts/
+Package.StoreAssociation.xml
+_pkginfo.txt
+
+# Visual Studio cache files
+# files ending in .cache can be ignored
+*.[Cc]ache
+# but keep track of directories ending in .cache
+!*.[Cc]ache/
+
+# Others
+ClientBin/
+~$*
+*~
+*.dbmdl
+*.dbproj.schemaview
+*.pfx
+*.publishsettings
+node_modules/
+orleans.codegen.cs
+
+# Since there are multiple workflows, uncomment next line to ignore bower_components
+# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
+#bower_components/
+
+# RIA/Silverlight projects
+Generated_Code/
+
+# Backup & report files from converting an old project file
+# to a newer Visual Studio version. Backup files are not needed,
+# because we have git ;-)
+_UpgradeReport_Files/
+Backup*/
+UpgradeLog*.XML
+UpgradeLog*.htm
+
+# SQL Server files
+*.mdf
+*.ldf
+
+# Business Intelligence projects
+*.rdl.data
+*.bim.layout
+*.bim_*.settings
+
+# Microsoft Fakes
+FakesAssemblies/
+
+# GhostDoc plugin setting file
+*.GhostDoc.xml
+
+# Node.js Tools for Visual Studio
+.ntvs_analysis.dat
+
+# Visual Studio 6 build log
+*.plg
+
+# Visual Studio 6 workspace options file
+*.opt
+
+# Visual Studio LightSwitch build output
+**/*.HTMLClient/GeneratedArtifacts
+**/*.DesktopClient/GeneratedArtifacts
+**/*.DesktopClient/ModelManifest.xml
+**/*.Server/GeneratedArtifacts
+**/*.Server/ModelManifest.xml
+_Pvt_Extensions
+
+# Paket dependency manager
+.paket/paket.exe
+paket-files/
+
+# FAKE - F# Make
+.fake/
+
+# JetBrains Rider
+.idea/
+*.sln.iml
+
+# =========================
+# Operating System Files
+# =========================
+
+# OSX
+# =========================
+
+.DS_Store
+.AppleDouble
+.LSOverride
+
+# Thumbnails
+._*
+
+# Files that might appear in the root of a volume
+.DocumentRevisions-V100
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+.VolumeIcon.icns
+
+# Directories potentially created on remote AFP share
+.AppleDB
+.AppleDesktop
+Network Trash Folder
+Temporary Items
+.apdisk
+
+# Windows
+# =========================
+
+# Windows image file caches
+Thumbs.db
+ehthumbs.db
+
+# Folder config file
+Desktop.ini
+
+# Recycle Bin used on file shares
+$RECYCLE.BIN/
+
+# Windows Installer files
+*.cab
+*.msi
+*.msm
+*.msp
+
+# Windows shortcuts
+*.lnk
+
+# Linux files
+test
+*.o
+*.o.d
+.vscode
+# ClangD cache files
+.cache
+
+doxy/
+doxygen-awesome*.css
+
+build/*
+package-lock.json
diff --git a/src/libs/jwt-cpp-0.7.0/CMakeLists.txt b/src/libs/jwt-cpp-0.7.0/CMakeLists.txt
new file mode 100644
index 0000000..5cd876f
--- /dev/null
+++ b/src/libs/jwt-cpp-0.7.0/CMakeLists.txt
@@ -0,0 +1,157 @@
+cmake_minimum_required(VERSION 3.14)
+cmake_policy(VERSION 3.14)
+if(POLICY CMP0135) # DOWNLOAD_EXTRACT_TIMESTAMP
+ cmake_policy(SET CMP0135 OLD)
+endif()
+
+# HUNTER_ENABLED is always set if this package is included in a project using hunter (HunterGate sets it) In this case
+# we will use hunter as well to stay consistent. If not the use can supply it on configure to force using hunter.
+if(HUNTER_ENABLED)
+ include("cmake/HunterGate.cmake")
+ huntergate(URL "https://github.com/cpp-pm/hunter/archive/v0.23.314.tar.gz" SHA1
+ "95c47c92f68edb091b5d6d18924baabe02a6962a")
+ message(STATUS "jwt-cpp: using hunter for dependency resolution")
+endif()
+
+project(jwt-cpp)
+
+option(JWT_BUILD_EXAMPLES "Configure CMake to build examples (or not)" ON)
+option(JWT_BUILD_TESTS "Configure CMake to build tests (or not)" OFF)
+option(JWT_ENABLE_COVERAGE "Enable code coverage testing" OFF)
+option(JWT_ENABLE_FUZZING "Enable fuzz testing" OFF)
+
+option(JWT_EXTERNAL_PICOJSON "Use find_package() to locate picojson, provided to integrate with package managers" OFF)
+option(JWT_DISABLE_BASE64 "Do not include the base64 implementation from this library" OFF)
+option(JWT_DISABLE_PICOJSON "Do not provide the picojson template specialiaze" OFF)
+
+set(JWT_SSL_LIBRARY_OPTIONS OpenSSL LibreSSL wolfSSL)
+set(JWT_SSL_LIBRARY OpenSSL CACHE STRING "Determines which SSL library to build with")
+set_property(CACHE JWT_SSL_LIBRARY PROPERTY STRINGS ${JWT_SSL_LIBRARY_OPTIONS})
+
+set(JWT_JSON_TRAITS_OPTIONS boost-json danielaparker-jsoncons kazuho-picojson nlohmann-json)
+
+list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
+
+if(NOT JWT_SSL_LIBRARY IN_LIST JWT_SSL_LIBRARY_OPTIONS)
+ message(FATAL_ERROR "JWT_SSL_LIBRARY must be one of ${JWT_SSL_LIBRARY_OPTIONS}")
+endif()
+
+# If Hunter is enabled, we configure it to resolve OpenSSL and warn the user if he selected an option not supported by
+# hunter. We fall back to the system library in this case.
+if(HUNTER_ENABLED)
+ if(${JWT_SSL_LIBRARY} MATCHES "OpenSSL")
+ hunter_add_package(OpenSSL)
+ elseif(${JWT_SSL_LIBRARY} MATCHES "LibreSSL")
+ message(WARNING "Hunter does not support LibreSSL yet, the system library will be used (if available)")
+ elseif(${JWT_SSL_LIBRARY} MATCHES "wolfSSL")
+ message(WARNING "Hunter does not support wolfSSL yet, the system library will be used (if available)")
+ endif()
+ if(JWT_EXTERNAL_PICOJSON)
+ message(WARNING "Hunter does not support picojson yet, the system library will be used (if available)")
+ endif()
+endif()
+
+# Lookup dependencies
+if(${JWT_SSL_LIBRARY} MATCHES "OpenSSL")
+ find_package(OpenSSL 1.0.1 REQUIRED)
+elseif(${JWT_SSL_LIBRARY} MATCHES "LibreSSL")
+ find_package(LibreSSL 3.0.0 REQUIRED)
+elseif(${JWT_SSL_LIBRARY} MATCHES "wolfSSL")
+ find_package(PkgConfig REQUIRED)
+ pkg_check_modules(wolfssl REQUIRED IMPORTED_TARGET wolfssl)
+ list(TRANSFORM wolfssl_INCLUDE_DIRS APPEND "/wolfssl") # This is required to access OpenSSL compatibility API
+endif()
+
+if(JWT_EXTERNAL_PICOJSON)
+ find_package(picojson 1.3.0 REQUIRED)
+endif()
+
+find_package(nlohmann_json CONFIG)
+
+if(NOT nlohmann_json_FOUND)
+ message(STATUS "jwt-cpp: using FetchContent for nlohmann json")
+ include(FetchContent)
+ FetchContent_Declare(nlohmann_json
+ URL https://github.com/nlohmann/json/releases/download/v3.11.2/json.tar.xz
+ URL_MD5 127794b2c82c0c5693805feaa2a703e2
+ )
+ FetchContent_MakeAvailable(nlohmann_json)
+endif()
+
+set(JWT_INCLUDE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/include)
+set(JWT_HEADER_FILES ${JWT_INCLUDE_PATH}/jwt-cpp/jwt.h)
+foreach(traits ${JWT_JSON_TRAITS_OPTIONS})
+ list(APPEND JWT_HEADER_FILES ${JWT_INCLUDE_PATH}/jwt-cpp/traits/${traits}/defaults.h
+ ${JWT_INCLUDE_PATH}/jwt-cpp/traits/${traits}/traits.h)
+endforeach()
+
+if(NOT JWT_DISABLE_BASE64)
+ list(APPEND JWT_HEADER_FILES ${JWT_INCLUDE_PATH}/jwt-cpp/base.h)
+endif()
+
+add_library(jwt-cpp INTERFACE)
+add_library(jwt-cpp::jwt-cpp ALIAS jwt-cpp) # To match export
+target_compile_features(jwt-cpp INTERFACE cxx_std_11)
+if(JWT_DISABLE_BASE64)
+ target_compile_definitions(jwt-cpp INTERFACE JWT_DISABLE_BASE64)
+endif()
+if(JWT_DISABLE_PICOJSON)
+ target_compile_definitions(jwt-cpp INTERFACE JWT_DISABLE_PICOJSON)
+endif()
+
+include(GNUInstallDirs)
+include(CMakePackageConfigHelpers)
+target_include_directories(jwt-cpp INTERFACE $
+ $)
+
+if(${JWT_SSL_LIBRARY} MATCHES "OpenSSL")
+ target_link_libraries(jwt-cpp INTERFACE OpenSSL::SSL OpenSSL::Crypto)
+endif()
+
+if(${JWT_SSL_LIBRARY} MATCHES "LibreSSL")
+ target_link_libraries(jwt-cpp INTERFACE LibreSSL::TLS)
+endif()
+
+if(${JWT_SSL_LIBRARY} MATCHES "wolfSSL")
+ target_link_libraries(jwt-cpp INTERFACE PkgConfig::wolfssl)
+ # This is required to access OpenSSL compatibility API
+ target_include_directories(jwt-cpp INTERFACE ${wolfssl_INCLUDE_DIRS})
+ target_compile_definitions(jwt-cpp INTERFACE OPENSSL_EXTRA OPENSSL_ALL)
+endif()
+
+if(JWT_EXTERNAL_PICOJSON)
+ target_link_libraries(jwt-cpp INTERFACE picojson::picojson>)
+endif()
+
+# Hunter needs relative paths so the files are placed correctly
+if(NOT JWT_CMAKE_FILES_INSTALL_DIR)
+ set(JWT_CMAKE_FILES_INSTALL_DIR cmake)
+endif()
+
+configure_package_config_file(
+ ${CMAKE_CURRENT_LIST_DIR}/cmake/jwt-cpp-config.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/jwt-cpp-config.cmake
+ INSTALL_DESTINATION ${JWT_CMAKE_FILES_INSTALL_DIR} PATH_VARS JWT_EXTERNAL_PICOJSON JWT_SSL_LIBRARY)
+write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/jwt-cpp-config-version.cmake VERSION 0.7.0
+ COMPATIBILITY ExactVersion)
+
+install(TARGETS jwt-cpp EXPORT jwt-cpp-targets PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
+install(EXPORT jwt-cpp-targets NAMESPACE jwt-cpp:: FILE jwt-cpp-targets.cmake
+ DESTINATION ${JWT_CMAKE_FILES_INSTALL_DIR})
+install(DIRECTORY ${JWT_INCLUDE_PATH}/jwt-cpp DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
+if(NOT JWT_EXTERNAL_PICOJSON AND NOT JWT_DISABLE_PICOJSON)
+ install(FILES ${JWT_INCLUDE_PATH}/picojson/picojson.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/picojson)
+endif()
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/jwt-cpp-config.cmake ${CMAKE_CURRENT_BINARY_DIR}/jwt-cpp-config-version.cmake
+ DESTINATION ${JWT_CMAKE_FILES_INSTALL_DIR})
+
+if(JWT_BUILD_EXAMPLES)
+ add_subdirectory(example)
+endif()
+
+if(JWT_BUILD_TESTS)
+ add_subdirectory(tests)
+endif()
+
+if(JWT_ENABLE_FUZZING)
+ add_subdirectory(tests/fuzz)
+endif()
diff --git a/src/libs/jwt-cpp-0.7.0/Doxyfile b/src/libs/jwt-cpp-0.7.0/Doxyfile
new file mode 100644
index 0000000..41343d7
--- /dev/null
+++ b/src/libs/jwt-cpp-0.7.0/Doxyfile
@@ -0,0 +1,2494 @@
+# Doxyfile 1.8.13
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project.
+#
+# All text after a double hash (##) is considered a comment and is placed in
+# front of the TAG it is preceding.
+#
+# All text after a single hash (#) is considered a comment and will be ignored.
+# The format is:
+# TAG = value [value, ...]
+# For lists, items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (\" \").
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all text
+# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
+# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
+# for the list of possible encodings.
+# The default value is: UTF-8.
+
+DOXYFILE_ENCODING = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
+# double-quotes, unless you are using Doxywizard) that should identify the
+# project for which the documentation is generated. This name is used in the
+# title of most generated pages and in a few other places.
+# The default value is: My Project.
+
+PROJECT_NAME = JWT-CPP
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
+# could be handy for archiving the generated documentation or if some version
+# control system is used.
+
+PROJECT_NUMBER = v0.6.0
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer a
+# quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF = "A header only library for creating and validating JSON Web Tokens (JWT) in C++"
+
+# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
+# in the documentation. The maximum height of the logo should not exceed 55
+# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
+# the logo to the output directory.
+
+PROJECT_LOGO =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
+# into which the generated documentation will be written. If a relative path is
+# entered, it will be relative to the location where doxygen was started. If
+# left blank the current directory will be used.
+
+OUTPUT_DIRECTORY = doxy
+
+# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
+# directories (in 2 levels) under the output directory of each output format and
+# will distribute the generated files over these directories. Enabling this
+# option can be useful when feeding doxygen a huge amount of source files, where
+# putting all generated files in the same directory would otherwise causes
+# performance problems for the file system.
+# The default value is: NO.
+
+CREATE_SUBDIRS = NO
+
+# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
+# characters to appear in the names of generated files. If set to NO, non-ASCII
+# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
+# U+3044.
+# The default value is: NO.
+
+ALLOW_UNICODE_NAMES = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
+# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
+# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
+# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
+# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
+# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
+# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
+# Ukrainian and Vietnamese.
+# The default value is: English.
+
+OUTPUT_LANGUAGE = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
+# descriptions after the members that are listed in the file and class
+# documentation (similar to Javadoc). Set to NO to disable this.
+# The default value is: YES.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief
+# description of a member or function before the detailed description
+#
+# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+# The default value is: YES.
+
+REPEAT_BRIEF = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator that is
+# used to form the text in various listings. Each string in this list, if found
+# as the leading text of the brief description, will be stripped from the text
+# and the result, after processing the whole list, is used as the annotated
+# text. Otherwise, the brief description is used as-is. If left blank, the
+# following values are used ($name is automatically replaced with the name of
+# the entity):The $name class, The $name widget, The $name file, is, provides,
+# specifies, contains, represents, a, an and the.
+
+ABBREVIATE_BRIEF = "The $name class" \
+ "The $name widget" \
+ "The $name file" \
+ is \
+ provides \
+ specifies \
+ contains \
+ represents \
+ a \
+ an \
+ the
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# doxygen will generate a detailed section even if there is only a brief
+# description.
+# The default value is: NO.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+# The default value is: NO.
+
+INLINE_INHERITED_MEMB = NO
+
+# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path
+# before files name in the file list and in the header files. If set to NO the
+# shortest path that makes the file name unique will be used
+# The default value is: YES.
+
+FULL_PATH_NAMES = YES
+
+# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
+# Stripping is only done if one of the specified strings matches the left-hand
+# part of the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the path to
+# strip.
+#
+# Note that you can specify absolute paths here, but also relative paths, which
+# will be relative from the directory where doxygen is started.
+# This tag requires that the tag FULL_PATH_NAMES is set to YES.
+
+STRIP_FROM_PATH =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
+# path mentioned in the documentation of a class, which tells the reader which
+# header file to include in order to use a class. If left blank only the name of
+# the header file containing the class definition is used. Otherwise one should
+# specify the list of include paths that are normally passed to the compiler
+# using the -I flag.
+
+STRIP_FROM_INC_PATH =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
+# less readable) file names. This can be useful is your file systems doesn't
+# support long names like on DOS, Mac, or CD-ROM.
+# The default value is: NO.
+
+SHORT_NAMES = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
+# first line (until the first dot) of a Javadoc-style comment as the brief
+# description. If set to NO, the Javadoc-style will behave just like regular Qt-
+# style comments (thus requiring an explicit @brief command for a brief
+# description.)
+# The default value is: NO.
+
+JAVADOC_AUTOBRIEF = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
+# line (until the first dot) of a Qt-style comment as the brief description. If
+# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
+# requiring an explicit \brief command for a brief description.)
+# The default value is: NO.
+
+QT_AUTOBRIEF = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
+# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
+# a brief description. This used to be the default behavior. The new default is
+# to treat a multi-line C++ comment block as a detailed description. Set this
+# tag to YES if you prefer the old behavior instead.
+#
+# Note that setting this tag to YES also means that rational rose comments are
+# not recognized any more.
+# The default value is: NO.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
+# documentation from any documented member that it re-implements.
+# The default value is: YES.
+
+INHERIT_DOCS = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new
+# page for each member. If set to NO, the documentation of a member will be part
+# of the file/class/namespace that contains it.
+# The default value is: NO.
+
+SEPARATE_MEMBER_PAGES = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
+# uses this value to replace tabs by spaces in code fragments.
+# Minimum value: 1, maximum value: 16, default value: 4.
+
+TAB_SIZE = 4
+
+# This tag can be used to specify a number of aliases that act as commands in
+# the documentation. An alias has the form:
+# name=value
+# For example adding
+# "sideeffect=@par Side Effects:\n"
+# will allow you to put the command \sideeffect (or @sideeffect) in the
+# documentation, which will result in a user-defined paragraph with heading
+# "Side Effects:". You can put \n's in the value part of an alias to insert
+# newlines.
+
+ALIASES =
+
+# This tag can be used to specify a number of word-keyword mappings (TCL only).
+# A mapping has the form "name=value". For example adding "class=itcl::class"
+# will allow you to use the command class in the itcl::class meaning.
+
+TCL_SUBST =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+# only. Doxygen will then generate output that is more tailored for C. For
+# instance, some of the names that are used will be different. The list of all
+# members will be omitted, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_FOR_C = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
+# Python sources only. Doxygen will then generate output that is more tailored
+# for that language. For instance, namespaces will be presented as packages,
+# qualified scopes will look different, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_JAVA = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources. Doxygen will then generate output that is tailored for Fortran.
+# The default value is: NO.
+
+OPTIMIZE_FOR_FORTRAN = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for VHDL.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_VHDL = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given
+# extension. Doxygen has a built-in mapping, but you can override or extend it
+# using this tag. The format is ext=language, where ext is a file extension, and
+# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
+# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:
+# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:
+# Fortran. In the later case the parser tries to guess whether the code is fixed
+# or free formatted code, this is the default for Fortran type files), VHDL. For
+# instance to make doxygen treat .inc files as Fortran files (default is PHP),
+# and .f files as C (default is Fortran), use: inc=Fortran f=C.
+#
+# Note: For files without extension you can use no_extension as a placeholder.
+#
+# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
+# the files are not read by doxygen.
+
+EXTENSION_MAPPING =
+
+# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
+# according to the Markdown format, which allows for more readable
+# documentation. See http://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by doxygen, so you can
+# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
+# case of backward compatibilities issues.
+# The default value is: YES.
+
+MARKDOWN_SUPPORT = YES
+
+# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up
+# to that level are automatically included in the table of contents, even if
+# they do not have an id attribute.
+# Note: This feature currently applies only to Markdown headings.
+# Minimum value: 0, maximum value: 99, default value: 0.
+# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.
+
+TOC_INCLUDE_HEADINGS = 0
+
+# When enabled doxygen tries to link words that correspond to documented
+# classes, or namespaces to their corresponding documentation. Such a link can
+# be prevented in individual cases by putting a % sign in front of the word or
+# globally by setting AUTOLINK_SUPPORT to NO.
+# The default value is: YES.
+
+AUTOLINK_SUPPORT = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should set this
+# tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string);
+# versus func(std::string) {}). This also make the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+# The default value is: NO.
+
+BUILTIN_STL_SUPPORT = YES
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+# The default value is: NO.
+
+CPP_CLI_SUPPORT = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
+# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
+# will parse them like normal C++ but will assume all classes use public instead
+# of private inheritance when no explicit protection keyword is present.
+# The default value is: NO.
+
+SIP_SUPPORT = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate
+# getter and setter methods for a property. Setting this option to YES will make
+# doxygen to replace the get and set methods by a property in the documentation.
+# This will only work if the methods are indeed getting or setting a simple
+# type. If this is not the case, or you want to show the methods anyway, you
+# should set this option to NO.
+# The default value is: YES.
+
+IDL_PROPERTY_SUPPORT = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+# The default value is: NO.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# If one adds a struct or class to a group and this option is enabled, then also
+# any nested class or struct is added to the same group. By default this option
+# is disabled and one has to add nested compounds explicitly via \ingroup.
+# The default value is: NO.
+
+GROUP_NESTED_COMPOUNDS = NO
+
+# Set the SUBGROUPING tag to YES to allow class member groups of the same type
+# (for instance a group of public functions) to be put as a subgroup of that
+# type (e.g. under the Public Functions section). Set it to NO to prevent
+# subgrouping. Alternatively, this can be done per class using the
+# \nosubgrouping command.
+# The default value is: YES.
+
+SUBGROUPING = YES
+
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
+# are shown inside the group in which they are included (e.g. using \ingroup)
+# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
+# and RTF).
+#
+# Note that this feature does not work in combination with
+# SEPARATE_MEMBER_PAGES.
+# The default value is: NO.
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
+# with only public data fields or simple typedef fields will be shown inline in
+# the documentation of the scope in which they are defined (i.e. file,
+# namespace, or group documentation), provided this scope is documented. If set
+# to NO, structs, classes, and unions are shown on a separate page (for HTML and
+# Man pages) or section (for LaTeX and RTF).
+# The default value is: NO.
+
+INLINE_SIMPLE_STRUCTS = NO
+
+# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
+# enum is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically be
+# useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+# The default value is: NO.
+
+TYPEDEF_HIDES_STRUCT = NO
+
+# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
+# cache is used to resolve symbols given their name and scope. Since this can be
+# an expensive process and often the same symbol appears multiple times in the
+# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
+# doxygen will become slower. If the cache is too large, memory is wasted. The
+# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
+# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
+# symbols. At the end of a run doxygen will report the cache usage and suggest
+# the optimal cache size from a speed point of view.
+# Minimum value: 0, maximum value: 9, default value: 0.
+
+LOOKUP_CACHE_SIZE = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in
+# documentation are documented, even if no documentation was available. Private
+# class members and static file members will be hidden unless the
+# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
+# Note: This will also disable the warnings about undocumented members that are
+# normally produced when WARNINGS is set to YES.
+# The default value is: NO.
+
+EXTRACT_ALL = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
+# be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PRIVATE = NO
+
+# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
+# scope will be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PACKAGE = NO
+
+# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
+# included in the documentation.
+# The default value is: NO.
+
+EXTRACT_STATIC = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
+# locally in source files will be included in the documentation. If set to NO,
+# only classes defined in header files are included. Does not have any effect
+# for Java sources.
+# The default value is: YES.
+
+EXTRACT_LOCAL_CLASSES = YES
+
+# This flag is only useful for Objective-C code. If set to YES, local methods,
+# which are defined in the implementation section but not in the interface are
+# included in the documentation. If set to NO, only methods in the interface are
+# included.
+# The default value is: NO.
+
+EXTRACT_LOCAL_METHODS = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base name of
+# the file that contains the anonymous namespace. By default anonymous namespace
+# are hidden.
+# The default value is: NO.
+
+EXTRACT_ANON_NSPACES = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
+# undocumented members inside documented classes or files. If set to NO these
+# members will be included in the various overviews, but no documentation
+# section is generated. This option has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
+HIDE_UNDOC_MEMBERS = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy. If set
+# to NO, these classes will be included in the various overviews. This option
+# has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
+HIDE_UNDOC_CLASSES = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
+# (class|struct|union) declarations. If set to NO, these declarations will be
+# included in the documentation.
+# The default value is: NO.
+
+HIDE_FRIEND_COMPOUNDS = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
+# documentation blocks found inside the body of a function. If set to NO, these
+# blocks will be appended to the function's detailed documentation block.
+# The default value is: NO.
+
+HIDE_IN_BODY_DOCS = NO
+
+# The INTERNAL_DOCS tag determines if documentation that is typed after a
+# \internal command is included. If the tag is set to NO then the documentation
+# will be excluded. Set it to YES to include the internal documentation.
+# The default value is: NO.
+
+INTERNAL_DOCS = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
+# names in lower-case letters. If set to YES, upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+# The default value is: system dependent.
+
+CASE_SENSE_NAMES = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
+# their full class and namespace scopes in the documentation. If set to YES, the
+# scope will be hidden.
+# The default value is: NO.
+
+HIDE_SCOPE_NAMES = NO
+
+# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
+# append additional text to a page's title, such as Class Reference. If set to
+# YES the compound reference will be hidden.
+# The default value is: NO.
+
+HIDE_COMPOUND_REFERENCE= NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
+# the files that are included by a file in the documentation of that file.
+# The default value is: YES.
+
+SHOW_INCLUDE_FILES = YES
+
+# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
+# grouped member an include statement to the documentation, telling the reader
+# which file to include in order to use the member.
+# The default value is: NO.
+
+SHOW_GROUPED_MEMB_INC = NO
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
+# files with double quotes in the documentation rather than with sharp brackets.
+# The default value is: NO.
+
+FORCE_LOCAL_INCLUDES = NO
+
+# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
+# documentation for inline members.
+# The default value is: YES.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
+# (detailed) documentation of file and class members alphabetically by member
+# name. If set to NO, the members will appear in declaration order.
+# The default value is: YES.
+
+SORT_MEMBER_DOCS = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
+# descriptions of file, namespace and class members alphabetically by member
+# name. If set to NO, the members will appear in declaration order. Note that
+# this will also influence the order of the classes in the class list.
+# The default value is: NO.
+
+SORT_BRIEF_DOCS = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
+# (brief and detailed) documentation of class members so that constructors and
+# destructors are listed first. If set to NO the constructors will appear in the
+# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
+# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
+# member documentation.
+# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
+# detailed member documentation.
+# The default value is: NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
+# of group names into alphabetical order. If set to NO the group names will
+# appear in their defined order.
+# The default value is: NO.
+
+SORT_GROUP_NAMES = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
+# fully-qualified names, including namespaces. If set to NO, the class list will
+# be sorted only by class name, not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the alphabetical
+# list.
+# The default value is: NO.
+
+SORT_BY_SCOPE_NAME = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
+# type resolution of all parameters of a function it will reject a match between
+# the prototype and the implementation of a member function even if there is
+# only one candidate or it is obvious which candidate to choose by doing a
+# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
+# accept a match between prototype and implementation in such cases.
+# The default value is: NO.
+
+STRICT_PROTO_MATCHING = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo
+# list. This list is created by putting \todo commands in the documentation.
+# The default value is: YES.
+
+GENERATE_TODOLIST = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
+# list. This list is created by putting \test commands in the documentation.
+# The default value is: YES.
+
+GENERATE_TESTLIST = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
+# list. This list is created by putting \bug commands in the documentation.
+# The default value is: YES.
+
+GENERATE_BUGLIST = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
+# the deprecated list. This list is created by putting \deprecated commands in
+# the documentation.
+# The default value is: YES.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional documentation
+# sections, marked by \if ... \endif and \cond
+# ... \endcond blocks.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
+# initial value of a variable or macro / define can have for it to appear in the
+# documentation. If the initializer consists of more lines than specified here
+# it will be hidden. Use a value of 0 to hide initializers completely. The
+# appearance of the value of individual variables and macros / defines can be
+# controlled using \showinitializer or \hideinitializer command in the
+# documentation regardless of this setting.
+# Minimum value: 0, maximum value: 10000, default value: 30.
+
+MAX_INITIALIZER_LINES = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
+# the bottom of the documentation of classes and structs. If set to YES, the
+# list will mention the files that were used to generate the documentation.
+# The default value is: YES.
+
+SHOW_USED_FILES = YES
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
+# will remove the Files entry from the Quick Index and from the Folder Tree View
+# (if specified).
+# The default value is: YES.
+
+SHOW_FILES = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
+# page. This will remove the Namespaces entry from the Quick Index and from the
+# Folder Tree View (if specified).
+# The default value is: YES.
+
+SHOW_NAMESPACES = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command command input-file, where command is the value of the
+# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
+# by doxygen. Whatever the program writes to standard output is used as the file
+# version. For an example see the documentation.
+
+FILE_VERSION_FILTER =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. To create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option. You can
+# optionally specify a file name after the option, if omitted DoxygenLayout.xml
+# will be used as the name of the layout file.
+#
+# Note that if you run doxygen from a directory containing a file called
+# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
+# tag is left empty.
+
+LAYOUT_FILE =
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
+# the reference definitions. This must be a list of .bib files. The .bib
+# extension is automatically appended if omitted. This requires the bibtex tool
+# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
+# For LaTeX the style of the bibliography can be controlled using
+# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
+# search path. See also \cite for info how to create references.
+
+CITE_BIB_FILES =
+
+#---------------------------------------------------------------------------
+# Configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated to
+# standard output by doxygen. If QUIET is set to YES this implies that the
+# messages are off.
+# The default value is: NO.
+
+QUIET = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
+# this implies that the warnings are on.
+#
+# Tip: Turn warnings on while writing the documentation.
+# The default value is: YES.
+
+WARNINGS = YES
+
+# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate
+# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
+# will automatically be disabled.
+# The default value is: YES.
+
+WARN_IF_UNDOCUMENTED = YES
+
+# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some parameters
+# in a documented function, or documenting parameters that don't exist or using
+# markup commands wrongly.
+# The default value is: YES.
+
+WARN_IF_DOC_ERROR = YES
+
+# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
+# are documented, but have no documentation for their parameters or return
+# value. If set to NO, doxygen will only warn about wrong or incomplete
+# parameter documentation, but not about the absence of documentation.
+# The default value is: NO.
+
+WARN_NO_PARAMDOC = NO
+
+# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when
+# a warning is encountered.
+# The default value is: NO.
+
+WARN_AS_ERROR = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that doxygen
+# can produce. The string should contain the $file, $line, and $text tags, which
+# will be replaced by the file and line number from which the warning originated
+# and the warning text. Optionally the format may contain $version, which will
+# be replaced by the version of the file (if it could be obtained via
+# FILE_VERSION_FILTER)
+# The default value is: $file:$line: $text.
+
+WARN_FORMAT = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning and error
+# messages should be written. If left blank the output is written to standard
+# error (stderr).
+
+WARN_LOGFILE =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag is used to specify the files and/or directories that contain
+# documented source files. You may enter file names like myfile.cpp or
+# directories like /usr/src/myproject. Separate the files or directories with
+# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
+# Note: If this tag is empty the current directory is searched.
+
+INPUT = include README.md docs
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
+# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
+# documentation (see: http://www.gnu.org/software/libiconv) for the list of
+# possible encodings.
+# The default value is: UTF-8.
+
+INPUT_ENCODING = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
+# *.h) to filter out the source-files in the directories.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# read by doxygen.
+#
+# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
+# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
+# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,
+# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08,
+# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf and *.qsf.
+
+FILE_PATTERNS = *.c \
+ *.cc \
+ *.cxx \
+ *.cpp \
+ *.c++ \
+ *.java \
+ *.ii \
+ *.ixx \
+ *.ipp \
+ *.i++ \
+ *.inl \
+ *.idl \
+ *.ddl \
+ *.odl \
+ *.h \
+ *.hh \
+ *.hxx \
+ *.hpp \
+ *.h++ \
+ *.cs \
+ *.d \
+ *.php \
+ *.php4 \
+ *.php5 \
+ *.phtml \
+ *.inc \
+ *.m \
+ *.markdown \
+ *.md \
+ *.mm \
+ *.dox \
+ *.py \
+ *.pyw \
+ *.f90 \
+ *.f95 \
+ *.f03 \
+ *.f08 \
+ *.f \
+ *.for \
+ *.tcl \
+ *.vhd \
+ *.vhdl \
+ *.ucf \
+ *.qsf
+
+# The RECURSIVE tag can be used to specify whether or not subdirectories should
+# be searched for input files as well.
+# The default value is: NO.
+
+RECURSIVE = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should be
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+#
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
+
+EXCLUDE = include/nlohmann/json.hpp, include/picojson/picojson.h
+
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
+# from the input.
+# The default value is: NO.
+
+EXCLUDE_SYMLINKS = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories.
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories for example use the pattern */test/*
+
+EXCLUDE_PATTERNS =
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories use the pattern */test/*
+
+EXCLUDE_SYMBOLS = jwt::details, std
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or directories
+# that contain example code fragments that are included (see the \include
+# command).
+
+EXAMPLE_PATH = example
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
+# *.h) to filter out the source-files in the directories. If left blank all
+# files are included.
+
+EXAMPLE_PATTERNS = *
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude commands
+# irrespective of the value of the RECURSIVE tag.
+# The default value is: NO.
+
+EXAMPLE_RECURSIVE = YES
+
+# The IMAGE_PATH tag can be used to specify one or more files or directories
+# that contain images that are to be included in the documentation (see the
+# \image command).
+
+IMAGE_PATH =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command:
+#
+#
+#
+# where is the value of the INPUT_FILTER tag, and is the
+# name of an input file. Doxygen will then use the output that the filter
+# program writes to standard output. If FILTER_PATTERNS is specified, this tag
+# will be ignored.
+#
+# Note that the filter must not add or remove lines; it is applied before the
+# code is scanned, but not when the output code is generated. If lines are added
+# or removed, the anchors will not be placed correctly.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# properly processed by doxygen.
+
+INPUT_FILTER =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis. Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match. The filters are a list of the form: pattern=filter
+# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
+# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
+# patterns match the file name, INPUT_FILTER is applied.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# properly processed by doxygen.
+
+FILTER_PATTERNS =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will also be used to filter the input files that are used for
+# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
+# The default value is: NO.
+
+FILTER_SOURCE_FILES = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
+# it is also possible to disable source filtering for a specific pattern using
+# *.ext= (so without naming a filter).
+# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
+
+FILTER_SOURCE_PATTERNS =
+
+# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
+# is part of the input, its contents will be placed on the main page
+# (index.html). This can be useful if you have a project on for instance GitHub
+# and want to reuse the introduction page also for the doxygen output.
+
+USE_MDFILE_AS_MAINPAGE = README.md
+
+#---------------------------------------------------------------------------
+# Configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
+# generated. Documented entities will be cross-referenced with these sources.
+#
+# Note: To get rid of all source code in the generated output, make sure that
+# also VERBATIM_HEADERS is set to NO.
+# The default value is: NO.
+
+SOURCE_BROWSER = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body of functions,
+# classes and enums directly into the documentation.
+# The default value is: NO.
+
+INLINE_SOURCES = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
+# special comment blocks from generated source code fragments. Normal C, C++ and
+# Fortran comments will always remain visible.
+# The default value is: YES.
+
+STRIP_CODE_COMMENTS = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
+# function all documented functions referencing it will be listed.
+# The default value is: NO.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES then for each documented function
+# all documented entities called/used by that function will be listed.
+# The default value is: NO.
+
+REFERENCES_RELATION = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
+# to YES then the hyperlinks from functions in REFERENCES_RELATION and
+# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
+# link to the documentation.
+# The default value is: YES.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
+# source code will show a tooltip with additional information such as prototype,
+# brief description and links to the definition and documentation. Since this
+# will make the HTML file larger and loading of large files a bit slower, you
+# can opt to disable this feature.
+# The default value is: YES.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+SOURCE_TOOLTIPS = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code will
+# point to the HTML generated by the htags(1) tool instead of doxygen built-in
+# source browser. The htags tool is part of GNU's global source tagging system
+# (see http://www.gnu.org/software/global/global.html). You will need version
+# 4.8.6 or higher.
+#
+# To use it do the following:
+# - Install the latest version of global
+# - Enable SOURCE_BROWSER and USE_HTAGS in the config file
+# - Make sure the INPUT points to the root of the source tree
+# - Run doxygen as normal
+#
+# Doxygen will invoke htags (and that will in turn invoke gtags), so these
+# tools must be available from the command line (i.e. in the search path).
+#
+# The result: instead of the source browser generated by doxygen, the links to
+# source code will now point to the output of htags.
+# The default value is: NO.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+USE_HTAGS = NO
+
+# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
+# verbatim copy of the header file for each class for which an include is
+# specified. Set to NO to disable this.
+# See also: Section \class.
+# The default value is: YES.
+
+VERBATIM_HEADERS = YES
+
+# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the
+# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the
+# cost of reduced performance. This can be particularly helpful with template
+# rich C++ code for which doxygen's built-in parser lacks the necessary type
+# information.
+# Note: The availability of this option depends on whether or not doxygen was
+# generated with the -Duse-libclang=ON option for CMake.
+# The default value is: NO.
+
+CLANG_ASSISTED_PARSING = NO
+
+# If clang assisted parsing is enabled you can provide the compiler with command
+# line options that you would normally use when invoking the compiler. Note that
+# the include paths will already be set by doxygen for the files and directories
+# specified with INPUT and INCLUDE_PATH.
+# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
+
+CLANG_OPTIONS =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
+# compounds will be generated. Enable this if the project contains a lot of
+# classes, structs, unions or interfaces.
+# The default value is: YES.
+
+ALPHABETICAL_INDEX = YES
+
+# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
+# which the alphabetical index list will be split.
+# Minimum value: 1, maximum value: 20, default value: 5.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
+
+COLS_IN_ALPHA_INDEX = 5
+
+# In case all classes in a project start with a common prefix, all classes will
+# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
+# can be used to specify a prefix (or a list of prefixes) that should be ignored
+# while generating the index headers.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
+
+IGNORE_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
+# The default value is: YES.
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_OUTPUT = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
+# generated HTML page (for example: .htm, .php, .asp).
+# The default value is: .html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_FILE_EXTENSION = .html
+
+# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
+# each generated HTML page. If the tag is left blank doxygen will generate a
+# standard header.
+#
+# To get valid HTML the header file that includes any scripts and style sheets
+# that doxygen needs, which is dependent on the configuration options used (e.g.
+# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
+# default header using
+# doxygen -w html new_header.html new_footer.html new_stylesheet.css
+# YourConfigFile
+# and then modify the file new_header.html. See also section "Doxygen usage"
+# for information on how to generate the default header that doxygen normally
+# uses.
+# Note: The header is subject to change so you typically have to regenerate the
+# default header when upgrading to a newer version of doxygen. For a description
+# of the possible markers and block names see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_HEADER =
+
+# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
+# generated HTML page. If the tag is left blank doxygen will generate a standard
+# footer. See HTML_HEADER for more information on how to generate a default
+# footer and what special commands can be used inside the footer. See also
+# section "Doxygen usage" for information on how to generate the default footer
+# that doxygen normally uses.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_FOOTER =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
+# sheet that is used by each HTML page. It can be used to fine-tune the look of
+# the HTML output. If left blank doxygen will generate a default style sheet.
+# See also section "Doxygen usage" for information on how to generate the style
+# sheet that doxygen normally uses.
+# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
+# it is more robust and this tag (HTML_STYLESHEET) will in the future become
+# obsolete.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_STYLESHEET =
+
+# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
+# cascading style sheets that are included after the standard style sheets
+# created by doxygen. Using this option one can overrule certain style aspects.
+# This is preferred over using HTML_STYLESHEET since it does not replace the
+# standard style sheet and is therefore more robust against future updates.
+# Doxygen will copy the style sheet files to the output directory.
+# Note: The order of the extra style sheet files is of importance (e.g. the last
+# style sheet in the list overrules the setting of the previous ones in the
+# list). For an example see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_STYLESHEET = doxygen-awesome.css doxygen-awesome-sidebar-only.css .github/overrides.css
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the HTML output directory. Note
+# that these files will be copied to the base HTML output directory. Use the
+# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
+# files will be copied as-is; there are no commands or markers available.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_FILES =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
+# will adjust the colors in the style sheet and background images according to
+# this color. Hue is specified as an angle on a colorwheel, see
+# http://en.wikipedia.org/wiki/Hue for more information. For instance the value
+# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
+# purple, and 360 is red again.
+# Minimum value: 0, maximum value: 359, default value: 220.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_HUE = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
+# in the HTML output. For a value of 0 the output will use grayscales only. A
+# value of 255 will produce the most vivid colors.
+# Minimum value: 0, maximum value: 255, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_SAT = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
+# luminance component of the colors in the HTML output. Values below 100
+# gradually make the output lighter, whereas values above 100 make the output
+# darker. The value divided by 100 is the actual gamma applied, so 80 represents
+# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
+# change the gamma.
+# Minimum value: 40, maximum value: 240, default value: 80.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_GAMMA = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting this
+# to YES can help to show when doxygen was last run and thus if the
+# documentation is up to date.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_TIMESTAMP = NO
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_DYNAMIC_SECTIONS = NO
+
+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
+# shown in the various tree structured indices initially; the user can expand
+# and collapse entries dynamically later on. Doxygen will expand the tree to
+# such a level that at most the specified number of entries are visible (unless
+# a fully collapsed tree already exceeds this amount). So setting the number of
+# entries 1 will produce a full collapsed tree by default. 0 is a special value
+# representing an infinite number of entries and will result in a full expanded
+# tree by default.
+# Minimum value: 0, maximum value: 9999, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_INDEX_NUM_ENTRIES = 100
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files will be
+# generated that can be used as input for Apple's Xcode 3 integrated development
+# environment (see: http://developer.apple.com/tools/xcode/), introduced with
+# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
+# Makefile in the HTML output directory. Running make will produce the docset in
+# that directory and running make install will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
+# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_DOCSET = NO
+
+# This tag determines the name of the docset feed. A documentation feed provides
+# an umbrella under which multiple documentation sets from a single provider
+# (such as a company or product suite) can be grouped.
+# The default value is: Doxygen generated docs.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_FEEDNAME = "Doxygen generated docs"
+
+# This tag specifies a string that should uniquely identify the documentation
+# set bundle. This should be a reverse domain-name style string, e.g.
+# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_BUNDLE_ID = org.doxygen.Project
+
+# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
+# the documentation publisher. This should be a reverse domain-name style
+# string, e.g. com.mycompany.MyDocSet.documentation.
+# The default value is: org.doxygen.Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_ID = org.doxygen.Publisher
+
+# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
+# The default value is: Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_NAME = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
+# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
+# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
+# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
+# Windows.
+#
+# The HTML Help Workshop contains a compiler that can convert all HTML output
+# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
+# files are now used as the Windows 98 help format, and will replace the old
+# Windows help format (.hlp) on all Windows platforms in the future. Compressed
+# HTML files also contain an index, a table of contents, and you can search for
+# words in the documentation. The HTML workshop also contains a viewer for
+# compressed HTML files.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_HTMLHELP = NO
+
+# The CHM_FILE tag can be used to specify the file name of the resulting .chm
+# file. You can add a path in front of the file if the result should not be
+# written to the html output directory.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+CHM_FILE =
+
+# The HHC_LOCATION tag can be used to specify the location (absolute path
+# including file name) of the HTML help compiler (hhc.exe). If non-empty,
+# doxygen will try to run the HTML help compiler on the generated index.hhp.
+# The file has to be specified with full path.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+HHC_LOCATION =
+
+# The GENERATE_CHI flag controls if a separate .chi index file is generated
+# (YES) or that it should be included in the master .chm file (NO).
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+GENERATE_CHI = NO
+
+# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)
+# and project file content.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+CHM_INDEX_ENCODING =
+
+# The BINARY_TOC flag controls whether a binary table of contents is generated
+# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it
+# enables the Previous and Next buttons.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members to
+# the table of contents of the HTML help documentation and to the tree view.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+TOC_EXPAND = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
+# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
+# (.qch) of the generated HTML documentation.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_QHP = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
+# the file name of the resulting .qch file. The path specified is relative to
+# the HTML output folder.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QCH_FILE =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
+# Project output. For more information please see Qt Help Project / Namespace
+# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_NAMESPACE = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
+# Help Project output. For more information please see Qt Help Project / Virtual
+# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-
+# folders).
+# The default value is: doc.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_VIRTUAL_FOLDER = doc
+
+# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
+# filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_NAME =
+
+# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_ATTRS =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's filter section matches. Qt Help Project / Filter Attributes (see:
+# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_SECT_FILTER_ATTRS =
+
+# The QHG_LOCATION tag can be used to specify the location of Qt's
+# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
+# generated .qhp file.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHG_LOCATION =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
+# generated, together with the HTML files, they form an Eclipse help plugin. To
+# install this plugin and make it available under the help contents menu in
+# Eclipse, the contents of the directory containing the HTML and XML files needs
+# to be copied into the plugins directory of eclipse. The name of the directory
+# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
+# After copying Eclipse needs to be restarted before the help appears.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_ECLIPSEHELP = NO
+
+# A unique identifier for the Eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have this
+# name. Each documentation set should have its own identifier.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
+
+ECLIPSE_DOC_ID = org.doxygen.Project
+
+# If you want full control over the layout of the generated HTML pages it might
+# be necessary to disable the index and replace it with your own. The
+# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
+# of each HTML page. A value of NO enables the index and the value YES disables
+# it. Since the tabs in the index contain the same information as the navigation
+# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+DISABLE_INDEX = NO
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information. If the tag
+# value is set to YES, a side panel will be generated containing a tree-like
+# index structure (just like the one that is generated for HTML Help). For this
+# to work a browser that supports JavaScript, DHTML, CSS and frames is required
+# (i.e. any modern browser). Windows users are probably better off using the
+# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can
+# further fine-tune the look of the index. As an example, the default style
+# sheet generated by doxygen has an example that shows how to put an image at
+# the root of the tree instead of the PROJECT_NAME. Since the tree basically has
+# the same information as the tab index, you could consider setting
+# DISABLE_INDEX to YES when enabling this option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_TREEVIEW = YES
+
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
+# doxygen will group on one line in the generated HTML documentation.
+#
+# Note that a value of 0 will completely suppress the enum values from appearing
+# in the overview section.
+# Minimum value: 0, maximum value: 20, default value: 4.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+ENUM_VALUES_PER_LINE = 4
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
+# to set the initial width (in pixels) of the frame in which the tree is shown.
+# Minimum value: 0, maximum value: 1500, default value: 250.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+TREEVIEW_WIDTH = 250
+
+# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to
+# external symbols imported via tag files in a separate window.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+EXT_LINKS_IN_WINDOW = NO
+
+# Use this tag to change the font size of LaTeX formulas included as images in
+# the HTML documentation. When you change the font size after a successful
+# doxygen run you need to manually remove any form_*.png images from the HTML
+# output directory to force them to be regenerated.
+# Minimum value: 8, maximum value: 50, default value: 10.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FORMULA_FONTSIZE = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are not
+# supported properly for IE 6.0, but are supported on all modern browsers.
+#
+# Note that when changing this option you need to delete any form_*.png files in
+# the HTML output directory before the changes have effect.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FORMULA_TRANSPARENT = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
+# http://www.mathjax.org) which uses client side Javascript for the rendering
+# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
+# installed or if you want to formulas look prettier in the HTML output. When
+# enabled you may also need to install MathJax separately and configure the path
+# to it using the MATHJAX_RELPATH option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+USE_MATHJAX = NO
+
+# When MathJax is enabled you can set the default output format to be used for
+# the MathJax output. See the MathJax site (see:
+# http://docs.mathjax.org/en/latest/output.html) for more details.
+# Possible values are: HTML-CSS (which is slower, but has the best
+# compatibility), NativeMML (i.e. MathML) and SVG.
+# The default value is: HTML-CSS.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_FORMAT = HTML-CSS
+
+# When MathJax is enabled you need to specify the location relative to the HTML
+# output directory using the MATHJAX_RELPATH option. The destination directory
+# should contain the MathJax.js script. For instance, if the mathjax directory
+# is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
+# Content Delivery Network so you can quickly see the result without installing
+# MathJax. However, it is strongly recommended to install a local copy of
+# MathJax from http://www.mathjax.org before deployment.
+# The default value is: http://cdn.mathjax.org/mathjax/latest.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
+# extension names that should be enabled during MathJax rendering. For example
+# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_EXTENSIONS =
+
+# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
+# of code that will be used on startup of the MathJax code. See the MathJax site
+# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
+# example see the documentation.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_CODEFILE =
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
+# the HTML output. The underlying search engine uses javascript and DHTML and
+# should work on any modern browser. Note that when using HTML help
+# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
+# there is already a search function so this one should typically be disabled.
+# For large projects the javascript based search engine can be slow, then
+# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
+# search using the keyboard; to jump to the search box use + S
+# (what the is depends on the OS and browser, but it is typically
+# , /