@voxgig/sdkgen 4.10.0 → 4.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/voxgig-sdkgen +1 -1
- package/package.json +1 -1
- package/project/.sdk/model/feature/secrets.aon +330 -0
- package/project/.sdk/model/target/c.aon +15 -2
- package/project/.sdk/model/target/cpp.aon +18 -0
- package/project/.sdk/model/target/lua.aon +17 -0
- package/project/.sdk/model/target/ocaml.aon +48 -5
- package/project/.sdk/model/target/zig.aon +30 -4
- package/project/.sdk/src/cmp/c/Config_c.ts +338 -1
- package/project/.sdk/src/cmp/c/Main_c.ts +57 -2
- package/project/.sdk/src/cmp/c/Package_c.ts +12 -2
- package/project/.sdk/src/cmp/cpp/Config_cpp.ts +324 -2
- package/project/.sdk/src/cmp/cpp/Gitignore_cpp.ts +2 -0
- package/project/.sdk/src/cmp/cpp/Main_cpp.ts +62 -4
- package/project/.sdk/src/cmp/cpp/Package_cpp.ts +10 -0
- package/project/.sdk/src/cmp/lua/Config_lua.ts +88 -0
- package/project/.sdk/src/cmp/lua/Gitignore_lua.ts +4 -0
- package/project/.sdk/src/cmp/lua/Main_lua.ts +93 -3
- package/project/.sdk/src/cmp/lua/Package_lua.ts +60 -0
- package/project/.sdk/src/cmp/lua/fragment/Main.fragment.lua +10 -0
- package/project/.sdk/src/cmp/ocaml/Config_ocaml.ts +183 -5
- package/project/.sdk/src/cmp/ocaml/Main_ocaml.ts +160 -3
- package/project/.sdk/src/cmp/ocaml/Package_ocaml.ts +25 -1
- package/project/.sdk/src/cmp/zig/Config_zig.ts +130 -9
- package/project/.sdk/src/cmp/zig/Main_zig.ts +208 -4
- package/project/.sdk/{tm/zig/build.zig → src/cmp/zig/fragment/Build.fragment.zig} +7 -0
- package/project/.sdk/src/cmp/zig/fragment/Main.fragment.zig +25 -0
- package/project/.sdk/{tm/zig/root.zig → src/cmp/zig/fragment/Root.fragment.zig} +9 -0
- package/project/.sdk/tm/c/Makefile +58 -9
- package/project/.sdk/tm/c/core/sdk.h +10 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/capability.c +133 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/capability.h +39 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/catalog.c +83 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/catalog.h +48 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/config.c +413 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/config.h +24 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/depend.c +264 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/depend.h +29 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/env.c +220 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/env.h +19 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/export.c +97 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/export.h +19 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/graph.c +237 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/graph.h +17 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/host.c +1494 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/host.h +135 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/order.c +288 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/order.h +18 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/point.c +141 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/point.h +80 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/ref.c +170 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/ref.h +52 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/resolve.c +98 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/resolve.h +18 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/types.c +150 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/types.h +104 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/value.c +649 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/value.h +135 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/version.c +151 -0
- package/project/.sdk/tm/c/feature/secrets/plugin/version.h +34 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/aws.c +281 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/azuresecrets.c +207 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/boru.c +164 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/clock.c +75 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/doppler.c +141 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/encode.c +144 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/gcpsecrets.c +177 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/hashicorp.c +239 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/httpjson.c +599 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/infisical.c +165 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/onepassword.c +194 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/proc.c +233 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/secretspec.c +125 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/sekretoplugins.h +125 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/sha256.c +270 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/sigv4.c +382 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/support.h +153 -0
- package/project/.sdk/tm/c/feature/secrets/plugins/tls.c +420 -0
- package/project/.sdk/tm/c/feature/secrets/sekreto/internal.h +86 -0
- package/project/.sdk/tm/c/feature/secrets/sekreto/json.c +721 -0
- package/project/.sdk/tm/c/feature/secrets/sekreto/providers.c +813 -0
- package/project/.sdk/tm/c/feature/secrets/sekreto/sekreto.c +944 -0
- package/project/.sdk/tm/c/feature/secrets/sekreto/sekreto.h +490 -0
- package/project/.sdk/tm/c/feature/secrets/sekreto/util.c +442 -0
- package/project/.sdk/tm/c/feature/secrets.c +797 -0
- package/project/.sdk/tm/c/feature/secrets.h +46 -0
- package/project/.sdk/tm/c/src/feature/secrets/.gitkeep +0 -0
- package/project/.sdk/tm/c/tests/feature/secrets/secrets_test.c +802 -0
- package/project/.sdk/tm/clojure/feature/secrets/sdk/feature/secrets.clj +38 -11
- package/project/.sdk/tm/clojure/test/sdk/test/feature/secrets.clj +40 -6
- package/project/.sdk/tm/cpp/Makefile +48 -4
- package/project/.sdk/tm/cpp/feature/secrets/plugin/capability.cpp +121 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/capability.hpp +41 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/catalog.cpp +60 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/catalog.hpp +66 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/config.cpp +376 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/config.hpp +29 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/depend.cpp +230 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/depend.hpp +31 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/env.cpp +205 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/env.hpp +25 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/export.cpp +84 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/export.hpp +24 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/graph.cpp +222 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/graph.hpp +21 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/host.cpp +1200 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/host.hpp +250 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/order.cpp +250 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/order.hpp +22 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/point.cpp +110 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/point.hpp +79 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/ref.cpp +136 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/ref.hpp +60 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/resolve.cpp +82 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/resolve.hpp +25 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/types.cpp +90 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/types.hpp +65 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/value.cpp +491 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/value.hpp +120 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/version.cpp +143 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugin/version.hpp +36 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Aws.cpp +248 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Aws.hpp +30 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Azuresecrets.cpp +149 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Azuresecrets.hpp +23 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Boru.cpp +117 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Boru.hpp +27 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Crypto.cpp +180 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Crypto.hpp +52 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Doppler.cpp +87 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Doppler.hpp +23 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Gcpsecrets.cpp +121 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Gcpsecrets.hpp +23 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Hashicorp.cpp +153 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Hashicorp.hpp +23 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Httpjson.cpp +666 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Httpjson.hpp +160 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Infisical.cpp +123 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Infisical.hpp +23 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Onepassword.cpp +125 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Onepassword.hpp +23 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Proc.cpp +223 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Proc.hpp +47 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Secretspec.cpp +104 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Secretspec.hpp +27 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Sigv4.cpp +242 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Sigv4.hpp +58 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Tls.cpp +260 -0
- package/project/.sdk/tm/cpp/feature/secrets/plugins/Tls.hpp +47 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Json.cpp +476 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Json.hpp +89 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Provider.cpp +312 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Provider.hpp +263 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Providers.cpp +354 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Providers.hpp +111 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Sekreto.cpp +613 -0
- package/project/.sdk/tm/cpp/feature/secrets/sekreto/Sekreto.hpp +227 -0
- package/project/.sdk/tm/cpp/feature/secrets.hpp +745 -0
- package/project/.sdk/tm/cpp/src/feature/secrets/.gitkeep +0 -0
- package/project/.sdk/tm/cpp/test/feature/secrets/secrets_test.cpp +808 -0
- package/project/.sdk/tm/csharp/feature/SecretsFeature.cs +34 -8
- package/project/.sdk/tm/csharp/test/feature/secrets/SecretsFeatureTest.cs +85 -0
- package/project/.sdk/tm/elixir/lib/projectname/feature/secrets.ex +17 -2
- package/project/.sdk/tm/elixir/test/feature/secrets/secrets_test.exs +41 -0
- package/project/.sdk/tm/go/feature/secrets_feature.go +32 -10
- package/project/.sdk/tm/go/test/feature/secrets/secrets_feature_test.go +116 -0
- package/project/.sdk/tm/java/feature/SecretsFeature.java +33 -8
- package/project/.sdk/tm/java/test/feature/secrets/SecretsFeatureTest.java +64 -0
- package/project/.sdk/tm/js/src/feature/secrets/SecretsFeature.js +34 -11
- package/project/.sdk/tm/js/test/feature/secrets/Secrets.test.js +73 -0
- package/project/.sdk/tm/kotlin/feature/SecretsFeature.kt +32 -7
- package/project/.sdk/tm/kotlin/test/feature/secrets/SecretsTest.kt +69 -0
- package/project/.sdk/tm/lua/Makefile +15 -4
- package/project/.sdk/tm/lua/feature/secrets/native/sekretonet.c +806 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/capability.lua +135 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/catalog.lua +63 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/config.lua +361 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/depend.lua +232 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/env.lua +168 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/export.lua +66 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/graph.lua +194 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/host.lua +1190 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/json.lua +169 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/order.lua +207 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/point.lua +106 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/ref.lua +115 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/resolve.lua +78 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/types.lua +275 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin/version.lua +131 -0
- package/project/.sdk/tm/lua/feature/secrets/plugin.lua +76 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/addr.lua +124 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/err.lua +47 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/name.lua +315 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/aws.lua +228 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/azuresecrets.lua +137 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/boru.lua +124 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/crypto.lua +212 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/doppler.lua +89 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/gcpsecrets.lua +129 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/hashicorp.lua +154 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/httpjson.lua +248 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/infisical.lua +113 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/json.lua +449 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/net.lua +198 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/onepassword.lua +126 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/secretspec.lua +93 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/sigv4.lua +269 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/support.lua +146 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto/providers.lua +346 -0
- package/project/.sdk/tm/lua/feature/secrets/sekreto.lua +479 -0
- package/project/.sdk/tm/lua/feature/secrets_feature.lua +690 -0
- package/project/.sdk/tm/lua/src/feature/secrets/.gitkeep +0 -0
- package/project/.sdk/tm/lua/test/extend_test.lua +105 -0
- package/project/.sdk/tm/lua/test/feature/secrets/secrets_feature_test.lua +862 -0
- package/project/.sdk/tm/ocaml/Makefile +52 -8
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/capability.ml +106 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/catalog.ml +43 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/config.ml +349 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/defs.ml +143 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/depend.ml +217 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/env.ml +197 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/export.ml +89 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/graph.ml +227 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/host.ml +1112 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/order.ml +202 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/point.ml +138 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/ref.ml +126 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/resolve.ml +62 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/types.ml +97 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/value.ml +387 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugin/version.ml +139 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/aws.ml +171 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/azuresecrets.ml +116 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/boru.ml +95 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/crypto.ml +149 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/doppler.ml +61 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/gcpsecrets.ml +93 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/hashicorp.ml +120 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/http.ml +421 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/httpjson.ml +66 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/infisical.ml +85 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/onepassword.ml +112 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/runcmd.ml +97 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/secretspec.ml +68 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/sigv4.ml +259 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/tls.ml +44 -0
- package/project/.sdk/tm/ocaml/feature/secrets/plugins/tls_stubs.c +358 -0
- package/project/.sdk/tm/ocaml/feature/secrets/sekreto/json.ml +376 -0
- package/project/.sdk/tm/ocaml/feature/secrets/sekreto/provider.ml +647 -0
- package/project/.sdk/tm/ocaml/feature/secrets/sekreto/secret.ml +299 -0
- package/project/.sdk/tm/ocaml/feature/secrets/sekreto/sekreto.ml +347 -0
- package/project/.sdk/tm/ocaml/feature/secrets_feature.ml +453 -0
- package/project/.sdk/tm/ocaml/src/feature/secrets/.gitkeep +0 -0
- package/project/.sdk/tm/ocaml/test/feature/secrets/t_secrets.ml +670 -0
- package/project/.sdk/tm/perl/feature/secrets_feature.pm +33 -12
- package/project/.sdk/tm/perl/t/feature/secrets/secrets.t +47 -0
- package/project/.sdk/tm/php/feature/SecretsFeature.php +30 -6
- package/project/.sdk/tm/php/test/feature/secrets/SecretsTest.php +98 -0
- package/project/.sdk/tm/py/pkg/feature/secrets_feature.py +28 -6
- package/project/.sdk/tm/py/test/feature/secrets/test_secrets.py +114 -0
- package/project/.sdk/tm/rb/feature/secrets_feature.rb +28 -6
- package/project/.sdk/tm/rb/test/feature/secrets/secrets_feature_test.rb +93 -0
- package/project/.sdk/tm/rust/feature/secrets.rs +33 -10
- package/project/.sdk/tm/rust/tests/feature/secrets/main.rs +96 -0
- package/project/.sdk/tm/scala/feature/SecretsFeature.scala +29 -7
- package/project/.sdk/tm/scala/sdktest/feature/secrets/SecretsTestMain.scala +71 -0
- package/project/.sdk/tm/ts/src/feature/secrets/SecretsFeature.ts +35 -12
- package/project/.sdk/tm/ts/test/feature/secrets/Secrets.test.ts +73 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/capability.zig +137 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/catalog.zig +90 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/config.zig +346 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/depend.zig +244 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/env.zig +201 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/export.zig +83 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/graph.zig +212 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/host.zig +1224 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/inst.zig +126 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/order.zig +228 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/plugin.zig +34 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/point.zig +166 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/ref.zig +147 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/resolve.zig +74 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/types.zig +140 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/value.zig +662 -0
- package/project/.sdk/tm/zig/feature/secrets/plugin/version.zig +139 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/aws.zig +294 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/azuresecrets.zig +222 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/boru.zig +188 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/doppler.zig +135 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/gcpsecrets.zig +170 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/hashicorp.zig +242 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/httpjson.zig +535 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/infisical.zig +167 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/onepassword.zig +202 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/secretspec.zig +160 -0
- package/project/.sdk/tm/zig/feature/secrets/plugins/sigv4.zig +336 -0
- package/project/.sdk/tm/zig/feature/secrets/sekreto/addr.zig +148 -0
- package/project/.sdk/tm/zig/feature/secrets/sekreto/builtins.zig +259 -0
- package/project/.sdk/tm/zig/feature/secrets/sekreto/provider.zig +440 -0
- package/project/.sdk/tm/zig/feature/secrets/sekreto/sekreto.zig +944 -0
- package/project/.sdk/tm/zig/feature/secrets.zig +854 -0
- package/project/.sdk/tm/zig/src/feature/secrets/.gitkeep +0 -0
- package/project/.sdk/tm/zig/test/feature/secrets/secrets_test.zig +891 -0
- package/project/sdkgen-package.json +1 -1
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
// VENDORED: @voxgig/sekreto sdk-20260908-1556-0 (cpp/src/Providers.cpp)
|
|
2
|
+
// Source: https://github.com/voxgig/sekreto @ 1267ee2e5f49566bc92695bc9eb3a60ef4924998 [tag: sdk-20260908-1556-0]
|
|
3
|
+
// License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
|
|
4
|
+
#include "Providers.hpp"
|
|
5
|
+
|
|
6
|
+
#include <errno.h>
|
|
7
|
+
#include <fcntl.h>
|
|
8
|
+
#include <string.h>
|
|
9
|
+
#include <unistd.h>
|
|
10
|
+
|
|
11
|
+
#include <cstdlib>
|
|
12
|
+
|
|
13
|
+
#include "Sekreto.hpp"
|
|
14
|
+
|
|
15
|
+
namespace sekreto {
|
|
16
|
+
|
|
17
|
+
// -------------------------------------------------------- shared machinery
|
|
18
|
+
|
|
19
|
+
std::string first(const std::string& one, const std::string& two) {
|
|
20
|
+
return one.empty() ? two : one;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
std::string first(const std::string& one, const std::string& two, const std::string& three) {
|
|
24
|
+
if (!one.empty()) return one;
|
|
25
|
+
if (!two.empty()) return two;
|
|
26
|
+
return three;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
std::string envvar(const std::string& name) {
|
|
30
|
+
const char* value = std::getenv(name.c_str());
|
|
31
|
+
return (nullptr == value) ? "" : value;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
std::string trimslash(const std::string& text) {
|
|
35
|
+
if (!text.empty() && '/' == text[text.size() - 1]) return text.substr(0, text.size() - 1);
|
|
36
|
+
return text;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
std::string trimtext(const std::string& text) {
|
|
40
|
+
size_t start = 0;
|
|
41
|
+
size_t stop = text.size();
|
|
42
|
+
|
|
43
|
+
while (start < stop && (' ' == text[start] || '\t' == text[start] || '\n' == text[start] ||
|
|
44
|
+
'\r' == text[start])) {
|
|
45
|
+
start++;
|
|
46
|
+
}
|
|
47
|
+
while (stop > start && (' ' == text[stop - 1] || '\t' == text[stop - 1] ||
|
|
48
|
+
'\n' == text[stop - 1] || '\r' == text[stop - 1])) {
|
|
49
|
+
stop--;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
return text.substr(start, stop - start);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
std::string dropnewline(const std::string& text) {
|
|
56
|
+
if (!text.empty() && '\n' == text[text.size() - 1]) return text.substr(0, text.size() - 1);
|
|
57
|
+
return text;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// --------------------------------------------------------------- addresses
|
|
61
|
+
|
|
62
|
+
std::string safeaddr(const std::string& addr) {
|
|
63
|
+
size_t mark = addr.find("://");
|
|
64
|
+
if (std::string::npos == mark) return addr;
|
|
65
|
+
|
|
66
|
+
size_t from = mark + 3;
|
|
67
|
+
size_t stop = addr.find_first_of("/?#", from);
|
|
68
|
+
std::string authority =
|
|
69
|
+
(std::string::npos == stop) ? addr.substr(from) : addr.substr(from, stop - from);
|
|
70
|
+
|
|
71
|
+
size_t at = authority.rfind('@');
|
|
72
|
+
if (std::string::npos == at) return addr;
|
|
73
|
+
|
|
74
|
+
return addr.substr(0, from) + "[redacted]" + addr.substr(from + at);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
void checkaddr(const std::string& addr) {
|
|
78
|
+
std::string scheme;
|
|
79
|
+
|
|
80
|
+
// Literal and case-sensitive: `HTTP://localhost` is refused rather than
|
|
81
|
+
// normalised, because normalising is where parsers start to disagree.
|
|
82
|
+
if (0 == addr.compare(0, 8, "https://")) {
|
|
83
|
+
scheme = "https://";
|
|
84
|
+
} else if (0 == addr.compare(0, 7, "http://")) {
|
|
85
|
+
scheme = "http://";
|
|
86
|
+
} else {
|
|
87
|
+
throw SekretoError("sekreto: not an http(s) address: " + safeaddr(addr));
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
std::string rest = addr.substr(scheme.size());
|
|
91
|
+
|
|
92
|
+
// The authority ends at `/`, `?` or `#` only - never at `\`. A client
|
|
93
|
+
// that also breaks on backslash can then only ever see a SHORTER host
|
|
94
|
+
// than this did, which is the invariant that makes this check
|
|
95
|
+
// trustworthy: it is never more permissive than what will be dialled.
|
|
96
|
+
size_t stop = rest.find_first_of("/?#");
|
|
97
|
+
std::string authority = (std::string::npos == stop) ? rest : rest.substr(0, stop);
|
|
98
|
+
|
|
99
|
+
// Userinfo is refused outright rather than parsed around, and on https
|
|
100
|
+
// as well as http. At worst it is the attack this whole function exists
|
|
101
|
+
// to stop: `http://localhost:8200@evil.example.com/` is a request to
|
|
102
|
+
// evil.example.com that reads, to anything that splits the authority on
|
|
103
|
+
// ':', as loopback.
|
|
104
|
+
if (std::string::npos != authority.find('@')) {
|
|
105
|
+
throw SekretoError("sekreto: refusing an address with embedded credentials: " +
|
|
106
|
+
safeaddr(addr));
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// An opening bracket with no closing one is not an address at all.
|
|
110
|
+
if (!authority.empty() && '[' == authority[0] &&
|
|
111
|
+
std::string::npos == authority.find(']')) {
|
|
112
|
+
throw SekretoError("sekreto: not a valid http(s) address: " + safeaddr(addr));
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
if ("https://" == scheme) return;
|
|
116
|
+
|
|
117
|
+
// A bracketed IPv6 literal keeps its brackets. Splitting the authority
|
|
118
|
+
// on the first colon yields '[', so `http://[::1]:8200` could never
|
|
119
|
+
// match the allowlist below, and a legitimate local vault was refused.
|
|
120
|
+
std::string host = authority;
|
|
121
|
+
|
|
122
|
+
if (!authority.empty() && '[' == authority[0]) {
|
|
123
|
+
size_t close = authority.find(']');
|
|
124
|
+
if (std::string::npos != close) host = authority.substr(0, close + 1);
|
|
125
|
+
} else {
|
|
126
|
+
size_t colon = authority.find(':');
|
|
127
|
+
if (std::string::npos != colon) host = authority.substr(0, colon);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
host = asciilower(host);
|
|
131
|
+
|
|
132
|
+
// Literal, and exactly these four. Nothing is normalised: `0177.0.0.1`,
|
|
133
|
+
// `2130706433` and `[::ffff:127.0.0.1]` are all refused, because no two
|
|
134
|
+
// URL parsers agree on what they mean.
|
|
135
|
+
if ("localhost" != host && "127.0.0.1" != host && "::1" != host && "[::1]" != host) {
|
|
136
|
+
throw SekretoError("sekreto: refusing to send a token in plaintext to " + safeaddr(addr) +
|
|
137
|
+
" (use https)");
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// -------------------------------------------------------------- file reads
|
|
142
|
+
|
|
143
|
+
Readout readfile(const std::string& path) {
|
|
144
|
+
Readout out;
|
|
145
|
+
|
|
146
|
+
int fd = ::open(path.c_str(), O_RDONLY);
|
|
147
|
+
|
|
148
|
+
if (0 > fd) {
|
|
149
|
+
if (ENOENT == errno || ENOTDIR == errno) {
|
|
150
|
+
out.state = Readstate::Absent;
|
|
151
|
+
return out;
|
|
152
|
+
}
|
|
153
|
+
out.state = Readstate::Failed;
|
|
154
|
+
out.why = strerror(errno);
|
|
155
|
+
return out;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
std::string body;
|
|
159
|
+
char buf[8192];
|
|
160
|
+
|
|
161
|
+
while (true) {
|
|
162
|
+
ssize_t got = ::read(fd, buf, sizeof(buf));
|
|
163
|
+
|
|
164
|
+
if (0 == got) break;
|
|
165
|
+
|
|
166
|
+
if (0 > got) {
|
|
167
|
+
if (EINTR == errno) continue;
|
|
168
|
+
out.state = Readstate::Failed;
|
|
169
|
+
out.why = strerror(errno);
|
|
170
|
+
::close(fd);
|
|
171
|
+
return out;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
body.append(buf, static_cast<size_t>(got));
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
::close(fd);
|
|
178
|
+
|
|
179
|
+
out.state = Readstate::Text;
|
|
180
|
+
out.text = body;
|
|
181
|
+
return out;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// ---------------------------------------------------------------- built in
|
|
185
|
+
|
|
186
|
+
namespace {
|
|
187
|
+
|
|
188
|
+
/// Environment variables: `api.token` from `API_TOKEN`.
|
|
189
|
+
class EnvProvider : public Provider {
|
|
190
|
+
public:
|
|
191
|
+
explicit EnvProvider(const std::string& prefix) : prefix_(prefix) {}
|
|
192
|
+
|
|
193
|
+
std::optional<std::string> lookup(const std::string& name) override {
|
|
194
|
+
const char* value = std::getenv(envkey(name, prefix_).c_str());
|
|
195
|
+
if (nullptr == value) return std::nullopt;
|
|
196
|
+
|
|
197
|
+
return std::string(value);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
std::string describe() const override {
|
|
201
|
+
return prefix_.empty() ? "env" : "env:" + prefix_;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
private:
|
|
205
|
+
std::string prefix_;
|
|
206
|
+
};
|
|
207
|
+
|
|
208
|
+
/// A `.env` file, read once, keyed exactly like the environment.
|
|
209
|
+
///
|
|
210
|
+
/// Loaded LAZILY: a chain may hold a dotenv provider and never be asked
|
|
211
|
+
/// anything, and an eager constructor would read whatever `.env` happens
|
|
212
|
+
/// to sit in the working directory.
|
|
213
|
+
class DotenvProvider : public Provider {
|
|
214
|
+
public:
|
|
215
|
+
DotenvProvider(const std::string& file, const std::string& prefix)
|
|
216
|
+
: file_(file), prefix_(prefix) {}
|
|
217
|
+
|
|
218
|
+
std::optional<std::string> lookup(const std::string& name) override {
|
|
219
|
+
load();
|
|
220
|
+
return values_.get(envkey(name, prefix_));
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
std::string describe() const override { return "dotenv:" + file_; }
|
|
224
|
+
|
|
225
|
+
private:
|
|
226
|
+
void load() {
|
|
227
|
+
if (loaded_) return;
|
|
228
|
+
|
|
229
|
+
Readout got = readfile(file_);
|
|
230
|
+
|
|
231
|
+
switch (got.state) {
|
|
232
|
+
case Readstate::Text:
|
|
233
|
+
values_ = parsedotenv(got.text);
|
|
234
|
+
break;
|
|
235
|
+
// An absent file - or an absent directory - means "no secrets here",
|
|
236
|
+
// exactly like the file provider.
|
|
237
|
+
case Readstate::Absent:
|
|
238
|
+
values_ = Ordered();
|
|
239
|
+
break;
|
|
240
|
+
case Readstate::Failed:
|
|
241
|
+
throw SekretoError("sekreto: dotenv provider cannot read " + file_ + ": " + got.why);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
loaded_ = true;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
std::string file_;
|
|
248
|
+
std::string prefix_;
|
|
249
|
+
Ordered values_;
|
|
250
|
+
bool loaded_ = false;
|
|
251
|
+
};
|
|
252
|
+
|
|
253
|
+
/// Literal values, keyed like environment variables. The spec uses this to
|
|
254
|
+
/// test chain behaviour without touching the outside world.
|
|
255
|
+
class MemoryProvider : public Provider {
|
|
256
|
+
public:
|
|
257
|
+
MemoryProvider(const Ordered& values, const std::string& prefix)
|
|
258
|
+
: values_(values), prefix_(prefix) {}
|
|
259
|
+
|
|
260
|
+
std::optional<std::string> lookup(const std::string& name) override {
|
|
261
|
+
// An absent key is a miss; the empty string is a HIT.
|
|
262
|
+
return values_.get(envkey(name, prefix_));
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
std::string describe() const override {
|
|
266
|
+
return prefix_.empty() ? "memory" : "memory:" + prefix_;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
private:
|
|
270
|
+
Ordered values_;
|
|
271
|
+
std::string prefix_;
|
|
272
|
+
};
|
|
273
|
+
|
|
274
|
+
/// A directory of one-secret-per-file entries, keyed like the environment:
|
|
275
|
+
/// `api.token` reads `<dir>/API_TOKEN`.
|
|
276
|
+
///
|
|
277
|
+
/// This is the shape of a mounted Kubernetes Secret, a Docker or Swarm
|
|
278
|
+
/// secret, and a systemd credentials directory, so those all work with no
|
|
279
|
+
/// further configuration. Read on EVERY lookup, never cached: a mounted
|
|
280
|
+
/// secret is rotated under a running process. One trailing newline is
|
|
281
|
+
/// stripped - tools that write these files disagree about it, and a
|
|
282
|
+
/// newline is never part of a secret on purpose.
|
|
283
|
+
class FileProvider : public Provider {
|
|
284
|
+
public:
|
|
285
|
+
FileProvider(const std::string& dir, const std::string& prefix)
|
|
286
|
+
: dir_(dir), prefix_(prefix) {}
|
|
287
|
+
|
|
288
|
+
std::optional<std::string> lookup(const std::string& name) override {
|
|
289
|
+
std::string key = envkey(name, prefix_);
|
|
290
|
+
std::string path = dir_.empty() ? key : trimslash(dir_) + "/" + key;
|
|
291
|
+
|
|
292
|
+
Readout got = readfile(path);
|
|
293
|
+
|
|
294
|
+
if (Readstate::Absent == got.state) return std::nullopt;
|
|
295
|
+
|
|
296
|
+
if (Readstate::Failed == got.state) {
|
|
297
|
+
throw SekretoError("sekreto: file provider cannot read " + path + ": " + got.why);
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
std::string body = got.text;
|
|
301
|
+
|
|
302
|
+
if (2 <= body.size() && "\r\n" == body.substr(body.size() - 2)) {
|
|
303
|
+
return body.substr(0, body.size() - 2);
|
|
304
|
+
}
|
|
305
|
+
if (!body.empty() && '\n' == body[body.size() - 1]) {
|
|
306
|
+
return body.substr(0, body.size() - 1);
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
return body;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
std::string describe() const override { return "file:" + dir_; }
|
|
313
|
+
|
|
314
|
+
private:
|
|
315
|
+
std::string dir_;
|
|
316
|
+
std::string prefix_;
|
|
317
|
+
};
|
|
318
|
+
|
|
319
|
+
} // namespace
|
|
320
|
+
|
|
321
|
+
// --------------------------------------------------- the four, as plugins
|
|
322
|
+
|
|
323
|
+
std::vector<Definition> builtins() {
|
|
324
|
+
return {
|
|
325
|
+
providerplugin("env",
|
|
326
|
+
[](const ProviderSpec& spec) -> std::shared_ptr<Provider> {
|
|
327
|
+
return std::make_shared<EnvProvider>(spec.prefix);
|
|
328
|
+
}),
|
|
329
|
+
providerplugin("memory",
|
|
330
|
+
[](const ProviderSpec& spec) -> std::shared_ptr<Provider> {
|
|
331
|
+
return std::make_shared<MemoryProvider>(spec.values, spec.prefix);
|
|
332
|
+
}),
|
|
333
|
+
providerplugin("dotenv",
|
|
334
|
+
[](const ProviderSpec& spec) -> std::shared_ptr<Provider> {
|
|
335
|
+
return std::make_shared<DotenvProvider>(first(spec.file, ".env"),
|
|
336
|
+
spec.prefix);
|
|
337
|
+
}),
|
|
338
|
+
providerplugin("file",
|
|
339
|
+
[](const ProviderSpec& spec) -> std::shared_ptr<Provider> {
|
|
340
|
+
return std::make_shared<FileProvider>(spec.dir, spec.prefix);
|
|
341
|
+
}),
|
|
342
|
+
};
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
const Kinds& KINDS() {
|
|
346
|
+
static const Kinds one{
|
|
347
|
+
{"env", "memory", "dotenv", "file"},
|
|
348
|
+
{"hashicorp", "boru", "awssecrets", "awsparams", "gcpsecrets", "azuresecrets",
|
|
349
|
+
"onepassword", "doppler", "infisical", "secretspec"},
|
|
350
|
+
};
|
|
351
|
+
return one;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
} // namespace sekreto
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
// VENDORED: @voxgig/sekreto sdk-20260908-1556-0 (cpp/src/Providers.hpp)
|
|
2
|
+
// Source: https://github.com/voxgig/sekreto @ 1267ee2e5f49566bc92695bc9eb3a60ef4924998 [tag: sdk-20260908-1556-0]
|
|
3
|
+
// License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
|
|
4
|
+
// THE BUILT-IN PROVIDER KINDS - the same four in every port - and the
|
|
5
|
+
// address check every kind that dials one runs first.
|
|
6
|
+
//
|
|
7
|
+
// What makes a kind built in is that it needs nothing of the platform
|
|
8
|
+
// beyond reading a local file: no socket, no TLS, no crypto, no child
|
|
9
|
+
// process. These four are the floor every chain stands on, and a chain
|
|
10
|
+
// that reads secrets from options, the environment, a plaintext `.env` and
|
|
11
|
+
// a mounted secret directory works with no plugin loaded at all.
|
|
12
|
+
// Everything else - the vault clients, the cloud stores, the two CLIs, and
|
|
13
|
+
// SigV4 signing with them - is a voxgig/plugin definition and lives under
|
|
14
|
+
// `plugins/` (docs/design/plugin-providers.md).
|
|
15
|
+
//
|
|
16
|
+
// A port of typescript/src/provider/builtin.ts and
|
|
17
|
+
// typescript/src/provider/addr.ts, which are canonical.
|
|
18
|
+
|
|
19
|
+
#ifndef SEKRETO_PROVIDERS_HPP
|
|
20
|
+
#define SEKRETO_PROVIDERS_HPP
|
|
21
|
+
|
|
22
|
+
#include <memory>
|
|
23
|
+
#include <string>
|
|
24
|
+
#include <vector>
|
|
25
|
+
|
|
26
|
+
#include "Provider.hpp"
|
|
27
|
+
|
|
28
|
+
namespace sekreto {
|
|
29
|
+
|
|
30
|
+
/// Every kind this library ships, built in or as a plugin, so that an
|
|
31
|
+
/// unknown kind can be told from a plugin that was not passed in.
|
|
32
|
+
struct Kinds {
|
|
33
|
+
std::vector<std::string> builtin;
|
|
34
|
+
std::vector<std::string> plugin;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
const Kinds& KINDS();
|
|
38
|
+
|
|
39
|
+
/// The four kinds a Sekreto can always build, as plugin definitions. Fresh
|
|
40
|
+
/// ones on every call: two Sekretos never share a definition.
|
|
41
|
+
std::vector<Definition> builtins();
|
|
42
|
+
|
|
43
|
+
// --------------------------------------------------------------- addresses
|
|
44
|
+
|
|
45
|
+
/// An address with any userinfo replaced by `[redacted]`, for messages.
|
|
46
|
+
std::string safeaddr(const std::string& addr);
|
|
47
|
+
|
|
48
|
+
/// Refuse to send a secret-bearing credential in the clear, and refuse an
|
|
49
|
+
/// address this library will not dial. Raises; answers nothing otherwise.
|
|
50
|
+
///
|
|
51
|
+
/// In the CORE even though only plugins dial: it is a rule about what may
|
|
52
|
+
/// be configured, it opens nothing itself, and a plugin that carried its
|
|
53
|
+
/// own copy would be a second opinion about what is safe.
|
|
54
|
+
void checkaddr(const std::string& addr);
|
|
55
|
+
|
|
56
|
+
// ----------------------------------------------------------- the helpers
|
|
57
|
+
//
|
|
58
|
+
// The helpers below are the shared bottom of every kind, built-in or
|
|
59
|
+
// plugin. They live in the CORE rather than beside the plugins that use
|
|
60
|
+
// them because each is inside the line that makes a kind built in - a
|
|
61
|
+
// local file, an environment variable, some string trimming - and a copy
|
|
62
|
+
// on each side of the boundary is two things to get wrong. It is the core
|
|
63
|
+
// lending downwards, never the core reaching up.
|
|
64
|
+
|
|
65
|
+
/// The first candidate that is non-empty, or the empty string.
|
|
66
|
+
std::string first(const std::string& one, const std::string& two);
|
|
67
|
+
std::string first(const std::string& one, const std::string& two, const std::string& three);
|
|
68
|
+
|
|
69
|
+
// -------------------------------------------------------------- file reads
|
|
70
|
+
|
|
71
|
+
enum class Readstate { Text, Absent, Failed };
|
|
72
|
+
|
|
73
|
+
/// The outcome of reading a file that may legitimately not be there.
|
|
74
|
+
struct Readout {
|
|
75
|
+
Readstate state = Readstate::Absent;
|
|
76
|
+
std::string text;
|
|
77
|
+
std::string why;
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
/// Read a whole file.
|
|
81
|
+
///
|
|
82
|
+
/// Absence is a MISS and the chain carries on; anything else - permission
|
|
83
|
+
/// denied, an unreadable mount, a failing disk - is an ERROR, because
|
|
84
|
+
/// returning a miss there falls silently through to a weaker store.
|
|
85
|
+
///
|
|
86
|
+
/// Reading a local file is the line that makes a kind built in, so this
|
|
87
|
+
/// lives in the core and the plugins that also need one (a Kubernetes
|
|
88
|
+
/// service-account token, say) use this rather than carrying a second
|
|
89
|
+
/// copy. It is the core lending downwards, never the core reaching up.
|
|
90
|
+
Readout readfile(const std::string& path);
|
|
91
|
+
|
|
92
|
+
/// One environment variable, or "". An empty value is absence: every port
|
|
93
|
+
/// treats a variable exported blank as one never set.
|
|
94
|
+
std::string envvar(const std::string& name);
|
|
95
|
+
|
|
96
|
+
/// Strip one trailing slash - a store's base address, a secret directory.
|
|
97
|
+
std::string trimslash(const std::string& text);
|
|
98
|
+
|
|
99
|
+
/// Strip space, tab, CR and LF from both ends - and NOT `\f` or `\v`. The
|
|
100
|
+
/// `.env` parser needs those two as well and keeps its own wider trim
|
|
101
|
+
/// (`trimdotenv`, in Sekreto.cpp), because the spec pins what that produces;
|
|
102
|
+
/// reaching for this one there instead is a silent behaviour change.
|
|
103
|
+
std::string trimtext(const std::string& text);
|
|
104
|
+
|
|
105
|
+
/// Strip one trailing newline, which is a file's or a CLI's line ending
|
|
106
|
+
/// and never part of the secret.
|
|
107
|
+
std::string dropnewline(const std::string& text);
|
|
108
|
+
|
|
109
|
+
} // namespace sekreto
|
|
110
|
+
|
|
111
|
+
#endif
|