diff options
Diffstat (limited to '')
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | Makefile | 6 | ||||
-rw-r--r-- | setup.c | 50 | ||||
-rw-r--r-- | ssh-command.sh | 31 |
4 files changed, 81 insertions, 7 deletions
diff --git a/.gitignore b/.gitignore index 58393ab..bba9e65 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ broadcast chroot.tar ingest root +setup ssh-command tags view diff --git a/Makefile b/Makefile index e45a101..57af159 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -BINS = broadcast ingest ssh-command view +BINS = broadcast ingest setup ssh-command view USER = stream CFLAGS += -Wall -Wextra -Wpedantic @@ -9,7 +9,7 @@ all: tags $(BINS) tags: *.c ctags -w *.c -chroot.tar: ingest ssh-command view +chroot.tar: $(BINS) mkdir -p root install -d -o root -g wheel \ root/bin \ @@ -29,7 +29,7 @@ chroot.tar: ingest ssh-command view root/lib install -o root -g wheel -m 444 /usr/share/misc/termcap.db root/usr/share/misc install -o root -g wheel -m 555 /bin/sh root/bin - install -o root -g wheel -m 555 ingest ssh-command view root/bin + install -o root -g wheel -m 555 $(BINS) root/bin tar -c -f chroot.tar -C root bin home lib libexec usr clean: diff --git a/setup.c b/setup.c new file mode 100644 index 0000000..5517d7e --- /dev/null +++ b/setup.c @@ -0,0 +1,50 @@ +/* Copyright (c) 2018, Curtis McEnroe <programble@gmail.com> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <err.h> +#include <fcntl.h> +#include <stdint.h> +#include <stdio.h> +#include <stdlib.h> +#include <sys/syslimits.h> +#include <sysexits.h> +#include <unistd.h> + +int main(int argc, char *argv[]) { + if (argc < 2) return EX_USAGE; + + uint32_t key[4]; + char public[PATH_MAX]; + char private[PATH_MAX]; + + snprintf(public, sizeof(public), "public/%s", argv[1]); + arc4random_buf(key, sizeof(key)); + snprintf( + private, sizeof(private), + "private/%08x%08x%08x%08x", + key[0], key[1], key[2], key[3] + ); + + int fd = open(public, O_CREAT | O_EXCL, 0644); + if (fd < 0) err(EX_CANTCREAT, "%s", public); + + snprintf(public, sizeof(public), "../public/%s", argv[1]); + int error = symlink(public, private); + if (error) err(EX_CANTCREAT, "%s", private); + + printf("%08x%08x%08x%08x\n", key[0], key[1], key[2], key[3]); + return EX_OK; +} diff --git a/ssh-command.sh b/ssh-command.sh index 98b959e..8461d3b 100644 --- a/ssh-command.sh +++ b/ssh-command.sh @@ -1,9 +1,10 @@ #!/bin/sh set -e -u -SSH_HOST=stream@ascii.town +SSH_URL=stream@ascii.town +GIT_URL=git@ascii.town:stream.git -if [ -z "${SSH_ORIGINAL_COMMAND:-}" ]; then +welcome() { echo echo 'Welcome to Twinch!' echo @@ -12,15 +13,37 @@ if [ -z "${SSH_ORIGINAL_COMMAND:-}" ]; then cd public for id in *; do - echo " ssh -t $SSH_HOST $id" + echo " ssh -t $SSH_URL $id" done echo +} - exit +start() { + local key + key=$(setup $1) + echo + echo 'Stream created!' + echo + echo 'To view the stream, run:' + echo + echo " ssh -t $SSH_URL $1" + echo + echo 'To broadcast to the stream, run:' + echo + echo " git clone $GIT_URL" + echo " cd stream" + echo " make broadcast" + echo " ./broadcast | ssh $SSH_URL ingest $key" + echo +} +if [ -z "${SSH_ORIGINAL_COMMAND:-}" ]; then + welcome + exit else set $SSH_ORIGINAL_COMMAND case $1 in + start) start ${2##*/} ;; ingest) exec ingest private/${2##*/} ;; view) exec view public/${2##*/} ;; *) exec view public/${1##*/} ;; |