mirror of
https://github.com/veeso/termscp.git
synced 2026-09-28 06:51:20 -07:00
Moving bookmarks from ui to system
This commit is contained in:
@@ -26,5 +26,6 @@ pub mod bookmarks;
|
|||||||
pub mod filetransfer;
|
pub mod filetransfer;
|
||||||
pub mod fs;
|
pub mod fs;
|
||||||
pub mod host;
|
pub mod host;
|
||||||
|
pub mod system;
|
||||||
pub mod ui;
|
pub mod ui;
|
||||||
pub mod utils;
|
pub mod utils;
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ mod bookmarks;
|
|||||||
mod filetransfer;
|
mod filetransfer;
|
||||||
mod fs;
|
mod fs;
|
||||||
mod host;
|
mod host;
|
||||||
|
mod system;
|
||||||
mod ui;
|
mod ui;
|
||||||
mod utils;
|
mod utils;
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,107 @@
|
|||||||
|
//! ## BookmarksClient
|
||||||
|
//!
|
||||||
|
//! `bookmarks_client` is the module which provides an API between the Bookmarks module and the system
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (C) 2020 Christian Visintin - christian.visintin1997@gmail.com
|
||||||
|
*
|
||||||
|
* This file is part of "TermSCP"
|
||||||
|
*
|
||||||
|
* TermSCP is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* TermSCP is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with TermSCP. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Local
|
||||||
|
use crate::bookmarks::serializer::BookmarkSerializer;
|
||||||
|
use crate::bookmarks::{Bookmark, SerializerError, SerializerErrorKind, UserHosts};
|
||||||
|
use crate::filetransfer::FileTransferProtocol;
|
||||||
|
// Ext
|
||||||
|
use std::fs::OpenOptions;
|
||||||
|
use std::path::{Path, PathBuf};
|
||||||
|
|
||||||
|
/// ## BookmarksClient
|
||||||
|
///
|
||||||
|
/// BookmarksClient provides a layer between the host system and the bookmarks module
|
||||||
|
pub struct BookmarksClient {
|
||||||
|
pub hosts: UserHosts,
|
||||||
|
bookmarks_file: PathBuf,
|
||||||
|
key_file: PathBuf,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl BookmarksClient {
|
||||||
|
/// ### BookmarksClient
|
||||||
|
///
|
||||||
|
/// Instantiates a new BookmarksClient
|
||||||
|
/// Bookmarks file path must be provided
|
||||||
|
/// Key file must be provided
|
||||||
|
pub fn new(bookmarks_file: &Path, key_file: &Path) -> Result<BookmarksClient, SerializerError> {
|
||||||
|
// Create default hosts
|
||||||
|
let default_hosts: UserHosts = Default::default();
|
||||||
|
let client: BookmarksClient = BookmarksClient {
|
||||||
|
hosts: default_hosts,
|
||||||
|
bookmarks_file: PathBuf::from(bookmarks_file),
|
||||||
|
key_file: PathBuf::from(key_file),
|
||||||
|
};
|
||||||
|
// If bookmark file doesn't exist, initialize it
|
||||||
|
if !bookmarks_file.exists() {
|
||||||
|
if let Err(err) = client.write_bookmarks() {
|
||||||
|
return Err(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// If key file doesn't exist, create key
|
||||||
|
if !key_file.exists() {
|
||||||
|
if let Err(err) = client.generate_key() {
|
||||||
|
return Err(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Ok(client)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ### make_bookmark
|
||||||
|
///
|
||||||
|
/// Make bookmark from credentials
|
||||||
|
pub fn make_bookmark(&self, addr: String, port: u16, protocol: FileTransferProtocol, username: String, password: Option<String>) -> Bookmark {
|
||||||
|
// TODO: crypt password
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ### write_bookmarks
|
||||||
|
///
|
||||||
|
/// Write bookmarks to file
|
||||||
|
pub fn write_bookmarks(&self) -> Result<(), SerializerError> {
|
||||||
|
// Open file
|
||||||
|
match OpenOptions::new()
|
||||||
|
.create(true)
|
||||||
|
.write(true)
|
||||||
|
.truncate(true)
|
||||||
|
.open(self.bookmarks_file.as_path())
|
||||||
|
{
|
||||||
|
Ok(writer) => {
|
||||||
|
let serializer: BookmarkSerializer = BookmarkSerializer {};
|
||||||
|
serializer.serialize(Box::new(writer), &self.hosts)
|
||||||
|
}
|
||||||
|
Err(err) => Err(SerializerError::new_ex(
|
||||||
|
SerializerErrorKind::IoError,
|
||||||
|
err.to_string(),
|
||||||
|
)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ### generate_key
|
||||||
|
///
|
||||||
|
/// Generate a new AES key and write it to key file
|
||||||
|
fn generate_key(&self) -> Result<(), SerializerError> {
|
||||||
|
// TODO: write
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
//! ## Environment
|
||||||
|
//!
|
||||||
|
//! `environment` is the module which provides Path and values for the system environment
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (C) 2020 Christian Visintin - christian.visintin1997@gmail.com
|
||||||
|
*
|
||||||
|
* This file is part of "TermSCP"
|
||||||
|
*
|
||||||
|
* TermSCP is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* TermSCP is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with TermSCP. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Deps
|
||||||
|
extern crate dirs;
|
||||||
|
|
||||||
|
// Ext
|
||||||
|
use std::path::PathBuf;
|
||||||
|
|
||||||
|
/// ### get_config_dir
|
||||||
|
///
|
||||||
|
/// Get termscp configuration directory path.
|
||||||
|
/// Returns None, if it's not possible to get it
|
||||||
|
pub fn init_config_dir() -> Result<Option<PathBuf>, String> {
|
||||||
|
// Get file
|
||||||
|
lazy_static! {
|
||||||
|
static ref CONF_DIR: Option<PathBuf> = dirs::config_dir();
|
||||||
|
}
|
||||||
|
if CONF_DIR.is_some() {
|
||||||
|
// Get path of bookmarks
|
||||||
|
let mut p: PathBuf = CONF_DIR.as_ref().unwrap().clone();
|
||||||
|
// Append termscp dir
|
||||||
|
p.push("termscp/");
|
||||||
|
// If directory doesn't exist, create it
|
||||||
|
match p.exists() {
|
||||||
|
true => Ok(Some(p)),
|
||||||
|
false => match std::fs::create_dir(p.as_path()) {
|
||||||
|
Ok(_) => Ok(Some(p)),
|
||||||
|
Err(err) => Err(err.to_string()),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Ok(None)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_system_environment_get_config_dir() {
|
||||||
|
assert!(init_config_dir().ok().unwrap().is_some());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
//! ## System
|
||||||
|
//!
|
||||||
|
//! `system` is the module which contains functions and data types related to current system
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (C) 2020 Christian Visintin - christian.visintin1997@gmail.com
|
||||||
|
*
|
||||||
|
* This file is part of "TermSCP"
|
||||||
|
*
|
||||||
|
* TermSCP is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* TermSCP is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with TermSCP. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
// modules
|
||||||
|
pub mod bookmarks_client;
|
||||||
|
pub mod environment;
|
||||||
Reference in New Issue
Block a user