#THIS SOFTWARE IS BETA. USE IT ON YOUR OWN RISK. NO WARRANTIES.
#Source:         Z-Code Software, A Division of Network Computing Devices, Inc.
#Enhanced by:    Reimond Rombey <[email protected]>
#Enhanced by:    Aldo Valente <[email protected]>
#This is free software. Please email to [email protected] if you find
#bugs or have any modifications.
#       $Id: PGP.zmail,v 1.3 1996/05/23 12:52:13 aldo Exp $

# this is my first work with pgp and zmail - so don't expect too much
# currently this is used for
# pgp-support
# uuen/decoding  (programm for uudecoding is called 'uuc', Yours too ?)
# starting Netscape from selectet urls
#
# the code is rather ugly. if there is a chance to get all returncodes
# from pgp to zmail, i'll modify it perhaps.
# but -- i don't use zmail myself
#   aldo

function zmenu_comp_print() {
   zmenu_set_tmpdir
   ## To print both message and headers:
   if $compose_state:(edit_headers)
       textedit set-item compose-header
       textedit save-to-file $__tmpdir/zmsg$$  # Write headers
       compcmd save-to-file $__tmpdir/zmsg$$   # Append body
    else
       compcmd write-to-file $__tmpdir/zmsg$$  # Write body
    endif
   ##
   if $status != 0
       return
   endif
   lpr $__tmpdir/zmsg$$
   remove -f $__tmpdir/zmsg$$
}


function decrypt() {
   #
   #  decrypt also checks for signatures
   #
sh "pgp -w $tmpdir/ztmp$$.asc"
sh "pgp -w $tmpdir/ztmp$$"
sh "pgp -w $tmpdir/ztmp$$.err"

ask "Decrypt message?"
if $status == 0
       write "$tmpdir/ztmp$$"
       ask_pgppass
       if $?__pgppass
               sh -t 3 "pgp +batchmode -z '$__pgppass' $tmpdir/ztmp$$ -o $tmpdir/ztmp$$.out >$tmpdir/ztmp$$.err 2>&1"
               page $tmpdir/ztmp$$.err
               page $tmpdir/ztmp$$.out
       else
               sh "xterm -e pgp -m  $tmpdir/ztmp$$ "
       endif

       sh "pgp -w $tmpdir/ztmp$$"
       sh "pgp -w $tmpdir/ztmp$$.out"
       sh "pgp -w $tmpdir/ztmp$$.err"
endif
}


function getsign() {
   #
   # This function adds the signature of the sender of the mail to the keyring
   #
      ask "Get signature from the message?"
      if $status == 0
         #pipe "cat > $tmpdir/ztmp$$"
         write "$tmpdir/ztmp$$"
         sh "xterm -e pgp -ka $tmpdir/ztmp$$"
         remove -f $tmpdir/ztmp$$
      endif
}


function uudecode() {
       #
       # This function uudecodes mails
       #
          write $tmpdir/ztmp$$
          ask "Using uuc on this Mail (in $HOME/tmp/ if tmp exists ( \n ATTENTION:  \
existing Files will be graceless overwritten by uuc "
         if $status == 0
             sh "if [ -d tmp ] ; then cd tmp; fi;uuc $tmpdir/ztmp$$"
         else
               if $status == 1
                       page   $tmpdir/ztmp$$
               endif
        endif

          remove -f $tmpdir/ztmp$$
}

function zmenu_sort_by() {
   sort $* -r -d -s -a
   if $?main_state:(folder_has_messages)
       redraw .
   endif
}

function ask_pgppass() {

# this checks if it is invoked for the first time.
# if not, it returns 1 (meaning that no passphrase is available) in
# case  $__pgppass is undefined, otherwise returns normally
#
# if it is invoked for the first time, you will be asked if you
# want to give your pass phrase to zmail
#
# WARNING
# giving your pass phrase is considered insecure !
# everyone can go to your terminal and just click in your running zmail
# obtaining your pass phrase.
# also other possibilities exists in a network environment.
# So, better DON'T DO THIS !  ;-)

if $?__already_asked_for_passphrase
       return
else
       ask -default "n" "Do You want to give Your pass phrase to an internal \n \
zmail-variable. You won't get asked this question again \n \
in this zmail-session. If You agree, You won't get asked by pgp  \n \
for Your pass phrase during this session.\n \
                       WARNING: \n \
This may be convenient, but it is considered insecure."

       if $status == 0
               ask -noecho -i __pgppass "please enter your pass phrase"
               if $status == 0
                sh -t 2 "(echo a| pgp -satf +batchmode -z '$__pgppass'>/dev/null 2>&1)"
                       if $status == 0
                               set __already_asked_for_passphrase = 'yes'
                       else
                       echo -d "Pass Phrase failed. Try again next time ;-)"
                       unset __pgppass
                       endif

               endif
       endif
endif


}

