mirror of
https://github.com/valitydev/damsel.git
synced 2024-11-07 02:05:18 +00:00
98 lines
3.3 KiB
Thrift
98 lines
3.3 KiB
Thrift
include "base.thrift"
|
||
include "domain.thrift"
|
||
|
||
namespace java com.rbkmoney.damsel.cds
|
||
|
||
/** Часть мастер-ключа */
|
||
typedef binary MasterKeyShare;
|
||
|
||
typedef list<MasterKeyShare> MasterKeyShares;
|
||
|
||
/** Дата экспирации */
|
||
struct ExpDate {
|
||
/** Месяц 1..12 */
|
||
1: required i8 month
|
||
/** Год 2015..∞ */
|
||
2: required i16 year
|
||
}
|
||
|
||
/** Открытые карточные данные (в отличие от domain.BankCard) */
|
||
struct CardData {
|
||
/** Номер карточки без пробелов [0-9]{14,19} */
|
||
1: required string pan
|
||
2: required ExpDate exp_date
|
||
/** Имя держателя */
|
||
3: optional string cardholder_name
|
||
/** Код верификации [0-9]{3,4} */
|
||
4: required string cvv
|
||
}
|
||
|
||
struct PutCardDataResult {
|
||
1: required domain.BankCard bank_card
|
||
2: required domain.PaymentSessionID session_id
|
||
}
|
||
|
||
struct Unlocked {}
|
||
|
||
union UnlockStatus {
|
||
/** Успешно. */
|
||
1: Unlocked unlocked
|
||
/** Сколько частей ключа нужно еще ввести, чтобы расшифровать хранилище. */
|
||
2: i16 more_keys_needed
|
||
}
|
||
|
||
exception InvalidCardData {}
|
||
|
||
exception CardDataNotFound {}
|
||
|
||
exception NoKeyring {}
|
||
|
||
exception KeyringLocked {}
|
||
|
||
exception KeyringExists {}
|
||
|
||
/** Интерфейс для администраторов */
|
||
service Keyring {
|
||
|
||
/** Создать новый кейринг
|
||
* threshold - минимально необходимое количество ключей для восстановления мастер ключа
|
||
* num_shares - общее количество частей, на которое нужно разбить мастер-ключ
|
||
*/
|
||
MasterKeyShares Init (1: i16 threshold, 2: i16 num_shares) throws (1: KeyringExists exists)
|
||
|
||
/** Предоставить часть мастер-ключа для расшифровки кейринга.
|
||
* Необходимо вызвать с разными частами мастер столько раз, сколько было указано в качестве
|
||
* параметра threshold при создании кейринга
|
||
*/
|
||
UnlockStatus Unlock (1: MasterKeyShare key_share) throws (1: NoKeyring no_keyring)
|
||
|
||
/** Зашифровать кейринг */
|
||
void Lock () throws (1: NoKeyring no_keyring)
|
||
|
||
/** Добавить новый ключ в кейринг */
|
||
void Rotate () throws (1: KeyringLocked locked, 2: NoKeyring no_keyring)
|
||
|
||
}
|
||
|
||
/**
|
||
* Интерфейс для приложений
|
||
*
|
||
* При недоступности (отсутствии или залоченности) кейринга сервис сигнализирует об этом с помощью
|
||
* woody-ошибки `Resource Unavailable`.
|
||
*/
|
||
service Storage {
|
||
|
||
/** Получить карточные данные без CVV */
|
||
CardData GetCardData (1: domain.Token token)
|
||
throws (1: CardDataNotFound not_found)
|
||
|
||
/** Получить карточные данные c CVV */
|
||
CardData GetSessionCardData (1: domain.Token token, 2: domain.PaymentSessionID session_id)
|
||
throws (1: CardDataNotFound not_found)
|
||
|
||
/** Сохранить карточные данные */
|
||
PutCardDataResult PutCardData (1: CardData card_data)
|
||
throws (1: InvalidCardData invalid)
|
||
|
||
}
|