Files
jcoffey-dev 0ca26070d7 SCIM: users, groups, queries, PATCH, Bulk and cursors at /scim/v2, over x:Account (SCIM-1 to SCIM-57)
Every SCIM operation becomes the x:Account get, query or set JMAP makes,
as the service principal, so permissions, tenant scope and limits,
address uniqueness and account destruction are enforced in one place.
Discovery is anonymous; everything else takes an API key as a bearer
token and nothing else. Domains open to SCIM carry a flag in the domain
cache. Filters take eq and and, answered from the account indexes, with
unindexed attributes checked on at most 200 candidates. Cursors are
stateless, HMAC-sealed under the server key. PATCH applies to the
resource in memory and saves it as a PUT, so it is all or nothing.
Groups get an address from their display name on the principal's
domain; membership is written on each user.

Every write emits one of five new scim.* events (ids 637 to 641), also
added to the packaged schema. The helpers the surviving SCIM suites
import are rebuilt from the spec; scim_tests runs the new acceptance
suite and the surviving tenant isolation suite, and both pass.
2026-09-19 09:35:23 -07:00

54 lines
1.5 KiB
TOML

[package]
name = "http"
version = "0.16.22"
edition = "2024"
[dependencies]
store = { path = "../store" }
common = { path = "../common" }
utils = { path = "../utils" }
trc = { path = "../trc" }
email = { path = "../email" }
smtp = { path = "../smtp" }
jmap = { path = "../jmap" }
dav = { path = "../dav" }
scim = { path = "../scim" }
scim-proto = { path = "../scim-proto" }
groupware = { path = "../groupware" }
http_proto = { path = "../http-proto" }
jmap_proto = { path = "../jmap-proto" }
types = { path = "../types" }
directory = { path = "../directory" }
services = { path = "../services" }
registry = { path = "../registry" }
mail-parser = { version = "0.11", features = ["full_encoding", "rkyv"] }
mail-builder = { version = "1.0" }
mail-auth = { version = "0.13", features = ["generate", "arc"] }
tokio = { version = "1.53", features = ["rt"] }
hyper = { version = "1.11.1", features = ["server", "http1", "http2"] }
inbuxa-features = { path = "../features" }
hyper-util = { version = "0.1.20", features = ["tokio"] }
http-body-util = "0.1.5"
async-stream = "0.3.6"
serde = { version = "1.0", features = ["derive"]}
serde_json = "1.0"
chrono = "0.4"
base64 = "0.23"
sha2 = "0.11"
rkyv = { version = "0.8.18", features = ["little_endian"] }
form-data = { version = "0.6.0", features = ["sync"], default-features = false }
mime = "0.3.17"
percent-encoding = "2.3.2"
hashify = { version = "0.2" }
[dev-dependencies]
flate2 = "1.1"
[features]
test_mode = []
dev_mode = []
enterprise = ["scim/enterprise"]
[lints]
workspace = true