Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: nettezzaumana 14 Ledna 2009, 21:10:29

Název: skript na pastebin.ca (!starenka help)
Přispěvatel: nettezzaumana 14 Ledna 2009, 21:10:29
ahoj ..

lide pouzivajici irc a developeri komunikujici s ostatnimi jiste oceni ..

napsal jsem si takovy skript na upload veci primo z cmdlajny na pastebin.ca a mam nejake drobne problemy, se kteryma mi muze pomoci snad jedine starenka, neb je chytra a zna webove technologie ..

ostatni se mohou snazit taky .. ;)

a) obsah souboru se pri pastu zatipne na '<' a '>' a mozna na jinych znacich. je to nejaka vlastnost toho http. asi je potreba ty znaky nejak escapovat, ale nevim jak (&lt, &gt nefunguje .. dal nevim, jsem dutej ..) .. viz napr.

cat `which pastebin.sh` | pastebin.sh
.. vyreseno diky Velkemu Vezirovi

b) viz priloha zpravy!, chtel bych do skryptu dodelat opsny na type textu aka (bash, plaintext, c/c++ source apod ..). classes jsou v priloze, nevim, jak je dostat do hlavicky .. starenko !help .. vyreseno.

c) obcas to rozhodi formatovani .. pri normalnim pastu pres webovy rozhrani to funguje normalne.
Dela to i pri manualnim uploadu souboru na pastabin, jde to nejak osetrit?

$ cat /proc/cpuinfo | pastebin.sh
http://pastebin.ca/1308289

d) kdyz me zkuseny perlista ukaze jak udelat tohle ::
Citace
wget -O - --tries=5 --timeout=60 --post-file=/tmp/pastebin.sh.tmpx \
   http://pastebin.ca/quiet-paste.php?api=$PASTEBINKEY &> /tmp/pastebin.sh.tmpy
.. v perlu, tak to jednoduse prekoduju do nej ..
nesnasim pouzivat system() a evel() .. ciste perlovou metodu ..

Citace: pastebin.sh
#!/bin/bash
#
# paste output of commands directly to pastebin.ca
# regards by dpecka alias nettezzaumana

## check for wget availability and if is able to upload files ..
if test ! -x "$(which wget 2>/dev/null)"; then
        echo "can't find executable wget .. it's over";
        exit;
fi

if test -z "$(wget --help | grep 'post-file=')"; then
    echo "seems like your wget can't upload files .. it's over";
    exit;
fi

## When passed section above, all should be then ok ..

usage() {
case $1 in
   --base )
      echo "Usage: foo | pastebin.sh [-f] [-t type] [-d description] [-n name]";
      echo -e "-f\texploit pastebin.ca even if input have less then 5 lines";
      echo -e "-t\ttry 'help' for list of available syntax highlight types";
      echo -e "-d\tshort paste description"
      echo -e "-n\talternate nick, default is your USERNAME";
      echo -e "\nescape white characters in name and description string ..";;
   --types )
      echo -e "action ada apache asm asp asterisk bash c c# c++ css delphi diff html java javascript lisp lua mirc nasm net objc pascal perl php pli python raw ruby scheme sql vbs xml";;
esac
exit;
}


## check for help request ..
if [ "$1" = "--help" ] || [ "$1" = "-h" ]; then
   usage --base;
fi

PASTEBINKEY="bU5WOzg358e+D6pSAHRvuTJj/YUhY+zk";
PLINES="0";
PFORC="";

## default values
PTYPE="33";
PDESC="";
PUSER="$USER";

if [ "$#" -ge "8" ]; then
   usage --base;
fi

# superb resolution of bash getopt ..
for((x=1;x<$#+1;x++)) {
        case "${!x}" in
                -f ) PFORC="true";;
                -t ) x=$(($x + 1)); PTYPE="${!x}";
                        case $PTYPE in
            raw      ) PTYPE="1";;
                                asterisk        ) PTYPE="2";;
                                c | C           ) PTYPE="3";;
                                'c++' | 'C++'   ) PTYPE="4";;
                                php             ) PTYPE="5";;
                                perl | Perl     ) PTYPE="6";;
                                java | Java     ) PTYPE="7";;
                                vbs | Vbs | VBS ) PTYPE="8";;
                                'c#' | 'C#'     ) PTYPE="9";;
                                ruby | Ruby     ) PTYPE="10";;
                                python | Python ) PTYPE="11";;
                                pascal | Pascal ) PTYPE="12";;
                                mirc | mIRC     ) PTYPE="13";;
                                pli             ) PTYPE="14";;
                                xml | Xml | XML ) PTYPE="15";;
                                sql | Sql | SQL ) PTYPE="16";;
                                scheme | Scheme ) PTYPE="17";;
                                action | Action ) PTYPE="18";;
                                ada | Ada | ADA ) PTYPE="19";;
                                apache | Apache ) PTYPE="20";;
                                nasm | NASM     ) PTYPE="21";;
                                asp | Asp | ASP ) PTYPE="22";;
                                bash | Bash     ) PTYPE="23";;
                                css | Css | CSS ) PTYPE="24";;
                                delphi | Delphi ) PTYPE="25";;
                                html | HTML     ) PTYPE="26";;
                                javascript      ) PTYPE="27";;
                                lisp | Lisp     ) PTYPE="28";;
                                lua | Lua | LUA ) PTYPE="29";;
                                asm | ASM       ) PTYPE="30";;
                                objc | OBJC     ) PTYPE="31";;
                                net | Net | NET ) PTYPE="32";;
            diff | patch   ) PTYPE="34";;
                                *               ) usage --types;;
                        esac;;
                -d ) x=$(($x + 1)); PDESC="$(echo ${!x} | sed 's/\s/+/g')";;
                -n ) x=$(($x + 1)); PUSER="$(echo ${!x} | sed 's/\s/+/g')";;
      * ) usage --base;;
        esac
}

