499 lines
12 KiB
Text
499 lines
12 KiB
Text
|
|
cabal-version: 3.0
|
||
|
|
name: nuthatch
|
||
|
|
version: 0.1.0.0
|
||
|
|
synopsis: User-facing S3 BFF
|
||
|
|
description:
|
||
|
|
A user-facing web application and API for small S3-compatible object stores.
|
||
|
|
Nuthatch gives OIDC-authenticated users identity-scoped personal roots and a
|
||
|
|
shared root while keeping object-store credentials behind the service.
|
||
|
|
license: BSD-3-Clause
|
||
|
|
license-file: LICENSE
|
||
|
|
copyright: 2026 ms2k
|
||
|
|
author: ms2k
|
||
|
|
maintainer: [email protected]
|
||
|
|
homepage: https://code.quorate.dev/ms2k/nuthatch
|
||
|
|
bug-reports: mailto:[email protected]
|
||
|
|
tested-with: GHC == 9.10.3
|
||
|
|
category: Network
|
||
|
|
build-type: Simple
|
||
|
|
extra-doc-files:
|
||
|
|
README.md
|
||
|
|
extra-source-files:
|
||
|
|
.dockerignore
|
||
|
|
Dockerfile
|
||
|
|
Makefile
|
||
|
|
THIRD_PARTY_NOTICES.txt
|
||
|
|
cabal.project
|
||
|
|
cabal.project.freeze
|
||
|
|
deploy/kubernetes/*.yaml.in
|
||
|
|
docs/protocol/*.cfg
|
||
|
|
docs/protocol/*.tla
|
||
|
|
docs/spec/*.md
|
||
|
|
sql/001_initial_schema.sql
|
||
|
|
scripts/*.mjs
|
||
|
|
tests/*.sh
|
||
|
|
tests/kind/*.env
|
||
|
|
tests/kind/*.sh
|
||
|
|
tests/kind/*.yaml
|
||
|
|
tests/kind/*.yaml.in
|
||
|
|
tests/kind/fixture/*.sh
|
||
|
|
tests/kind/provider/nerdctl
|
||
|
|
tests/model-correspondence/*.cfg
|
||
|
|
tests/model-correspondence/*.env
|
||
|
|
tests/model-correspondence/*.json
|
||
|
|
tests/model-correspondence/*.mjs
|
||
|
|
tests/model-correspondence/*.sh
|
||
|
|
web/.node-version
|
||
|
|
web/index.html
|
||
|
|
web/package-lock.json
|
||
|
|
web/package.json
|
||
|
|
web/playwright.config.ts
|
||
|
|
web/src/*.css
|
||
|
|
web/src/*.svelte
|
||
|
|
web/src/*.ts
|
||
|
|
web/src/components/*.svelte
|
||
|
|
web/src/generated/*.ts
|
||
|
|
web/src/workflows/*.ts
|
||
|
|
web/svelte.config.js
|
||
|
|
web/test/*.mjs
|
||
|
|
web/test/browser/*.ts
|
||
|
|
web/test/components/*.ts
|
||
|
|
web/test/fixtures/*.json
|
||
|
|
web/tsconfig.json
|
||
|
|
web/vite.config.ts
|
||
|
|
|
||
|
|
source-repository head
|
||
|
|
type: git
|
||
|
|
location: https://code.quorate.dev/ms2k/nuthatch
|
||
|
|
|
||
|
|
common shared
|
||
|
|
default-language: Haskell2010
|
||
|
|
default-extensions:
|
||
|
|
OverloadedStrings
|
||
|
|
RecordWildCards
|
||
|
|
DeriveGeneric
|
||
|
|
DerivingStrategies
|
||
|
|
GeneralizedNewtypeDeriving
|
||
|
|
LambdaCase
|
||
|
|
ScopedTypeVariables
|
||
|
|
TupleSections
|
||
|
|
NamedFieldPuns
|
||
|
|
FlexibleContexts
|
||
|
|
FlexibleInstances
|
||
|
|
DataKinds
|
||
|
|
TypeOperators
|
||
|
|
TypeFamilies
|
||
|
|
MultiParamTypeClasses
|
||
|
|
UndecidableInstances
|
||
|
|
|
||
|
|
ghc-options:
|
||
|
|
-Wall
|
||
|
|
-Wcompat
|
||
|
|
-Widentities
|
||
|
|
-Wincomplete-record-updates
|
||
|
|
-Wincomplete-uni-patterns
|
||
|
|
-Wmissing-export-lists
|
||
|
|
-Wpartial-fields
|
||
|
|
-Wredundant-constraints
|
||
|
|
|
||
|
|
build-depends:
|
||
|
|
, aeson >= 2.1 && < 2.3
|
||
|
|
, async >= 2.2 && < 2.3
|
||
|
|
, aws >= 0.25.2 && < 0.26
|
||
|
|
, base >= 4.18 && < 5
|
||
|
|
, base16-bytestring >= 1.0 && < 1.1
|
||
|
|
, base64-bytestring >= 1.2 && < 1.3
|
||
|
|
, bytestring >= 0.11 && < 0.13
|
||
|
|
, case-insensitive >= 1.2 && < 1.3
|
||
|
|
, containers >= 0.6 && < 0.8
|
||
|
|
, conduit >= 1.3 && < 1.4
|
||
|
|
, cookie >= 0.5.1 && < 0.6
|
||
|
|
, crypton-connection >= 0.4 && < 0.5
|
||
|
|
, crypton >= 0.34 && < 1.1
|
||
|
|
, directory >= 1.3 && < 1.4
|
||
|
|
, entropy >= 0.4 && < 0.5
|
||
|
|
, envparse >= 0.6 && < 0.7
|
||
|
|
, filepath >= 1.4 && < 1.6
|
||
|
|
, hedis >= 0.15 && < 0.16
|
||
|
|
, http-client >= 0.7 && < 0.8
|
||
|
|
, http-client-tls >= 0.3 && < 0.4
|
||
|
|
, http-conduit >= 2.3 && < 2.4
|
||
|
|
, http-api-data >= 0.7 && < 0.8
|
||
|
|
, http-media >= 0.8 && < 0.9
|
||
|
|
, http-types >= 0.12 && < 0.13
|
||
|
|
, jose >= 0.12 && < 0.13
|
||
|
|
, lens >= 5.2 && < 5.4
|
||
|
|
, memory >= 0.18 && < 0.19
|
||
|
|
, mime-types >= 0.1 && < 0.2
|
||
|
|
, modern-uri >= 0.3.6 && < 0.4
|
||
|
|
, mtl >= 2.3 && < 2.4
|
||
|
|
, network-uri >= 2.6 && < 2.8
|
||
|
|
, postgresql-simple >= 0.7 && < 0.8
|
||
|
|
, postgresql-migration >= 0.2.1.8 && < 0.3
|
||
|
|
, resource-pool >= 0.4 && < 0.5
|
||
|
|
, resourcet >= 1.3 && < 1.4
|
||
|
|
, retry >= 0.9 && < 0.10
|
||
|
|
, scientific >= 0.3 && < 0.4
|
||
|
|
, servant >= 0.20 && < 0.21
|
||
|
|
, servant-server >= 0.20 && < 0.21
|
||
|
|
, stm >= 2.5 && < 2.6
|
||
|
|
, temporary >= 1.3 && < 1.4
|
||
|
|
, text >= 2.0 && < 2.2
|
||
|
|
, time >= 1.12 && < 1.15
|
||
|
|
, tls >= 2.2 && < 2.3
|
||
|
|
, transformers >= 0.6 && < 0.7
|
||
|
|
, unicode-transforms >= 0.4 && < 0.5
|
||
|
|
, unordered-containers >= 0.2 && < 0.3
|
||
|
|
, uuid >= 1.3 && < 1.4
|
||
|
|
, wai >= 3.2 && < 3.3
|
||
|
|
, wai-extra >= 3.1 && < 3.2
|
||
|
|
, warp >= 3.3 && < 3.5
|
||
|
|
, warp-tls >= 3.4 && < 3.5
|
||
|
|
, xml-conduit >= 1.9 && < 1.11
|
||
|
|
|
||
|
|
library nuthatch-internal
|
||
|
|
import: shared
|
||
|
|
hs-source-dirs: src
|
||
|
|
exposed-modules:
|
||
|
|
Nuthatch
|
||
|
|
Nuthatch.Api
|
||
|
|
Nuthatch.App
|
||
|
|
Nuthatch.App.Env
|
||
|
|
Nuthatch.Audit
|
||
|
|
Nuthatch.Browse
|
||
|
|
Nuthatch.Config
|
||
|
|
Nuthatch.Db
|
||
|
|
Nuthatch.Http.Auth
|
||
|
|
Nuthatch.Http.Contract
|
||
|
|
Nuthatch.Http.Error
|
||
|
|
Nuthatch.Http.Server
|
||
|
|
Nuthatch.Mutation.Effects
|
||
|
|
Nuthatch.Mutation.Recovery
|
||
|
|
Nuthatch.Mutation.Service
|
||
|
|
Nuthatch.Oidc
|
||
|
|
Nuthatch.Paths
|
||
|
|
Nuthatch.Product.Limits
|
||
|
|
Nuthatch.Protocol
|
||
|
|
Nuthatch.Redis
|
||
|
|
Nuthatch.Recovery
|
||
|
|
Nuthatch.Runtime
|
||
|
|
Nuthatch.S3
|
||
|
|
Nuthatch.Session
|
||
|
|
Nuthatch.Streaming
|
||
|
|
Nuthatch.Transfer
|
||
|
|
Nuthatch.Types
|
||
|
|
|
||
|
|
executable nuthatch
|
||
|
|
import: shared
|
||
|
|
main-is: Main.hs
|
||
|
|
hs-source-dirs: app
|
||
|
|
build-depends:
|
||
|
|
, nuthatch:nuthatch-internal
|
||
|
|
, base
|
||
|
|
ghc-options:
|
||
|
|
-threaded
|
||
|
|
-rtsopts
|
||
|
|
-with-rtsopts=-N
|
||
|
|
|
||
|
|
executable nuthatch-generate-web-contract
|
||
|
|
import: shared
|
||
|
|
main-is: GenerateContract.hs
|
||
|
|
hs-source-dirs: app
|
||
|
|
build-depends:
|
||
|
|
, nuthatch:nuthatch-internal
|
||
|
|
, base
|
||
|
|
|
||
|
|
executable nuthatch-web-contract-integration
|
||
|
|
import: shared
|
||
|
|
main-is: WebContractIntegration.hs
|
||
|
|
hs-source-dirs: test
|
||
|
|
build-depends:
|
||
|
|
, nuthatch:nuthatch-internal
|
||
|
|
, base
|
||
|
|
, bytestring
|
||
|
|
, process >= 1.6 && < 1.7
|
||
|
|
, text
|
||
|
|
ghc-options:
|
||
|
|
-threaded
|
||
|
|
|
||
|
|
executable nuthatch-storage-integration
|
||
|
|
import: shared
|
||
|
|
main-is: Integration.hs
|
||
|
|
hs-source-dirs: test
|
||
|
|
build-depends:
|
||
|
|
, nuthatch:nuthatch-internal
|
||
|
|
, base
|
||
|
|
, async
|
||
|
|
, bytestring
|
||
|
|
, text
|
||
|
|
ghc-options:
|
||
|
|
-threaded
|
||
|
|
-rtsopts
|
||
|
|
-with-rtsopts=-N
|
||
|
|
|
||
|
|
executable nuthatch-recovery-probe
|
||
|
|
import: shared
|
||
|
|
main-is: RecoveryPhase.hs
|
||
|
|
hs-source-dirs: test
|
||
|
|
build-depends:
|
||
|
|
, nuthatch:nuthatch-internal
|
||
|
|
, base
|
||
|
|
, bytestring
|
||
|
|
, text
|
||
|
|
ghc-options:
|
||
|
|
-threaded
|
||
|
|
-rtsopts
|
||
|
|
-with-rtsopts=-N
|
||
|
|
|
||
|
|
executable nuthatch-protocol-conformance
|
||
|
|
import: shared
|
||
|
|
main-is: ProtocolConformance.hs
|
||
|
|
hs-source-dirs: test
|
||
|
|
other-modules:
|
||
|
|
Nuthatch.ModelEvidence
|
||
|
|
build-depends:
|
||
|
|
, nuthatch:nuthatch-internal
|
||
|
|
, base
|
||
|
|
, bytestring
|
||
|
|
, crypton
|
||
|
|
, memory
|
||
|
|
, postgresql-simple
|
||
|
|
, text
|
||
|
|
ghc-options:
|
||
|
|
-threaded
|
||
|
|
-rtsopts
|
||
|
|
-with-rtsopts=-N
|
||
|
|
|
||
|
|
executable nuthatch-model-evidence
|
||
|
|
import: shared
|
||
|
|
main-is: ModelEvidenceMain.hs
|
||
|
|
hs-source-dirs: test
|
||
|
|
other-modules:
|
||
|
|
Nuthatch.ModelEvidence
|
||
|
|
build-depends:
|
||
|
|
, nuthatch:nuthatch-internal
|
||
|
|
, aeson
|
||
|
|
, base
|
||
|
|
, text
|
||
|
|
|
||
|
|
executable nuthatch-runtime-probe
|
||
|
|
import: shared
|
||
|
|
main-is: RuntimeProbe.hs
|
||
|
|
hs-source-dirs: test
|
||
|
|
build-depends:
|
||
|
|
, nuthatch:nuthatch-internal
|
||
|
|
, base
|
||
|
|
ghc-options:
|
||
|
|
-threaded
|
||
|
|
-rtsopts
|
||
|
|
-with-rtsopts=-N
|
||
|
|
|
||
|
|
executable nuthatch-auth-probe
|
||
|
|
import: shared
|
||
|
|
main-is: AuthProbe.hs
|
||
|
|
hs-source-dirs: test
|
||
|
|
other-modules:
|
||
|
|
Nuthatch.Probe.Assert
|
||
|
|
Nuthatch.Probe.Curl
|
||
|
|
Nuthatch.Probe.Http
|
||
|
|
Nuthatch.Probe.Oidc
|
||
|
|
Nuthatch.Probe.ProductClient
|
||
|
|
build-depends:
|
||
|
|
, nuthatch:nuthatch-internal
|
||
|
|
, aeson
|
||
|
|
, base
|
||
|
|
, bytestring
|
||
|
|
, crypton
|
||
|
|
, memory
|
||
|
|
, process >= 1.6 && < 1.7
|
||
|
|
, temporary
|
||
|
|
ghc-options:
|
||
|
|
-threaded
|
||
|
|
-rtsopts
|
||
|
|
-with-rtsopts=-N
|
||
|
|
|
||
|
|
executable nuthatch-product-probe
|
||
|
|
import: shared
|
||
|
|
main-is: ProductProbe.hs
|
||
|
|
hs-source-dirs: test
|
||
|
|
other-modules:
|
||
|
|
Nuthatch.Probe.Assert
|
||
|
|
Nuthatch.Probe.Http
|
||
|
|
Nuthatch.Probe.Oidc
|
||
|
|
Nuthatch.Probe.ProductClient
|
||
|
|
build-depends:
|
||
|
|
, nuthatch:nuthatch-internal
|
||
|
|
, aeson
|
||
|
|
, base
|
||
|
|
, bytestring
|
||
|
|
, crypton
|
||
|
|
, memory
|
||
|
|
, process >= 1.6 && < 1.7
|
||
|
|
, temporary
|
||
|
|
ghc-options:
|
||
|
|
-threaded
|
||
|
|
-rtsopts
|
||
|
|
-with-rtsopts=-N
|
||
|
|
|
||
|
|
executable nuthatch-idempotency-probe
|
||
|
|
import: shared
|
||
|
|
main-is: IdempotencyProbe.hs
|
||
|
|
hs-source-dirs: test
|
||
|
|
other-modules:
|
||
|
|
Nuthatch.Probe.Assert
|
||
|
|
Nuthatch.Probe.Curl
|
||
|
|
Nuthatch.Probe.Http
|
||
|
|
Nuthatch.Probe.Oidc
|
||
|
|
Nuthatch.Probe.ProductClient
|
||
|
|
build-depends:
|
||
|
|
, nuthatch:nuthatch-internal
|
||
|
|
, aeson
|
||
|
|
, async
|
||
|
|
, base
|
||
|
|
, bytestring
|
||
|
|
, crypton
|
||
|
|
, memory
|
||
|
|
, process >= 1.6 && < 1.7
|
||
|
|
, temporary
|
||
|
|
ghc-options:
|
||
|
|
-threaded
|
||
|
|
-rtsopts
|
||
|
|
-with-rtsopts=-N
|
||
|
|
|
||
|
|
executable nuthatch-streaming-probe
|
||
|
|
import: shared
|
||
|
|
main-is: StreamingProbe.hs
|
||
|
|
hs-source-dirs: test
|
||
|
|
other-modules:
|
||
|
|
Nuthatch.Probe.Assert
|
||
|
|
Nuthatch.Probe.Curl
|
||
|
|
Nuthatch.Probe.Http
|
||
|
|
Nuthatch.Probe.Oidc
|
||
|
|
Nuthatch.Probe.ProductClient
|
||
|
|
build-depends:
|
||
|
|
, nuthatch:nuthatch-internal
|
||
|
|
, aeson
|
||
|
|
, async
|
||
|
|
, base
|
||
|
|
, bytestring
|
||
|
|
, crypton
|
||
|
|
, directory
|
||
|
|
, memory
|
||
|
|
, process >= 1.6 && < 1.7
|
||
|
|
, temporary
|
||
|
|
ghc-options:
|
||
|
|
-threaded
|
||
|
|
-rtsopts
|
||
|
|
-with-rtsopts=-N
|
||
|
|
|
||
|
|
executable nuthatch-runtime-http-probe
|
||
|
|
import: shared
|
||
|
|
main-is: RuntimeHttpProbe.hs
|
||
|
|
hs-source-dirs: test
|
||
|
|
other-modules:
|
||
|
|
Nuthatch.Probe.Assert
|
||
|
|
Nuthatch.Probe.Http
|
||
|
|
Nuthatch.Probe.Oidc
|
||
|
|
Nuthatch.Probe.ProductClient
|
||
|
|
build-depends:
|
||
|
|
, nuthatch:nuthatch-internal
|
||
|
|
, aeson
|
||
|
|
, base
|
||
|
|
, bytestring
|
||
|
|
, crypton
|
||
|
|
, memory
|
||
|
|
, process >= 1.6 && < 1.7
|
||
|
|
, temporary
|
||
|
|
ghc-options:
|
||
|
|
-threaded
|
||
|
|
-rtsopts
|
||
|
|
-with-rtsopts=-N
|
||
|
|
|
||
|
|
executable nuthatch-runtime-audit-probe
|
||
|
|
import: shared
|
||
|
|
main-is: RuntimeAuditProbe.hs
|
||
|
|
hs-source-dirs: test
|
||
|
|
other-modules:
|
||
|
|
Nuthatch.Probe.Assert
|
||
|
|
build-depends:
|
||
|
|
, nuthatch:nuthatch-internal
|
||
|
|
, aeson
|
||
|
|
, base
|
||
|
|
, bytestring
|
||
|
|
, text
|
||
|
|
|
||
|
|
executable nuthatch-fixture-probe
|
||
|
|
import: shared
|
||
|
|
main-is: FixtureProbe.hs
|
||
|
|
hs-source-dirs: test
|
||
|
|
other-modules:
|
||
|
|
Nuthatch.Probe.Assert
|
||
|
|
Nuthatch.Probe.Http
|
||
|
|
build-depends:
|
||
|
|
, nuthatch:nuthatch-internal
|
||
|
|
, base
|
||
|
|
, bytestring
|
||
|
|
, crypton
|
||
|
|
, memory
|
||
|
|
, postgresql-simple
|
||
|
|
, process >= 1.6 && < 1.7
|
||
|
|
, temporary
|
||
|
|
, text
|
||
|
|
|
||
|
|
executable nuthatch-dependency-probe
|
||
|
|
import: shared
|
||
|
|
main-is: DependencyProbe.hs
|
||
|
|
hs-source-dirs: test
|
||
|
|
other-modules:
|
||
|
|
Nuthatch.Probe.Assert
|
||
|
|
Nuthatch.Probe.Curl
|
||
|
|
Nuthatch.Probe.Http
|
||
|
|
build-depends:
|
||
|
|
, nuthatch:nuthatch-internal
|
||
|
|
, base
|
||
|
|
, bytestring
|
||
|
|
, hedis
|
||
|
|
, postgresql-simple
|
||
|
|
, process >= 1.6 && < 1.7
|
||
|
|
, temporary
|
||
|
|
|
||
|
|
executable nuthatch-browser-session-fixture
|
||
|
|
import: shared
|
||
|
|
main-is: BrowserSessionFixture.hs
|
||
|
|
hs-source-dirs: test
|
||
|
|
build-depends:
|
||
|
|
, nuthatch:nuthatch-internal
|
||
|
|
, aeson
|
||
|
|
, base
|
||
|
|
, text
|
||
|
|
|
||
|
|
test-suite nuthatch-unit
|
||
|
|
import: shared
|
||
|
|
type: exitcode-stdio-1.0
|
||
|
|
main-is: Spec.hs
|
||
|
|
hs-source-dirs: test
|
||
|
|
other-modules:
|
||
|
|
Nuthatch.Test.Config
|
||
|
|
Nuthatch.Test.Http
|
||
|
|
Nuthatch.Test.HttpContract
|
||
|
|
Nuthatch.Test.Identity
|
||
|
|
Nuthatch.Test.Oidc
|
||
|
|
Nuthatch.Test.Path
|
||
|
|
Nuthatch.Test.PathFixture
|
||
|
|
Nuthatch.Test.Product
|
||
|
|
Nuthatch.Test.Protocol
|
||
|
|
Nuthatch.Test.Recovery
|
||
|
|
Nuthatch.Test.Runtime
|
||
|
|
Nuthatch.Test.Streaming
|
||
|
|
Nuthatch.Test.UploadIdentityFixture
|
||
|
|
build-depends:
|
||
|
|
, nuthatch:nuthatch-internal
|
||
|
|
, base
|
||
|
|
, bytestring
|
||
|
|
, hedgehog >= 1.7 && < 1.8
|
||
|
|
, tasty >= 1.5 && < 1.6
|
||
|
|
, tasty-hedgehog >= 1.4 && < 1.5
|
||
|
|
, tasty-hunit >= 0.10 && < 0.11
|
||
|
|
, text
|
||
|
|
ghc-options:
|
||
|
|
-threaded
|