From e66dd7b11b85646a64fba872c7ae49f84d103381 Mon Sep 17 00:00:00 2001 From: Pawel Tomak Date: Tue, 15 Dec 2009 11:36:28 +0100 Subject: Script Init --- eFormFiller.sh | 104 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100755 eFormFiller.sh diff --git a/eFormFiller.sh b/eFormFiller.sh new file mode 100755 index 0000000..7fc2447 --- /dev/null +++ b/eFormFiller.sh @@ -0,0 +1,104 @@ +#!/bin/sh +# enhanced html form (eg for logins) filler (and manager) for uzbl. + +# uses settings files like: $keydir/ +# files contain lines like: !profile= +# (fieldtype): +# profile_name should be replaced with a name that will tell sth about that profile +# fieldtype can be text or password - only for information pupropse (auto-generated) - don't change that + +# user arg 1: +# edit: force editing the file (falls back to new if not found) +# new: start with a new file. +# load: try to load from file into form +# add: try to add another profile to an existing file + +# something else (or empty): if file not available: new, otherwise load. + +# config dmenu colors and prompt +NB="#0f0f0f" +NF="#4e7093" +SB="#003d7c" +SF="#3a9bff" +PROMPT="Choose profile" + +keydir=${XDG_DATA_HOME:-$HOME/.local/share}/uzbl/dforms + +[ -d "`dirname $keydir`" ] || exit 1 +[ -d "$keydir" ] || mkdir "$keydir" + +editor=${VISUAL} +if [[ -z ${editor} ]]; then + editor='xterm -e vim' +fi + +config=$1; shift +pid=$1; shift +xid=$1; shift +fifo=$1; shift +socket=$1; shift +url=$1; shift +title=$1; shift +action=$1 + +[ -d $keydir ] || mkdir $keydir || exit 1 + +if [ "$action" != 'edit' -a "$action" != 'new' -a "$action" != 'load' -a "$action" != 'add' ] +then + action=new + [[ -e $keydir/$domain ]] && action=load +elif [ "$action" == 'edit' ] && [[ ! -e $keydir/$domain ]] +then + action=new +fi +domain=$(echo $url | sed 's/\(http\|https\):\/\/\([^\/]\+\)\/.*/\2/') + +if [ "$action" = 'load' ] +then + [[ -e $keydir/$domain ]] || exit 2 + if [[ `cat $keydir/$domain|grep "!profile"|wc -l` -gt 1 ]] + then + menu=`cat $keydir/$domain| \ + sed -n 's/^!profile=\([^[:blank:]]\+\)/\1/p'` + option=`echo -e -n "$menu"| dmenu -nb "${NB}" -nf "${NF}" -sb "${SB}" -sf "${SF}" -p "${PROMPT}"` + fi + + cat $keydir/$domain | \ + sed -n -e "/^!profile=${option}/,/^!profile=/p" | \ + sed -n -e 's/\([^(]\+\)([^)]\+):[ ]*\([^[:blank:]]\+\)/js document.getElementsByName("\1")[0].value="\2";/p' | \ + sed -e 's/@/\\@/p' >> $fifo +else + if [[ "$action" == 'new' || "$action" == 'add' ]] + then + if [ "$action" == 'new' ] + then + echo "!profile=NAME_THIS_PROFILE$RANDOM" > $keydir/$domain + else + echo "!profile=NAME_THIS_PROFILE$RANDOM" >> $keydir/$domain + fi + # + # 2. and 3. line (tr -d and sed) are because, on gmail login for example, + # tag is splited into lines + # ex: + # + # So, tr removes all new lines, and sed inserts new line after each > + # Next sed selects only tags and only with type == "text" or == "password" + # If type is first and name is second, then another sed will change their order + # so the last sed will make output + # text_from_the_name_attr(text or password): + # + # login(text): + # passwd(password): + # + curl -L "$url" | \ + tr -d '\n' | \ + sed 's/>/>\n/g' | \ + sed -n 's/.*\(]\+>\).*/\1/;/type="\(password\|text\)"/Ip' | \ + sed 's/\(.*\)\(type="[^"]\+"\)\(.*\)\(name="[^"]\+"\)\(.*\)/\1\4\3\2\5/I' | \ + sed 's/.*name="\([^"]\+\)".*type="\([^"]\+\)".*/\1(\2): /I' >> $keydir/$domain + fi + [[ -e $keydir/$domain ]] || exit 3 #this should never happen, but you never know. + $editor $keydir/$domain #TODO: if user aborts save in editor, the file is already overwritten +fi -- cgit v1.2.3