Switch to async-fred-session, default config vals
Fixup some issues in README too
This commit is contained in:
parent
835e9dc748
commit
7f86612899
743
Cargo.lock
generated
743
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@ -16,7 +16,7 @@ ammonia = "3.3.0"
|
|||||||
ansi-to-html = "0.1"
|
ansi-to-html = "0.1"
|
||||||
anyhow = "1"
|
anyhow = "1"
|
||||||
argon2 = "0.5"
|
argon2 = "0.5"
|
||||||
async-redis-session = "0.2"
|
async-fred-session = "0.1"
|
||||||
axum = { version = "0.6", features = ["form", "headers", "multipart", "query"] }
|
axum = { version = "0.6", features = ["form", "headers", "multipart", "query"] }
|
||||||
axum-client-ip = "0.4"
|
axum-client-ip = "0.4"
|
||||||
# waiting for new axum-login release which will support sqlx v. 0.7+
|
# waiting for new axum-login release which will support sqlx v. 0.7+
|
||||||
|
@ -47,6 +47,7 @@ builds
|
|||||||
& 'C:\Program Files\PostgreSQL\13\bin\createdb.exe' -U postgres crawlnicle
|
& 'C:\Program Files\PostgreSQL\13\bin\createdb.exe' -U postgres crawlnicle
|
||||||
& 'C:\Program Files\PostgreSQL\13\bin\psql.exe' -U postgres
|
& 'C:\Program Files\PostgreSQL\13\bin\psql.exe' -U postgres
|
||||||
postgres=# ALTER DATABASE crawlnicle OWNER TO crawlnicle;
|
postgres=# ALTER DATABASE crawlnicle OWNER TO crawlnicle;
|
||||||
|
postgres=# ALTER USER crawlnicle CREATEDB;
|
||||||
\password crawlnicle
|
\password crawlnicle
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -69,6 +70,7 @@ builds
|
|||||||
SMTP_PASSWORD=password
|
SMTP_PASSWORD=password
|
||||||
EMAIL_FROM="crawlnicle <no-reply@mail.crawlnicle.com>"
|
EMAIL_FROM="crawlnicle <no-reply@mail.crawlnicle.com>"
|
||||||
SESSION_SECRET=64-bytes-of-secret
|
SESSION_SECRET=64-bytes-of-secret
|
||||||
|
IP_SOURCE=ConnectInfo
|
||||||
```
|
```
|
||||||
|
|
||||||
1. Run `just migrate` (or `sqlx migrate run`) which will run all the database
|
1. Run `just migrate` (or `sqlx migrate run`) which will run all the database
|
||||||
|
@ -33,21 +33,23 @@ impl FromStr for IpSource {
|
|||||||
pub struct Config {
|
pub struct Config {
|
||||||
#[clap(long, env)]
|
#[clap(long, env)]
|
||||||
pub database_url: String,
|
pub database_url: String,
|
||||||
#[clap(long, env)]
|
#[clap(long, env, default_value = "5")]
|
||||||
pub database_max_connections: u32,
|
pub database_max_connections: u32,
|
||||||
#[clap(long, env)]
|
#[clap(long, env, default_value = "redis://localhost")]
|
||||||
pub redis_url: String,
|
pub redis_url: String,
|
||||||
#[clap(long, env)]
|
#[clap(long, env, default_value = "5")]
|
||||||
|
pub redis_pool_size: usize,
|
||||||
|
#[clap(long, env, default_value = "127.0.0.1")]
|
||||||
pub host: String,
|
pub host: String,
|
||||||
#[clap(long, env)]
|
#[clap(long, env, default_value = "3000")]
|
||||||
pub port: u16,
|
pub port: u16,
|
||||||
#[clap(long, env)]
|
#[clap(long, env, default_value = "http://localhost:3000")]
|
||||||
pub public_url: Url,
|
pub public_url: Url,
|
||||||
#[clap(long, env)]
|
#[clap(long, env, default_value = "crawlnicle")]
|
||||||
pub title: String,
|
pub title: String,
|
||||||
#[clap(long, env)]
|
#[clap(long, env, default_value = "1000000")]
|
||||||
pub max_mem_log_size: usize,
|
pub max_mem_log_size: usize,
|
||||||
#[clap(long, env)]
|
#[clap(long, env, default_value = "./content")]
|
||||||
pub content_dir: String,
|
pub content_dir: String,
|
||||||
#[clap(long, env)]
|
#[clap(long, env)]
|
||||||
pub smtp_server: String,
|
pub smtp_server: String,
|
||||||
@ -55,10 +57,10 @@ pub struct Config {
|
|||||||
pub smtp_user: String,
|
pub smtp_user: String,
|
||||||
#[clap(long, env)]
|
#[clap(long, env)]
|
||||||
pub smtp_password: String,
|
pub smtp_password: String,
|
||||||
#[clap(long, env)]
|
#[clap(long, env, default_value = "crawlnicle <no-reply@mail.crawlnicle.com>")]
|
||||||
pub email_from: Mailbox,
|
pub email_from: Mailbox,
|
||||||
#[clap(long, env)]
|
#[clap(long, env)]
|
||||||
pub session_secret: String,
|
pub session_secret: String,
|
||||||
#[clap(long, env)]
|
#[clap(long, env, default_value = "ConnectInfo")]
|
||||||
pub ip_source: IpSource,
|
pub ip_source: IpSource,
|
||||||
}
|
}
|
||||||
|
11
src/main.rs
11
src/main.rs
@ -1,7 +1,7 @@
|
|||||||
use std::{collections::HashMap, net::SocketAddr, path::Path, sync::Arc};
|
use std::{collections::HashMap, net::SocketAddr, path::Path, sync::Arc};
|
||||||
|
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use async_redis_session::RedisSessionStore;
|
use async_fred_session::{RedisSessionStore, fred::{pool::RedisPool, types::RedisConfig}};
|
||||||
use axum::{
|
use axum::{
|
||||||
response::IntoResponse,
|
response::IntoResponse,
|
||||||
routing::{get, post},
|
routing::{get, post},
|
||||||
@ -72,11 +72,16 @@ async fn main() -> Result<()> {
|
|||||||
.connect(&config.database_url)
|
.connect(&config.database_url)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
let session_store = RedisSessionStore::new(config.redis_url.clone())?;
|
let redis_config = RedisConfig::from_url(&config.redis_url)?;
|
||||||
|
let redis_pool = RedisPool::new(redis_config, None, None, config.redis_pool_size)?;
|
||||||
|
redis_pool.connect();
|
||||||
|
redis_pool.wait_for_connect().await?;
|
||||||
|
|
||||||
|
let session_store = RedisSessionStore::from_pool(redis_pool, Some("async-fred-session/".into()));
|
||||||
let session_layer = SessionLayer::new(session_store, secret).with_secure(false);
|
let session_layer = SessionLayer::new(session_store, secret).with_secure(false);
|
||||||
let user_store = PostgresStore::<User>::new(pool.clone())
|
let user_store = PostgresStore::<User>::new(pool.clone())
|
||||||
.with_query("select * from users where user_id = $1");
|
.with_query("select * from users where user_id = $1");
|
||||||
let auth_layer = AuthLayer::new(user_store, &secret);
|
let auth_layer = AuthLayer::new(user_store, secret);
|
||||||
|
|
||||||
let creds = Credentials::new(config.smtp_user.clone(), config.smtp_password.clone());
|
let creds = Credentials::new(config.smtp_user.clone(), config.smtp_password.clone());
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user