aboutsummaryrefslogtreecommitdiffstats
path: root/bin/cs
blob: 0eb36937c088783786211beb226a81a5f3e3093f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#! /usr/bin/env bash

set -euo pipefail

declare -A devices
valid_name=0
command_name=${1:-}
device_name=${2:-}

. ~/.config/cs.conf
#TODO: do sanity checks on mountpoints and (dm) devices
#TODO: display list of devices available, if no argument given

function open_cryptdevice() {
  if [ -L "/dev/disk/by-uuid/$1" ]; then
    /usr/bin/sudo /usr/bin/cryptsetup luksOpen "/dev/disk/by-uuid/$1" $2
  else
    echo "Error: Device $2 (UUID=$1) is not available."
    return 1
  fi
}

function close_cryptdevice() {
  /usr/bin/sudo /usr/bin/cryptsetup luksClose $1
}

function mount_cryptdevice() {
  if [[ -e "/dev/mapper/$1" ]]; then
    if [[ ! -d "/mnt/$1" ]]; then
      sudo mkdir "/mnt/$1"
    fi
    sudo mount "/dev/mapper/$1" "/mnt/$1"
    if [ $1 = "media" ]; then
      sudo mount --bind /mnt/media/music /mnt/music
      sudo mount --bind /mnt/media/photos /mnt/photos
      if [ ! -h ~/.cache/shotwell ]; then
        ln -s /mnt/photos/shotwell/ ~/.cache/shotwell
      fi
    fi
  else
    echo "Error: Device /dev/mapper/$1 is not available."
    return 1
  fi
}

function unmount_cryptdevice() {
  if [ $1 = "media" ]; then
    /usr/bin/sudo /usr/bin/umount /mnt/{music,photos}
  fi
  /usr/bin/sudo /usr/bin/umount /mnt/$1
}

function validate_cryptdevice_name() {
  local _result_valid_name=$1
  local name_found=0
  local input_name=${2:-}
  for name in "${!devices[@]}"; do
    if [ $name = "${input_name}" ]; then
      name_found=1
      eval $_result_valid_name="'$name_found'"
    fi
  done
}

validate_cryptdevice_name valid_name ${device_name}
if [ $valid_name -eq 0 ]; then
  echo "No such device: '$device_name'!"
  exit 1
fi

case $1 in
  "open")
    open_cryptdevice ${devices[${2}]} $2
    mount_cryptdevice $2
    ;;
  "close")
    unmount_cryptdevice $2
    close_cryptdevice $2
    ;;
  *)
    echo "cs only understands 'open' and 'close'."
    exit 1
    ;;
esac

exit 0