44import com .bettercloud .vault .rest .Rest ;
55import com .bettercloud .vault .rest .RestException ;
66import com .bettercloud .vault .rest .RestResponse ;
7- import io .scalecube .services .ServiceReference ;
8- import io .scalecube .services .auth .CredentialsSupplier ;
9- import io .scalecube .services .security .ServiceTokens ;
107import io .scalecube .utils .MaskUtil ;
11- import java .util .Collections ;
128import java .util .Map ;
139import java .util .StringJoiner ;
1410import java .util .function .BiFunction ;
1814import reactor .core .Exceptions ;
1915import reactor .core .publisher .Mono ;
2016
21- public final class VaultServiceTokenCredentialsSupplier implements CredentialsSupplier {
17+ public final class VaultServiceTokenSupplier {
2218
23- private static final Logger LOGGER =
24- LoggerFactory .getLogger (VaultServiceTokenCredentialsSupplier .class );
19+ private static final Logger LOGGER = LoggerFactory .getLogger (VaultServiceTokenSupplier .class );
2520
2621 private static final String VAULT_TOKEN_HEADER = "X-Vault-Token" ;
2722
@@ -30,9 +25,9 @@ public final class VaultServiceTokenCredentialsSupplier implements CredentialsSu
3025 private Supplier <String > vaultTokenSupplier ;
3126 private BiFunction <String , Map <String , String >, String > serviceTokenNameBuilder ;
3227
33- public VaultServiceTokenCredentialsSupplier () {}
28+ public VaultServiceTokenSupplier () {}
3429
35- private VaultServiceTokenCredentialsSupplier ( VaultServiceTokenCredentialsSupplier other ) {
30+ private VaultServiceTokenSupplier ( VaultServiceTokenSupplier other ) {
3631 this .serviceRole = other .serviceRole ;
3732 this .vaultAddress = other .vaultAddress ;
3833 this .vaultTokenSupplier = other .vaultTokenSupplier ;
@@ -45,8 +40,8 @@ private VaultServiceTokenCredentialsSupplier(VaultServiceTokenCredentialsSupplie
4540 * @param serviceRole serviceRole
4641 * @return new instance with applied setting
4742 */
48- public VaultServiceTokenCredentialsSupplier serviceRole (String serviceRole ) {
49- final VaultServiceTokenCredentialsSupplier c = copy ();
43+ public VaultServiceTokenSupplier serviceRole (String serviceRole ) {
44+ final VaultServiceTokenSupplier c = copy ();
5045 c .serviceRole = serviceRole ;
5146 return c ;
5247 }
@@ -57,8 +52,8 @@ public VaultServiceTokenCredentialsSupplier serviceRole(String serviceRole) {
5752 * @param vaultAddress vaultAddress
5853 * @return new instance with applied setting
5954 */
60- public VaultServiceTokenCredentialsSupplier vaultAddress (String vaultAddress ) {
61- final VaultServiceTokenCredentialsSupplier c = copy ();
55+ public VaultServiceTokenSupplier vaultAddress (String vaultAddress ) {
56+ final VaultServiceTokenSupplier c = copy ();
6257 c .vaultAddress = vaultAddress ;
6358 return c ;
6459 }
@@ -69,50 +64,51 @@ public VaultServiceTokenCredentialsSupplier vaultAddress(String vaultAddress) {
6964 * @param vaultTokenSupplier vaultTokenSupplier
7065 * @return new instance with applied setting
7166 */
72- public VaultServiceTokenCredentialsSupplier vaultTokenSupplier (
73- Supplier <String > vaultTokenSupplier ) {
74- final VaultServiceTokenCredentialsSupplier c = copy ();
67+ public VaultServiceTokenSupplier vaultTokenSupplier (Supplier <String > vaultTokenSupplier ) {
68+ final VaultServiceTokenSupplier c = copy ();
7569 c .vaultTokenSupplier = vaultTokenSupplier ;
7670 return c ;
7771 }
7872
7973 /**
8074 * Setter for serviceTokenNameBuilder.
8175 *
82- * @param serviceTokenNameBuilder serviceTokenNameBuilder
76+ * @param serviceTokenNameBuilder serviceTokenNameBuilder; inputs for this function are {@code
77+ * serviceRole} and {@code tags} attributes
8378 * @return new instance with applied setting
8479 */
85- public VaultServiceTokenCredentialsSupplier serviceTokenNameBuilder (
80+ public VaultServiceTokenSupplier serviceTokenNameBuilder (
8681 BiFunction <String , Map <String , String >, String > serviceTokenNameBuilder ) {
87- final VaultServiceTokenCredentialsSupplier c = copy ();
82+ final VaultServiceTokenSupplier c = copy ();
8883 c .serviceTokenNameBuilder = serviceTokenNameBuilder ;
8984 return c ;
9085 }
9186
92- @ Override
93- public Mono <Map <String , String >> apply (ServiceReference serviceReference ) {
87+ /**
88+ * Returns credentials as {@code Map<String, String>} for the given args.
89+ *
90+ * @param tags tags attributes
91+ * @return vault service token
92+ */
93+ public Mono <String > getServiceToken (Map <String , String > tags ) {
9494 return Mono .fromCallable (vaultTokenSupplier ::get )
95- .map (vaultToken -> rpcGetServiceToken (serviceReference . tags () , vaultToken ))
95+ .map (vaultToken -> rpcGetServiceToken (tags , vaultToken ))
9696 .doOnNext (response -> verifyOk (response .getStatus ()))
97- .map (this ::toCredentials )
97+ .map (
98+ response ->
99+ Json .parse (new String (response .getBody ()))
100+ .asObject ()
101+ .get ("data" )
102+ .asObject ()
103+ .get ("token" )
104+ .asString ())
98105 .doOnSuccess (
99106 creds ->
100107 LOGGER .info (
101108 "[rpcGetServiceToken] Successfully obtained vault service token: {}" ,
102109 MaskUtil .mask (creds )));
103110 }
104111
105- private Map <String , String > toCredentials (RestResponse response ) {
106- return Collections .singletonMap (
107- ServiceTokens .SERVICE_TOKEN_HEADER ,
108- Json .parse (new String (response .getBody ()))
109- .asObject ()
110- .get ("data" )
111- .asObject ()
112- .get ("token" )
113- .asString ());
114- }
115-
116112 private RestResponse rpcGetServiceToken (Map <String , String > tags , String vaultToken ) {
117113 String uri = buildVaultServiceTokenUri (tags );
118114 LOGGER .info ("[rpcGetServiceToken] Getting vault service token (uri='{}')" , uri );
@@ -141,7 +137,7 @@ private String buildVaultServiceTokenUri(Map<String, String> tags) {
141137 .toString ();
142138 }
143139
144- private VaultServiceTokenCredentialsSupplier copy () {
145- return new VaultServiceTokenCredentialsSupplier (this );
140+ private VaultServiceTokenSupplier copy () {
141+ return new VaultServiceTokenSupplier (this );
146142 }
147143}
0 commit comments