summary refs log tree commit diff
diff options
context:
space:
mode:
authorJune McEnroe <programble@gmail.com>2018-02-22 18:27:26 -0500
committerJune McEnroe <programble@gmail.com>2018-02-22 18:27:26 -0500
commitbcf4b48fd9d77e4c28ca51180a69a6b06231c7e4 (patch)
tree056712f5276b4f1f0f7d8e6d6eb2e655868b8140
parentIndent list of streams (diff)
downloadstream-bcf4b48fd9d77e4c28ca51180a69a6b06231c7e4.tar.gz
stream-bcf4b48fd9d77e4c28ca51180a69a6b06231c7e4.zip
Add setup, start command
-rw-r--r--.gitignore1
-rw-r--r--Makefile6
-rw-r--r--setup.c50
-rw-r--r--ssh-command.sh31
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##*/} ;;