# HG changeset patch # User David Demelier # Date 1580930400 -3600 # Node ID 39defd15564e931a0af00d6130687afc1b941039 # Parent 98ef2713eb0d3d397b9a259a9e0a7d5e7632c2a8 paster: initial import diff -r 98ef2713eb0d -r 39defd15564e .hgignore --- a/.hgignore Wed Feb 05 13:17:17 2020 +0100 +++ b/.hgignore Wed Feb 05 20:20:00 2020 +0100 @@ -21,3 +21,4 @@ # Executables. pasterd +paster diff -r 98ef2713eb0d -r 39defd15564e Makefile --- a/Makefile Wed Feb 05 13:17:17 2020 +0100 +++ b/Makefile Wed Feb 05 20:20:00 2020 +0100 @@ -43,7 +43,7 @@ .SUFFIXES: .SUFFIXES: .c .o -all: pasterd +all: pasterd paster -include ${DEPS} @@ -59,13 +59,18 @@ pasterd: ${OBJS} extern/libsqlite3.a ${CC} -o $@ ${OBJS} ${LDFLAGS} extern/libsqlite3.a +paster: paster.sh + cp paster.sh paster + chmod +x paster + clean: rm -f extern/sqlite3.o extern/libsqlite3.a - rm -f pasterd ${OBJS} ${DEPS} + rm -f pasterd paster ${OBJS} ${DEPS} install: mkdir -p ${DESTDIR}${BINDIR} cp pasterd ${DESTDIR}${BINDIR} + cp paster ${DESTDIR}${BINDIR} mkdir -p ${DESTDIR}${SHAREDIR}/paster cp -R themes ${DESTDIR}${SHAREDIR}/paster diff -r 98ef2713eb0d -r 39defd15564e http.c --- a/http.c Wed Feb 05 13:17:17 2020 +0100 +++ b/http.c Wed Feb 05 20:20:00 2020 +0100 @@ -110,7 +110,7 @@ }; static const char *languages[] = { - "nohighlight" + "nohighlight", "1c", "abnf", "accesslog", diff -r 98ef2713eb0d -r 39defd15564e paster.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paster.sh Wed Feb 05 20:20:00 2020 +0100 @@ -0,0 +1,304 @@ +# +# paster -- convenient front-end to a pasterd instance +# +# Copyright (c) 2020 David Demelier +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# + +author="Anonymous" +language="nohighlight" +title="Untitled" +duration="month" +private=0 +verbose=0 + +die() +{ + echo "$@" 1>&2 + exit 1 +} + +languages() +{ + echo "nohighlight" + echo "1c" + echo "abnf" + echo "accesslog" + echo "actionscript" + echo "ada" + echo "apache" + echo "applescript" + echo "arduino" + echo "armasm" + echo "asciidoc" + echo "aspectj" + echo "autohotkey" + echo "autoit" + echo "avrasm" + echo "awk" + echo "axapta" + echo "bash" + echo "basic" + echo "bnf" + echo "brainfuck" + echo "cal" + echo "capnproto" + echo "ceylon" + echo "clean" + echo "clojure" + echo "clojure-repl" + echo "cmake" + echo "coffeescript" + echo "coq" + echo "cos" + echo "cpp" + echo "crmsh" + echo "crystal" + echo "cs" + echo "csp" + echo "css" + echo "dart" + echo "delphi" + echo "diff" + echo "django" + echo "d" + echo "dns" + echo "dockerfile" + echo "dos" + echo "dsconfig" + echo "dts" + echo "dust" + echo "ebnf" + echo "elixir" + echo "elm" + echo "erb" + echo "erlang" + echo "erlang-repl" + echo "excel" + echo "fix" + echo "flix" + echo "fortran" + echo "fsharp" + echo "gams" + echo "gauss" + echo "gcode" + echo "gherkin" + echo "glsl" + echo "go" + echo "golo" + echo "gradle" + echo "groovy" + echo "haml" + echo "handlebars" + echo "haskell" + echo "haxe" + echo "hsp" + echo "htmlbars" + echo "http" + echo "hy" + echo "inform7" + echo "ini" + echo "irpf90" + echo "java" + echo "javascript" + echo "jboss-cli" + echo "json" + echo "julia" + echo "julia-repl" + echo "kotlin" + echo "lasso" + echo "ldif" + echo "leaf" + echo "less" + echo "lisp" + echo "livecodeserver" + echo "livescript" + echo "llvm" + echo "lsl" + echo "lua" + echo "makefile" + echo "markdown" + echo "mathematica" + echo "matlab" + echo "maxima" + echo "mel" + echo "mercury" + echo "mipsasm" + echo "mizar" + echo "mojolicious" + echo "monkey" + echo "moonscript" + echo "n1ql" + echo "nginx" + echo "nimrod" + echo "nix" + echo "nsis" + echo "objectivec" + echo "ocaml" + echo "openscad" + echo "oxygene" + echo "parser3" + echo "perl" + echo "pf" + echo "php" + echo "pony" + echo "powershell" + echo "processing" + echo "profile" + echo "prolog" + echo "protobuf" + echo "puppet" + echo "purebasic" + echo "python" + echo "q" + echo "qml" + echo "rib" + echo "r" + echo "roboconf" + echo "routeros" + echo "rsl" + echo "ruby" + echo "ruleslanguage" + echo "rust" + echo "scala" + echo "scheme" + echo "scilab" + echo "scss" + echo "shell" + echo "smali" + echo "smalltalk" + echo "sml" + echo "sqf" + echo "sql" + echo "stan" + echo "stata" + echo "step21" + echo "stylus" + echo "subunit" + echo "swift" + echo "taggerscript" + echo "tap" + echo "tcl" + echo "tex" + echo "thrift" + echo "tp" + echo "twig" + echo "typescript" + echo "vala" + echo "vbnet" + echo "vbscript-html" + echo "vbscript" + echo "verilog" + echo "vhdl" + echo "vim" + echo "x86asm" + echo "xl" + echo "xml" + echo "xquery" + echo "yaml" + echo "zephir" + exit 0 +} + +durations() +{ + echo "hour" + echo "day" + echo "week" + echo "month" + exit 0 +} + +usage() +{ + cat 1>&2 <<-EOF + usage: paster [-LDvx] [-a author] [-l language] [-d duration] [-t title] filename host + EOF + exit 1 +} + +send() +{ + if [ $private -eq 1 ]; then + with_private="--data private=on" + fi + if [ $verbose -eq 0 ]; then + with_verbose="-s" + fi + + curl -i -X POST \ + --data author="$author" \ + --data language="$language" \ + --data duration="$duration" \ + --data title="$title" \ + --data-urlencode code@"$1" \ + $with_private \ + $with_verbose \ + "$2"/new +} + +if ! command -v curl >/dev/null 2>&1; then + die "abort: curl is required" +fi + +while getopts "LDa:d:l:t:vx" opt; do + case "$opt" in + D) + durations + ;; + L) + languages + ;; + a) + author="$OPTARG" + ;; + d) + duration="$OPTARG" + ;; + l) + language="$OPTARG" + ;; + t) + title="$OPTARG" + ;; + v) + verbose=1 + ;; + x) + private=1 + ;; + *) + usage + ;; + esac +done + +shift $((OPTIND - 1)) + +if [ "$#" -ne 2 ]; then + usage +fi + +# If verbose, dump all headers. +if [ $verbose -eq 1 ]; then + send "$1" "$2" +else + url=$(send "$1" "$2" | grep -E "^Location: " | awk '{ print $2 }') + + if [ -z "$url" ]; then + die "abort: error occured, retry with -v" + fi + + printf "%s%s\n" "$2" "$url" +fi