Commit | Line | Data |
---|---|---|
3263e546 JC |
1 | use std::io; |
2 | use std::env; | |
3 | use std::path; | |
4 | use std::error; | |
5 | use git2; | |
6 | ||
7 | fn check_ip() -> Result<(), io::Error> { | |
8 | match env::var("REMOTE_ADDR") { | |
9 | Ok(remote_ip) => match env::var("WHITELIST_IP") { | |
10 | Ok(whitelist_ip) => { | |
11 | if remote_ip == whitelist_ip { | |
12 | Ok(()) | |
13 | } else { | |
14 | Err(io::Error::new(io::ErrorKind::ConnectionRefused, format!("Blocked connection from {}", remote_ip))) | |
15 | } | |
16 | } | |
17 | Err(e) => Err(io::Error::new(io::ErrorKind::ConnectionRefused, e)), | |
18 | } | |
19 | Err(e) => Err(io::Error::new(io::ErrorKind::ConnectionRefused, e)), | |
20 | } | |
21 | } | |
22 | ||
23 | fn main() -> Result<(), Box<dyn error::Error>> { | |
24 | match check_ip() { | |
25 | Ok(()) => { | |
26 | let mut repo_name = String::new(); | |
27 | io::stdin().read_line(&mut repo_name)?; | |
28 | // remove trailing newline | |
29 | repo_name.pop(); | |
30 | ||
31 | let mut opts = git2::RepositoryInitOptions::new(); | |
32 | git2::RepositoryInitOptions::bare(&mut opts, true) | |
33 | .mode(git2::RepositoryInitMode::SHARED_GROUP) | |
34 | .no_reinit(true) | |
35 | .template_path(path::Path::new("./templates")); | |
36 | ||
37 | let repo = git2::Repository::init_opts(format!("{}.git", repo_name), &opts)?; | |
38 | ||
39 | let public_user = env::var("USER").unwrap(); | |
40 | let public_name = env::var("PUBLIC").unwrap(); | |
41 | let public_path = env::var("PATH").unwrap(); | |
42 | repo.remote( | |
43 | &public_name, | |
44 | &format!( | |
45 | "{user}@{public}:{path}/{repo}.git", | |
46 | user = public_user, | |
47 | public = public_name, | |
48 | path = public_path, | |
49 | repo = repo_name | |
50 | ) | |
51 | )?; | |
52 | Ok(()) | |
53 | } | |
54 | Err(e) => Err(Box::new(e)), | |
55 | } | |
56 | } |