function sign() {
       #
       # sign just signs, leaving the message readable
       #

sh "pgp -w $tmpdir/ztmp$$.asc"
sh "pgp -w $tmpdir/ztmp$$"
ask "Do You want to sign message ? (-sat)"
if $status == 0
       ask_pgppass
       compcmd pipe "cat > $tmpdir/ztmp$$"
       compcmd insert-file $tmpdir/ztmp$$
       # save messages first...
       if $?__pgppass
               sh -t 3 "pgp -sat $tmpdir/ztmp$$ +batchmode -z '$__pgppass'"
       else
               sh "xterm -e pgp -sat  $tmpdir/ztmp$$"
       endif

       if -e  $tmpdir/ztmp$$.asc
               compcmd pipe "cat >/dev/null"
               # flush and replace
               compcmd insert-file $tmpdir/ztmp$$.asc
       endif
       sh "pgp -w $tmpdir/ztmp$$"
       sh "pgp -w $tmpdir/ztmp$$.asc"
endif



}

function encrypt() {
       #
       # encrypt asks if you want also sign the message
       #
sh "pgp -w $tmpdir/ztmp$$.asc"
sh "pgp -w $tmpdir/ztmp$$"
ask -default "$user " -i __users "Please enter the userids for whom the file \n \
should be decryptable. Separate Names with spaces"
if $status == 0
       compcmd pipe "cat > $tmpdir/ztmp$$"
       compcmd insert-file $tmpdir/ztmp$$
       # just to be sure that the message won't lost
       ask "Do you wish to also sign this message ?"
       if $status == 0
               ask_pgppass
               if $?__pgppass
                       sh -t 3 "pgp -seat +batchmode $tmpdir/ztmp$$ -z '$__pgppass' $__users"
               else
                       sh "xterm -e pgp -seat  $tmpdir/ztmp$$ $__users"
               endif
       else
               if $status == 1
                       sh -t 3  "pgp -eat +batchmode $tmpdir/ztmp$$  $__users"
               else
                       sh "pgp -w $tmpdir/ztmp$$.asc"
                       sh "pgp -w $tmpdir/ztmp$$"
                       return
               endif

       endif
       if -e $tmpdir/ztmp$$.asc
               compcmd pipe "cat >/dev/null"
               # flush message into data sink
               compcmd insert-file $tmpdir/ztmp$$.asc
               compcmd insert-header X-Encrypt-For: $__users
       endif
       sh "pgp -w $tmpdir/ztmp$$.asc"
       sh "pgp -w $tmpdir/ztmp$$"
endif

}

function uuencode() {
       #
       # uuencoding...
       #
ask -file __file "which file Do you want to uuencode ?"
if $status == 0
       ask -default $__file:t -i __name "under which name this should be extracted ?"
       if $status == 0
               sh "uuencode $__name < $__file > $tmpdir/ztmp$$"
               compcmd insert-file $tmpdir/ztmp$$
               remove -f  $tmpdir/ztmp$$
       endif
endif
}

# From: [email protected] (Bjart Kvarme)
# Subject: Re: launching netscape for URL's within a message.
# Newsgroups: comp.mail.zmail
# Date: 15 May 1996 11:52:08 GMT
# Organization: University of Oslo, Norway
# Reply-To: [email protected]
# Message-ID: <[email protected]>
# References: <[email protected]> <[email protected]>

# Thanks to [email protected] for a couple of useful
# hints. I rewrote his stuff and came up with a more simple and hopfully
# more robust version. It should work with all Motif versions, but I'm
# not sure about Windows.

function __launch_netscape() {
       textedit set-item message-body
       textedit text-get-selection __URL
       setenv URL "$__URL"
       sh "netscape -remote 'openURL($URL)"
       if $status == 0
          echo Opening $URL
       else
          echo Starting netscape
          sh "netscape '$URL' &"
       endif
       unsetenv URL
}



#
# User-Defined Buttons
#
button -no-msgs "Sort" "zmenu_sort_by"
button -no-msgs -window message "PGP Decrypt" "decrypt"
button -no-msgs -window message "PGP Get Signature" "getsign"
button -no-msgs -window compose "PGP Sign" "sign"
button -no-msgs -window compose "PGP Encrypt" "encrypt"
button -no-msgs -window message "UUDecode" "uudecode"
button -no-msgs -window compose "UUEncode" uuencode
button -window message "Netscape" __launch_netscape