axum-csrf-sync-pattern 0.3.2

An axum layer and middleware, providing Cross Site Request Forgery protection by implementing the CSRF Synchronizer Token Pattern for same-site and cross-site API requests, as described by OWASP.
Documentation
name: CI

env:
  CARGO_TERM_COLOR: always

on:
  push:
    branches:
      - main
  pull_request: {}

jobs:
  check:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        pwd:
          - .
          - examples
    steps:
      - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
      - uses: actions-rs/toolchain@16499b5e05bf2e26879000db0c1d13f7e13fa3af # v1
        with:
          toolchain: stable
          override: true
          profile: minimal
          components: clippy, rustfmt
      - uses: Swatinem/rust-cache@23bce251a8cd2ffc3c1075eaa2367cf899916d84 # v2
        with:
          key: ${{ matrix.pwd }}
          workspaces: ${{ matrix.pwd }}
      - name: Check
        working-directory: ${{ matrix.pwd }}
        run: |
          cargo clippy --all --all-targets --all-features
      - name: Check formatting
        working-directory: ${{ matrix.pwd }}
        run: |
          cargo fmt --all -- --check

  check-docs:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
      - uses: actions-rs/toolchain@16499b5e05bf2e26879000db0c1d13f7e13fa3af # v1
        with:
          toolchain: stable
          override: true
          profile: minimal
      - uses: Swatinem/rust-cache@23bce251a8cd2ffc3c1075eaa2367cf899916d84 # v2
      - name: Check documentation
        env:
          RUSTDOCFLAGS: "-D rustdoc::broken_intra_doc_links"
        run: cargo doc --all-features --no-deps

  test:
    needs: check
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
      - uses: actions-rs/toolchain@16499b5e05bf2e26879000db0c1d13f7e13fa3af # v1
        with:
          toolchain: stable
          override: true
          profile: minimal
      - uses: Swatinem/rust-cache@23bce251a8cd2ffc3c1075eaa2367cf899916d84 # v2
      - name: Run doc tests
        uses: actions-rs/cargo@844f36862e911db73fe0815f00a4a2602c279505 # v1
        with:
          command: test
          args: --doc --all-features
      - name: Install nextest
        uses: taiki-e/install-action@nextest
      - name: Install cargo-llvm-cov
        uses: taiki-e/install-action@cargo-llvm-cov
      - name: Run tests with coverage
        run: cargo --locked llvm-cov nextest
      - uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4
        if: success() || failure()
        with:
          name: junit.xml
          path: target/nextest/default/junit.xml

  dependencies-sorted:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        pwd:
          - .
          - examples
    steps:
      - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
        with:
          toolchain: stable
          override: true
          profile: minimal
      - uses: Swatinem/rust-cache@23bce251a8cd2ffc3c1075eaa2367cf899916d84 # v2
        with:
          key: ${{ matrix.pwd }}
          workspaces: ${{ matrix.pwd }}
      - run: |
          cargo install cargo-sort
      - name: Check dependency tables
        working-directory: ${{ matrix.pwd }}
        run: |
          cargo sort --workspace --grouped --check