aboutsummaryrefslogtreecommitdiffstats
path: root/atuin-server/src
diff options
context:
space:
mode:
authorEllie Huxtable <e@elm.sh>2021-04-20 21:53:07 +0100
committerGitHub <noreply@github.com>2021-04-20 20:53:07 +0000
commita21737e2b7f8d1e426726bdd7536033f299d476a (patch)
treee940afdff9c145d25d9a2895fd44a77d70719a2e /atuin-server/src
parentSwitch to Warp + SQLx, use async, switch to Rust stable (#36) (diff)
downloadatuin-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.rs57
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))
+ }
+}