diff options
| author | Ellie Huxtable <e@elm.sh> | 2021-04-20 21:53:07 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-04-20 20:53:07 +0000 |
| commit | a21737e2b7f8d1e426726bdd7536033f299d476a (patch) | |
| tree | e940afdff9c145d25d9a2895fd44a77d70719a2e /atuin-server/src | |
| parent | Switch to Warp + SQLx, use async, switch to Rust stable (#36) (diff) | |
| download | atuin-a21737e2b7f8d1e426726bdd7536033f299d476a.zip | |
Use cargo workspaces (#37)
* Switch to Cargo workspaces
Breaking things into "client", "server" and "common" makes managing the
codebase much easier!
client - anything running on a user's machine for adding history
server - handles storing/syncing history and running a HTTP server
common - request/response API definitions, common utils, etc
* Update dockerfile
Diffstat (limited to '')
| -rw-r--r-- | atuin-server/src/auth.rs (renamed from src/server/auth.rs) | 0 | ||||
| -rw-r--r-- | atuin-server/src/database.rs (renamed from src/server/database.rs) | 0 | ||||
| -rw-r--r-- | atuin-server/src/handlers/history.rs (renamed from src/server/handlers/history.rs) | 6 | ||||
| -rw-r--r-- | atuin-server/src/handlers/mod.rs (renamed from src/server/handlers/mod.rs) | 0 | ||||
| -rw-r--r-- | atuin-server/src/handlers/user.rs (renamed from src/server/handlers/user.rs) | 11 | ||||
| -rw-r--r-- | atuin-server/src/lib.rs (renamed from src/server/mod.rs) | 7 | ||||
| -rw-r--r-- | atuin-server/src/models.rs (renamed from src/server/models.rs) | 0 | ||||
| -rw-r--r-- | atuin-server/src/router.rs (renamed from src/server/router.rs) | 8 | ||||
| -rw-r--r-- | atuin-server/src/settings.rs | 57 |
9 files changed, 78 insertions, 11 deletions
diff --git a/src/server/auth.rs b/atuin-server/src/auth.rs index 52a73108..52a73108 100644 --- a/src/server/auth.rs +++ b/atuin-server/src/auth.rs diff --git a/src/server/database.rs b/atuin-server/src/database.rs index 5945baaf..5945baaf 100644 --- a/src/server/database.rs +++ b/atuin-server/src/database.rs diff --git a/src/server/handlers/history.rs b/atuin-server/src/handlers/history.rs index 4fd6f03f..1aebdde1 100644 --- a/src/server/handlers/history.rs +++ b/atuin-server/src/handlers/history.rs @@ -2,11 +2,11 @@ use std::convert::Infallible; use warp::{http::StatusCode, reply::json}; -use crate::api::{ +use crate::database::Database; +use crate::models::{NewHistory, User}; +use atuin_common::api::{ AddHistoryRequest, CountResponse, ErrorResponse, SyncHistoryRequest, SyncHistoryResponse, }; -use crate::server::database::Database; -use crate::server::models::{NewHistory, User}; pub async fn count( user: User, diff --git a/src/server/handlers/mod.rs b/atuin-server/src/handlers/mod.rs index 3c20538c..3c20538c 100644 --- a/src/server/handlers/mod.rs +++ b/atuin-server/src/handlers/mod.rs diff --git a/src/server/handlers/user.rs b/atuin-server/src/handlers/user.rs index 782d7dbd..6b142cdc 100644 --- a/src/server/handlers/user.rs +++ b/atuin-server/src/handlers/user.rs @@ -5,13 +5,14 @@ use uuid::Uuid; use warp::http::StatusCode; use warp::reply::json; -use crate::api::{ +use atuin_common::api::{ ErrorResponse, LoginRequest, LoginResponse, RegisterRequest, RegisterResponse, UserResponse, }; -use crate::server::database::Database; -use crate::server::models::{NewSession, NewUser}; +use atuin_common::utils::hash_secret; + +use crate::database::Database; +use crate::models::{NewSession, NewUser}; use crate::settings::Settings; -use crate::utils::hash_secret; pub fn verify_str(secret: &str, verify: &str) -> bool { sodiumoxide::init().unwrap(); @@ -52,7 +53,7 @@ pub async fn register( settings: Settings, db: impl Database + Clone + Send + Sync, ) -> Result<Box<dyn warp::Reply>, Infallible> { - if !settings.server.open_registration { + if !settings.open_registration { return Ok(Box::new(ErrorResponse::reply( "this server is not open for registrations", StatusCode::BAD_REQUEST, diff --git a/src/server/mod.rs b/atuin-server/src/lib.rs index d5e083df..36b6ffa7 100644 --- a/src/server/mod.rs +++ b/atuin-server/src/lib.rs @@ -4,11 +4,18 @@ use eyre::Result; use crate::settings::Settings; +#[macro_use] +extern crate log; + +#[macro_use] +extern crate serde_derive; + pub mod auth; pub mod database; pub mod handlers; pub mod models; pub mod router; +pub mod settings; pub async fn launch(settings: &Settings, host: String, port: u16) -> Result<()> { // routes to run: diff --git a/src/server/models.rs b/atuin-server/src/models.rs index fbf1897e..fbf1897e 100644 --- a/src/server/models.rs +++ b/atuin-server/src/models.rs diff --git a/src/server/router.rs b/atuin-server/src/router.rs index ed317ab2..d106068d 100644 --- a/src/server/router.rs +++ b/atuin-server/src/router.rs @@ -3,10 +3,12 @@ use std::convert::Infallible; use eyre::Result; use warp::Filter; +use atuin_common::api::SyncHistoryRequest; + use super::handlers; use super::{database::Database, database::Postgres}; -use crate::server::models::User; -use crate::{api::SyncHistoryRequest, settings::Settings}; +use crate::models::User; +use crate::settings::Settings; fn with_settings( settings: Settings, @@ -55,7 +57,7 @@ fn with_user( pub async fn router( settings: &Settings, ) -> Result<impl Filter<Extract = impl warp::Reply, Error = warp::Rejection> + Clone> { - let postgres = Postgres::new(settings.server.db_uri.as_str()).await?; + let postgres = Postgres::new(settings.db_uri.as_str()).await?; let index = warp::get().and(warp::path::end()).map(handlers::index); let count = warp::get() diff --git a/atuin-server/src/settings.rs b/atuin-server/src/settings.rs new file mode 100644 index 00000000..596b9018 --- /dev/null +++ b/atuin-server/src/settings.rs @@ -0,0 +1,57 @@ +use std::fs::{create_dir_all, File}; +use std::io::prelude::*; +use std::path::PathBuf; + +use config::{Config, Environment, File as ConfigFile}; +use directories::ProjectDirs; +use eyre::{eyre, Result}; + +pub const HISTORY_PAGE_SIZE: i64 = 100; + +#[derive(Clone, Debug, Deserialize)] +pub struct Settings { + pub host: String, + pub port: u16, + pub db_uri: String, + pub open_registration: bool, +} + +impl Settings { + pub fn new() -> Result<Self> { + let config_dir = ProjectDirs::from("com", "elliehuxtable", "atuin").unwrap(); + let config_dir = config_dir.config_dir(); + + create_dir_all(config_dir)?; + + let config_file = if let Ok(p) = std::env::var("ATUIN_CONFIG") { + PathBuf::from(p) + } else { + let mut config_file = PathBuf::new(); + config_file.push(config_dir); + config_file.push("server.toml"); + config_file + }; + + // create the config file if it does not exist + + let mut s = Config::new(); + + if config_file.exists() { + s.merge(ConfigFile::with_name(config_file.to_str().unwrap()))?; + } else { + let example_config = include_bytes!("../server.toml"); + let mut file = File::create(config_file)?; + file.write_all(example_config)?; + } + + s.set_default("host", "127.0.0.1")?; + s.set_default("port", 8888)?; + s.set_default("open_registration", false)?; + s.set_default("db_uri", "default_uri")?; + + s.merge(Environment::with_prefix("atuin").separator("_"))?; + + s.try_into() + .map_err(|e| eyre!("failed to deserialize: {}", e)) + } +} |
