mirror of
				https://github.com/librenms/librenms.git
				synced 2024-10-07 16:52:45 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			188 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			188 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env bash
 | 
						|
 | 
						|
# Pastes from STDIN or file from commandline argument to Stikked pastebin
 | 
						|
# Default server: paste.mate-desktop.org
 | 
						|
# URL: https://github.com/glensc/pbin
 | 
						|
 | 
						|
# Copyright (C) 2014 Elan Ruusamäe
 | 
						|
 | 
						|
# This program is free software; you can redistribute it and/or
 | 
						|
# modify it under the terms of the GNU General Public License
 | 
						|
# as published by the Free Software Foundation; either version 2
 | 
						|
# 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 General Public License for more details.
 | 
						|
 | 
						|
# You should have received a copy of the GNU General Public License
 | 
						|
# along with this program; if not, write to the Free Software
 | 
						|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 | 
						|
 | 
						|
set -e
 | 
						|
PROGRAM=${0##*/}
 | 
						|
 | 
						|
# can be overriden from env
 | 
						|
: ${PASTE_URL='https://p.libren.ms/api/create'}
 | 
						|
 | 
						|
# paste. take input from stdin
 | 
						|
pastebin() {
 | 
						|
	# show params
 | 
						|
 | 
						|
        if [[ "${expire}" == "" ]]; then
 | 
						|
            expire=0;
 | 
						|
        fi
 | 
						|
 | 
						|
        if [[ "${private}" == "" ]]; then
 | 
						|
            private=1;
 | 
						|
        fi
 | 
						|
 | 
						|
	sed -e '/^$/d' >&2 <<-EOF
 | 
						|
		${title+title: "$title"}
 | 
						|
		${name+name: "$name"}
 | 
						|
		${private+private: "$private"}
 | 
						|
		${language+language: "$language"}
 | 
						|
		${expire+expire: "$expire"}
 | 
						|
		${reply+reply: "$reply"}
 | 
						|
	EOF
 | 
						|
 | 
						|
	# do paste
 | 
						|
	curl "$PASTE_URL" \
 | 
						|
		${title+-F title="$title"} \
 | 
						|
		${name+-F name="$name"} \
 | 
						|
		${private+-F private="$private"} \
 | 
						|
		${language+-F lang="$language"} \
 | 
						|
		${expire+-F expire="$expire"} \
 | 
						|
		${reply+-F reply="$reply"} \
 | 
						|
		-F 'text=<-'
 | 
						|
}
 | 
						|
 | 
						|
# try to resolve mime-type to language
 | 
						|
mime_to_lang() {
 | 
						|
	local mime="$1"
 | 
						|
 | 
						|
	awk -F ':' -vm="$mime" 'm==$1 {print $2}' <<-EOF
 | 
						|
	application/javascript:javascript
 | 
						|
	application/xml:xml
 | 
						|
	text/html:html5
 | 
						|
	text/x-c:c
 | 
						|
	text/x-c++:cpp
 | 
						|
	text/x-diff:diff
 | 
						|
	text/x-lua:lua
 | 
						|
	text/x-php:php
 | 
						|
	text/x-python:python
 | 
						|
	text/x-ruby:ruby
 | 
						|
	text/x-shellscript:bash
 | 
						|
	EOF
 | 
						|
}
 | 
						|
 | 
						|
# detect filetype. outputs nothing if no file binary or no detected
 | 
						|
detect_mimetype() {
 | 
						|
	local file="$1" out
 | 
						|
 | 
						|
	out=$(file -L --mime-type "$file" 2>/dev/null || :)
 | 
						|
	echo "${out#*: }"
 | 
						|
}
 | 
						|
 | 
						|
usage() {
 | 
						|
	echo "Usage: $PROGRAM [options] < [input_file]
 | 
						|
 | 
						|
Options:
 | 
						|
  -t, --title     title of this paste
 | 
						|
  -n, --name      author of this paste
 | 
						|
  -p, --private   should this paste be private (0 = public, 1 = private)
 | 
						|
  -l, --language  language this paste is in
 | 
						|
  -e, --expire    paste expiration in minutes
 | 
						|
  -r, --reply     reply to existing paste
 | 
						|
"
 | 
						|
}
 | 
						|
 | 
						|
set_defaults() {
 | 
						|
	unset title
 | 
						|
	unset private
 | 
						|
	unset language
 | 
						|
	unset expire
 | 
						|
	unset reply
 | 
						|
 | 
						|
	# default to user@hostname
 | 
						|
	name=${SUDO_USER:-$USER}
 | 
						|
}
 | 
						|
 | 
						|
set_defaults
 | 
						|
 | 
						|
# parse command line args
 | 
						|
t=$(getopt -o h,t:,n:,p:,l:,e:,r:,b: --long help,title:,name:,private:,language:,expire:,reply: -n "$PROGRAM" -- "$@")
 | 
						|
eval set -- "$t"
 | 
						|
 | 
						|
while :; do
 | 
						|
	case "$1" in
 | 
						|
	-h|--help)
 | 
						|
		usage
 | 
						|
		exit 0
 | 
						|
	;;
 | 
						|
	-t|--title)
 | 
						|
		shift
 | 
						|
		title="$1"
 | 
						|
	;;
 | 
						|
	-n|--name)
 | 
						|
		shift
 | 
						|
		name="$1"
 | 
						|
	;;
 | 
						|
	-p|--private)
 | 
						|
                shift
 | 
						|
		private="$1"
 | 
						|
	;;
 | 
						|
	-l|--language)
 | 
						|
		shift
 | 
						|
		language="$1"
 | 
						|
	;;
 | 
						|
	-e|--expire)
 | 
						|
		shift
 | 
						|
		expire="$1"
 | 
						|
	;;
 | 
						|
	-r|--reply)
 | 
						|
		shift
 | 
						|
		reply="$1"
 | 
						|
	;;
 | 
						|
	-b)
 | 
						|
		shift
 | 
						|
		PASTE_URL="$1"
 | 
						|
	;;
 | 
						|
	--)
 | 
						|
		shift
 | 
						|
		break
 | 
						|
	;;
 | 
						|
	*)
 | 
						|
		echo >&2 "$PROGRAM: Internal error: [$1] not recognized!"
 | 
						|
		exit 1
 | 
						|
	;;
 | 
						|
	esac
 | 
						|
	shift
 | 
						|
done
 | 
						|
 | 
						|
echo "Paste endpoint: $PASTE_URL"
 | 
						|
 | 
						|
# if we have more commandline arguments, set these as title
 | 
						|
if [ "${title+set}" != "set" ]; then
 | 
						|
	title="$*"
 | 
						|
fi
 | 
						|
 | 
						|
# set language from first filename
 | 
						|
if [ -n "$1" ] && [ "${language+set}" != "set" ]; then
 | 
						|
	mime=$(detect_mimetype "$1")
 | 
						|
 | 
						|
	if [ -n "$mime" ]; then
 | 
						|
		language=$(mime_to_lang "$mime")
 | 
						|
	fi
 | 
						|
fi
 | 
						|
 | 
						|
# take filenames from commandline, or from stdin
 | 
						|
if [ $# -gt 0 ]; then
 | 
						|
	paste=$(cat "$@")
 | 
						|
else
 | 
						|
	paste=$(cat)
 | 
						|
fi
 | 
						|
 | 
						|
echo "$paste" | pastebin
 |