|
|
|
extern crate gempress;
|
|
|
|
extern crate dotenv;
|
|
|
|
#[macro_use] extern crate diesel;
|
|
|
|
|
|
|
|
use std::path::PathBuf;
|
|
|
|
use std::env;
|
|
|
|
|
|
|
|
use gempress::Gempress;
|
|
|
|
use gempress::error::GempressResult;
|
|
|
|
use gempress::gemini;
|
|
|
|
use gempress::gemini::StatusCode;
|
|
|
|
|
|
|
|
use diesel::prelude::*;
|
|
|
|
use diesel::sqlite::SqliteConnection;
|
|
|
|
|
|
|
|
use self::models::*;
|
|
|
|
|
|
|
|
pub mod models;
|
|
|
|
pub mod schema;
|
|
|
|
|
|
|
|
pub fn establish_connection() -> SqliteConnection {
|
|
|
|
dotenv::dotenv().ok();
|
|
|
|
|
|
|
|
let database_url = env::var("DATABASE_URL")
|
|
|
|
.expect("DATABASE_URL must be set");
|
|
|
|
SqliteConnection::establish(&database_url)
|
|
|
|
.expect(&format!("Error connecting to {}", database_url))
|
|
|
|
}
|
|
|
|
|
|
|
|
fn index_handler(req: Box<gemini::Request>, mut res: Box<gemini::Response>) -> GempressResult<()>{
|
|
|
|
let response = format!(r#"
|
|
|
|
# Astrofarm
|
|
|
|
Hello, {}
|
|
|
|
"#, "user");
|
|
|
|
|
|
|
|
res.status(StatusCode::Success)?.send(response.as_bytes())?;
|
|
|
|
Ok(())
|
|
|
|
}
|
|
|
|
|
|
|
|
fn add_user_handler(req: Box<gemini::Request>, mut res: Box<gemini::Response>) -> GempressResult<()>{
|
|
|
|
use self::schema::users::dsl::*;
|
|
|
|
|
|
|
|
let conn = establish_connection();
|
|
|
|
|
|
|
|
let new_user = NewUser {
|
|
|
|
name: "Foo".into(),
|
|
|
|
};
|
|
|
|
|
|
|
|
diesel::insert_into(users).values(new_user).execute(&conn);
|
|
|
|
|
|
|
|
let user: User = users
|
|
|
|
.order(id.desc())
|
|
|
|
.first(&conn)
|
|
|
|
.expect("Error loading posts");
|
|
|
|
|
|
|
|
let response = format!(r#"
|
|
|
|
# User inserted
|
|
|
|
User "{}" created. ID: {}
|
|
|
|
"#, user.name, user.id);
|
|
|
|
|
|
|
|
res.status(StatusCode::Success)?.send(response.as_bytes())?;
|
|
|
|
Ok(())
|
|
|
|
}
|
|
|
|
|
|
|
|
fn show_users_handler(req: Box<gemini::Request>, mut res: Box<gemini::Response>) -> GempressResult<()>{
|
|
|
|
use self::schema::users::dsl::*;
|
|
|
|
|
|
|
|
let conn = establish_connection();
|
|
|
|
|
|
|
|
let results = users
|
|
|
|
.load::<User>(&conn)
|
|
|
|
.expect("Error loading posts");
|
|
|
|
|
|
|
|
let mut response = "# Users\n\n".to_string();
|
|
|
|
|
|
|
|
for user in results {
|
|
|
|
response += &format!("{}: {}\n", user.id, user.name);
|
|
|
|
};
|
|
|
|
|
|
|
|
res.status(StatusCode::Success)?.send(response.as_bytes())?;
|
|
|
|
Ok(())
|
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
// Run make_cert.sh to generate a certificate
|
|
|
|
let config = gempress::Config::new(PathBuf::from("cert.pem"), PathBuf::from("key.pem"));
|
|
|
|
|
|
|
|
let conn = establish_connection();
|
|
|
|
|
|
|
|
let mut app = Gempress::new(config);
|
|
|
|
|
|
|
|
app.on("/", &show_users_handler);
|
|
|
|
app.on("/add_user", &add_user_handler);
|
|
|
|
|
|
|
|
app.listen(1965, || {
|
|
|
|
println!("Listening on port 1965");
|
|
|
|
})
|
|
|
|
.unwrap();
|
|
|
|
}
|