feat: basic setup[ of the webserver

This commit is contained in:
silver 2023-05-26 00:02:12 +01:00
parent 0da50263b8
commit fe69e0cc9c
3 changed files with 122 additions and 12 deletions

2
.gitignore vendored
View file

@ -1,3 +1,5 @@
/target /target
/.idea /.idea
.env

44
src/lib.rs Normal file
View file

@ -0,0 +1,44 @@
use sqlx::sqlite::{SqliteConnectOptions, SqlitePoolOptions};
use sqlx::{Error, Pool, Sqlite};
use std::str::FromStr;
use std::time::{SystemTime, UNIX_EPOCH};
use tide::prelude::*;
pub async fn db_init(database: &str) -> Result<Pool<Sqlite>, Error> {
let pool = SqlitePoolOptions::new()
.max_connections(5)
.connect_with(SqliteConnectOptions::from_str(&format!("sqlite://{}", database))?.create_if_missing(true))
.await?;
/*
// https://store.steampowered.com/api/appdetails?appids=1258740
sqlx::query(
"CREATE TABLE IF NOT EXISTS store_details (
id integer primary key,
name text not null,
item_type text not null,
last_timestamp integer not null
)",
)
.execute(&pool)
.await?;
*/
// set up indexes?
/*
sqlx::query("CREATE INDEX IF NOT EXISTS index_estimate ON bus_results (valid_estimate)")
.execute(&pool)
.await?;
*/
Ok(pool)
}
pub fn get_now() -> i64 {
if let Ok(x) = SystemTime::now().duration_since(UNIX_EPOCH) {
x.as_secs() as i64
} else {
0
}
}

View file

@ -5,6 +5,73 @@ use ldap3::{LdapConn, Scope, SearchEntry, Mod};
use base64::{Engine as _, engine::general_purpose}; use base64::{Engine as _, engine::general_purpose};
use crypto::{sha2::Sha512, digest::Digest}; use crypto::{sha2::Sha512, digest::Digest};
// for teh webserver
use sqlx::{Pool, Sqlite};
use std::env;
use dotenv::dotenv;
use tide::prelude::*;
use tide::{Request, Response};
use skynet_ldap_server::db_init;
#[derive(Clone)]
struct State {
db: Pool<Sqlite>,
config: Config,
}
#[async_std::main]
async fn main() -> tide::Result<()> {
let config = get_config();
let db = db_init(&config.database).await?;
let host_port = config.host_port.clone();
tide::log::start();
let state = State {
db,
config,
};
let mut app = tide::with_state(state);
//app.at("/steam_ost/:username").get(results_get);
app.listen(host_port).await?;
Ok(())
}
#[derive(Debug, Clone)]
struct Config {
ldap_host: String,
database: String,
host_port: String,
}
fn get_config() -> Config {
dotenv().ok();
// reasonable defaults
let mut config = Config {
ldap_host: "".to_string(),
database: "database.db".to_string(),
host_port: "127.0.0.1:8087".to_string(),
};
if let Ok(x) = env::var("LDAP_HOST") {
config.key = x.trim().to_string();
}
if let Ok(x) = env::var("DATABASE") {
config.database = x.trim().to_string();
}
if let Ok(x) = env::var("HOST_PORT") {
config.host_port = x.trim().to_string();
}
config
}
//https://stackoverflow.com/a/44532957 //https://stackoverflow.com/a/44532957
pub fn hex_to_base64(hex: &str) -> String { pub fn hex_to_base64(hex: &str) -> String {
// Make vector of bytes from octets // Make vector of bytes from octets
@ -21,7 +88,7 @@ pub fn hex_to_base64(hex: &str) -> String {
} }
fn main() -> Result<()> { async fn post_update_ldap(mut req: Request<State>) -> tide::Result {
let mut ldap = LdapConn::new("ldaps://sso.skynet.ie")?; let mut ldap = LdapConn::new("ldaps://sso.skynet.ie")?;
let user = "silver"; let user = "silver";
@ -63,10 +130,7 @@ fn main() -> Result<()> {
pw_hashset.insert(pass_tmp.as_str()); pw_hashset.insert(pass_tmp.as_str());
mods.push(Mod::Replace("userPassword", pw_hashset)); mods.push(Mod::Replace("userPassword", pw_hashset));
}; };
ldap.unbind()?;
let res = ldap.modify(&dn, mods)?.success()?; Ok(format!("Hello, {}! I've put in an order for {} shoes", "name", "legs").into())
println!("{:?}", res);
Ok(ldap.unbind()?)
} }