You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
99 lines
2.4 KiB
99 lines
2.4 KiB
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(); |
|
}
|
|
|