mirror of
https://github.com/valitydev/adapter-common-lib.git
synced 2024-11-06 02:05:18 +00:00
Change logic for path (#49)
This commit is contained in:
parent
63a76cb0d4
commit
26b607d603
2
pom.xml
2
pom.xml
@ -12,7 +12,7 @@
|
||||
</parent>
|
||||
|
||||
<artifactId>adapter-common-lib</artifactId>
|
||||
<version>1.1.7</version>
|
||||
<version>1.2.7</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>adapter-common-lib</name>
|
||||
|
@ -8,41 +8,51 @@ import java.util.Map;
|
||||
|
||||
public interface SecretService {
|
||||
|
||||
/** Возвращает все секреты по заданному пути (по смыслу терминала)
|
||||
* @param path - путь, по которому в vault хранятся секреты одного терминала. Хранится в options платежа.
|
||||
/**
|
||||
* Возвращает все секреты по заданному пути (по смыслу терминала)
|
||||
*
|
||||
* @param serviceName - имя сервиса, которому принадлежат секреты. Хранится в настройках сервиса.
|
||||
* @param path - путь, по которому в vault хранятся секреты одного терминала. Хранится в options платежа.
|
||||
* @return - kv всех секретов этого терминала, например {'TERMINAL_ID':'user11', 'PASSWORD':'Parolec1'}
|
||||
* @throws SecretPathNotFoundException если путь не найден
|
||||
*/
|
||||
Map<String, SecretValue> getSecrets(String path) throws SecretPathNotFoundException;
|
||||
Map<String, SecretValue> getSecrets(String serviceName, String path) throws SecretPathNotFoundException;
|
||||
|
||||
/**
|
||||
* Возвращает конкретный секрет из kv
|
||||
* @param secretRef Идентификатор секрета, например, SecretRef{'tinkoff-merchant-882347345', 'PASSWORD'}
|
||||
*
|
||||
* @param serviceName - имя сервиса, которому принадлежат секреты. Хранится в настройках сервиса.
|
||||
* @param secretRef Идентификатор секрета, например, SecretRef{'882347345', 'PASSWORD'}
|
||||
* @return Возвращает секрет
|
||||
* @throws SecretNotFoundException если секрет не найден
|
||||
*/
|
||||
SecretValue getSecret(SecretRef secretRef) throws SecretNotFoundException;
|
||||
SecretValue getSecret(String serviceName, SecretRef secretRef) throws SecretNotFoundException;
|
||||
|
||||
/**
|
||||
* Возвращает hex-encoded hmac-подпись data. Секрет должен быть hex-encoded.
|
||||
* @param data Данные для подписи, например, invoiceId=123&amount=222
|
||||
* @param secretRef Идентификатор секрета, например, SecretRef{'tinkoff-merchant-882347345', 'PASSWORD'}
|
||||
*
|
||||
* @param serviceName - имя сервиса, которому принадлежат секреты. Хранится в настройках сервиса.
|
||||
* @param data Данные для подписи, например, invoiceId=123&amount=222
|
||||
* @param secretRef Идентификатор секрета, например, SecretRef{'882347345', 'PASSWORD'}
|
||||
* @param hmacAlgorithm Алгоритм подписи, например, HmacSHA256
|
||||
* @return Возвращает подпись
|
||||
* @throws SecretNotFoundException если секрет не найден
|
||||
* @throws HexDecodeException если секрет не в hex-формате
|
||||
* @throws HexDecodeException если секрет не в hex-формате
|
||||
*/
|
||||
String hmac(String data, SecretRef secretRef, HmacAlgorithms hmacAlgorithm)
|
||||
String hmac(String serviceName, String data, SecretRef secretRef, HmacAlgorithms hmacAlgorithm)
|
||||
throws SecretNotFoundException, HexDecodeException;
|
||||
|
||||
/**
|
||||
* Возвращает hex-encoded хэш от data + secret
|
||||
* @param data Данные для подписи, например, invoiceId=123&amount=222
|
||||
* @param secretRef Идентификатор секрета, например, SecretRef{'tinkoff-merchant-882347345', 'PASSWORD'}
|
||||
*
|
||||
* @param serviceName - имя сервиса, которому принадлежат секреты. Хранится в настройках сервиса.
|
||||
* @param data Данные для подписи, например, invoiceId=123&amount=222
|
||||
* @param secretRef Идентификатор секрета, например, SecretRef{'882347345', 'PASSWORD'}
|
||||
* @param digestAlgorithm Алгоритм хэширования, например, MD5
|
||||
* @return Возвращает подпись
|
||||
* @throws SecretNotFoundException если секрет не найден
|
||||
*/
|
||||
String digest(String data, SecretRef secretRef, DigestAlgorithms digestAlgorithm) throws SecretNotFoundException;
|
||||
String digest(String serviceName, String data, SecretRef secretRef, DigestAlgorithms digestAlgorithm)
|
||||
throws SecretNotFoundException;
|
||||
|
||||
}
|
||||
|
@ -12,14 +12,11 @@ import java.util.stream.Collectors;
|
||||
@RequiredArgsConstructor
|
||||
public class VaultSecretService implements SecretService {
|
||||
|
||||
public static final String VAULT_PATH = "VAULT_PATH";
|
||||
private static final String SECRET_PATH = "secret";
|
||||
|
||||
private final VaultTemplate vaultTemplate;
|
||||
|
||||
@Override
|
||||
public Map<String, SecretValue> getSecrets(String path) throws SecretPathNotFoundException {
|
||||
var map = vaultTemplate.opsForVersionedKeyValue(SECRET_PATH).get(path);
|
||||
public Map<String, SecretValue> getSecrets(String serviceName, String path) throws SecretPathNotFoundException {
|
||||
var map = vaultTemplate.opsForVersionedKeyValue(serviceName).get(path);
|
||||
if (map == null || map.getData() == null) {
|
||||
throw new SecretPathNotFoundException(path);
|
||||
}
|
||||
@ -28,26 +25,27 @@ public class VaultSecretService implements SecretService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public SecretValue getSecret(SecretRef secretRef) throws SecretNotFoundException {
|
||||
String secret = getSecretString(secretRef);
|
||||
public SecretValue getSecret(String serviceName, SecretRef secretRef) throws SecretNotFoundException {
|
||||
String secret = getSecretString(serviceName, secretRef);
|
||||
return new SecretValue(secret);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String hmac(String data, SecretRef secretRef, HmacAlgorithms hmacAlgorithm)
|
||||
public String hmac(String serviceName, String data, SecretRef secretRef, HmacAlgorithms hmacAlgorithm)
|
||||
throws SecretNotFoundException, HexDecodeException {
|
||||
String hexSecret = getSecretString(secretRef);
|
||||
String hexSecret = getSecretString(serviceName, secretRef);
|
||||
return new HmacSigner().sign(data, hexSecret, secretRef, hmacAlgorithm);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String digest(String data, SecretRef secretRef, DigestAlgorithms algorithm) throws SecretNotFoundException {
|
||||
String secret = getSecretString(secretRef);
|
||||
public String digest(String serviceName, String data, SecretRef secretRef, DigestAlgorithms algorithm)
|
||||
throws SecretNotFoundException {
|
||||
String secret = getSecretString(serviceName, secretRef);
|
||||
return new DigestSigner().sign(data, secret, algorithm);
|
||||
}
|
||||
|
||||
private String getSecretString(SecretRef secretRef) throws SecretNotFoundException {
|
||||
var map = vaultTemplate.opsForVersionedKeyValue(SECRET_PATH).get(secretRef.getPath());
|
||||
private String getSecretString(String serviceName, SecretRef secretRef) throws SecretNotFoundException {
|
||||
var map = vaultTemplate.opsForVersionedKeyValue(serviceName).get(secretRef.getPath());
|
||||
if (map == null || map.getData() == null || map.getData().get(secretRef.getKey()) == null) {
|
||||
throw new SecretNotFoundException(secretRef.toString());
|
||||
}
|
||||
|
@ -23,6 +23,7 @@ public class VaultSecretServiceTest {
|
||||
public static final String SIMPLE_SECRET = "sbdhfvh2y32bub";
|
||||
public static final String HMAC_KEY = "hmacKey";
|
||||
public static final String HMAC_SECRET = "6d6b6c6172657772";
|
||||
public static final String SERVICE_NAME = "secret";
|
||||
private static VaultSecretService vaultService;
|
||||
|
||||
private static final String TEST_PATH = "test-terminal-123";
|
||||
@ -35,40 +36,43 @@ public class VaultSecretServiceTest {
|
||||
VaultEndpoint vaultEndpoint = VaultEndpoint.create("localhost", container.getFirstMappedPort());
|
||||
vaultEndpoint.setScheme("http");
|
||||
VaultTemplate vaultTemplate = new VaultTemplate(vaultEndpoint, new TokenAuthentication("my-root-token"));
|
||||
vaultTemplate.opsForVersionedKeyValue("secret").put(TEST_PATH,
|
||||
vaultTemplate.opsForVersionedKeyValue(SERVICE_NAME).put(TEST_PATH,
|
||||
Map.of(SIMPLE_KEY, SIMPLE_SECRET,
|
||||
HMAC_KEY, HMAC_SECRET
|
||||
));
|
||||
HMAC_KEY, HMAC_SECRET
|
||||
));
|
||||
vaultService = new VaultSecretService(vaultTemplate);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetSecrets() {
|
||||
assertNotNull(vaultService.getSecrets(TEST_PATH));
|
||||
assertThrows(SecretPathNotFoundException.class, () -> vaultService.getSecrets("kekek"));
|
||||
assertNotNull(vaultService.getSecrets(SERVICE_NAME, TEST_PATH));
|
||||
assertThrows(SecretPathNotFoundException.class, () -> vaultService.getSecrets(SERVICE_NAME, "kekek"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetSecret() {
|
||||
assertEquals(SIMPLE_SECRET, vaultService.getSecret(new SecretRef(TEST_PATH, SIMPLE_KEY)).getValue());
|
||||
assertThrows(SecretNotFoundException.class, () -> vaultService.getSecret(new SecretRef(TEST_PATH, "der")));
|
||||
assertEquals(SIMPLE_SECRET,
|
||||
vaultService.getSecret(SERVICE_NAME, new SecretRef(TEST_PATH, SIMPLE_KEY)).getValue());
|
||||
assertThrows(SecretNotFoundException.class,
|
||||
() -> vaultService.getSecret(SERVICE_NAME, new SecretRef(TEST_PATH, "der")));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testHmac() {
|
||||
String expected = HmacEncryption.calculateHMacSha256("some_dat", "6d6b6c6172657772");
|
||||
SecretRef hmacRef = new SecretRef(TEST_PATH, HMAC_KEY);
|
||||
String actual = vaultService.hmac("some_dat", hmacRef, HmacAlgorithms.HMAC_SHA_256);
|
||||
String actual = vaultService.hmac(SERVICE_NAME, "some_dat", hmacRef, HmacAlgorithms.HMAC_SHA_256);
|
||||
assertEquals(expected, actual);
|
||||
assertThrows(HexDecodeException.class,
|
||||
() -> vaultService.hmac("some_dat", new SecretRef(TEST_PATH,SIMPLE_KEY), HmacAlgorithms.HMAC_MD5));
|
||||
() -> vaultService.hmac(SERVICE_NAME, "some_dat", new SecretRef(TEST_PATH, SIMPLE_KEY),
|
||||
HmacAlgorithms.HMAC_MD5));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void digest() {
|
||||
String expected = DigestUtils.md5Hex("some_da" + SIMPLE_SECRET);
|
||||
String actual = vaultService.digest("some_da", new SecretRef(TEST_PATH, SIMPLE_KEY), DigestAlgorithms.MD5);
|
||||
String actual = vaultService.digest(SERVICE_NAME, "some_da", new SecretRef(TEST_PATH, SIMPLE_KEY),
|
||||
DigestAlgorithms.MD5);
|
||||
assertEquals(expected, actual);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user