Initial codebase structure

- Complete Gemini server implementation with logging
- Add comprehensive documentation (README.md, AGENTS.md)
- Implement certificate management guidelines
- Add .gitignore for security and build artifacts
- All unit tests passing (14/14)
- Ready for production deployment
This commit is contained in:
Jeena 2026-01-15 08:21:37 +09:00
commit 1ed443ff2a
10 changed files with 639 additions and 0 deletions

28
src/tls.rs Normal file
View file

@ -0,0 +1,28 @@
use std::fs;
use std::io::{self, BufReader};
pub fn load_certs(filename: &str) -> io::Result<Vec<rustls::Certificate>> {
let certfile = fs::File::open(filename)?;
let mut reader = BufReader::new(certfile);
rustls_pemfile::certs(&mut reader)?
.into_iter()
.map(|v| Ok(rustls::Certificate(v)))
.collect()
}
pub fn load_private_key(filename: &str) -> io::Result<rustls::PrivateKey> {
let keyfile = fs::File::open(filename)?;
let mut reader = BufReader::new(keyfile);
loop {
match rustls_pemfile::read_one(&mut reader)? {
Some(rustls_pemfile::Item::RSAKey(key)) => return Ok(rustls::PrivateKey(key)),
Some(rustls_pemfile::Item::PKCS8Key(key)) => return Ok(rustls::PrivateKey(key)),
Some(rustls_pemfile::Item::ECKey(key)) => return Ok(rustls::PrivateKey(key)),
None => break,
_ => {}
}
}
Err(io::Error::new(io::ErrorKind::InvalidData, "No supported private key found"))
}