changed the daemonize
This commit is contained in:
parent
651b9ba5cd
commit
c8c618015a
10
Cargo.lock
generated
10
Cargo.lock
generated
@ -558,6 +558,15 @@ dependencies = [
|
|||||||
"typenum",
|
"typenum",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "daemonize"
|
||||||
|
version = "0.5.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ab8bfdaacb3c887a54d41bdf48d3af8873b3f5566469f8ba21b92057509f116e"
|
||||||
|
dependencies = [
|
||||||
|
"libc",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "darling"
|
name = "darling"
|
||||||
version = "0.20.11"
|
version = "0.20.11"
|
||||||
@ -2007,6 +2016,7 @@ dependencies = [
|
|||||||
"clap 4.5.60",
|
"clap 4.5.60",
|
||||||
"crc",
|
"crc",
|
||||||
"crc32fast",
|
"crc32fast",
|
||||||
|
"daemonize",
|
||||||
"dashmap 6.1.0",
|
"dashmap 6.1.0",
|
||||||
"dns-lookup",
|
"dns-lookup",
|
||||||
"etherparse",
|
"etherparse",
|
||||||
|
|||||||
@ -35,6 +35,7 @@ rustls-pemfile = "2.2.0"
|
|||||||
clap = { version = "4.5.60", features = ["derive", "env"] }
|
clap = { version = "4.5.60", features = ["derive", "env"] }
|
||||||
rpassword = "7.4.0"
|
rpassword = "7.4.0"
|
||||||
serde_json = "1.0.149"
|
serde_json = "1.0.149"
|
||||||
|
daemonize = "0.5.0"
|
||||||
# rolling-file = { path = "../rolling-file" }
|
# rolling-file = { path = "../rolling-file" }
|
||||||
|
|
||||||
[target.'cfg(unix)'.dependencies]
|
[target.'cfg(unix)'.dependencies]
|
||||||
|
|||||||
@ -1,9 +1,11 @@
|
|||||||
mod api;
|
mod api;
|
||||||
|
|
||||||
|
use std::fs::File;
|
||||||
use std::process;
|
use std::process;
|
||||||
|
|
||||||
use std::env;
|
use std::env;
|
||||||
use clap::Parser;
|
use clap::Parser;
|
||||||
|
use daemonize::Daemonize;
|
||||||
use punchnet::CachedLoginInfo;
|
use punchnet::CachedLoginInfo;
|
||||||
use punchnet::CommandLineInput2;
|
use punchnet::CommandLineInput2;
|
||||||
use punchnet::Commands;
|
use punchnet::Commands;
|
||||||
@ -21,6 +23,7 @@ use punchnet::CommandLine;
|
|||||||
use punchnet::CommandLineInput;
|
use punchnet::CommandLineInput;
|
||||||
use sdlan_sn_rs::log;
|
use sdlan_sn_rs::log;
|
||||||
|
|
||||||
|
use sdlan_sn_rs::utils::Mac;
|
||||||
use sdlan_sn_rs::utils::Result;
|
use sdlan_sn_rs::utils::Result;
|
||||||
use sdlan_sn_rs::utils::create_or_load_uuid;
|
use sdlan_sn_rs::utils::create_or_load_uuid;
|
||||||
use tokio::io::AsyncWriteExt;
|
use tokio::io::AsyncWriteExt;
|
||||||
@ -95,81 +98,12 @@ fn parse_login_result(res: Result<LoginResponse>) -> LoginData {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tokio::main]
|
async fn daemonize_me(
|
||||||
async fn main() {
|
connect_info: ConnectData,
|
||||||
set_base_dir("/usr/local/punchnet");
|
remembered: CachedLoginInfo,
|
||||||
let _guard = log::init_log(&format!("{}/.output", get_base_dir()));
|
client_id: String,
|
||||||
|
mac: Mac,
|
||||||
let client_id = create_or_load_uuid(&format!("{}/.id", get_base_dir()), None).unwrap();
|
) {
|
||||||
|
|
||||||
let test_token = "49722584273728716817720074439183";
|
|
||||||
|
|
||||||
let mac = create_or_load_mac();
|
|
||||||
|
|
||||||
let system = "linux";
|
|
||||||
let version = "1.0.0";
|
|
||||||
|
|
||||||
// let cmd = CommandLineInput::from_args();
|
|
||||||
let cmd = CommandLineInput2::parse();
|
|
||||||
// println!("port is {}", cmd.port);
|
|
||||||
|
|
||||||
let connect_info: ConnectData;
|
|
||||||
let remembered: CachedLoginInfo;
|
|
||||||
|
|
||||||
match cmd.cmd {
|
|
||||||
Commands::Login(user) => {
|
|
||||||
// TODO: do login with user
|
|
||||||
let _ = parse_login_result(
|
|
||||||
login_with_user_pass(TEST_PREFIX, &client_id, &user.username, &user.password, mac, system, version).await
|
|
||||||
);
|
|
||||||
process::exit(0);
|
|
||||||
}
|
|
||||||
Commands::TokenLogin(tk) => {
|
|
||||||
let _ = parse_login_result(
|
|
||||||
login_with_token(TEST_PREFIX, &client_id, &tk.token, mac, system, version).await
|
|
||||||
);
|
|
||||||
process::exit(0);
|
|
||||||
}
|
|
||||||
Commands::AutoRun(tk) => {
|
|
||||||
let mut remembered_token = get_access_token();
|
|
||||||
if remembered_token.is_none() {
|
|
||||||
let data = parse_login_result(
|
|
||||||
login_with_token(TEST_PREFIX, &client_id, &tk.token, mac, system, version).await
|
|
||||||
);
|
|
||||||
remembered_token = Some(CachedLoginInfo{
|
|
||||||
access_token: data.access_token,
|
|
||||||
username: data.username,
|
|
||||||
user_type: data.user_type,
|
|
||||||
audit: data.audit,
|
|
||||||
network_id: data.network_id,
|
|
||||||
network_name: data.network_name,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
remembered = remembered_token.unwrap();
|
|
||||||
|
|
||||||
connect_info = parse_connect_result(
|
|
||||||
connect(TEST_PREFIX, &client_id, &remembered.access_token).await
|
|
||||||
);
|
|
||||||
}
|
|
||||||
Commands::Start => {
|
|
||||||
let remembered_token = get_access_token();
|
|
||||||
if remembered_token.is_none() {
|
|
||||||
eprintln!("not logged in, should login with user/pass or token first");
|
|
||||||
process::exit(-2);
|
|
||||||
}
|
|
||||||
|
|
||||||
remembered = remembered_token.unwrap();
|
|
||||||
|
|
||||||
connect_info = parse_connect_result(
|
|
||||||
connect(TEST_PREFIX, &client_id, &remembered.access_token).await
|
|
||||||
);
|
|
||||||
}
|
|
||||||
Commands::Stop => {
|
|
||||||
process::exit(-4);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
println!("identity_id = {}", connect_info.identity_id);
|
println!("identity_id = {}", connect_info.identity_id);
|
||||||
|
|
||||||
let self_host_name = connect_info.hostname;
|
let self_host_name = connect_info.hostname;
|
||||||
@ -318,4 +252,108 @@ async fn main() {
|
|||||||
// started = !started;
|
// started = !started;
|
||||||
// */
|
// */
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::main]
|
||||||
|
async fn main() {
|
||||||
|
set_base_dir("/usr/local/punchnet");
|
||||||
|
let _guard = log::init_log(&format!("{}/.output", get_base_dir()));
|
||||||
|
|
||||||
|
let client_id = create_or_load_uuid(&format!("{}/.id", get_base_dir()), None).unwrap();
|
||||||
|
|
||||||
|
let test_token = "49722584273728716817720074439183";
|
||||||
|
|
||||||
|
let mac = create_or_load_mac();
|
||||||
|
|
||||||
|
let system = "linux";
|
||||||
|
let version = "1.0.0";
|
||||||
|
|
||||||
|
// let cmd = CommandLineInput::from_args();
|
||||||
|
let cmd = CommandLineInput2::parse();
|
||||||
|
// println!("port is {}", cmd.port);
|
||||||
|
|
||||||
|
let connect_info: ConnectData;
|
||||||
|
let remembered: CachedLoginInfo;
|
||||||
|
|
||||||
|
let should_daemonize: bool;
|
||||||
|
|
||||||
|
match cmd.cmd {
|
||||||
|
Commands::Login(user) => {
|
||||||
|
// TODO: do login with user
|
||||||
|
let _ = parse_login_result(
|
||||||
|
login_with_user_pass(TEST_PREFIX, &client_id, &user.username, &user.password, mac, system, version).await
|
||||||
|
);
|
||||||
|
process::exit(0);
|
||||||
|
}
|
||||||
|
Commands::TokenLogin(tk) => {
|
||||||
|
let _ = parse_login_result(
|
||||||
|
login_with_token(TEST_PREFIX, &client_id, &tk.token, mac, system, version).await
|
||||||
|
);
|
||||||
|
process::exit(0);
|
||||||
|
}
|
||||||
|
Commands::AutoRun(tk) => {
|
||||||
|
let mut remembered_token = get_access_token();
|
||||||
|
if remembered_token.is_none() {
|
||||||
|
let data = parse_login_result(
|
||||||
|
login_with_token(TEST_PREFIX, &client_id, &tk.token, mac, system, version).await
|
||||||
|
);
|
||||||
|
remembered_token = Some(CachedLoginInfo{
|
||||||
|
access_token: data.access_token,
|
||||||
|
username: data.username,
|
||||||
|
user_type: data.user_type,
|
||||||
|
audit: data.audit,
|
||||||
|
network_id: data.network_id,
|
||||||
|
network_name: data.network_name,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
remembered = remembered_token.unwrap();
|
||||||
|
|
||||||
|
connect_info = parse_connect_result(
|
||||||
|
connect(TEST_PREFIX, &client_id, &remembered.access_token).await
|
||||||
|
);
|
||||||
|
should_daemonize = false;
|
||||||
|
}
|
||||||
|
Commands::Start => {
|
||||||
|
let remembered_token = get_access_token();
|
||||||
|
if remembered_token.is_none() {
|
||||||
|
eprintln!("not logged in, should login with user/pass or token first");
|
||||||
|
process::exit(-2);
|
||||||
|
}
|
||||||
|
|
||||||
|
remembered = remembered_token.unwrap();
|
||||||
|
|
||||||
|
connect_info = parse_connect_result(
|
||||||
|
connect(TEST_PREFIX, &client_id, &remembered.access_token).await
|
||||||
|
);
|
||||||
|
should_daemonize = false;
|
||||||
|
}
|
||||||
|
Commands::Stop => {
|
||||||
|
process::exit(-4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if should_daemonize {
|
||||||
|
let daemonize = Daemonize::new()
|
||||||
|
.pid_file("/tmp/punchnet.pid")
|
||||||
|
.chown_pid_file(true)
|
||||||
|
.working_directory(get_base_dir())
|
||||||
|
.stdout(File::create("/tmp/punchnet.out").unwrap())
|
||||||
|
.stderr(File::create("/tmp/punchnet.err").unwrap())
|
||||||
|
.privileged_action(|| {
|
||||||
|
|
||||||
|
});
|
||||||
|
match daemonize.start() {
|
||||||
|
Ok(_) => {
|
||||||
|
daemonize_me(connect_info, remembered, client_id, mac).await;
|
||||||
|
}
|
||||||
|
Err(e) => {
|
||||||
|
eprintln!("failed to daemonize: {}", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
daemonize_me(connect_info, remembered, client_id, mac).await;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user