proto/auth/v1/msg.proto
nfel cb446e0c39
v2: changed status to match prev data
Signed-off-by: nfel <nfilsaraee@gmail.com>
2025-07-09 12:44:05 +03:30

291 lines
5.5 KiB
Protocol Buffer

syntax = "proto3";
package auth.v1;
import "base/v1/msg.proto";
/*
Internal
*/
message InternalInitRoutesReq { repeated InternalRoute routes = 1; }
message InternalRoute {
string path = 1;
string method = 2;
string handler = 3;
}
/* Role Permission */
message Role {
int64 id = 1;
string title = 2;
string key = 3;
string type = 4;
}
message Permission {
int64 id = 1;
string title = 2;
string key = 3;
string route = 4;
string method = 5;
}
message PermissionList { repeated Permission list = 1; }
/*
UserSendOtp
*/
message UserSendOtpReq { string mobile = 1; }
message UserSendOtpRes { int64 expired_at = 1; }
/*
UserLogin
*/
message UserLoginReq {
string mobile = 1;
string otp_code = 2;
}
message UserRefreshTokenReq { string refresh_token = 1; }
message UserAccessTokenRes {
string access_token = 1;
int64 access_expired_at = 2;
string refresh_token = 3;
InternalIAM iam = 4;
}
/*
IAM
*/
message CheckIAMReq {
string access_token = 1;
string route = 2;
string method = 3;
}
message InternalIAM {
User user = 1;
IdentityBasic identity = 2;
}
message IdReqWithIAM {
int64 id = 1;
InternalIAM iam = 2;
}
message IdReqWithIAMAndTFA {
int64 id = 1;
InternalIAM iam = 2;
TFA tfa = 6;
}
// Used for endpoints that need token and Query Param
message IAMWithQP {
InternalIAM iam = 1;
base.v1.BaseQueryParam qp = 2;
}
message ReqWithIAMAndParams {
InternalIAM iam = 1;
optional bool accepted = 2;
}
message ReqWithOptionalIAM { optional InternalIAM iam = 1; }
/*
User
*/
message GetUserReq {
int64 user_id = 1;
string national_id = 2;
}
enum UserStatus {
USER_STATUS_CREATED = 0;
USER_STATUS_VALID_LV1 = 1;
USER_STATUS_VALID_LV2 = 2;
USER_STATUS_VALID_LV3 = 3;
USER_STATUS_DISABLED = -1;
USER_STATUS_BANNED = -2;
USER_STATUS_DELETED = -3;
}
message User {
int64 id = 1;
string national_id = 2;
string mobile = 3;
string email = 4;
UserStatus status = 5;
repeated int64 roles = 6;
}
message UserAddress {
string postal_code = 2;
string user_address = 3;
}
message Company {
int64 id = 1;
string name = 2;
string name_fa = 3;
string location = 4;
bool can_provide_bnpl = 5;
}
// Identity is bound to current user's real identity
message Identity {
string national_id = 1;
string national_serial_id = 2;
string first_name = 3;
string first_name_en = 4;
string last_name = 5;
string last_name_en = 6;
string father_name = 7;
int64 birthdate = 8;
string birthdate_time = 9;
bool is_alive = 10;
int32 gender = 11;
string serial_number = 12;
string serial_type = 13;
string shenasname_number = 14;
string shenasname_seri = 15;
string shenasname_serial = 16;
int32 status = 17;
string updated_at = 18;
string created_at = 19;
string email = 20;
string mobile = 21;
optional Company company = 22;
optional string employee_info = 23;
string pub_key = 24;
optional float balance = 25;
optional UserAddress user_address = 26;
}
message IdentityBasic {
string first_name = 1;
string last_name = 2;
optional Company company = 3;
}
message UserIdentityBasic {
int64 id = 1;
string national_id = 2;
string mobile = 3;
string first_name = 4;
string last_name = 5;
string wallet_address = 6;
}
message UserUpdateIdentityReq {
InternalIAM iam = 1;
string national_id = 2;
string birthdate = 3;
string email = 4;
optional UserAddress user_address = 5;
}
message UserUpdateBankInfoReq {
InternalIAM iam = 1;
string deposit_number = 2;
string iban_number = 3;
string card_number = 4;
}
message BankInfoList { repeated BankInfo list = 1; }
// Status 0: Fail Verify, 1: Verified, 2: Does not Match user's credential , 3:
// Closed for potential fraud
enum BankInfoStatusEnum {
FAIL_VERIFY = 0;
VERIFIED = 1;
DOES_NOT_MATCH = 2;
CLOSED = 3;
}
message BankInfo {
int64 id = 1;
string deposit_number = 2;
string iban_number = 3;
string card_number = 4;
BankInfoStatusEnum status = 5;
string updated_at = 6;
string created_at = 7;
}
/* Two Factor Authentication */
// message IdReqWithIAMAndTFA {
// int64 id = 1;
// InternalIAM iam = 2;
// string tfa_code = 3;
// }
message TFAReq {
InternalIAM iam = 1;
optional string mobile = 2;
optional string email = 3;
optional string reason =
4; // issued jwt reason -> can be login, redeem, withdrawal
optional int64 id = 5;
optional TfaStateEnum state = 6;
}
// Two Factor Authentication Exchange Response
message TFAExRes {
InternalIAM iam = 1;
string secret = 2;
string qrcode_base64 = 3;
}
message CheckTFAReq {
InternalIAM iam = 1;
string code = 2;
TFAReq req = 3;
// optional string algorithm = 3;
// optional string reason = 4; // Can be later used as a lookup
// optional string id = 5;
// optional TfaStateEnum state = 6;
}
message TFA {
TfaStateEnum state = 1;
int64 code = 2;
int64 id = 3;
}
enum TfaStateEnum {
TFA_STATE_ENUM_UNSPECIFIED = 0;
LOGIN = 1;
INTERNAL_TRANSFER = 2;
EXTERNAL_TRANSFER = 3;
REDEEM_TOKEN = 4;
MARKET_PLACE_PURCHASE = 5;
MARKET_PLACE_ORDER_CREATE = 6;
MARKET_PLACE_ORDER_CANCEL = 7;
IRT_WITHDRAWAL = 8;
IRT_DEPOSIT = 9;
}
message Recipient {
string key = 1;
optional string first_name = 2;
optional string last_name = 3;
optional int64 user_id = 4;
optional string public_key = 5;
}
message LookUpNameReq { Recipient recipient = 1; }
message LookUpNameRes { Recipient recipient = 1; }
message BasicUserInfo {
string name = 1;
string national_id = 2;
string pub_key = 3;
int64 user_id = 4;
}
message BasicUserInfoList { repeated BasicUserInfo list = 1; }