Backport: Impl passing password via file

This commit is contained in:
Stephen Seo 2023-03-02 21:33:01 +09:00
parent d576a0ff8c
commit 3064784139

View file

@ -10,6 +10,8 @@ use ggez::event::{self, ControlFlow, EventHandler};
use ggez::filesystem::mount; use ggez::filesystem::mount;
use ggez::graphics::{self, Rect}; use ggez::graphics::{self, Rect};
use ggez::{ContextBuilder, GameError}; use ggez::{ContextBuilder, GameError};
use std::fs::File;
use std::io::Read;
use std::net::Ipv4Addr; use std::net::Ipv4Addr;
use std::path::PathBuf; use std::path::PathBuf;
use std::thread; use std::thread;
@ -36,6 +38,8 @@ pub struct Opt {
disable_show_filename: bool, disable_show_filename: bool,
#[structopt(long = "pprompt", help = "input password via prompt")] #[structopt(long = "pprompt", help = "input password via prompt")]
enable_prompt_password: bool, enable_prompt_password: bool,
#[structopt(long = "pfile", help = "read password from file")]
password_file: Option<PathBuf>,
#[structopt( #[structopt(
long = "no-scale-fill", long = "no-scale-fill",
help = "don't scale-fill the album art to the window" help = "don't scale-fill the album art to the window"
@ -59,9 +63,26 @@ pub struct Opt {
} }
fn main() -> Result<(), String> { fn main() -> Result<(), String> {
let opt = Opt::from_args(); let mut opt = Opt::from_args();
println!("Got host addr == {}, port == {}", opt.host, opt.port); println!("Got host addr == {}, port == {}", opt.host, opt.port);
// Read password from file if exists, error otherwise.
if let Some(psswd_file_path) = opt.password_file.as_ref() {
let mut file = File::open(psswd_file_path).expect("pfile/password_file should exist");
let mut content: String = String::new();
file.read_to_string(&mut content)
.expect("Should be able to read from pfile/password_file");
if content.ends_with("\r\n") {
content.truncate(content.len() - 2);
} else if content.ends_with('\n') {
content.truncate(content.len() - 1);
}
opt.password = Some(content);
}
let (mut ctx, event_loop) = ContextBuilder::new("mpd_info_screen", "Stephen Seo") let (mut ctx, event_loop) = ContextBuilder::new("mpd_info_screen", "Stephen Seo")
.window_setup(WindowSetup { .window_setup(WindowSetup {
title: "mpd info screen".into(), title: "mpd info screen".into(),