cosmic-greeter/examples/server.rs

72 lines
2.5 KiB
Rust
Raw Normal View History

use greetd_ipc::{codec::TokioCodec, AuthMessageType, ErrorType, Request, Response};
2024-05-07 09:03:44 -06:00
use std::{env, fs, io, thread};
2023-10-02 14:38:00 -06:00
use tokio::net::UnixListener;
#[tokio::main]
async fn main() {
2024-05-07 09:03:44 -06:00
let greetd_sock = env::current_dir().unwrap().join("socket");
if greetd_sock.exists() {
fs::remove_file(&greetd_sock).unwrap();
}
let listener = UnixListener::bind(&greetd_sock).unwrap();
println!("listening at {:?}", greetd_sock);
env::set_var("GREETD_SOCK", &greetd_sock);
thread::spawn(|| {
2024-05-17 09:17:02 -06:00
cosmic_greeter::greeter::main().unwrap();
2024-05-07 09:03:44 -06:00
});
2023-10-02 14:38:00 -06:00
loop {
let (socket, _addr) = listener.accept().await.unwrap();
println!("new connection");
loop {
let request = {
socket.readable().await.unwrap();
let mut bytes = Vec::with_capacity(4096);
match socket.try_read_buf(&mut bytes) {
Ok(0) => break,
Ok(count) => {
println!("read {} bytes", count);
}
Err(err) => match err.kind() {
io::ErrorKind::WouldBlock => continue,
_ => {
println!("failed to read socket: {:?}", err);
break;
}
},
}
let mut cursor = io::Cursor::new(bytes);
Request::read_from(&mut cursor).await.unwrap()
2023-10-02 14:38:00 -06:00
};
println!("{:?}", request);
let response = match request {
Request::CreateSession { .. } => Response::AuthMessage {
2023-10-02 14:38:00 -06:00
auth_message_type: AuthMessageType::Secret,
2024-05-07 09:03:44 -06:00
auth_message: "MOCKING:".to_string(),
2023-10-02 14:38:00 -06:00
},
2023-10-04 11:59:34 -06:00
Request::PostAuthMessageResponse { response } => {
match response.as_ref().map(|x| x.as_str()) {
Some("password") => Response::Success,
_ => Response::Error {
error_type: ErrorType::AuthError,
description: "pam_authenticate: AUTH_ERR".to_string(),
},
}
}
Request::StartSession { .. } => Response::Success,
2024-05-07 09:03:44 -06:00
Request::CancelSession => Response::Success,
2023-10-02 14:38:00 -06:00
};
let mut bytes = Vec::with_capacity(4096);
response.write_to(&mut bytes).await.unwrap();
2023-10-02 14:38:00 -06:00
socket.try_write(&bytes).unwrap();
}
}
}