ic_storage_module/
storage_show_command.rs

1use intel_cache_lib::ic_types::IcPacket; 
2use intel_cache_lib::lib_backend::show_entries;
3use intel_cache_lib::lib_backend::show_dirs;
4use intel_cache_lib::lib_backend::validate_dir;
5use intel_cache_lib::ic_types::ic_execute_mod::IcExecute;
6use intel_cache_lib::ic_types::IcConnection;
7use intel_cache_lib::ic_types::IcLoginDetails;
8
9pub struct StorageShow { }
10impl StorageShow {
11	#[no_mangle]
12	pub fn ss_new() -> StorageShow {
13		StorageShow {}
14	}
15	
16	#[no_mangle]
17	pub fn ss_to_exe() -> Box<dyn IcExecute<Connection = IcConnection>> {
18		Box::new(StorageShow::ss_new())
19	}
20}
21impl IcExecute for StorageShow {
22	type Connection = IcConnection;
23	
24	fn exec(&mut self,con: &mut Self::Connection, cmd: Option<Vec<String>>, _data: Option<Vec<u8>>,_cached: bool) -> IcPacket {
25		//SHOW [<DIR ID>] <COOKIE>
26		println!("{:?}",cmd.as_ref().unwrap_or(&vec!["NONE".to_string()]));
27		let mut retstr: String;
28		let c: Vec<String>;
29		if cmd != None {
30			c = cmd.unwrap();
31		} else { return IcPacket::new_denied(); }
32		
33		if c.len() > 2 { //STORAGE SHOW <ID> <COOKIE>
34			if c[2] == (con.login).as_ref().unwrap_or(&IcLoginDetails { username: "NONE".to_string(), id: "NONE".to_string(), cookie: "NONE".to_string()}).cookie && c[2] != "NONE".to_string(){
35				let si = match c[1].parse::<i32>() {
36					Ok(v) => match validate_dir(&con.backend_con,v) {
37						Some(_iv) => {println!("VALIDATED");Some(v)},
38						None => return IcPacket::new(Some(format!("Error validating id {}",v).to_string()),None),
39					},
40					Err(_err) => return IcPacket::new(Some("Error parsing second argument..".to_string()),None)
41				};
42
43				if c.len() == 3 && si != None {
44					println!("clen3sinotnone");
45					retstr = show_dirs(&con.backend_con,Some(si.unwrap()),&(con.login).as_ref().unwrap().id,true);
46					retstr += &show_entries(&con.backend_con,Some(false),Some(true),Some(si.unwrap()),&(con.login).as_ref().unwrap().id,true);
47				} else if c.len() == 3 {
48					println!("clen3sinone");
49					retstr = show_dirs(&con.backend_con,None,&(con.login).as_ref().unwrap().id,true);
50					retstr += &show_entries(&con.backend_con,Some(false),Some(true),None,&(con.login).as_ref().unwrap().id,true);
51				} else { return IcPacket::new(Some("Error: argument count isn't 3.".to_string()),None) }
52				IcPacket::new(Some("OK!".to_string()),Some(retstr.as_bytes().to_vec()))
53			} else { IcPacket::new_denied() }
54		} else if c.len() == 2{ //STORAGE SHOW
55			if c[1] == (con.login).as_ref().unwrap_or(&IcLoginDetails { username: "NONE".to_string(), id: "NONE".to_string(), cookie: "NONE".to_string()}).cookie && c[1] != "NONE".to_string(){
56				retstr = show_dirs(&con.backend_con,None,&(con.login).as_ref().unwrap().id,true);
57				retstr += &show_entries(&con.backend_con,Some(false),Some(true),None,&(con.login).as_ref().unwrap().id,true);
58				IcPacket::new(Some("OK!".to_string()),Some(retstr.as_bytes().to_vec()))
59			} else { IcPacket::new_denied() }
60		} else {
61			return IcPacket::new_denied();
62		}
63	}
64	
65	fn login_required(&mut self) -> bool {
66		true
67	}
68}