36 lines
880 B
Rust
36 lines
880 B
Rust
use std::fs::File;
|
|||
|
|
use std::io::{BufRead, BufReader};
|
||
|
|
|
||
|
|
use crate::options::OPTIONS;
|
||
|
|
use crate::server::{Handler, Request};
|
||
|
|
|
||
|
|
pub struct FileHandler;
|
||
|
|
|
||
|
|
|
||
|
|
impl FileHandler {
|
||
|
|
pub fn new() -> FileHandler {}
|
||
|
|
}
|
||
|
|
|
||
|
|
impl Handler for FileHandler {
|
||
|
|
pub fn check_auth(&request: Request) -> bool {
|
||
|
|
// Don't allow empty userids or passwords
|
||
|
|
//
|
||
|
|
if request.userid.is_empty() || request.userid.contains('/') || request.password.is_empty() {
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
|
||
|
|
let mut file_name = OPTIONS.password_dir.clone();
|
||
|
|
file_name.push(request.userid);
|
||
|
|
|
||
|
|
if let Ok(file) = File::open(file_name) {
|
||
|
|
for line in BufReader::new(file).lines().flatten() {
|
||
|
|
if !line.starts_with('#') && line.trim() == request.password {
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
false
|
||
|
|
}
|
||
|
|
}
|