commit 4ed8184a04fbe3d750f461c2329fafd095836c4b
parent 6ec7e0052c655bc22f8e62adadfadaef41f07040
Author: parazyd <parazyd@dyne.org>
Date: Mon, 7 Mar 2016 15:47:50 +0100
delete and backup hooks
Diffstat:
A | gmakehook | | | 481 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
D | makehook.sh | | | 360 | ------------------------------------------------------------------------------- |
2 files changed, 481 insertions(+), 360 deletions(-)
diff --git a/gmakehook b/gmakehook
@@ -0,0 +1,481 @@
+#!/usr/bin/env zsh
+#
+# Zenity helper script to make tombox hooks more user-friendly
+#
+# ~ parazyd
+
+typeset -H UNDERTAKER
+typeset -H TOMBSIZE
+typeset -H TOMBNAME
+typeset -H sudoassword
+
+keymount="/media/tombkey"
+coffindot="$keymount/.coffin"
+hooks="$coffindot/hook"
+
+# {{{ icon
+MONMORT="/tmp/monmort.png"
+ICONB64="iVBORw0KGgoAAAANSUhEUgAAACAAAAAgEAQAAACJ4248AAAAAmJLR0T//xSrMc0AAAAJcEhZcwAA
+AEgAAABIAEbJaz4AAAAJdnBBZwAAACAAAAAgAIf6nJ0AAADrSURBVFjD5ZZBEsMgCEU/TO/l2XMx
+04VjQ1K1CDYswkwWJnH+E/EL4RP7jluDCACoim/bvfIpFQiKEJcQHCN9xEtLCgDMQM7f33sZrPNG
+/05loCXujfAtCAVgNgLwIuycjQAra8G9Fm823ADabPRA1QDelfZAVUZktWrNvL8ew5YTnsStx3Am
+AyOInJVbYF1prZuU+tsR1g9UMDqGuo5oFWhtSEQNEGmeVrqv73Tj0pIZirANMYqRhyw5Bb9MauSW
+SwA8l9OzG5LnAsiiDQGQRRvaEwInK54J390hndAIYIeQ4k6AAjE/h06ab0SjP08MA1xDAAAAJXRF
+WHRkYXRlOmNyZWF0ZQAyMDExLTAxLTEyVDA5OjM0OjI0KzAxOjAwo//d7wAAACV0RVh0ZGF0ZTpt
+b2RpZnkAMjAxMS0wMS0xMlQwOTozNDoyNCswMTowMNKiZVMAAAAASUVORK5CYII="
+print "$ICONB64" | base64 --decode > $MONMORT
+# }}}
+
+# {{{ sudo functions
+function _sudo {
+ sudoassword=$(ask_password "Insert sudo password for user $USER")
+ print "$sudoassword\n" | sudo -S -v
+ _sudowrong
+}
+function _sudowrong {
+ if [[ $? == 1 ]]; then
+ sudoassword=$(ask_password "Wrong password. Insert sudo password for user $USER")
+ print "$sudoassword\n" | sudo -S -v
+ _sudowrong
+ fi
+}
+# }}}
+
+# {{{ Some pinentry code shamelessly stolen from tomb
+# Ask user for a password
+# Wraps around the pinentry command, from the GnuPG project, as it
+# provides better security and conveniently use the right toolkit.
+ask_password() {
+ local description="$1"
+ local title="${2:-Enter tomb password.}"
+ local output
+ local password
+ local gtkrc
+ local theme
+
+ # Distributions have broken wrappers for pinentry: they do
+ # implement fallback, but they disrupt the output somehow. We are
+ # better off relying on less intermediaries, so we implement our
+ # own fallback mechanisms. Pinentry supported: curses, gtk-2, qt4
+ # and x11.
+
+ # make sure LANG is set, default to C
+ LANG=${LANG:-C}
+
+
+ if [[ "$DISPLAY" = "" ]]; then
+
+ if _is_found "pinentry-curses"; then
+ output=`cat <<EOF | pinentry-curses
+OPTION ttyname=$TTY
+OPTION lc-ctype=$LANG
+SETTITLE $title
+SETDESC $description
+SETPROMPT Password:
+GETPIN
+EOF`
+ fi
+
+ else # a DISPLAY is found to be active
+
+ # customized gtk2 dialog with a skull (if extras are installed)
+ if _is_found "pinentry-gtk-2"; then
+
+ gtkrc=""
+ theme=/share/themes/tomb/gtk-2.0-key/gtkrc
+ for i in /usr/local /usr; do
+ [[ -r $i/$theme ]] && {
+ gtkrc="$i/$theme"
+ break
+ }
+ done
+ [[ "$gtkrc" = "" ]] || {
+ gtkrc_old="$GTK2_RC_FILES"
+ export GTK2_RC_FILES="$gtkrc"
+ }
+ output=`cat <<EOF | pinentry-gtk-2
+OPTION ttyname=$TTY
+OPTION lc-ctype=$LANG
+SETTITLE $title
+SETDESC $description
+SETPROMPT Password:
+GETPIN
+EOF`
+ [[ "$gtkrc" = "" ]] || export GTK2_RC_FILES="$gtkrc_old"
+
+ # TODO QT4 customization of dialog
+ elif _is_found "pinentry-qt4"; then
+
+ # TODO X11 customization of dialog
+ elif _is_found "pinentry-x11"; then
+
+ output=`cat <<EOF | pinentry-x11
+OPTION ttyname=$TTY
+OPTION lc-ctype=$LANG
+SETTITLE $title
+SETDESC $description
+SETPROMPT Password:
+GETPIN
+EOF`
+
+ else
+
+ if _is_found "pinentry-curses"; then
+
+ output=`cat <<EOF | pinentry-curses
+OPTION ttyname=$TTY
+OPTION lc-ctype=$LANG
+SETTITLE $title
+SETDESC $description
+SETPROMPT Password:
+GETPIN
+EOF`
+ else
+ fi
+
+ fi
+
+ fi # end of DISPLAY block
+
+ # parse the pinentry output
+ for i in ${(f)output}; do
+ [[ "$i" =~ "^ERR.*" ]] && {
+ print "canceled"
+ return 1 }
+
+ # here the password is found
+ [[ "$i" =~ "^D .*" ]] && password="${i##D }"
+ done
+
+ [[ "$password" = "" ]] && {
+ print "empty"
+ return 1 }
+
+ print "$password"
+ return 0
+}
+
+_is_found() {
+ # returns 0 if binary is found in path
+ [[ "$1" = "" ]] && return 1
+ command -v "$1" 1>/dev/null 2>/dev/null
+ return $?
+}
+# }}}
+
+# {{{ _clean - Clean function, removes sensitive stuff from memory
+function _clean {
+ TOMBSIZE="$rr"; unset TOMBSIZE
+ TOMBNAME="$rr"; unset TOMBNAME
+ UNDERTAKER="$rr"; unset UNDERTAKER
+ sudoassword="$rr"; unset sudoassword
+}
+# }}}
+
+# {{{ zenity dialogs
+function _zenques {
+ zenity \
+ --window-icon="$MONMORT" \
+ --question \
+ --text="$1"
+}
+function _zenwarn {
+ zenity \
+ --window-icon="$MONMORT" \
+ --warning \
+ --title="$1" \
+ --text="$2"
+}
+function _zeninfo {
+ zenity \
+ --window-icon="$MONMORT" \
+ --info \
+ --title="$1" \
+ --text="$2"
+}
+function _zenerr {
+ zenity \
+ --window-icon="$MONMORT" \
+ --error \
+ --title="$1" \
+ --text="$2"
+}
+function _zenentry {
+ zenity \
+ --window-icon="$MONMORT" \
+ --entry \
+ --title="$1" \
+ --text="$2" \
+ --entry-text="$3"
+}
+# }}}
+
+function _umountkey { sudo umount $keymount && sudo rmdir $keymount }
+function _mountkey {
+ sudo umount $USBKEY
+ if [[ $? = 1 ]]; then
+ _zenerr "Error" "Your key is mounted somewhere and I've run into issues. Please unmount it and re-run."
+ _clean && exit
+ fi
+ if [[ -d $keymount ]]; then
+ _zenwarn "Warning" "Something is already mounted on $keymount. Please check and re-run."
+ _clean && exit
+ fi
+
+ sudo mkdir -p $keymount
+ sudo mount $USBKEY $keymount
+
+ if ! [[ -d $coffindot ]]; then
+ sudo mkdir $coffindot
+ fi
+}
+
+function _main {
+ _clean
+ cmnd=$(zenity \
+ --window-icon="$MONMORT" \
+ --title="tombox hook helper" \
+ --list \
+ --hide-header \
+ --text="tombox hook helper\nChoose what hook you want to create:" \
+ --separator=" # " \
+ --column=Function \
+ --column=Description \
+ "create" "a new tomb on the tombox" \
+ "delete" "a tomb from the tombox" \
+ "backup" "a tomb from the tombox" \
+ "foobar" "on the tombox")
+ eval "_$cmnd"
+}
+
+# {{{ _create
+function _create {
+ vars=$(zenity \
+ --window-icon="$MONMORT" \
+ --title="Create a new tomb" \
+ --forms \
+ --text="Enter the info for your new tomb" \
+ --separator=":" \
+ --add-entry="Tombox username" \
+ --add-entry="Tomb name" \
+ --add-entry="Tomb's size in MiB")
+ if [[ $? = 1 ]]; then
+ exec _main
+ else
+ UNDERTAKER=${vars[(ws@:@)1]}
+ re='^[A-Za-z0-9]+$'
+ if ! [[ $UNDERTAKER =~ $re ]]; then
+ _zenwarn "Warning" "Invalid characters in username!"
+ exec _create
+ fi
+ TOMBNAME=${vars[(ws@:@)2]}
+ if ! [[ $TOMBNAME =~ $re ]]; then
+ _zenwarn "Warning" "Invalid characters in tomb name!"
+ exec _create
+ fi
+ TOMBSIZE=${vars[(ws@:@)3]}
+ re='^[0-9]+$'
+ if ! [[ $TOMBSIZE =~ $re ]]; then
+ _zenwarn "Warning" "Invalid characters in tomb size!"
+ exec _create
+ fi
+ fi
+
+ feats=$(zenity \
+ --window-icon="$MONMORT" \
+ --title="Choose features" \
+ --text="Choose features you wish to include with your tomb" \
+ --list \
+ --checklist \
+ --separator=":" \
+ --column=Yes/No \
+ --column=Feature \
+ "FALSE" "webdav" \
+ "FALSE" "sshfs" \
+ "FALSE" "ipfs")
+ if [[ $? = 1 ]]; then; exec _main; fi
+
+ TOMBHOOKS=$(_zenques "Choose 'Yes' if you want to edit your tomb's bind-hooks and post-hooks")
+ if [[ $? = 0 ]]; then
+ bindhook=$(zenity \
+ --window-icon="$MONMORT" \
+ --title="bind-hooks" \
+ --checkbox="Accept these bind-hooks" \
+ --text-info \
+ --editable)
+ if [[ $? = 1 ]]; then; exec _main; fi
+
+ posthook=$(zenity \
+ --window-icon="$MONMORT" \
+ --title="post-hooks" \
+ --checkbox="Accept these post-hooks" \
+ --text-info \
+ --editable)
+ if [[ $? = 1 ]]; then; exec _main; fi
+ fi
+
+ _zeninfo "gmakehook" "Plug in your USB key and click OK."
+ lsblk -npl | awk -F" " '{print $1 " " $4}' | grep '^/dev/sd.. ' > ./.devs
+
+ USBKEY=$(zenity \
+ --window-icon="$MONMORT" \
+ --title="Choose USB key" \
+ --list \
+ --text="Choose your USB key to use" \
+ --separator=" " \
+ --column="Device path" \
+ --column="Device size" \
+ $(cat ./.devs))
+ if [[ $? = 1 ]]; then; exec _main; fi
+
+ _sudo
+ _mountkey
+ if [[ -f $hooks ]]; then
+ _zenques "Warning! There is already an existing hook. Do you want to overwrite?"
+ if [[ $? = 1 ]]; then
+ _zeninfo "gmakehook" "Postponing..." && _umountkey && exec _main
+ else
+ print "create:${UNDERTAKER}:${TOMBNAME}:${TOMBSIZE}:${feats}" | sudo tee $hooks
+ if [[ -n $bindhook ]]; then
+ print "$bindhook" | sudo tee $coffindot/bindhooks
+ fi
+ if [[ -n $posthook ]]; then
+ print "$posthook" | sudo tee $coffindot/posthooks
+ fi
+ _umountkey && _zeninfo "Success" "$hooks written successfully!\nPlug the USB key in a tombox to activate it."
+ exec _main
+ fi
+ else
+ print "create:${UNDERTAKER}:${TOMBNAME}:${TOMBSIZE}:${feats}" | sudo tee $hooks
+ if [[ -n $bindhook ]]; then
+ print "$bindhook" | sudo tee $coffindot/bindhooks
+ fi
+ if [[ -n $posthook ]]; then
+ print "$posthook" | sudo tee $coffindot/posthooks
+ fi
+ _umountkey && _zeninfo "Success" "$hooks written successfully!\nPlug the USB key in the tombox to activate it."
+ exec _main
+ fi
+}
+# }}}
+
+# {{{ _delete
+function _delete {
+ vars=$(zenity \
+ --window-icon="$MONMORT" \
+ --title="Delete an existing tomb" \
+ --forms \
+ --text="Enter the info of your tomb" \
+ --separator=":" \
+ --add-entry="Tombox username" \
+ --add-entry="Tomb name")
+ if [[ $? = 1 ]]; then
+ exec _main
+ else
+ UNDERTAKER=${vars[(ws@:@)1]}
+ re='^[A-Za-z0-9]+$'
+ if ! [[ $UNDERTAKER =~ $re ]]; then
+ _zenwarn "Warning" "Invalid characters in username!"
+ exec _delete
+ fi
+ TOMBNAME=${vars[(ws@:@)2]}
+ if ! [[ $TOMBNAME =~ $re ]]; then
+ _zenwarn "Warning" "Invalid characters in tomb name!"
+ exec _delete
+ fi
+ fi
+
+ _zeninfo "gmakehook" "Plug in your USB key and click OK."
+ lsblk -npl | awk -F" " '{print $1 " " $4}' | grep '^/dev/sd.. ' > ./.devs
+
+ USBKEY=$(zenity \
+ --window-icon="$MONMORT" \
+ --title="Choose USB key" \
+ --list \
+ --text="Choose your USB key to use" \
+ --separator=" " \
+ --column="Device path" \
+ --column="Device size" \
+ $(cat ./.devs))
+ if [[ $? = 1 ]]; then; exec _main; fi
+
+ _sudo
+ _mountkey
+ if [[ -f $hooks ]]; then
+ _zenques "Warning! There is already an existing hook. Do you want to overwrite?"
+ if [[ $? = 1 ]]; then
+ _zeninfo "gmakehook" "Postponing..." && _umountkey && exec _main
+ else
+ print "delete:${UNDERTAKER}:${TOMBNAME}" | sudo tee $hooks
+ _umountkey && _zeninfo "Success" "$hooks written successfully!\nPlug the USB key in a tombox to activate it."
+ exec _main
+ fi
+ else
+ print "delete:${UNDERTAKER}:${TOMBNAME}" | sudo tee $hooks
+ _umountkey && _zeninfo "Success" "$hooks written successfully!\nPlug the USB key in the tombox to activate it."
+ exec _main
+ fi
+}
+# }}}
+
+# {{{ _backup
+function _backup {
+ vars=$(zenity \
+ --window-icon="$MONMORT" \
+ --title="Backup an existing tomb" \
+ --forms \
+ --text="Enter the info of your tomb" \
+ --separator=":" \
+ --add-entry="Tombox username" \
+ --add-entry="Tomb name")
+ if [[ $? = 1 ]]; then
+ exec _main
+ else
+ UNDERTAKER=${vars[(ws@:@)1]}
+ re='^[A-Za-z0-9]+$'
+ if ! [[ $UNDERTAKER =~ $re ]]; then
+ _zenwarn "Warning" "Invalid characters in username!"
+ exec _delete
+ fi
+ TOMBNAME=${vars[(ws@:@)2]}
+ if ! [[ $TOMBNAME =~ $re ]]; then
+ _zenwarn "Warning" "Invalid characters in tomb name!"
+ exec _delete
+ fi
+ fi
+
+ _zeninfo "gmakehook" "Plug in your USB key and click OK."
+ lsblk -npl | awk -F" " '{print $1 " " $4}' | grep '^/dev/sd.. ' > ./.devs
+
+ USBKEY=$(zenity \
+ --window-icon="$MONMORT" \
+ --title="Choose USB key" \
+ --list \
+ --text="Choose your USB key to use" \
+ --separator=" " \
+ --column="Device path" \
+ --column="Device size" \
+ $(cat ./.devs))
+ if [[ $? = 1 ]]; then; exec _main; fi
+
+ _sudo
+ _mountkey
+ if [[ -f $hooks ]]; then
+ _zenques "Warning! There is already an existing hook. Do you want to overwrite?"
+ if [[ $? = 1 ]]; then
+ _zeninfo "gmakehook" "Postponing..." && _umountkey && exec _main
+ else
+ print "backup:${UNDERTAKER}:${TOMBNAME}" | sudo tee $hooks
+ _umountkey && _zeninfo "Success" "$hooks written successfully!\nPlug the USB key in a tombox to activate it."
+ exec _main
+ fi
+ else
+ print "backup:${UNDERTAKER}:${TOMBNAME}" | sudo tee $hooks
+ _umountkey && _zeninfo "Success" "$hooks written successfully!\nPlug the USB key in the tombox to activate it."
+ exec _main
+ fi
+}
+# }}}
+
+function _ { rm ./.devs }
+exec _main
diff --git a/makehook.sh b/makehook.sh
@@ -1,360 +0,0 @@
-#!/usr/bin/env zsh
-#
-# Zenity helper script to make tombox hooks more user-friendly
-#
-# ~ parazyd
-
-typeset -H UNDERTAKER
-typeset -H TOMBPASS
-typeset -H TOMBSIZE
-typeset -H TOMBNAME
-typeset -H sudoassword
-
-keymount="/media/tombkey"
-coffindot="$keymount/.coffin"
-hooks="$coffindot/hook"
-
-lsblk -npl | awk -F" " '{print $1}' | grep ^/dev/sd.. > ./.devs
-
-# {{{ icon
-MONMORT="/tmp/monmort.png"
-ICONB64="iVBORw0KGgoAAAANSUhEUgAAACAAAAAgEAQAAACJ4248AAAAAmJLR0T//xSrMc0AAAAJcEhZcwAA\n
-AEgAAABIAEbJaz4AAAAJdnBBZwAAACAAAAAgAIf6nJ0AAADrSURBVFjD5ZZBEsMgCEU/TO/l2XMx\n
-04VjQ1K1CDYswkwWJnH+E/EL4RP7jluDCACoim/bvfIpFQiKEJcQHCN9xEtLCgDMQM7f33sZrPNG\n
-/05loCXujfAtCAVgNgLwIuycjQAra8G9Fm823ADabPRA1QDelfZAVUZktWrNvL8ew5YTnsStx3Am\n
-AyOInJVbYF1prZuU+tsR1g9UMDqGuo5oFWhtSEQNEGmeVrqv73Tj0pIZirANMYqRhyw5Bb9MauSW\n
-SwA8l9OzG5LnAsiiDQGQRRvaEwInK54J390hndAIYIeQ4k6AAjE/h06ab0SjP08MA1xDAAAAJXRF\n
-WHRkYXRlOmNyZWF0ZQAyMDExLTAxLTEyVDA5OjM0OjI0KzAxOjAwo//d7wAAACV0RVh0ZGF0ZTpt\n
-b2RpZnkAMjAxMS0wMS0xMlQwOTozNDoyNCswMTowMNKiZVMAAAAASUVORK5CYII="
-echo -e "$ICONB64" | base64 --decode > $MONMORT
-# }}}
-
-# {{{ sudo functions
-function _sudo {
- sudoassword=$(ask_password "Insert sudo password for user $USER")
- echo -e "$sudoassword\n" | sudo -S -v
- _sudowrong
-}
-function _sudowrong {
- if [[ $? == 1 ]]; then
- sudoassword=$(ask_password "Wrong password. Insert sudo password for user $USER")
- echo -e "$sudoassword\n" | sudo -S -v
- _sudowrong
- fi
-}
-# }}}
-
-# {{{ Some pinentry code shamelessly stolen from tomb
-# Ask user for a password
-# Wraps around the pinentry command, from the GnuPG project, as it
-# provides better security and conveniently use the right toolkit.
-ask_password() {
- local description="$1"
- local title="${2:-Enter tomb password.}"
- local output
- local password
- local gtkrc
- local theme
-
- # Distributions have broken wrappers for pinentry: they do
- # implement fallback, but they disrupt the output somehow. We are
- # better off relying on less intermediaries, so we implement our
- # own fallback mechanisms. Pinentry supported: curses, gtk-2, qt4
- # and x11.
-
- # make sure LANG is set, default to C
- LANG=${LANG:-C}
-
-
- if [[ "$DISPLAY" = "" ]]; then
-
- if _is_found "pinentry-curses"; then
- output=`cat <<EOF | pinentry-curses
-OPTION ttyname=$TTY
-OPTION lc-ctype=$LANG
-SETTITLE $title
-SETDESC $description
-SETPROMPT Password:
-GETPIN
-EOF`
- fi
-
- else # a DISPLAY is found to be active
-
- # customized gtk2 dialog with a skull (if extras are installed)
- if _is_found "pinentry-gtk-2"; then
-
- gtkrc=""
- theme=/share/themes/tomb/gtk-2.0-key/gtkrc
- for i in /usr/local /usr; do
- [[ -r $i/$theme ]] && {
- gtkrc="$i/$theme"
- break
- }
- done
- [[ "$gtkrc" = "" ]] || {
- gtkrc_old="$GTK2_RC_FILES"
- export GTK2_RC_FILES="$gtkrc"
- }
- output=`cat <<EOF | pinentry-gtk-2
-OPTION ttyname=$TTY
-OPTION lc-ctype=$LANG
-SETTITLE $title
-SETDESC $description
-SETPROMPT Password:
-GETPIN
-EOF`
- [[ "$gtkrc" = "" ]] || export GTK2_RC_FILES="$gtkrc_old"
-
- # TODO QT4 customization of dialog
- elif _is_found "pinentry-qt4"; then
-
- # TODO X11 customization of dialog
- elif _is_found "pinentry-x11"; then
-
- output=`cat <<EOF | pinentry-x11
-OPTION ttyname=$TTY
-OPTION lc-ctype=$LANG
-SETTITLE $title
-SETDESC $description
-SETPROMPT Password:
-GETPIN
-EOF`
-
- else
-
- if _is_found "pinentry-curses"; then
-
- output=`cat <<EOF | pinentry-curses
-OPTION ttyname=$TTY
-OPTION lc-ctype=$LANG
-SETTITLE $title
-SETDESC $description
-SETPROMPT Password:
-GETPIN
-EOF`
- else
- fi
-
- fi
-
- fi # end of DISPLAY block
-
- # parse the pinentry output
- for i in ${(f)output}; do
- [[ "$i" =~ "^ERR.*" ]] && {
- print "canceled"
- return 1 }
-
- # here the password is found
- [[ "$i" =~ "^D .*" ]] && password="${i##D }"
- done
-
- [[ "$password" = "" ]] && {
- print "empty"
- return 1 }
-
- print "$password"
- return 0
-}
-
-_is_found() {
- # returns 0 if binary is found in path
- [[ "$1" = "" ]] && return 1
- command -v "$1" 1>/dev/null 2>/dev/null
- return $?
-}
-# }}}
-
-# {{{ _clean - Clean function, removes sensitive stuff from memory
-function _clean {
- unset $?
- local rr="$RANDOM"
- while [[ ${#rr} -lt 500 ]]; do
- rr+="$RANDOM"
- done
- TOMBPASS="$rr"; unset TOMBPASS
- TOMBSIZE="$rr"; unset TOMBSIZE
- TOMBNAME="$rr"; unset TOMBNAME
- UNDERTAKER="$rr"; unset UNDERTAKER
- happenz="$rr"; unset happenz
- sudoassword="$rr"; unset sudoassword
- tombtmp="$rr"; unset tombtmp
-}
-# }}}
-
-function _umountkey { sudo umount $keymount && sudo rmdir $keymount }
-function _mountkey {
- if [[ -d $keymount ]]; then
- _zenwarn "Warning" "Something is already mounted on $keymount. Please check and re-run."
- _clean && exit
- fi
-
- sudo mkdir -p $keymount
- sudo mount $USBKEY $keymount
-
- if ! [[ -d $coffindot ]]; then
- sudo mkdir $coffindot
- fi
-
-}
-
-# {{{ zenity dialogs
-function _zenques {
- zenity \
- --window-icon="$MONMORT" \
- --question \
- --text="$1"
-}
-function _zenwarn {
- zenity \
- --window-icon="$MONMORT" \
- --warning \
- --title="$1" \
- --text="$2"
-}
-function _zeninfo {
- zenity \
- --window-icon="$MONMORT" \
- --info \
- --title="$1" \
- --text="$2"
-}
-function _zenerr {
- zenity \
- --window-icon="$MONMORT" \
- --error \
- --title="$1" \
- --text="$2"
-}
-function _zenentry {
- zenity \
- --window-icon="$MONMORT" \
- --entry \
- --title="$1" \
- --text="$2" \
- --entry-text="$3"
-}
-# }}}
-
-function _main {
- _clean
- cmnd=$(zenity \
- --window-icon="$MONMORT" \
- --title="tombox hook helper" \
- --list \
- --hide-header \
- --text="tombox hook helper\nChoose what hook you want to create:" \
- --separator=" # " \
- --column=Function \
- --column=Description \
- "create" "a new tomb on the tombox" \
- "delete" "a tomb from the tombox" \
- "backup" "a tomb from the tombox" \
- "foobar" "on the tombox")
- eval "_$cmnd"
-}
-
-function _create {
- vars=$(zenity \
- --window-icon="$MONMORT" \
- --title="Create a new tomb" \
- --forms \
- --text="Enter the info for your new tomb" \
- --separator=":" \
- --add-entry="Tombox username" \
- --add-entry="Tomb name" \
- --add-entry="Tomb's size in MiB")
- if [[ $? = 1 ]]; then
- exec _main
- else
- UNDERTAKER=${vars[(ws@:@)1]}
- re='^[A-Za-z0-9]+$'
- if ! [[ $UNDERTAKER =~ $re ]]; then
- _zenwarn "Warning" "Invalid characters in username!"
- exec _create
- fi
- TOMBNAME=${vars[(ws@:@)2]}
- if ! [[ $TOMBNAME =~ $re ]]; then
- _zenwarn "Warning" "Invalid characters in tomb name!"
- exec _create
- fi
- TOMBSIZE=${vars[(ws@:@)3]}
- re='^[0-9]+$'
- if ! [[ $TOMBSIZE =~ $re ]]; then
- _zenwarn "Warning" "Invalid characters in tomb size!"
- exec _create
- fi
- fi
-
- feats=$(zenity \
- --window-icon="$MONMORT" \
- --title="Choose features" \
- --text="Choose features you wish to include with your tomb" \
- --list \
- --checklist \
- --separator=":" \
- --column=Yes/No \
- --column=Feature \
- "FALSE" "webdav" \
- "FALSE" "sshfs" \
- "FALSE" "ipfs")
- if [[ $? = 1 ]]; then; exec _main; fi
-
- TOMBHOOKS=$(_zenques "Choose 'Yes' if you want to edit your tomb's bind-hooks and post-hooks")
- if [[ $? = 0 ]]; then
- bindhook=$(zenity \
- --window-icon="$MONMORT" \
- --title="bind-hooks" \
- --checkbox="Accept these bind-hooks" \
- --text-info \
- --editable)
- if [[ $? = 1 ]]; then; exec _main; fi
-
- posthook=$(zenity \
- --window-icon="$MONMORT" \
- --title="post-hooks" \
- --checkbox="Accept these post-hooks" \
- --text-info \
- --editable)
- if [[ $? = 1 ]]; then; exec _main; fi
- fi
-
- USBKEY=$(zenity \
- --window-icon="$MONMORT" \
- --title="Choose USB key" \
- --list \
- --text="Choose your USB key to use" \
- --column="Device path" \
- $(cat ./.devs))
- if [[ $? = 1 ]]; then; exec _main; fi
-
- _sudo
- _mountkey
- if [[ -f $hooks ]]; then
- _zenques "Warning! There is already an existing hook. Do you want to overwrite?"
- if [[ $? = 1 ]]; then
- _zeninfo "Info" "Postponing..." && _umountkey && exec _main
- else
- # edit these to fit new values
- print "create:${UNDERTAKER}:${TOMBNAME}:${TOMBSIZE}:${feats}" | sudo tee $hooks
- if [[ -n $bindhook ]]; then
- print "$bindhook" | sudo tee $coffindot/bindhooks
- fi
- if [[ -n $posthook ]]; then
- print "$posthook" | sudo tee $coffindot/posthooks
- fi
- _umountkey
- _zeninfo "Success" "$hooks written successfully!\nPlug the USB key in a tombox to activate it."
- exec _main
- fi
- else
- # edit these to fit new values
- print "create:${UNDERTAKER}:${TOMBNAME}:${TOMBSIZE}:${feats}" | sudo tee $hooks
- _zeninfo "Success" "$hooks written successfully!\nPlug the USB key in the tombox to activate it." && _umountkey && exec _main
- fi
-
-}
-
-function _ { rm .devs }
-_main