feat: basic setup[ of the webserver
This commit is contained in:
parent
0da50263b8
commit
fe69e0cc9c
3 changed files with 122 additions and 12 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -1,3 +1,5 @@
|
||||||
/target
|
/target
|
||||||
|
|
||||||
/.idea
|
/.idea
|
||||||
|
|
||||||
|
.env
|
44
src/lib.rs
Normal file
44
src/lib.rs
Normal 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
|
||||||
|
}
|
||||||
|
}
|
76
src/main.rs
76
src/main.rs
|
@ -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()?)
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue