thooks - coffin - secure lan file storage on a device
HTML git clone git://parazyd.org/coffin.git
DIR Log
DIR Files
DIR Refs
DIR Submodules
DIR README
DIR LICENSE
---
thooks (3504B)
---
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 check-hooks() {
22 ## TODO: fragmented keys, delete, backup, moar
23 fn check-hooks
24 freq=(HOOKS)
25 ckreq || return 1
26
27 local line=0
28 for entry in $(cat $HOOKS); do
29 let line=$line+1
30 act "Found hook $line..."
31
32 ## Check what's hook supposed to do
33 if [[ ${entry[(ws@:@)1]} == "create" ]]; then
34 create-new-tomb
35 elif [[ ${entry[(ws@:@)1]} == "delete" ]]; then
36 delete-tomb
37 elif [[ ${entry[(ws@:@)1]} == "backup" ]]; then
38 backup-tomb ## TODO:
39 else
40 die "No valid hook syntax on hook $line"
41 print $entry >> $HOOKS.fail
42 act "Wrote failed hook to $HOOKS.fail"
43 return 1
44 fi
45 done
46 rm -f $HOOKS
47 }
48
49 create-new-tomb() {
50 fn create-new-tomb
51 req=(undertaker tombid tombsize COFFINDOT GRAVEYARD)
52 undertaker=${entry[(ws@:@)2]}
53 tombid=${entry[(ws@:@)3]}
54 tombsize=${entry[(ws@:@)4]}
55 ckreq || return 1
56
57 ## TODO: recognize custom post/bind hooks and implement them in the
58 ## new tomb
59
60 notice "Creating new tomb"
61
62 $(id $undertaker &>/dev/null) || {
63 warn "User $undertaker not found. Creating..."
64 useradd -G coffin -m -s /bin/sh $undertaker
65 act "Created user $undertaker" }
66
67 genssl
68 dig-tomb
69 forge-tomb-key
70 lock-tomb
71
72 print "${undertaker}:${tombid}:true" >> $TTAB
73
74 #hash-key
75 #print "${keyhash}" >> $TOMBPASSWD
76 #chmod 600 $TOMBPASSWD
77 #act "Wrote to ttab and tombpasswd"
78
79 ## Check for features
80 create-webdav-hook
81 create-sshfs-hook
82 create-wallet-hook
83 }
84
85 delete-tomb() {
86 fn delete-tomb
87 req=(entry undertaker tombid GRAVEYARD COFFINDOT)
88 freq=(TOMB)
89 ckreq || return 1
90
91 notice "deleting $tombid.tomb"
92
93 undertaker=${entry[(ws@:@)2]}
94 tombid=${entry[(ws@:@)3]}
95
96 [[ $(id $undertaker) ]] || {
97 die "User $undertaker not found. Exiting..." \
98 && return 1 }
99
100 [[ -f $GRAVEYARD/$tombid.tomb ]] || {
101 die "Tomb $tombid.tomb not found. Exiting..." \
102 && return 1 }
103
104 [[ -f $COFFINDOT/$tombid.key ]] || {
105 die "Key of $tombid not found. Exiting..." \
106 && return 1 }
107
108 compare-key && {
109 sudo -u $undertaker $TOMB slam $tombid
110 update-tombs del
111
112 grep -v ${undertaker}:${tombid} $TTAB > /tmp/$TTAB.tmp
113 mv /tmp/$TTAB.tmp $TTAB && \
114 act "Removed from ttab"
115
116 #grep -v ${keyhash} $TOMBPASSWD > /tmp/$TOMBPASSWD.tmp
117 #mv /tmp/$TOMBPASSWD.tmp $TOMBPASSWD && \
118 # chmod 600 $TOMBPASSWD && \
119 # act "Removed from tombpasswd"
120
121 ## Check for features
122 delete-webdav-hook $tombid
123 delete-sshfs-hook $undertaker $tombid
124 }
125 }
126
127 check-temptomb() {
128 fn check-temptomb
129 req=(tombid GRAVEYARD)
130 ckreq || return 1
131
132 act "Checking for tomb temps"
133 if [[ -d ${GRAVEYARD}/temp/${tombid} ]]; then
134 mv ${GRAVEYARD}/temp/${tombid}/* /media/${tombid}/
135 mv ${GRAVEYARD}/temp/${tombid}/.* /media/${tombid}/
136
137 act "Moved all tomb temps"
138
139 rmdir ${GRAVEYARD}/temp/${tombid}
140 fi
141 }