Skip to content

Commit 045fdee

Browse files
committed
Use SecretMount for mount paths
1 parent be43481 commit 045fdee

File tree

5 files changed

+52
-38
lines changed

5 files changed

+52
-38
lines changed

example/secrets/key_value/Makefile

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11
default: example
22

33
example.o: example.cpp
4-
g++ -std=c++17 -c example.cpp
4+
g++ -Wall -std=c++17 -I../../../include -c ../../../lib/json.hpp example.cpp
55

66
example: example.o
7-
g++ example.o -o example -lvault -lcurl
7+
g++ -L../../../cmake-build-debug example.o -o example -lvault -lcurl
8+
9+
.PHONY: macos
10+
macos:
11+
install_name_tool -change @rpath/libvault.0.dylib ../../../cmake-build-debug/libvault.0.dylib example
812

913
.PHONY: clean
1014
clean:
1115
rm -f example.o example
1216

1317
vault:
14-
docker run -p 8200:8200 vault
18+
docker run -p 8200:8200 vault
Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,54 @@
1-
#include <iostream>
2-
#include "VaultClient.h"
31
#include "../../shared/shared.h"
2+
#include <iostream>
43

5-
Vault::Client setup(const Vault::Client &rootClient) {
4+
Vault::Client setup(const Vault::Client &rootClient,
5+
const Vault::Path &appRoleMount,
6+
const Vault::SecretMount &secretMount) {
67
Vault::Sys::Auth authAdmin{rootClient};
78
Vault::AppRole appRoleAdmin{rootClient};
89
Vault::Sys::Policy policyAdmin{rootClient};
910
Vault::Sys::Mounts mountAdmin{rootClient};
1011

1112
createPolicy(policyAdmin);
12-
enableAppRole(authAdmin);
13+
enableAppRole(authAdmin, appRoleMount);
1314
createRole(appRoleAdmin);
14-
enableKeyValue(mountAdmin);
15+
enableKeyValue(mountAdmin, secretMount);
1516

1617
Vault::RoleId roleId = getRoleId(appRoleAdmin);
1718
Vault::SecretId secretId = getSecretId(appRoleAdmin);
1819

19-
return getAppRoleClient(roleId, secretId);
20+
return getAppRoleClient(roleId, secretId, appRoleMount);
2021
}
2122

22-
void cleanup(const Vault::Client &rootClient) {
23+
void cleanup(const Vault::Client &rootClient, const Vault::Path &appRoleMount,
24+
const Vault::SecretMount &secretMount) {
2325
Vault::Sys::Auth authAdmin = Vault::Sys::Auth{rootClient};
2426
Vault::AppRole appRoleAdmin = Vault::AppRole{rootClient};
2527
Vault::Sys::Mounts mountAdmin{rootClient};
2628
Vault::Sys::Policy policyAdmin{rootClient};
2729

2830
deleteRole(appRoleAdmin);
29-
disableAppRole(authAdmin);
30-
disableKeyValue(mountAdmin);
31+
disableAppRole(authAdmin, appRoleMount);
32+
disableKeyValue(mountAdmin, secretMount);
3133
deletePolicy(policyAdmin);
3234
}
3335

3436
int main(void) {
3537
char *rootTokenEnv = std::getenv("VAULT_ROOT_TOKEN");
3638
if (!rootTokenEnv) {
37-
std::cout << "The VAULT_ROOT_TOKEN environment variable must be set" << std::endl;
39+
std::cout << "The VAULT_ROOT_TOKEN environment variable must be set"
40+
<< std::endl;
3841
exit(-1);
3942
}
4043
Vault::Token rootToken{rootTokenEnv};
4144
Vault::Client rootClient = getRootClient(rootToken);
42-
Vault::Client client = setup(rootClient);
43-
Vault::KeyValue kv{client};
45+
Vault::Path appRoleMount{"approle"};
46+
Vault::SecretMount secretMount{"kv"};
47+
Vault::Client client = setup(rootClient, appRoleMount, secretMount);
48+
Vault::KeyValue kv{client, secretMount};
4449
Vault::Path key{"hello"};
4550
Vault::Parameters parameters(
46-
{{"foo", "world"},
47-
{"baz", "quux"},
48-
{"something", "something else"}});
51+
{{"foo", "world"}, {"baz", "quux"}, {"something", "something else"}});
4952

5053
kv.create(key, parameters);
5154
auto response = kv.read(key);
@@ -55,5 +58,5 @@ int main(void) {
5558
std::cout << "Unable to read secrets" << std::endl;
5659
}
5760

58-
cleanup(rootClient);
61+
cleanup(rootClient, appRoleMount, secretMount);
5962
}

example/shared/shared.h

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ inline Vault::Client getJwtClient(const Vault::RoleId &role,
4747
inline std::optional<std::string>
4848
createPolicy(const Vault::Sys::Policy &policyAdmin) {
4949
Vault::Parameters parameters{
50-
{"policy", "path \"secret/*\" {capabilities = [\"read\", \"update\", "
50+
{"policy", "path \"kv/*\" {capabilities = [\"read\", \"update\", "
5151
"\"list\", \"delete\", \"create\"]}"}};
5252
return policyAdmin.create(Vault::Path{"example"}, parameters);
5353
}
@@ -115,14 +115,16 @@ inline Vault::SecretId getSecretId(const Vault::AppRole &appRoleAdmin) {
115115
}
116116

117117
inline std::optional<std::string>
118-
enableKeyValue(const Vault::Sys::Mounts &mountAdmin) {
119-
return mountAdmin.enable(Vault::Path{}, Vault::Parameters{},
118+
enableKeyValue(const Vault::Sys::Mounts &mountAdmin,
119+
const Vault::SecretMount &secretMount) {
120+
return mountAdmin.enable(secretMount, Vault::Parameters{{"type", "kv"}},
120121
Vault::Parameters{}, Vault::Parameters{});
121122
}
122123

123124
inline std::optional<std::string>
124-
disableKeyValue(const Vault::Sys::Mounts &mountAdmin) {
125-
return mountAdmin.disable(Vault::Path{});
125+
disableKeyValue(const Vault::Sys::Mounts &mountAdmin,
126+
const Vault::SecretMount &secretMount) {
127+
return mountAdmin.disable(secretMount);
126128
}
127129

128130
inline std::optional<std::string>

include/VaultClient.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -869,15 +869,16 @@ class Sys {
869869
[[nodiscard]] std::optional<std::string> list() const;
870870
[[nodiscard]] std::optional<std::string> readUi() const;
871871
[[nodiscard]] std::optional<std::string> read() const;
872-
std::optional<std::string> enable(const Path &path,
872+
std::optional<std::string> enable(const SecretMount &path,
873873
const Parameters &parameters,
874874
const Parameters &options,
875875
const Parameters &config) const;
876-
std::optional<std::string> disable(const Path &path) const;
876+
std::optional<std::string> disable(const SecretMount &path) const;
877877
[[nodiscard]] std::optional<std::string>
878-
readConfiguration(const Path &path) const;
878+
readConfiguration(const SecretMount &path) const;
879879
std::optional<std::string>
880-
tuneConfiguration(const Path &path, const Parameters &parameters) const;
880+
tuneConfiguration(const SecretMount &path,
881+
const Parameters &parameters) const;
881882

882883
private:
883884
[[nodiscard]] Url getUrl(const Path &path) const;

src/system/mounts/Mounts.cpp

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,24 +12,28 @@ std::optional<std::string> Vault::Sys::Mounts::read() const {
1212
return HttpConsumer::get(client_, getUrl(Path{"mounts"}));
1313
}
1414

15-
std::optional<std::string> Vault::Sys::Mounts::enable(const Path &path,
16-
const Parameters &parameters,
17-
const Parameters &options,
18-
const Parameters &config) const {
19-
return HttpConsumer::post(client_, getUrl(Path{"mounts/" + path}), parameters, options, config);
15+
std::optional<std::string> Vault::Sys::Mounts::enable(
16+
const SecretMount &path, const Parameters &parameters,
17+
const Parameters &options, const Parameters &config) const {
18+
return HttpConsumer::post(client_, getUrl(Path{"mounts/" + path}), parameters,
19+
options, config);
2020
}
2121

22-
std::optional<std::string> Vault::Sys::Mounts::disable(const Path &path) const {
22+
std::optional<std::string>
23+
Vault::Sys::Mounts::disable(const SecretMount &path) const {
2324
return HttpConsumer::del(client_, getUrl(Path{"mounts/" + path}));
2425
}
2526

26-
std::optional<std::string> Vault::Sys::Mounts::readConfiguration(const Path &path) const {
27+
std::optional<std::string>
28+
Vault::Sys::Mounts::readConfiguration(const SecretMount &path) const {
2729
return HttpConsumer::get(client_, getUrl(Path{"mounts/" + path + "/tune"}));
2830
}
2931

30-
std::optional<std::string> Vault::Sys::Mounts::tuneConfiguration(const Path &path,
31-
const Parameters &parameters) const {
32-
return HttpConsumer::post(client_, getUrl(Path{"mounts/" + path + "/tune"}), parameters);
32+
std::optional<std::string>
33+
Vault::Sys::Mounts::tuneConfiguration(const SecretMount &path,
34+
const Parameters &parameters) const {
35+
return HttpConsumer::post(client_, getUrl(Path{"mounts/" + path + "/tune"}),
36+
parameters);
3337
}
3438

3539
Vault::Url Vault::Sys::Mounts::getUrl(const Path &path) const {

0 commit comments

Comments
 (0)