use arboard::Clipboard; use log::{debug, error}; use rocket::post; use rocket::serde::json::Json; use serde::Serialize; use crate::api_token::APIToken; use crate::encryption::{EncryptedText, ENCRYPTION}; /// Sets the clipboard text to the provided encrypted text. #[post("/clipboard/set", data = "")] pub fn set_clipboard(_token: APIToken, encrypted_text: EncryptedText) -> Json { // Decrypt this text first: let decrypted_text = match ENCRYPTION.decrypt(&encrypted_text) { Ok(text) => text, Err(e) => { error!(Source = "Clipboard"; "Failed to decrypt the text: {e}."); return Json(SetClipboardResponse { success: false, issue: e, }) }, }; let clipboard_result = Clipboard::new(); let mut clipboard = match clipboard_result { Ok(clipboard) => clipboard, Err(e) => { error!(Source = "Clipboard"; "Failed to get the clipboard instance: {e}."); return Json(SetClipboardResponse { success: false, issue: e.to_string(), }) }, }; let set_text_result = clipboard.set_text(decrypted_text); match set_text_result { Ok(_) => { debug!(Source = "Clipboard"; "Text was set to the clipboard successfully."); Json(SetClipboardResponse { success: true, issue: String::from(""), }) }, Err(e) => { error!(Source = "Clipboard"; "Failed to set text to the clipboard: {e}."); Json(SetClipboardResponse { success: false, issue: e.to_string(), }) }, } } /// The response for setting the clipboard text. #[derive(Serialize)] pub struct SetClipboardResponse { success: bool, issue: String, }