summaryrefslogtreecommitdiff
path: root/init
blob: d9da7bd763acca596d813196271e348666eb116e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#!/usr/bin/env fish

argparse 'u/users=+' 'r/repos=+' -- $argv
or exit 1;

set REPO_PERMISSIONS /etc/repo-permissions
set REPO_REGEX "^((?:\/[a-zA-Z-]+)+.git)\$"

function createUser
	set -l user $argv[1]
	echo "Setting up user: $user"
	if [ "$user" = git ]
		echo "Error: User git is reserved"
		return 1
	end

	set -l HOME "/home/$user"
	# user is not restricted, this is done in ssh config with forceCommand
	# we need to be able to run a fish script to check for permissions
	adduser --home $HOME -D "$user"
	passwd -u "$user"
	mkdir "$HOME/.ssh"
	cp "/var/ssh/clients/$user" "$HOME/.ssh/authorized_keys"
	chown -R $user "$HOME"
	chmod -R 700 "$HOME"
end

function setupRepo
	set -l repoConfig $argv[1]
	set -l parsedConfig (string split ':' $repoConfig)
	set -l repo $parsedConfig[1]

	# check repo name
	set -l matcher (string match -r -g $REPO_REGEX $repo)
	if test -z $matcher[1]
		echo "Invalid repo name $repo"
		return 1
	end

	# we assume all repos to be in /srv/repos
	set -l repoDir srv repos
	set -l repoDir /(string join -n '/' $repoDir (string split '/' $repo))
	echo "Setting up repo: $repo"

	# write user as allowed into permission file
	for user in $parsedConfig[2..]
		echo "$repoDir:$user" >> $REPO_PERMISSIONS
	end

	# setup repo dir
	if not test -d $repoDir
		mkdir -p $repoDir
		git init --bare $repoDir -b trunk
	end
	chown -R git:git "$repoDir"
	chmod -R 700 "$repoDir"
end

#
# Setup users
# First and reserved is git user, which has access to all 
# git repos
#
adduser git -D --shell "/usr/bin/git-shell"
for user in (string split ',' $_flag_u)
	createUser "$user"
end

#
# Setup repos
# First and reserved is git user, which has access to all 
# git repos
#
echo > $REPO_PERMISSIONS
for repoConfig in (string split ',' $_flag_r)
	setupRepo "$repoConfig"
end

echo "Setting up server"
# generate host keys in case
mkdir -p /var/ssh/host/etc/ssh/ && ssh-keygen -A -f /var/ssh/host
# run ssh daemon
/usr/sbin/sshd -D -e