Fix repos being created with target machine as remote name
[sockgit.git] / src / main.rs
index 2b11523..6a59113 100644 (file)
@@ -1,56 +1,49 @@
-use std::io;
+use git2;
 use std::env;
-use std::path;
 use std::error;
-use git2;
+use std::io;
+use std::path;
 
-fn check_ip() -> Result<(), io::Error> {
-    match env::var("REMOTE_ADDR") {
-        Ok(remote_ip) => match env::var("WHITELIST_IP") {
-            Ok(whitelist_ip) => {
-                if remote_ip == whitelist_ip {
-                    Ok(())
-                } else {
-                    Err(io::Error::new(io::ErrorKind::ConnectionRefused, format!("Blocked connection from {}", remote_ip)))
-                }
-            }
-            Err(e) => Err(io::Error::new(io::ErrorKind::ConnectionRefused, e)),
-        }
-        Err(e) => Err(io::Error::new(io::ErrorKind::ConnectionRefused, e)),
+fn check_ip() -> Result<(), Box<dyn error::Error>> {
+    let remote_ip = env::var("REMOTE_ADDR")?;
+    let whitelist_ip = env::var("WHITELIST_IP")?;
+    if remote_ip == whitelist_ip {
+        Ok(())
+    } else {
+        Err(Box::new(io::Error::new(
+            io::ErrorKind::ConnectionRefused,
+            format!("Blocked connection from {}", remote_ip),
+        )))
     }
 }
 
 fn main() -> Result<(), Box<dyn error::Error>> {
-    match check_ip() {
-        Ok(()) => {
-            let mut repo_name = String::new();
-            io::stdin().read_line(&mut repo_name)?;
-            // remove trailing newline
-            repo_name.pop();
+    check_ip()?;
+    let mut repo_name = String::new();
+    io::stdin().read_line(&mut repo_name)?;
+    // remove trailing newline
+    repo_name.pop();
 
-            let mut opts = git2::RepositoryInitOptions::new();
-            git2::RepositoryInitOptions::bare(&mut opts, true)
-                .mode(git2::RepositoryInitMode::SHARED_GROUP)
-                .no_reinit(true)
-                .template_path(path::Path::new("./templates"));
+    let mut opts = git2::RepositoryInitOptions::new();
+    git2::RepositoryInitOptions::bare(&mut opts, true)
+        .mode(git2::RepositoryInitMode::SHARED_GROUP)
+        .no_reinit(true)
+        .template_path(path::Path::new("./templates"));
 
-            let repo = git2::Repository::init_opts(format!("{}.git", repo_name), &opts)?;
+    let repo = git2::Repository::init_opts(format!("{}.git", repo_name), &opts)?;
 
-            let public_user = env::var("USER").unwrap();
-            let public_name = env::var("PUBLIC").unwrap();
-            let public_path = env::var("PATH").unwrap();
-            repo.remote(
-                &public_name, 
-                &format!(
-                    "{user}@{public}:{path}/{repo}.git", 
-                    user = public_user, 
-                    public = public_name, 
-                    path = public_path, 
-                    repo = repo_name
-                    )
-                )?;
-            Ok(())
-        } 
-        Err(e) => Err(Box::new(e)),
-    }
+    let public_user = env::var("USER")?;
+    let public_name = env::var("PUBLIC")?;
+    let public_path = env::var("PATH")?;
+    repo.remote(
+        "public",
+        &format!(
+            "{user}@{public}:{path}/{repo}.git",
+            user = public_user,
+            public = public_name,
+            path = public_path,
+            repo = repo_name
+        ),
+    )?;
+    Ok(())
 }