import "common_base.proto";

message CParental_DisableParentalSettings_Request {
	optional string password = 1;
	optional fixed64 steamid = 10;
}

message CParental_DisableParentalSettings_Response {
}

message CParental_DisableWithRecoveryCode_Request {
	optional uint32 recovery_code = 1;
	optional fixed64 steamid = 10;
}

message CParental_DisableWithRecoveryCode_Response {
}

message CParental_EnableParentalSettings_Request {
	optional string password = 1;
	optional .ParentalSettings settings = 2;
	optional string sessionid = 3;
	optional uint32 enablecode = 4;
	optional fixed64 steamid = 10;
}

message CParental_EnableParentalSettings_Response {
}

message CParental_GetParentalSettings_Request {
	optional fixed64 steamid = 10;
}

message CParental_GetParentalSettings_Response {
	optional .ParentalSettings settings = 1;
}

message CParental_GetSignedParentalSettings_Request {
	optional uint32 priority = 1;
}

message CParental_GetSignedParentalSettings_Response {
	optional bytes serialized_settings = 1;
	optional bytes signature = 2;
}

message CParental_LockClient_Request {
	optional string session = 1;
}

message CParental_LockClient_Response {
}

message CParental_ParentalLock_Notification {
	optional string sessionid = 1;
}

message CParental_ParentalSettingsChange_Notification {
	optional bytes serialized_settings = 1;
	optional bytes signature = 2;
	optional string password = 3;
	optional string sessionid = 4;
}

message CParental_ParentalUnlock_Notification {
	optional string password = 1;
	optional string sessionid = 2;
}

message CParental_RequestRecoveryCode_Request {
}

message CParental_RequestRecoveryCode_Response {
}

message CParental_SetParentalSettings_Request {
	optional string password = 1;
	optional .ParentalSettings settings = 2;
	optional string new_password = 3;
	optional string sessionid = 4;
	optional fixed64 steamid = 10;
}

message CParental_SetParentalSettings_Response {
}

message CParental_ValidatePassword_Request {
	optional string password = 1;
	optional string session = 2;
	optional bool send_unlock_on_success = 3;
}

message CParental_ValidatePassword_Response {
	optional string token = 1;
}

message CParental_ValidateToken_Request {
	optional string unlock_token = 1;
}

message CParental_ValidateToken_Response {
}

message ParentalApp {
	optional uint32 appid = 1;
	optional bool is_allowed = 2;
}

message ParentalSettings {
	optional fixed64 steamid = 1;
	optional uint32 applist_base_id = 2;
	optional string applist_base_description = 3;
	repeated .ParentalApp applist_base = 4;
	repeated .ParentalApp applist_custom = 5;
	optional uint32 passwordhashtype = 6;
	optional bytes salt = 7;
	optional bytes passwordhash = 8;
	optional bool is_enabled = 9;
	optional uint32 enabled_features = 10;
	optional string recovery_email = 11;
	optional bool is_site_license_lock = 12;
}

service Parental {
	rpc DisableParentalSettings (.CParental_DisableParentalSettings_Request) returns (.CParental_DisableParentalSettings_Response);
	rpc DisableWithRecoveryCode (.CParental_DisableWithRecoveryCode_Request) returns (.CParental_DisableWithRecoveryCode_Response);
	rpc EnableParentalSettings (.CParental_EnableParentalSettings_Request) returns (.CParental_EnableParentalSettings_Response);
	rpc GetParentalSettings (.CParental_GetParentalSettings_Request) returns (.CParental_GetParentalSettings_Response);
	rpc GetSignedParentalSettings (.CParental_GetSignedParentalSettings_Request) returns (.CParental_GetSignedParentalSettings_Response);
	rpc LockClient (.CParental_LockClient_Request) returns (.CParental_LockClient_Response);
	rpc RequestRecoveryCode (.CParental_RequestRecoveryCode_Request) returns (.CParental_RequestRecoveryCode_Response);
	rpc SetParentalSettings (.CParental_SetParentalSettings_Request) returns (.CParental_SetParentalSettings_Response);
	rpc ValidatePassword (.CParental_ValidatePassword_Request) returns (.CParental_ValidatePassword_Response);
	rpc ValidateToken (.CParental_ValidateToken_Request) returns (.CParental_ValidateToken_Response);
}

service ParentalClient {
	rpc NotifyLock (.CParental_ParentalLock_Notification) returns (.NoResponse);
	rpc NotifySettingsChange (.CParental_ParentalSettingsChange_Notification) returns (.NoResponse);
	rpc NotifyUnlock (.CParental_ParentalUnlock_Notification) returns (.NoResponse);
}

