sacrist (2745B)
1 #!/usr/bin/env zsh 2 # 3 # Copyright (c) 2016 Dyne.org Foundation 4 # coffin is written and maintained by Ivan J. <parazyd@dyne.org> 5 # 6 # This file is part of coffin 7 # 8 # This source code is free software: you can redistribute it and/or modify 9 # it under the terms of the GNU General Public License as published by 10 # the Free Software Foundation, either version 3 of the License, or 11 # (at your option) any later version. 12 # 13 # This software is distributed in the hope that it will be useful, 14 # but WITHOUT ANY WARRANTY; without even the implied warranty of 15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 # GNU General Public License for more details. 17 # 18 # You should have received a copy of the GNU General Public License 19 # along with this source code. If not, see <http://www.gnu.org/licenses/>. 20 21 coffin_version=0.4 22 23 DEBUG=${DEBUG:-0} 24 QUIET=${QUIET:-0} 25 LOG=${LOG:-""} 26 27 swapoff -a ## I feel so safe 28 29 R="$(dirname $0)" 30 source $R/../share/zuper/zuper 31 32 # USB key 33 vars+=(device keyuuid) 34 vars+=(GRAVEYARD TOMBS TMPTOMBS TOMBPASSWD) 35 vars+=(KEYMOUNT COFFINDOT TTAB HOOKS) 36 vars+=(keypass undertaker tombid) 37 vars+=(happenz device keyuuid) 38 39 ## zsh magic 40 path+=() 41 42 source $R/../share/zlibs/feature-ssh 43 source $R/../share/zlibs/feature-webdav 44 source $R/../share/zlibs/hooks 45 source $R/../share/zlibs/keyops 46 source $R/../share/zlibs/mounts 47 source $R/../share/zlibs/tombops 48 source $R/../share/zlibs/ttab 49 50 source $R/../share/zuper/zuper.init 51 52 LOCK=$R/.lock 53 [[ -f $LOCK ]] && { warn "Lock found. Wait until finished." && exit } 54 touch $LOCK 55 56 # Check for a configuration file 57 # [[ -f ".coffinrc" ]] && parse-config 58 59 device=$1 60 happenz=$2 61 keyuuid=$(lsblk -no uuid $device) 62 63 GRAVEYARD="/home/graveyard" # Our graveyard, with all the tombs 64 TOMBS="$GRAVEYARD/tombs" # Info about opened tombs, holds keyuuid, keyhash and tombid 65 TMPTOMBS="$GRAVEYARD/tmptombs" # Temp tempfile, for updating $tombs 66 TOMBPASSWD="$GRAVEYARD/passwd" 67 KEYMOUNT="/media/tombkey" # Directory where keys get mounted 68 COFFINDOT="$KEYMOUNT/coffin" # .coffin directory on the usb key 69 TTAB="$COFFINDOT/ttab" # Our ttab 70 HOOKS="$COFFINDOT/hook" 71 TOMB="$R/tomb" 72 73 # Main 74 req=(happenz device) 75 ckreq || { 76 die "Not called through mourner. Exiting..." 77 #clean 78 exit 1 79 } 80 81 notice "Coffin v${coffin_version}, Cryptographic office filer for important nuggets" 82 83 [[ $happenz == "CREATE" ]] && { 84 mount-key $device || { die "Key not mounted successfully." && exit 1 } 85 86 if [[ -d "$COFFINDOT" ]]; then 87 act "Found .coffin" 88 [[ -f "$HOOKS" ]] && check-hooks 89 [[ -f "$TTAB" ]] && ttab-magic 90 else 91 warn "No .coffin directory" 92 fi 93 94 umount-key $device 95 rm -f $LOCK && exit 0 || exit 1 96 # cleanup & exit 97 } 98 99 [[ $happenz == "DELETE" ]] && { 100 # TODO: Some kind of endgame 101 rm -f $LOCK && exit 0 || exit 1 102 } 103 104 exit 1