diff --git a/src/config.rs b/src/config.rs index 14b4c7c..1528ff9 100644 --- a/src/config.rs +++ b/src/config.rs @@ -27,12 +27,13 @@ pub struct LauncherConfig { pub show_snapshots: bool, pub ram_amount: u32, pub enable_blur: bool, + pub allow_http: bool, servers: Vec } impl Default for LauncherConfig { fn default() -> Self { - Self { is_portable: Default::default(), user_name: Default::default(), java_path: "java".to_string(), show_alpha: true, show_beta: true, show_snapshots: false, ram_amount: 1024, servers: Default::default(), enable_blur: Default::default() } + Self { is_portable: Default::default(), user_name: Default::default(), java_path: "java".to_string(), show_alpha: true, show_beta: true, show_snapshots: false, ram_amount: 1024, servers: Default::default(), enable_blur: Default::default(), allow_http: Default::default() } } } diff --git a/src/launcher.rs b/src/launcher.rs index a2bf913..aae4fc1 100644 --- a/src/launcher.rs +++ b/src/launcher.rs @@ -97,7 +97,7 @@ impl Launcher { println!("Server information: {}:{} session={}", domain, server_port, session_server_port); - match minecraft::session::try_signup(domain.clone(), session_server_port, username.clone(), password.clone()).await { + match minecraft::session::try_signup(domain.clone(), session_server_port, username.clone(), password.clone(), self.config.allow_http).await { Ok(status) => match status { SignUpResponse::ServerError => (false, "Internal server error"), SignUpResponse::BadCredentials => (false, "Username or password is not valid"), @@ -170,9 +170,14 @@ impl Launcher { v } - pub async fn launch_instance(&self, instance_name: String, mut username: String, mut uuid: String, mut token: String, sender: UnboundedSender, special_server: Option<&LauncherServer> ) { + pub async fn launch_instance(&self, instance_name: String, sender: UnboundedSender, special_server: Option<&LauncherServer> ) { + + let mut username = self.config.user_name(); + let mut uuid = util::random_string(32); + let mut token = util::random_string(32); + if let Some(server) = special_server { - username = server.credentials.username.clone(); + username = &server.credentials.username; uuid = server.credentials.uuid.clone(); token = server.credentials.password.clone(); } @@ -237,7 +242,7 @@ impl Launcher { let mut patched_auth = self.config.launcher_dir(); patched_auth.push("libraries"); patched_auth.push(library.to_pathbuf_file(true)); - let _ = nicotine::patch_jar(libs.to_str().unwrap(), patched_auth.to_str().unwrap(), &["http://", &server.domain, ":", &server.session_server_port.to_string(), "/api/"].concat()); + let _ = nicotine::patch_jar(libs.to_str().unwrap(), patched_auth.to_str().unwrap(), &[if self.config.allow_http { "http://" } else { "https://" }, &server.domain, ":", &server.session_server_port.to_string(), "/api/"].concat()); libraries_cmd.push([patched_auth.to_str().unwrap(), ";"].concat()); println!("{:?}", patched_auth.to_str().unwrap()); continue; @@ -258,7 +263,7 @@ impl Launcher { let mut assets_dir = self.config.launcher_dir(); assets_dir.push("assets"); - cmd.args(["--username", &username, "--version", &instance_name, "--gameDir", game_dir.to_str().unwrap(), "--assetsDir", assets_dir.to_str().unwrap(), "--assetIndex", &config.assetIndex.id, "--uuid", &uuid, "--accessToken", &token, "--userProperties", "{}", "--userType", "mojang", "--width", "925", "--height", "530"]); + cmd.args(["--username", username, "--version", &instance_name, "--gameDir", game_dir.to_str().unwrap(), "--assetsDir", assets_dir.to_str().unwrap(), "--assetIndex", &config.assetIndex.id, "--uuid", &uuid, "--accessToken", &token, "--userProperties", "{}", "--userType", "mojang", "--width", "925", "--height", "530"]); if let Some(server) = special_server { cmd.arg("--server"); cmd.arg(&server.domain); diff --git a/src/main.rs b/src/main.rs index 02fb38c..24c0e77 100644 --- a/src/main.rs +++ b/src/main.rs @@ -178,7 +178,7 @@ async fn main() { let instance_name = params.unwrap().params[0].clone(); logs_rec.close(); (lx, logs_rec) = mpsc::unbounded_channel(); - launcher.launch_instance(instance_name, launcher.config.user_name().to_string(), util::random_string(32), util::random_string(32), lx.clone(), None).await; + launcher.launch_instance(instance_name, lx.clone(), None).await; } "run_server_instance" => { let params = params.unwrap().params; @@ -188,7 +188,7 @@ async fn main() { logs_rec.close(); (lx, logs_rec) = mpsc::unbounded_channel(); let s = launcher.config.servers().iter().find(|s| s.domain == domain && s.credentials.username == nickname); - launcher.launch_instance(instance_name, launcher.config.user_name().to_string(), util::random_string(32), util::random_string(32), lx.clone(), s).await; + launcher.launch_instance(instance_name, lx.clone(), s).await; } "locate_java" => { if let Ok(java_path) = java_locator::locate_file("java.exe") { @@ -204,7 +204,7 @@ async fn main() { responder.respond(Response::new(serde_json::to_vec(&UIMessage { params: vec!["add_server_response".to_string(), status.to_string(), msg.to_string()] }).unwrap())); } "fetch_settings" => { - responder.respond(Response::new(serde_json::to_vec(&UIMessage { params: vec!["fetch_settings_response".to_string(), launcher.config.show_alpha.to_string(), launcher.config.show_beta.to_string(), launcher.config.show_snapshots.to_string(), launcher.config.java_path.clone(), launcher.config.ram_amount.to_string(), launcher.config.enable_blur.to_string()] }).unwrap())); + responder.respond(Response::new(serde_json::to_vec(&UIMessage { params: vec!["fetch_settings_response".to_string(), launcher.config.show_alpha.to_string(), launcher.config.show_beta.to_string(), launcher.config.show_snapshots.to_string(), launcher.config.java_path.clone(), launcher.config.ram_amount.to_string(), launcher.config.enable_blur.to_string(), launcher.config.allow_http.to_string()] }).unwrap())); } "save_bg" => { let params = ¶ms.unwrap().params; @@ -227,6 +227,7 @@ async fn main() { launcher.config.show_beta = params[1].parse().unwrap(); launcher.config.show_snapshots = params[2].parse().unwrap(); launcher.config.enable_blur = params[5].parse().unwrap(); + launcher.config.allow_http = params[6].parse().unwrap(); launcher.save_config(); } "open_file" => { diff --git a/src/minecraft.rs b/src/minecraft.rs index 27c71f5..b5e9d01 100644 --- a/src/minecraft.rs +++ b/src/minecraft.rs @@ -179,9 +179,9 @@ pub mod session { uuid: String } - pub async fn try_signup(server_domain: String, port: u16, username: String, password: String) -> Result> { + pub async fn try_signup(server_domain: String, port: u16, username: String, password: String, allow_http: bool) -> Result> { let request = SignUpRequest { username, password }; - let mut r = surf::post(["http://".to_string(), server_domain, ":".to_string(), port.to_string(), "/api/register".to_string()].concat()) + let mut r = surf::post([if allow_http { "http://".to_string() } else { "https://".to_string() }, server_domain, ":".to_string(), port.to_string(), "/api/register".to_string()].concat()) .body_json(&request) .unwrap() .await?; diff --git a/src/www/portable.html b/src/www/portable.html index 321fde9..6d7de0e 100644 --- a/src/www/portable.html +++ b/src/www/portable.html @@ -268,6 +268,13 @@ Show snapshots +
+ +