syntax = "proto3"; package ldap_service; option go_package = "git.lendry.ru/lendry-erp/proto.git/go;pb"; // ========================================== // ГЛАВНЫЙ СЕРВИС // ========================================== service LdapAuth { // --- Вектор 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; } message VerifyResponse { bool success = 1; string error_message = 2; UserData user = 3; // Отдаем полные данные при успешном входе } // --- Списки --- 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; // Полный путь группы (в которую добавляем / из которой удаляем) }