fixes
This commit is contained in:
72
src/tdlib/auth.rs
Normal file
72
src/tdlib/auth.rs
Normal file
@@ -0,0 +1,72 @@
|
||||
use tdlib_rs::enums::{AuthorizationState, Update};
|
||||
use tdlib_rs::functions;
|
||||
|
||||
#[derive(Debug, Clone, PartialEq)]
|
||||
#[allow(dead_code)]
|
||||
pub enum AuthState {
|
||||
WaitTdlibParameters,
|
||||
WaitPhoneNumber,
|
||||
WaitCode,
|
||||
WaitPassword,
|
||||
Ready,
|
||||
Closed,
|
||||
Error(String),
|
||||
}
|
||||
|
||||
/// Менеджер авторизации TDLib
|
||||
pub struct AuthManager {
|
||||
pub state: AuthState,
|
||||
client_id: i32,
|
||||
}
|
||||
|
||||
impl AuthManager {
|
||||
pub fn new(client_id: i32) -> Self {
|
||||
Self {
|
||||
state: AuthState::WaitTdlibParameters,
|
||||
client_id,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn is_authenticated(&self) -> bool {
|
||||
self.state == AuthState::Ready
|
||||
}
|
||||
|
||||
/// Обработать обновление авторизации
|
||||
pub fn handle_auth_update(&mut self, update: &Update) {
|
||||
if let Update::AuthorizationState(auth_update) = update {
|
||||
self.state = match &auth_update.authorization_state {
|
||||
AuthorizationState::WaitTdlibParameters => AuthState::WaitTdlibParameters,
|
||||
AuthorizationState::WaitPhoneNumber => AuthState::WaitPhoneNumber,
|
||||
AuthorizationState::WaitCode(_) => AuthState::WaitCode,
|
||||
AuthorizationState::WaitPassword(_) => AuthState::WaitPassword,
|
||||
AuthorizationState::Ready => AuthState::Ready,
|
||||
AuthorizationState::Closed => AuthState::Closed,
|
||||
_ => return,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
/// Отправить номер телефона
|
||||
pub async fn send_phone_number(&self, phone: String) -> Result<(), String> {
|
||||
functions::set_authentication_phone_number(phone, None, self.client_id)
|
||||
.await
|
||||
.map(|_| ())
|
||||
.map_err(|e| format!("Ошибка отправки номера: {:?}", e))
|
||||
}
|
||||
|
||||
/// Отправить код подтверждения
|
||||
pub async fn send_code(&self, code: String) -> Result<(), String> {
|
||||
functions::check_authentication_code(code, self.client_id)
|
||||
.await
|
||||
.map(|_| ())
|
||||
.map_err(|e| format!("Ошибка проверки кода: {:?}", e))
|
||||
}
|
||||
|
||||
/// Отправить пароль 2FA
|
||||
pub async fn send_password(&self, password: String) -> Result<(), String> {
|
||||
functions::check_authentication_password(password, self.client_id)
|
||||
.await
|
||||
.map(|_| ())
|
||||
.map_err(|e| format!("Ошибка проверки пароля: {:?}", e))
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user