mirror of
https://gitlab.com/fabinfra/fabaccess/bffh.git
synced 2024-11-10 17:43:23 +01:00
Update schema and remove old impl
This commit is contained in:
parent
9a6b338070
commit
453111f0e4
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,2 +1,3 @@
|
||||
/target
|
||||
**/*.rs.bk
|
||||
tags
|
||||
|
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
[submodule "schema"]
|
||||
path = schema
|
||||
url = ./schema
|
181
Cargo.lock
generated
181
Cargo.lock
generated
@ -107,6 +107,29 @@ name = "base64"
|
||||
version = "0.11.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "bindgen"
|
||||
version = "0.53.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cexpr 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"clang-sys 0.29.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"env_logger 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"peeking_take_while 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"proc-macro2 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"regex 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rustc-hash 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"shlex 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"which 3.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "bitflags"
|
||||
version = "1.2.1"
|
||||
@ -193,6 +216,19 @@ dependencies = [
|
||||
"ttl_cache 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cc"
|
||||
version = "1.0.52"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "cexpr"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"nom 5.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cfg-if"
|
||||
version = "0.1.10"
|
||||
@ -208,6 +244,16 @@ dependencies = [
|
||||
"time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "clang-sys"
|
||||
version = "0.29.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libloading 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "clap"
|
||||
version = "2.33.0"
|
||||
@ -323,6 +369,7 @@ dependencies = [
|
||||
"futures 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"futures-signals 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rsasl 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"signal-hook 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"slog 2.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
@ -365,6 +412,18 @@ dependencies = [
|
||||
"hashbrown 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "env_logger"
|
||||
version = "0.7.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"humantime 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"regex 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"termcolor 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "fnv"
|
||||
version = "1.0.6"
|
||||
@ -500,6 +559,19 @@ dependencies = [
|
||||
"wasi 0.9.0+wasi-snapshot-preview1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "glob"
|
||||
version = "0.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "gsasl-sys"
|
||||
version = "0.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"bindgen 0.53.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hashbrown"
|
||||
version = "0.6.3"
|
||||
@ -517,6 +589,14 @@ dependencies = [
|
||||
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "humantime"
|
||||
version = "1.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"quick-error 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "indexmap"
|
||||
version = "1.3.2"
|
||||
@ -560,11 +640,25 @@ name = "lazy_static"
|
||||
version = "1.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "lazycell"
|
||||
version = "1.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.66"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "libloading"
|
||||
version = "0.5.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"cc 1.0.52 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "linked-hash-map"
|
||||
version = "0.5.2"
|
||||
@ -653,6 +747,15 @@ dependencies = [
|
||||
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nom"
|
||||
version = "5.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"memchr 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "num-integer"
|
||||
version = "0.1.42"
|
||||
@ -708,6 +811,11 @@ dependencies = [
|
||||
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "peeking_take_while"
|
||||
version = "0.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "pin-project-lite"
|
||||
version = "0.1.4"
|
||||
@ -746,6 +854,11 @@ dependencies = [
|
||||
"unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "quick-error"
|
||||
version = "1.2.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "quote"
|
||||
version = "1.0.2"
|
||||
@ -827,6 +940,15 @@ name = "rhai"
|
||||
version = "0.9.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "rsasl"
|
||||
version = "0.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"gsasl-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rust-argon2"
|
||||
version = "0.7.0"
|
||||
@ -838,6 +960,11 @@ dependencies = [
|
||||
"crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustc-hash"
|
||||
version = "1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "rustc_version"
|
||||
version = "0.2.3"
|
||||
@ -882,6 +1009,11 @@ dependencies = [
|
||||
"syn 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "shlex"
|
||||
version = "0.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "signal-hook"
|
||||
version = "0.1.13"
|
||||
@ -973,6 +1105,14 @@ dependencies = [
|
||||
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "termcolor"
|
||||
version = "1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"winapi-util 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "textwrap"
|
||||
version = "0.11.0"
|
||||
@ -1085,11 +1225,24 @@ name = "vec_map"
|
||||
version = "0.8.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "version_check"
|
||||
version = "0.9.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "wasi"
|
||||
version = "0.9.0+wasi-snapshot-preview1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "which"
|
||||
version = "3.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "winapi"
|
||||
version = "0.2.8"
|
||||
@ -1114,6 +1267,14 @@ name = "winapi-i686-pc-windows-gnu"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "winapi-util"
|
||||
version = "0.1.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "winapi-x86_64-pc-windows-gnu"
|
||||
version = "0.4.0"
|
||||
@ -1142,6 +1303,7 @@ dependencies = [
|
||||
"checksum autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2"
|
||||
"checksum autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d"
|
||||
"checksum base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7"
|
||||
"checksum bindgen 0.53.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6bb26d6a69a335b8cb0e7c7e9775cd5666611dc50a37177c3f2cedcfc040e8c8"
|
||||
"checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
|
||||
"checksum blake2b_simd 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)" = "d8fb2d74254a3a0b5cac33ac9f8ed0e44aa50378d9dbb2e5d83bd21ed1dc2c8a"
|
||||
"checksum byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de"
|
||||
@ -1152,8 +1314,11 @@ dependencies = [
|
||||
"checksum capnp-rpc 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0966e19b0ce4121b1353a79b6411c1b8d3c59a71684a4adabdf39683ad81742d"
|
||||
"checksum capnpc 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "805e848aeb68f9312f716f7dff14e55db726759f62085c7bdf471ceb43438eef"
|
||||
"checksum casbin 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d475cdf859ed26998d20d7c34356e2b2bcc327a9bc36b5207e7b0aabc5b7d241"
|
||||
"checksum cc 1.0.52 (registry+https://github.com/rust-lang/crates.io-index)" = "c3d87b23d6a92cd03af510a5ade527033f6aa6fa92161e2d5863a907d4c5e31d"
|
||||
"checksum cexpr 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f4aedb84272dbe89af497cf81375129abda4fc0a9e7c5d317498c15cc30c0d27"
|
||||
"checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
|
||||
"checksum chrono 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "31850b4a4d6bae316f7a09e691c944c28299298837edc0a03f755618c23cbc01"
|
||||
"checksum clang-sys 0.29.3 (registry+https://github.com/rust-lang/crates.io-index)" = "fe6837df1d5cba2397b835c8530f51723267e16abbf83892e9e5af4f0e5dd10a"
|
||||
"checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9"
|
||||
"checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
|
||||
"checksum const-random 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "2f1af9ac737b2dd2d577701e59fd09ba34822f6f2ebdb30a7647405d9e55e16a"
|
||||
@ -1169,6 +1334,7 @@ dependencies = [
|
||||
"checksum dirs-sys 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "afa0b23de8fd801745c471deffa6e12d248f962c9fd4b4c33787b055599bde7b"
|
||||
"checksum discard 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0"
|
||||
"checksum emitbrown 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "72465c5bd10dc52fe4c5c24875780b66d7c17f170f3c1f411b5d4abe2f1e286f"
|
||||
"checksum env_logger 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36"
|
||||
"checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3"
|
||||
"checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82"
|
||||
"checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
|
||||
@ -1185,15 +1351,20 @@ dependencies = [
|
||||
"checksum futures-timer 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a1de7508b218029b0f01662ed8f61b1c964b3ae99d6f25462d0f55a595109df6"
|
||||
"checksum futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "22766cf25d64306bedf0384da004d05c9974ab104fcc4528f1236181c18004c5"
|
||||
"checksum getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb"
|
||||
"checksum glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
|
||||
"checksum gsasl-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9a23468198e86f09c8da7ae40ba7844c28cc2fa82f5f1ce7d309d51c8132bc33"
|
||||
"checksum hashbrown 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8e6073d0ca812575946eb5f35ff68dbe519907b25c42530389ff946dc84c6ead"
|
||||
"checksum hermit-abi 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "eff2656d88f158ce120947499e971d743c05dbcbed62e5bd2f38f1698bbc3772"
|
||||
"checksum humantime 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f"
|
||||
"checksum indexmap 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "076f042c5b7b98f31d205f1249267e12a6518c1481e9dae9764af19b707d2292"
|
||||
"checksum iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e"
|
||||
"checksum ip_network 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "2ee15951c035f79eddbef745611ec962f63f4558f1dadf98ab723cc603487c6f"
|
||||
"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
|
||||
"checksum kv-log-macro 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8c54d9f465d530a752e6ebdc217e081a7a614b48cb200f6f0aee21ba6bc9aabb"
|
||||
"checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
|
||||
"checksum lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f"
|
||||
"checksum libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)" = "d515b1f41455adea1313a4a2ac8a8a477634fbae63cc6100e3aebb207ce61558"
|
||||
"checksum libloading 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f2b111a074963af1d37a139918ac6d49ad1d0d5e47f72fd55388619691a7d753"
|
||||
"checksum linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ae91b68aebc4ddb91978b11a1b02ddd8602a05ec19002801c5666000e05e0f83"
|
||||
"checksum lock_api 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "79b2de95ecb4691949fea4716ca53cdbcfccb2c612e19644a8bad05edcf9f47b"
|
||||
"checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7"
|
||||
@ -1204,18 +1375,21 @@ dependencies = [
|
||||
"checksum mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)" = "966257a94e196b11bb43aca423754d87429960a768de9414f3691d6957abf125"
|
||||
"checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919"
|
||||
"checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88"
|
||||
"checksum nom 5.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b471253da97532da4b61552249c521e01e736071f71c1a4f7ebbfbf0a06aad6"
|
||||
"checksum num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "3f6ea62e9d81a77cd3ee9a2a5b9b609447857f3d358704331e4ef39eb247fcba"
|
||||
"checksum num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "c62be47e61d1842b9170f0fdeec8eba98e60e90e5446449a0545e5152acd7096"
|
||||
"checksum num_cpus 1.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "46203554f085ff89c235cd12f7075f3233af9b11ed7c9e16dfe2560d03313ce6"
|
||||
"checksum once_cell 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b1c601810575c99596d4afc46f78a678c80105117c379eb3650cf99b8a21ce5b"
|
||||
"checksum parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252"
|
||||
"checksum parking_lot_core 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b876b1b9e7ac6e1a74a6da34d25c42e17e8862aa409cbbbdcfc8d86c6f3bc62b"
|
||||
"checksum peeking_take_while 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
|
||||
"checksum pin-project-lite 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "237844750cfbb86f67afe27eee600dfbbcb6188d734139b534cbfbf4f96792ae"
|
||||
"checksum pin-utils 0.1.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5894c618ce612a3fa23881b152b608bafb8c56cfc22f434a3ba3120b40f7b587"
|
||||
"checksum ppv-lite86 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "74490b50b9fbe561ac330df47c08f3f33073d2d00c150f719147d7c54522fa1b"
|
||||
"checksum proc-macro-hack 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)" = "ecd45702f76d6d3c75a80564378ae228a85f0b59d2f3ed43c91b4a69eb2ebfc5"
|
||||
"checksum proc-macro-nested 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "369a6ed065f249a159e06c45752c780bda2fb53c995718f9e484d08daa9eb42e"
|
||||
"checksum proc-macro2 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)" = "3acb317c6ff86a4e579dfa00fc5e6cca91ecbb4e7eb2df0468805b674eb88548"
|
||||
"checksum quick-error 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
|
||||
"checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe"
|
||||
"checksum rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
|
||||
"checksum rand_chacha 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "03a2a90da8c7523f554344f921aa97283eadf6ac484a6d2a7d0212fa7f8d6853"
|
||||
@ -1226,13 +1400,16 @@ dependencies = [
|
||||
"checksum regex 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "322cf97724bea3ee221b78fe25ac9c46114ebb51747ad5babd51a2fc6a8235a8"
|
||||
"checksum regex-syntax 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)" = "b28dfe3fe9badec5dbf0a79a9cccad2cfc2ab5484bdb3e44cbd1ae8b3ba2be06"
|
||||
"checksum rhai 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b1cadbefcdb49a5ea2ea53699ce6b60f28c8a711247ce449ca99e687b0a5d6de"
|
||||
"checksum rsasl 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f04a6a443b95750c7125df4b051353dc6aa15bb8762c55ff5276370c698e2cdf"
|
||||
"checksum rust-argon2 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2bc8af4bda8e1ff4932523b94d3dd20ee30a87232323eda55903ffd71d2fb017"
|
||||
"checksum rustc-hash 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
|
||||
"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
|
||||
"checksum scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b42e15e59b18a828bbf5c58ea01debb36b9b096346de35d941dcb89009f24a0d"
|
||||
"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
|
||||
"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
|
||||
"checksum serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)" = "414115f25f818d7dfccec8ee535d76949ae78584fc4f79a6f45a904bf8ab4449"
|
||||
"checksum serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)" = "128f9e303a5a29922045a830221b8f78ec74a5f544944f3d5984f8ec3895ef64"
|
||||
"checksum shlex 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2"
|
||||
"checksum signal-hook 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "10b9f3a1686a29f53cfd91ee5e3db3c12313ec02d33765f02c1a9645a1811e2c"
|
||||
"checksum signal-hook-registry 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "94f478ede9f64724c5d173d7bb56099ec3e2d9fc2774aac65d34b8b890405f41"
|
||||
"checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8"
|
||||
@ -1244,6 +1421,7 @@ dependencies = [
|
||||
"checksum syn 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)" = "af6f3550d8dff9ef7dc34d384ac6f107e5d31c8f57d9f28e0081503f547ac8f5"
|
||||
"checksum take_mut 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f764005d11ee5f36500a149ace24e00e3da98b0158b3e2d53a7495660d3f4d60"
|
||||
"checksum term 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c0863a3345e70f61d613eab32ee046ccd1bcc5f9105fe402c61fcd0c13eeb8b5"
|
||||
"checksum termcolor 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bb6bfa289a4d7c5766392812c0a1f4c1ba45afa1ad47803c11e1f407d846d75f"
|
||||
"checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
|
||||
"checksum thread_local 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14"
|
||||
"checksum time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f"
|
||||
@ -1257,10 +1435,13 @@ dependencies = [
|
||||
"checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c"
|
||||
"checksum uuid 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9fde2f6a4bea1d6e007c4ad38c6839fa71cbb63b6dbf5b595aa38dc9b1093c11"
|
||||
"checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a"
|
||||
"checksum version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "078775d0255232fb988e6fccf26ddc9d1ac274299aaedcedce21c6f72cc533ce"
|
||||
"checksum wasi 0.9.0+wasi-snapshot-preview1 (registry+https://github.com/rust-lang/crates.io-index)" = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
|
||||
"checksum which 3.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d011071ae14a2f6671d0b74080ae0cd8ebf3a6f8c9589a2cd45f23126fe29724"
|
||||
"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
|
||||
"checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6"
|
||||
"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
|
||||
"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
|
||||
"checksum winapi-util 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
|
||||
"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
||||
"checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"
|
||||
|
@ -34,5 +34,7 @@ uuid = { version = "0.8", features = ["serde", "v4"] }
|
||||
|
||||
clap = "2.33"
|
||||
|
||||
rsasl = "0.1"
|
||||
|
||||
[build-dependencies]
|
||||
capnpc = "0.12"
|
||||
|
1
schema
Submodule
1
schema
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit 16a4aba76abc2667cce80d2937ca923bce225817
|
133
schema/api.capnp
133
schema/api.capnp
@ -1,133 +0,0 @@
|
||||
# Copyright © 2020 Gregor Reitzenstein
|
||||
# Licensed under the MIT License:
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included
|
||||
# in all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||
# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
|
||||
# OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
|
||||
@0xfd92ce9be2369b8e;
|
||||
|
||||
interface Diflouroborane {
|
||||
# Upon initial connection this is the interface a program is presented with, serving as the
|
||||
# common point to access specific subsystems. Keep in mind that one can use pipelining to make this
|
||||
# just as efficient as direct calls — e.g. access the authentication system and call
|
||||
# `initializeAuthentication` on it in one roundtrip, provided one gets granted access to the
|
||||
# Authentication subsystem (which in all fairness is a reasonable assumption)
|
||||
|
||||
authentication @0 () -> ( auth :Authentication );
|
||||
# Then authentication subsystem handles authentication of clients and servers. Multiple
|
||||
# authentication is possible, see the `Authentication` interface for details.
|
||||
|
||||
permissions @1 () -> ( perm :Permissions );
|
||||
# Permission subsystem to manage permissions and systems underlying the authorization process
|
||||
|
||||
machines @2 () -> ( mach :Machines );
|
||||
# Diflouroborane stores machine¹ information in an opaque internal database. This interface is
|
||||
# the only stable process of modifying that information
|
||||
|
||||
# TODO Capability transfer system, required for machine takeover, session resumption.
|
||||
}
|
||||
|
||||
struct UUID {
|
||||
# UUID type used to identify machines.
|
||||
# Since the exact value has no meaning the encoding rules are not too relevant, but it is
|
||||
# paramount that you are consistent when encoding and decoding this type.
|
||||
#
|
||||
# Consider using this algorithm for assembling the 128-bit integer:
|
||||
# (assuming ISO9899:2018 shifting & casting rules)
|
||||
# uint128_t num = (uuid1 << 64) + uuid0;
|
||||
# And then respectively this code for deconstructing it:
|
||||
# uint64_t uuid0 = (uint64_t) num;
|
||||
# uint64_t uuid1 = (uint64_t) (num >> 64);
|
||||
|
||||
uuid0 @0 :UInt64;
|
||||
uuid1 @1 :UInt64;
|
||||
}
|
||||
|
||||
interface Machines {
|
||||
interface Manage {
|
||||
setBlocked @0 ( blocked :Bool ) -> ();
|
||||
# Block or Unblock the machine. A blocked machine can not be used.
|
||||
|
||||
forceReturn @1 () -> ();
|
||||
# Forcefully marking a machine as `returned` — i.e. not used.
|
||||
}
|
||||
|
||||
interface GiveBack {
|
||||
# The only way of getting a `return` interface is by successfully calling `use`. This means
|
||||
# only the user that marked a machine as `used` can return it again. (Baring force override)
|
||||
giveback @0 () -> ();
|
||||
}
|
||||
|
||||
manage @0 ( uuid :UUID ) -> ( manage :Manage );
|
||||
|
||||
use @1 ( uuid :UUID ) -> ( giveback :GiveBack );
|
||||
# Use a machine, identified by its UUID. If the caller is allowed to and the machine is
|
||||
# available to being used a `return` Capability will be returned — the person using a machine is
|
||||
# after all the only person that can return the machine after use.
|
||||
}
|
||||
|
||||
interface Permissions {
|
||||
getAllSubjects @0 () -> ( subjects :List(Text) );
|
||||
getAllObjects @1 () -> ( objects :List(Text) );
|
||||
getAllAction @2 () -> ( actions :List(Text) );
|
||||
getAllRoles @3 () -> ( roles :List(Text) );
|
||||
|
||||
removePolicy @4 ( p :List(Text) ) -> ();
|
||||
addPolicy @5 ( p :List(Text) ) -> ();
|
||||
}
|
||||
|
||||
interface Authentication {
|
||||
# List all SASL mechs the server is willing to use
|
||||
availableMechanisms @0 () -> ( mechanisms :List(Text) );
|
||||
|
||||
# Start authentication using the given mechanism and optional initial data
|
||||
initializeAuthentication @1 ( mechanism :Text, initialData :MaybeData )
|
||||
-> (response :StepResult );
|
||||
|
||||
getAuthzid @2 () -> ( authzid :Text );
|
||||
|
||||
struct StepResult {
|
||||
union {
|
||||
challenge @0 :Challenge;
|
||||
outcome @1 :Outcome;
|
||||
}
|
||||
}
|
||||
|
||||
struct MaybeData {
|
||||
union {
|
||||
some @0 :Data;
|
||||
none @1 :Void;
|
||||
}
|
||||
}
|
||||
|
||||
interface Challenge {
|
||||
# Access the challenge data
|
||||
read @0 () -> ( data :MaybeData );
|
||||
|
||||
respond @1 ( data :MaybeData )
|
||||
-> ( response :StepResult );
|
||||
}
|
||||
|
||||
interface Outcome {
|
||||
# Outcomes may contain additional data
|
||||
read @0 () -> ( data :MaybeData );
|
||||
# The actual outcome.
|
||||
value @1 () -> ( granted :Bool );
|
||||
}
|
||||
}
|
93
src/api.rs
93
src/api.rs
@ -32,95 +32,6 @@ use std::ops::Deref;
|
||||
|
||||
use api::diflouroborane;
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct API<S> {
|
||||
auth: Arc<RwLock<AuthenticationProvider>>,
|
||||
perm: Arc<RwLock<PermissionsProvider>>,
|
||||
mach: Arc<RwLock<MachinesProvider>>,
|
||||
|
||||
spawner: S,
|
||||
}
|
||||
impl<S: Spawn> API<S> {
|
||||
pub fn new(auth: AuthenticationProvider,
|
||||
perm: PermissionsProvider,
|
||||
mach: MachinesProvider,
|
||||
spawner: S)
|
||||
-> Self
|
||||
{
|
||||
let auth = Arc::new(RwLock::new(auth));
|
||||
let perm = Arc::new(RwLock::new(perm));
|
||||
let mach = Arc::new(RwLock::new(mach));
|
||||
|
||||
Self { auth, perm, mach, spawner }
|
||||
}
|
||||
|
||||
pub fn into_connection(self) -> Bootstrap {
|
||||
let auth = Rc::new(Authentication::new(self.auth));
|
||||
let perm = Rc::new(Permissions::new(self.perm, auth.clone()));
|
||||
let mach = Machines::new(self.mach, perm.clone());
|
||||
Bootstrap {
|
||||
auth: auth,
|
||||
perm: perm,
|
||||
mach: mach,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn handle_connection<S: Spawn>(api: API<S>, log: Logger, socket: TcpStream) -> Result<(), Error> {
|
||||
info!(log, "A new connection");
|
||||
let client = api.into_connection();
|
||||
let a = api::diflouroborane::ToClient::new(client).into_client::<capnp_rpc::Server>();
|
||||
|
||||
let netw = VatNetwork::new(socket.clone(), socket, Side::Server, Default::default());
|
||||
|
||||
let rpc = RpcSystem::new(Box::new(netw), Some(a.clone().client)).map(|_| ());
|
||||
|
||||
rpc.await;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Bootstrap capability of the Diflouroborane API
|
||||
///
|
||||
/// This is the starting point for any client connecting
|
||||
#[derive(Clone)]
|
||||
pub struct Bootstrap {
|
||||
auth: Rc<Authentication>,
|
||||
perm: Rc<Permissions>,
|
||||
mach: Machines,
|
||||
}
|
||||
|
||||
impl diflouroborane::Server for Bootstrap {
|
||||
fn authentication(&mut self,
|
||||
_params: diflouroborane::AuthenticationParams,
|
||||
mut results: diflouroborane::AuthenticationResults)
|
||||
-> Promise<(), Error>
|
||||
{
|
||||
let mut b = results.get();
|
||||
let auth = api::authentication::ToClient::new(self.auth.deref().clone()).into_client::<capnp_rpc::Server>();
|
||||
b.set_auth(auth);
|
||||
Promise::ok(())
|
||||
}
|
||||
|
||||
fn permissions(&mut self,
|
||||
_params: diflouroborane::PermissionsParams,
|
||||
mut results: diflouroborane::PermissionsResults)
|
||||
-> Promise<(), Error>
|
||||
{
|
||||
//let mut b = results.get();
|
||||
//let perm = api::permissions::ToClient::new(self.perm).into_client::<capnp_rpc::Server>();
|
||||
//b.set_perm(perm);
|
||||
Promise::ok(())
|
||||
}
|
||||
|
||||
fn machines(&mut self,
|
||||
_params: diflouroborane::MachinesParams,
|
||||
mut results: diflouroborane::MachinesResults)
|
||||
-> Promise<(), Error>
|
||||
{
|
||||
let mut b = results.get();
|
||||
let mach = api::machines::ToClient::new(self.mach.clone()).into_client::<capnp_rpc::Server>();
|
||||
b.set_mach(mach);
|
||||
Promise::ok(())
|
||||
}
|
||||
pub async fn handle_connection(log: Logger, socket: TcpStream) -> Result<(), Error> {
|
||||
unimplemented!()
|
||||
}
|
||||
|
113
src/auth.rs
113
src/auth.rs
@ -147,116 +147,3 @@ impl Authentication {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
use crate::api::api;
|
||||
|
||||
impl api::authentication::Server for Authentication {
|
||||
fn available_mechanisms(&mut self,
|
||||
_params: api::authentication::AvailableMechanismsParams,
|
||||
mut results: api::authentication::AvailableMechanismsResults)
|
||||
-> ::capnp::capability::Promise<(), ::capnp::Error>
|
||||
{
|
||||
let p = self.provider.clone();
|
||||
let f = async move {
|
||||
let m = p.read().await.mechs();
|
||||
let mut b = results.get()
|
||||
.init_mechanisms(m.len() as u32);
|
||||
for (i, mech) in m.iter().enumerate() {
|
||||
let mut bldr = b.reborrow();
|
||||
bldr.set(i as u32, mech);
|
||||
}
|
||||
Ok(())
|
||||
};
|
||||
|
||||
::capnp::capability::Promise::from_future(f)
|
||||
}
|
||||
|
||||
fn initialize_authentication(&mut self,
|
||||
params: api::authentication::InitializeAuthenticationParams,
|
||||
mut results: api::authentication::InitializeAuthenticationResults)
|
||||
-> ::capnp::capability::Promise<(), ::capnp::Error>
|
||||
{
|
||||
let prov = self.provider.clone();
|
||||
let stat = self.state.clone();
|
||||
|
||||
Promise::from_future(async move {
|
||||
let params = params.get()?;
|
||||
let mechanism = params.get_mechanism()?;
|
||||
|
||||
match mechanism {
|
||||
"PLAIN" => {
|
||||
use api::authentication::maybe_data::Which;
|
||||
|
||||
let data = params.get_initial_data()?;
|
||||
if let Ok(Which::Some(data)) = data.which() {
|
||||
let data = data?;
|
||||
if let Ok((b, name)) = prov.read().await.plain.step(data) {
|
||||
// If login was successful set the authzid
|
||||
if b {
|
||||
stat.write().await.replace(name.to_string());
|
||||
}
|
||||
|
||||
let outcome = Outcome::value(b);
|
||||
results
|
||||
.get()
|
||||
.init_response()
|
||||
.set_outcome(api::authentication::outcome::ToClient::new(outcome)
|
||||
.into_client::<::capnp_rpc::Server>());
|
||||
}
|
||||
Ok(())
|
||||
} else {
|
||||
Err(::capnp::Error::unimplemented(
|
||||
"SASL PLAIN requires initial data set".to_string()))
|
||||
}
|
||||
},
|
||||
m => {
|
||||
Err(::capnp::Error::unimplemented(
|
||||
format!("SASL Mechanism {} is not implemented", m)
|
||||
))
|
||||
}
|
||||
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
fn get_authzid(&mut self,
|
||||
_params: api::authentication::GetAuthzidParams,
|
||||
mut results: api::authentication::GetAuthzidResults)
|
||||
-> ::capnp::capability::Promise<(), ::capnp::Error>
|
||||
{
|
||||
let state = self.state.clone();
|
||||
let f = async move {
|
||||
if let Some(zid) = state.read().await.deref() {
|
||||
results.get().set_authzid(&zid);
|
||||
} else {
|
||||
results.get().set_authzid("");
|
||||
}
|
||||
|
||||
Ok(())
|
||||
};
|
||||
|
||||
Promise::from_future(f)
|
||||
}
|
||||
}
|
||||
|
||||
struct Outcome {
|
||||
data: Option<Box<[u8]>>,
|
||||
value: bool,
|
||||
}
|
||||
impl Outcome {
|
||||
pub fn value(value: bool) -> Self {
|
||||
Self { data: None, value: value }
|
||||
}
|
||||
}
|
||||
|
||||
impl api::authentication::outcome::Server for Outcome {
|
||||
fn value(&mut self,
|
||||
_params: api::authentication::outcome::ValueParams,
|
||||
mut results: api::authentication::outcome::ValueResults)
|
||||
-> ::capnp::capability::Promise<(), ::capnp::Error>
|
||||
{
|
||||
results.get().set_granted(self.value);
|
||||
::capnp::capability::Promise::ok(())
|
||||
}
|
||||
}
|
||||
|
124
src/machine.rs
124
src/machine.rs
@ -103,94 +103,6 @@ impl Machines {
|
||||
Self { inner, perm }
|
||||
}
|
||||
}
|
||||
impl api::machines::Server for Machines {
|
||||
fn manage(&mut self,
|
||||
params: api::machines::ManageParams,
|
||||
mut results: api::machines::ManageResults)
|
||||
-> Promise<(), Error>
|
||||
{
|
||||
let params = pry!(params.get());
|
||||
let uuid_s = pry!(params.get_uuid());
|
||||
let uuid = uuid_from_api(uuid_s);
|
||||
|
||||
// We need to copy the Arc here because we don't have access to it from within the closure
|
||||
// witout moving it out of self.
|
||||
let i = self.inner.clone();
|
||||
let p = self.perm.clone();
|
||||
|
||||
let f = async move {
|
||||
// We only need a read lock at first there's no reason to aquire a write lock.
|
||||
let i_lock = i.read().await;
|
||||
|
||||
if let Some(ps) = i_lock.get_perm_req(&uuid) {
|
||||
// drop the lock as soon as possible to prevent locking as much as possible
|
||||
drop(i_lock);
|
||||
if let Ok(true) = p.enforce(&ps, "manage").await {
|
||||
// We're here and have not returned an error yet - that means we're free to
|
||||
// send a successful manage back.
|
||||
let mut b = results.get();
|
||||
|
||||
// Magic incantation to get a capability to send
|
||||
// Also since we move i in here we at this point *must* have dropped
|
||||
// all locks we may still have on it.
|
||||
b.set_manage(api::machines::manage::ToClient::new(
|
||||
MachineManager::new(uuid, i)).into_client::<Server>());
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
};
|
||||
|
||||
Promise::from_future(f)
|
||||
}
|
||||
|
||||
fn use_(&mut self,
|
||||
params: api::machines::UseParams,
|
||||
mut results: api::machines::UseResults)
|
||||
-> Promise<(), capnp::Error>
|
||||
{
|
||||
let params = pry!(params.get());
|
||||
let uuid_s = pry!(params.get_uuid());
|
||||
let uuid = uuid_from_api(uuid_s);
|
||||
|
||||
// We need to copy the Arc here because we don't have access to it from within the closure
|
||||
// witout moving it out of self.
|
||||
let i = self.inner.clone();
|
||||
let p = self.perm.clone();
|
||||
|
||||
let f = async move {
|
||||
// We only need a read lock at first there's no reason to aquire a write lock.
|
||||
let i_lock = i.read().await;
|
||||
|
||||
if let Some(ps) = i_lock.get_perm_req(&uuid) {
|
||||
// drop the lock as soon as possible to prevent locking as much as possible
|
||||
drop(i_lock);
|
||||
if let Ok(true) = p.enforce(&ps, "write").await {
|
||||
{
|
||||
// If use_() returns an error that is our error. If it doesn't that means we can use
|
||||
// the machine
|
||||
// Using a subscope to again make the time the lock is valid as short as
|
||||
// possible. Less locking == more good
|
||||
let mut i_lock = i.write().await;
|
||||
i_lock.use_(&uuid)?;
|
||||
}
|
||||
|
||||
// We're here and have not returned an error yet - that means we're free to
|
||||
// send a successful use back.
|
||||
let mut b = results.get();
|
||||
|
||||
// Magic incantation to get a capability to send
|
||||
// Also since we move i in here we at this point *must* have dropped
|
||||
// all locks we may still have on it.
|
||||
b.set_giveback(api::machines::give_back::ToClient::new(
|
||||
GiveBack::new(i, uuid)).into_client::<Server>());
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
};
|
||||
|
||||
Promise::from_future(f)
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct GiveBack {
|
||||
@ -203,22 +115,6 @@ impl GiveBack {
|
||||
}
|
||||
}
|
||||
|
||||
impl api::machines::give_back::Server for GiveBack {
|
||||
fn giveback(&mut self,
|
||||
_params: api::machines::give_back::GivebackParams,
|
||||
_results: api::machines::give_back::GivebackResults)
|
||||
-> Promise<(), Error>
|
||||
{
|
||||
let mdb = self.mdb.clone();
|
||||
let uuid = self.uuid.clone();
|
||||
let f = async move {
|
||||
mdb.write().await.give_back(&uuid)
|
||||
};
|
||||
|
||||
Promise::from_future(f)
|
||||
}
|
||||
}
|
||||
|
||||
fn uuid_from_api(uuid: api::u_u_i_d::Reader) -> Uuid {
|
||||
let uuid0 = uuid.get_uuid0() as u128;
|
||||
let uuid1 = uuid.get_uuid1() as u128;
|
||||
@ -245,26 +141,6 @@ impl MachineManager {
|
||||
}
|
||||
}
|
||||
|
||||
impl api::machines::manage::Server for MachineManager {
|
||||
fn set_blocked(&mut self,
|
||||
params: api::machines::manage::SetBlockedParams,
|
||||
results: api::machines::manage::SetBlockedResults)
|
||||
-> Promise<(), Error>
|
||||
{
|
||||
let uuid = self.uuid.clone();
|
||||
let mdb = self.mdb.clone();
|
||||
let f = async move {
|
||||
let params = params.get()?;
|
||||
let blocked = params.get_blocked();
|
||||
mdb.write().await.set_blocked(&uuid, blocked)?;
|
||||
Ok(())
|
||||
};
|
||||
|
||||
Promise::from_future(f)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#[derive(PartialEq, Eq, Debug, Serialize, Deserialize)]
|
||||
pub struct Machine {
|
||||
pub name: String,
|
||||
|
@ -40,8 +40,6 @@ use std::sync::Arc;
|
||||
|
||||
use error::Error;
|
||||
|
||||
use api::API;
|
||||
|
||||
// Returning a `Result` from `main` allows us to use the `?` shorthand.
|
||||
// In the case of an Err it will be printed using `fmt::Debug`
|
||||
fn main() -> Result<(), Error> {
|
||||
@ -159,10 +157,6 @@ fn main() -> Result<(), Error> {
|
||||
let local_spawn = exec.spawner();
|
||||
|
||||
|
||||
// The API has access to all subsystems it needs and the Threadpool as capability to spawn new
|
||||
// tasks for CPU-intensive work
|
||||
let api = API::new(auth, pdb, mach, pool);
|
||||
|
||||
// Closure inefficiencies. Lucky cloning an Arc is pretty cheap.
|
||||
let inner_log = log.clone();
|
||||
let loop_log = log.clone();
|
||||
@ -192,7 +186,7 @@ fn main() -> Result<(), Error> {
|
||||
|
||||
// We handle the error using map_err, `let _` is used to quiet the compiler
|
||||
// warning
|
||||
let f = api::handle_connection(api.clone(), log.clone(), socket)
|
||||
let f = api::handle_connection(log.clone(), socket)
|
||||
.map_err(move |e| {
|
||||
error!(log, "Error occured during protocol handling: {}", e);
|
||||
})
|
||||
|
Loading…
Reference in New Issue
Block a user