]> git.proxmox.com Git - proxmox-backup.git/blob - src/bin/proxmox-backup-api.rs
src/bin/proxmox-backup-proxy.rs: implement unpriviledged server
[proxmox-backup.git] / src / bin / proxmox-backup-api.rs
1 extern crate proxmox_backup;
2
3 use std::sync::Arc;
4
5 use proxmox_backup::api::schema::*;
6 use proxmox_backup::api::router::*;
7 use proxmox_backup::api::config::*;
8 use proxmox_backup::server::rest::*;
9 use proxmox_backup::getopts;
10
11 //use failure::*;
12 use lazy_static::lazy_static;
13
14 use futures::future::Future;
15
16 use hyper;
17
18 fn main() {
19
20 if let Err(err) = syslog::init(
21 syslog::Facility::LOG_DAEMON,
22 log::LevelFilter::Info,
23 Some("proxmox-backup-api")) {
24 eprintln!("unable to inititialize syslog: {}", err);
25 std::process::exit(-1);
26 }
27
28 let command : Arc<Schema> = StringSchema::new("Command.")
29 .format(Arc::new(ApiStringFormat::Enum(vec![
30 "start".into(),
31 "status".into(),
32 "stop".into()
33 ])))
34 .into();
35
36 let schema = ObjectSchema::new("Parameters.")
37 .required("command", command);
38
39 let args: Vec<String> = std::env::args().skip(1).collect();
40
41 let options = match getopts::parse_arguments(&args, &vec!["command"], &schema) {
42 Ok((options, rest)) => {
43 if !rest.is_empty() {
44 eprintln!("Error: got additional arguments: {:?}", rest);
45 std::process::exit(-1);
46 }
47 options
48 }
49 Err(err) => {
50 eprintln!("Error: unable to parse arguments:\n{}", err);
51 std::process::exit(-1);
52 }
53 };
54
55 let command = options["command"].as_str().unwrap();
56
57 match command {
58 "start" => {
59 println!("Starting server.");
60 },
61 "stop" => {
62 println!("Stopping server.");
63 std::process::exit(0);
64 },
65 "status" => {
66 println!("Server status.");
67 std::process::exit(0);
68 },
69 _ => {
70 eprintln!("got unexpected command {}", command);
71 std::process::exit(-1);
72 },
73 }
74
75 let addr = ([127,0,0,1], 82).into();
76
77 lazy_static!{
78 static ref ROUTER: Router = proxmox_backup::api2::router();
79 }
80
81 let config = ApiConfig::new(
82 "/usr/share/javascript/proxmox-backup", &ROUTER, RpcEnvironmentType::PRIVILEDGED);
83
84 let rest_server = RestServer::new(config);
85
86 let server = hyper::Server::bind(&addr)
87 .serve(rest_server)
88 .map_err(|e| eprintln!("server error: {}", e));
89
90
91 // Run this server for... forever!
92 hyper::rt::run(server);
93 }