## build tempfile to upload ..
echo "name=$PUSER&type=$PTYPE&description=$PDESC&expiry=&s=Submit+Post&content=" > /tmp/pastebin.sh.tmpx
while IFS= read -r line; do
    echo "$line" >> /tmp/pastebin.sh.tmpx;
    PLINES=$(($PLINES + 1));
done

## exit if only whitspaces are input
if test -z "$(sed '1d;/^$/d' /tmp/pastebin.sh.tmpx)"; then
   usage --base;
fi

## exit when input less then 5 lines and -f option omitted
if [ $PLINES -lt "5" ] && [ "$PFORC" != 'true' ]; then
    echo "input is less then 5 lines, use -f option to force exploit pastebin.ca";
    exit;
fi

## DEBUG
sed -i '2,$s/%/%25/g' /tmp/pastebin.sh.tmpx
sed -i '2,$s/&/%26/g' /tmp/pastebin.sh.tmpx
sed -i '2,$s/+/%2B/g' /tmp/pastebin.sh.tmpx

## post tempfile and print url of post ..
wget -O - --tries=5 --timeout=60 --post-file=/tmp/pastebin.sh.tmpx \
   http://pastebin.ca/quiet-paste.php?api=$PASTEBINKEY &> /tmp/pastebin.sh.tmpy
echo `sed '/SUCCESS:/!d;s/^.*:\([0-9][0-9]*\).*$/http:\/\/pastebin.ca\/\1/' /tmp/pastebin.sh.tmpy`;

## DEBUG
#cat /tmp/pastebin.sh.tmpy

## cleanup
rm /tmp/pastebin.sh.tmp*;

exit 0;


diky a regards by ntz ;)

[attachment deleted by admin]
Název: Re: skript na pastebin.ca (!starenka help)
Přispěvatel: starenka 14 Ledna 2009, 22:30:07
diky za duveru :)  chyba je v tom, ze ten soubor (jak si naznacil musis enkodovat) - prave na tom pracuju....

mezitim...
Kód: [Vybrat]
echo "name=$USER&type=33&description=/tmp/pastebin.sh.tmpx&expiry=&s=Submit+Post&content=" > /tmp/pastebin.sh.tmpxten type=33, je presne ten typ souboru po kterym touzis. Staci se podivat na zdrojak ty stranky a uvidis, kterej type je kterej jazyk (viz http://pastebin.ca/1308388 )

#jinak bych doporucil o dost sviznejsi a o dost lepsim API vybavenej openpaste.org http://openpaste.org/en/help/#api-xmlprc
Název: Re: skript na pastebin.ca (!starenka help)
Přispěvatel: starenka 14 Ledna 2009, 22:52:01
OK, rozlousknuto - staci poslat tenhle prikaz:

Kód: [Vybrat]
curl -H "Expect:" -d "name=wanka&type=33&description=/tmp/pastebin.sh.tmpx&expiry=&s=Submit+Post&api=C9cRIO8m/9y8Cs0nVs0F" --data-urlencode content@/junk/test http://pastebin.ca/quiet-paste.php
name - jmeno pod kterym pastuju (mel si tam promenou - vrat si ji)
type - jazyk - viz muj predeslej post
description - popis
expiry - kry expiruje
api - nahradit promenou

za zavinacem je vstupni soubor - uz se enkoduje

regardz ja

poc:
Kód: [Vybrat]
starenka@kosmik1:~$  curl -d "name=wanka&type=33&description=/tmp/pastebin.sh.tmpx&expiry=&s=Submit+Post&api=C9cRIO8m/9y8Cs0nVs0FraRx7U0pHsuc" --data-urlencode content@/junk/test http://pastebin.ca/quiet-paste.php
SUCCESS:1308420starenka@kosmik1:~$

ps. do toho skriptu uz si to snadno nahodis, me by to trvalo den ;)
pps. mozna by nebylo naskodu (pokud bezi) pastnout url do klipperu (dcop klipper klipper setClipboardContents "$PASTE"
)
Název: Re: skript na pastebin.ca (!starenka help)
Přispěvatel: nettezzaumana 14 Ledna 2009, 23:08:35
diky babizno !!! mas to u me..

od ted ti budu do konce ledna onikat a rikat Velky Vezire .. takze ::

ponizene diky Velky Vezire !! ;)
Název: Re: skript na pastebin.ca (!starenka help)
Přispěvatel: starenka 14 Ledna 2009, 23:13:34
Neni zac, pak pastni upravenj skript, bude se hodit  ;D
Název: Re: skript na pastebin.ca (!starenka help)
Přispěvatel: starenka 14 Ledna 2009, 23:16:38
jinak ten typ souboru bych resil asociativnim polem {'1':'jazyk' .... } (pokud to v bashi existuje)  a co je to za type by snad mel rozlousknout prikaz file
Název: Re: skript na pastebin.ca (!starenka help)
Přispěvatel: nettezzaumana 15 Ledna 2009, 03:23:08
tak puvodni prispevek updatnut .. zustal jsem nakonec bez curlu, neb primarne chci tento skript pouzivat na solarisu ..
Název: Re: skript na pastebin.ca (!starenka help)
Přispěvatel: starenka 10 Října 2009, 01:16:29
tady je skript obsluhujici openpaste.org (vizujte -h)
https://gist.github.com/761644
Název: Re: skript na pastebin.ca (!starenka help)
Přispěvatel: nettezzaumana 10 Října 2009, 11:58:54
tady je skript obsluhujici openpaste.org (vizujte -h)
http://source.starenka.net/openpyster.py
.. poor python iz for weak