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