mirror of
https://github.com/feschber/lan-mouse.git
synced 2026-03-30 16:40:52 +03:00
Save config (#345)
* add setters for clients and authorized keys * impl change config request * basic saving functionality * save config automatically * add TODO comment
This commit is contained in:
committed by
GitHub
parent
a987f93133
commit
648b2b58a4
@@ -1,7 +1,7 @@
|
||||
use crate::{
|
||||
capture::{Capture, CaptureType, ICaptureEvent},
|
||||
client::ClientManager,
|
||||
config::Config,
|
||||
config::{Config, ConfigClient},
|
||||
connect::LanMouseConnection,
|
||||
crypto,
|
||||
dns::{DnsEvent, DnsResolver},
|
||||
@@ -39,6 +39,8 @@ pub enum ServiceError {
|
||||
}
|
||||
|
||||
pub struct Service {
|
||||
/// configuration
|
||||
config: Config,
|
||||
/// input capture
|
||||
capture: Capture,
|
||||
/// input emulation
|
||||
@@ -122,6 +124,7 @@ impl Service {
|
||||
|
||||
let port = config.port();
|
||||
let service = Self {
|
||||
config,
|
||||
capture,
|
||||
emulation,
|
||||
frontend_listener,
|
||||
@@ -182,24 +185,73 @@ impl Service {
|
||||
Err(e) => return log::error!("error receiving request: {e}"),
|
||||
};
|
||||
match request {
|
||||
FrontendRequest::Activate(handle, active) => self.set_client_active(handle, active),
|
||||
FrontendRequest::AuthorizeKey(desc, fp) => self.add_authorized_key(desc, fp),
|
||||
FrontendRequest::Activate(handle, active) => {
|
||||
self.set_client_active(handle, active);
|
||||
self.save_config();
|
||||
}
|
||||
FrontendRequest::AuthorizeKey(desc, fp) => {
|
||||
self.add_authorized_key(desc, fp);
|
||||
self.save_config();
|
||||
}
|
||||
FrontendRequest::ChangePort(port) => self.change_port(port),
|
||||
FrontendRequest::Create => self.add_client(),
|
||||
FrontendRequest::Delete(handle) => self.remove_client(handle),
|
||||
FrontendRequest::Create => {
|
||||
self.add_client();
|
||||
self.save_config();
|
||||
}
|
||||
FrontendRequest::Delete(handle) => {
|
||||
self.remove_client(handle);
|
||||
self.save_config();
|
||||
}
|
||||
FrontendRequest::EnableCapture => self.capture.reenable(),
|
||||
FrontendRequest::EnableEmulation => self.emulation.reenable(),
|
||||
FrontendRequest::Enumerate() => self.enumerate(),
|
||||
FrontendRequest::UpdateFixIps(handle, fix_ips) => self.update_fix_ips(handle, fix_ips),
|
||||
FrontendRequest::UpdateHostname(handle, host) => self.update_hostname(handle, host),
|
||||
FrontendRequest::UpdatePort(handle, port) => self.update_port(handle, port),
|
||||
FrontendRequest::UpdatePosition(handle, pos) => self.update_pos(handle, pos),
|
||||
FrontendRequest::UpdateFixIps(handle, fix_ips) => {
|
||||
self.update_fix_ips(handle, fix_ips);
|
||||
self.save_config();
|
||||
}
|
||||
FrontendRequest::UpdateHostname(handle, host) => {
|
||||
self.update_hostname(handle, host);
|
||||
self.save_config();
|
||||
}
|
||||
FrontendRequest::UpdatePort(handle, port) => {
|
||||
self.update_port(handle, port);
|
||||
self.save_config();
|
||||
}
|
||||
FrontendRequest::UpdatePosition(handle, pos) => {
|
||||
self.update_pos(handle, pos);
|
||||
self.save_config();
|
||||
}
|
||||
FrontendRequest::ResolveDns(handle) => self.resolve(handle),
|
||||
FrontendRequest::Sync => self.sync_frontend(),
|
||||
FrontendRequest::RemoveAuthorizedKey(key) => self.remove_authorized_key(key),
|
||||
FrontendRequest::RemoveAuthorizedKey(key) => {
|
||||
self.remove_authorized_key(key);
|
||||
self.save_config();
|
||||
}
|
||||
FrontendRequest::UpdateEnterHook(handle, enter_hook) => {
|
||||
self.update_enter_hook(handle, enter_hook)
|
||||
}
|
||||
FrontendRequest::SaveConfiguration => self.save_config(),
|
||||
}
|
||||
}
|
||||
|
||||
fn save_config(&mut self) {
|
||||
let clients = self.client_manager.clients();
|
||||
let clients = clients
|
||||
.into_iter()
|
||||
.map(|(c, s)| ConfigClient {
|
||||
ips: HashSet::from_iter(c.fix_ips),
|
||||
hostname: c.hostname,
|
||||
port: c.port,
|
||||
pos: c.pos,
|
||||
active: s.active,
|
||||
enter_hook: c.cmd,
|
||||
})
|
||||
.collect();
|
||||
self.config.set_clients(clients);
|
||||
let authorized_keys = self.authorized_keys.read().expect("lock").clone();
|
||||
self.config.set_authorized_keys(authorized_keys);
|
||||
if let Err(e) = self.config.write_back() {
|
||||
log::warn!("failed to write config: {e}");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user