#!/bin/bash
#rcrsn51 2010-12-20
#v2.0 for multi-user 2012-06-22

[ $(id -u) -ne 0 ] && exec gtksu "YASSM" "$0" "$@"

COMBOWIDGET () {
HEADING=$1; DATA=$2
COMBOLIST=""
for P in $DATA; do
  COMBOLIST="$COMBOLIST<item>$P</item>"
done

export DIALOG="
<window title=\"YASSM\">
<vbox>
   <frame $HEADING>
    <combobox>
      <variable>COMBOPICK</variable>
     $COMBOLIST 
    </combobox>
   </frame>
  <hbox>
     <button><label>Select</label></button>
     <button><label>Cancel</label></button>
  </hbox>
</vbox>
</window>
"

I=$IFS; IFS=""
for STATEMENTS in  $(gtkdialog3 -c --program DIALOG); do
  eval $STATEMENTS
done
IFS=$I

if [ "$EXIT" = "Select" ]; then
  echo $COMBOPICK
else
  echo ""
fi
}

################################

YASSMDIR=$HOME/.config/yassm
[ -d $YASSMDIR ] || mkdir -p $YASSMDIR

SETFILE=$YASSMDIR/samba-login.set
[ -f $SETFILE ] || cp /usr/local/yassm/samba-login.set $YASSMDIR

. $SETFILE

[ -z "$USER" ] && USER=\"\"
[ -z "$PASSWORD" ] && PASSWORD=\"\"
[ -z "$SHARE" ] && SHARE=\"\"
[ -z "$SERVER" ] && SERVER=\"\"
[ -z "$OPTIONS" ] && OPTIONS=\"\"

export DIALOG="
<window title=\"YASSM v2.5\" icon-name=\"gtk-connect\">
  <vbox>
    <hbox>
      <text><label>Username</label></text>
      <entry>
        <variable>USER</variable>
        <default>$USER</default>
      </entry>
    </hbox>
    <hbox>
      <text><label>Password  </label></text>
      <entry>
         <variable>PASSWORD</variable>
         <default>$PASSWORD</default>
         <visible>password</visible>
      </entry>
    </hbox>
    <hbox>
      <text><label>Share       </label></text>
      <entry>
        <variable>SHARE</variable>
        <default>$SHARE</default>
      </entry>
    </hbox>
    <hbox>
      <text><label>Server      </label></text>
      <entry>
        <variable>SERVER</variable>
        <default>$SERVER</default>
      </entry>
    </hbox>
    <hbox>
      <text><label>Options    </label></text>
      <entry>
        <variable>OPTIONS</variable>
        <default>$OPTIONS</default>
      </entry>
    </hbox>
    <hbox>
      <checkbox>
        <label>Set       </label>
        <variable>SET</variable>
      </checkbox>
      <button><label>Help</label></button> 
      <button><label>Shares</label></button>
      <button><label>Unmount</label></button> 
      <button><label>Mount</label></button>
      <button><label>Cancel</label></button>
    </hbox>
  </vbox>
</window>"

I=$IFS; IFS=""
for STATEMENTS in  $(gtkdialog3 -c --program DIALOG); do
  eval $STATEMENTS
done
IFS=$I

if [ "$SET" = "true" ]; then
  rm $SETFILE
  for F in USER PASSWORD SHARE SERVER OPTIONS; do
    eval V=\$$F 
    if [ -n "$V" ]; then
      echo $F=\"$V\" >> $SETFILE
    else
      echo $F=\"\" >> $SETFILE
    fi
  done
fi

[ "$EXIT" = "Cancel" -o "$EXIT" = "abort" ] && exit

[ "$EXIT" = "Help" ] && exec defaultbrowser http://www.murga-linux.com/puppy/viewtopic.php?t=63090

if [ "$EXIT" = "Shares" ]; then
  [ -z "$USER" ] && USER="guest"
  [ -z "$SERVER" ] && SERVER="None"
  SHARES=$(smbclient -U $USER%$PASSWORD -gL $SERVER 2> /dev/null | grep "Disk" | grep -v "$." | cut -d "|" -f 2 | tr -s " " ".")
  [ -z "$SHARES" ] && SHARES="None"
  SHARE=$(COMBOWIDGET "Shares on $SERVER" "$SHARES")
  rm $SETFILE
  for F in USER PASSWORD SHARE SERVER OPTIONS; do
    eval V=\$$F 
    if [ -n "$V" ]; then
      echo $F=\"$V\" >> $SETFILE
    else
      echo $F=\"\" >> $SETFILE
    fi
  done
  exec $0
fi

if [ "$EXIT" = "Unmount" ]; then
  for M in $HOME/YASSM/*; do
    umount.cifs -n $M > /dev/null 2>&1
    rmdir $M > /dev/null 2>&1
  done
  Xdialog --title "YASSM" --infobox "All shares unmounted" 0 0 2000
  exit
fi

if [ -z "$SHARE" ]; then
  SHARE=$USER
fi
if [ -z "$SHARE" ]; then
  Xdialog --title "YASSM" --msgbox "No share selected!" 0 0
  exit
fi

if [ -z "$SERVER" ]; then
  Xdialog --title "YASSM" --msgbox "No server selected!" 0 0
  exit
fi

[ -z "$USER" ] && USER="guest"
AUTH="-o username="$USER
if [ -n "$PASSWORD" ]; then
  AUTH=$AUTH",password="$PASSWORD
else
  AUTH=$AUTH",guest"
fi

ME=${HOME##*/}
AUTH=$AUTH",uid=$ME,gid=$ME"

if [ -n "$OPTIONS" ]; then
  OPTIONS=`echo $OPTIONS | tr -d " " | tr ";" ","`
  AUTH=$AUTH","$OPTIONS
fi

MYSHARE=$HOME/YASSM/$SHARE@$SERVER
MYSHARE="${MYSHARE// /.}"		#strip out nasty Mac spaces
mkdir -p $MYSHARE
umount.cifs -n $MYSHARE > /dev/null 2>&1   #in case it's already mounted

echo $SERVER | grep -q "?"
if [ $? -gt 0 ]; then
  IP=`nmblookup $SERVER | tail -n 1 | cut -f 1 -d " "`
  [ "$IP" = "name_query" ] && IP=$SERVER
else
  SUBNET=${SERVER#*\?}
  SERVER=${SERVER%\?*}
  . /usr/local/yassm/server2ip-func
  IP=$(SERVER2IP $SERVER $SUBNET)
fi

SHARE="${SHARE//./ }"
mount.cifs //$IP/"$SHARE" $MYSHARE $AUTH > /dev/null 2>&1

if [ $? -eq 0 -o $? -eq 16 ]; then
  rox $MYSHARE
  ls $MYSHARE > /dev/null
else
  Xdialog --title "YASSM" --msgbox "No connection to $SHARE!" 0 0
fi
