aboutsummaryrefslogtreecommitdiffstats
path: root/src/command/register.rs
diff options
context:
space:
mode:
authorEllie Huxtable <e@elm.sh>2021-04-13 19:14:07 +0100
committerGitHub <noreply@github.com>2021-04-13 19:14:07 +0100
commit5751463942cc91f1f1ffaf6e2ac633d7a0085f25 (patch)
treef7b5b9a4702c4c3ef29aa60d36612f61ffeae052 /src/command/register.rs
parentUpdate config (diff)
downloadatuin-5751463942cc91f1f1ffaf6e2ac633d7a0085f25.zip
Add history sync, resolves #13 (#31)
* Add encryption * Add login and register command * Add count endpoint * Write initial sync push * Add single sync command Confirmed working for one client only * Automatically sync on a configurable frequency * Add key command, key arg to login * Only load session if it exists * Use sync and history timestamps for download * Bind other key code Seems like some systems have this code for up arrow? I'm not sure why, and it's not an easy one to google. * Simplify upload * Try and fix download sync loop * Change sync order to avoid uploading what we just downloaded * Multiline import fix * Fix time parsing * Fix importing history with no time * Add hostname to sync * Use hostname to filter sync * Fixes * Add binding * Stuff from yesterday * Set cursor modes * Make clippy happy * Bump version
Diffstat (limited to 'src/command/register.rs')
-rw-r--r--src/command/register.rs54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/command/register.rs b/src/command/register.rs
new file mode 100644
index 00000000..62bbeaeb
--- /dev/null
+++ b/src/command/register.rs
@@ -0,0 +1,54 @@
+use std::collections::HashMap;
+use std::fs::File;
+use std::io::prelude::*;
+
+use eyre::{eyre, Result};
+use structopt::StructOpt;
+
+use crate::settings::Settings;
+
+#[derive(StructOpt)]
+#[structopt(setting(structopt::clap::AppSettings::DeriveDisplayOrder))]
+pub struct Cmd {
+ #[structopt(long, short)]
+ pub username: String,
+
+ #[structopt(long, short)]
+ pub email: String,
+
+ #[structopt(long, short)]
+ pub password: String,
+}
+
+pub fn run(settings: &Settings, username: &str, email: &str, password: &str) -> Result<()> {
+ let mut map = HashMap::new();
+ map.insert("username", username);
+ map.insert("email", email);
+ map.insert("password", password);
+
+ let url = format!("{}/user/{}", settings.local.sync_address, username);
+ let resp = reqwest::blocking::get(url)?;
+
+ if resp.status().is_success() {
+ println!("Username is already in use! Please try another.");
+ return Ok(());
+ }
+
+ let url = format!("{}/register", settings.local.sync_address);
+ let client = reqwest::blocking::Client::new();
+ let resp = client.post(url).json(&map).send()?;
+
+ if !resp.status().is_success() {
+ println!("Failed to register user - please check your details and try again");
+ return Err(eyre!("failed to register user"));
+ }
+
+ let session = resp.json::<HashMap<String, String>>()?;
+ let session = session["session"].clone();
+
+ let path = settings.local.session_path.as_str();
+ let mut file = File::create(path)?;
+ file.write_all(session.as_bytes())?;
+
+ Ok(())
+}