diff --git a/package.json b/package.json index 291bbac..61f44bf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@lendry-erp/contracts", - "version": "1.0.18", + "version": "1.0.20", "description": "Protobuf definitions and generated TypeScript types", "type": "commonjs", "main": "./dist/index.js", diff --git a/proto/ldap.proto b/proto/ldap.proto index 58fc35e..f70c237 100644 --- a/proto/ldap.proto +++ b/proto/ldap.proto @@ -4,10 +4,60 @@ package ldap_service; option go_package = "git.lendry.ru/lendry-erp/contracts.git/gen/go;ldap_service"; +// ========================================== +// ГЛАВНЫЙ СЕРВИС +// ========================================== service LdapAuth { - rpc VerifyUser (VerifyRequest) returns (VerifyResponse); + // --- Вектор 1: Авторизация (Bind от имени пользователя) --- + rpc VerifyUser (VerifyRequest) returns (VerifyResponse); + + // --- Вектор 2: Управление Пользователями (Bind системного аккаунта) --- + rpc GetUsers (EmptyRequest) returns (UserListResponse); + rpc CreateUser (CreateUserRequest) returns (StatusResponse); + rpc UpdateUser (UpdateUserRequest) returns (StatusResponse); + rpc ChangePassword (ChangePasswordRequest) returns (StatusResponse); + rpc ToggleUserStatus (ToggleStatusRequest) returns (StatusResponse); + + // --- Вектор 3: Управление Группами --- + rpc GetGroups (EmptyRequest) returns (GroupListResponse); + rpc AddUserToGroup (GroupMemberRequest) returns (StatusResponse); + rpc RemoveUserFromGroup (GroupMemberRequest) returns (StatusResponse); } +// ========================================== +// БАЗОВЫЕ И ПЕРЕИСПОЛЬЗУЕМЫЕ СТРУКТУРЫ +// ========================================== +message EmptyRequest {} + +// Стандартный ответ для мутаций (создание, обновление, удаление) +message StatusResponse { + bool success = 1; + string error_message = 2; +} + +// Полная модель пользователя +message UserData { + string dn = 1; // Полный путь в AD (Distinguished Name) + string username = 2; // Логин (sAMAccountName) + string display_name = 3; // ФИО (displayName) + string email = 4; // Почта (mail) + string description = 5; // Описание/Должность (description) + bytes avatar = 6; // Аватарка в байтах (thumbnailPhoto) + repeated string groups = 7; // Список групп + bool is_active = 8; // Статус аккаунта +} + +// Модель группы +message GroupData { + string dn = 1; + string name = 2; // Короткое имя группы (cn) +} + +// ========================================== +// ЗАПРОСЫ И ОТВЕТЫ (REQUESTS / RESPONSES) +// ========================================== + +// --- Авторизация --- message VerifyRequest { string username = 1; string password = 2; @@ -16,13 +66,51 @@ message VerifyRequest { message VerifyResponse { bool success = 1; string error_message = 2; - UserData user = 3; + UserData user = 3; // Отдаем полные данные при успешном входе } -message UserData { - string dn = 1; - string display_name = 2; - repeated string groups = 3; - bool is_active = 4; +// --- Списки --- +message UserListResponse { + bool success = 1; + string error_message = 2; + repeated UserData users = 3; } +message GroupListResponse { + bool success = 1; + string error_message = 2; + repeated GroupData groups = 3; +} + +// --- Управление профилем --- +message CreateUserRequest { + string username = 1; + string full_name = 2; + string password = 3; + optional string email = 4; // Сразу при создании можно задать почту +} + +// Запрос на обновление. Используем optional для частичного обновления. +message UpdateUserRequest { + string username = 1; // Обязательное поле: кого обновляем + optional string display_name = 2; // Новое ФИО (повлечет Rename CN) + optional string email = 3; // Новая почта + optional string description = 4; // Новое описание + optional bytes avatar = 5; // Новая аватарка (бинарник картинки) +} + +message ChangePasswordRequest { + string username = 1; + string new_password = 2; +} + +message ToggleStatusRequest { + string username = 1; + bool set_active = 2; // true - включить (512), false - отключить (514) +} + +// --- Управление членством в группах --- +message GroupMemberRequest { + string username = 1; // Логин пользователя + string group_dn = 2; // Полный путь группы (в которую добавляем / из которой удаляем) +} \ No newline at end of file