-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathi3lock-sentry
executable file
·96 lines (84 loc) · 3.35 KB
/
i3lock-sentry
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
88
89
90
91
92
93
94
95
96
#!/bin/bash
#####################
### i3lock-sentry ###
version="0.7" #######
#####################
fail="1"
timestamp=$(date +%s)
tmpDir="/dev/shm/lockdetect.$USER"
input="$tmpDir/.spylist"
image="$tmpDir/${timestamp}.jpg"
output="$HOME/fails.html"
configDir="$HOME/.config/i3lock"
cssFile="$configDir/sentry.css"
placeholder="$configDir/placeholder.png"
timeFormat="%I:%M%P"
DETECT_BROWSER()
{
xbrowser=$(which x-www-browser 2>/dev/null)
[ ! -z "$xbrowser" ] && browser="x-www-browser"
[ -z "$browser" ] && browser="xdg-open"
}
LOCK_FAIL()
{
[ ! -f "$input" ] && rm "$tmpDir"/* 2>/dev/null
mkdir -p "$tmpDir" 2>/dev/null
LD_PRELOAD=/usr/lib/libv4l/v4l1compat.so /usr/bin/fswebcam "$image"
if [ -f "$image" ]; then
echo "${timestamp}:$image" >> "$input"
else
echo "${timestamp}:" >> "$input"
fi
}
LOCK_PARSE()
{
count="0"
if [ -f "$input" ]; then
count=$(cat "$input" 2>/dev/null | grep -v ^$ | wc -l)
fi
if [ "$count" -ge "$fail" ]; then
[ ! -f "$cssFile" ] && cp "/etc/xdg/i3lock/sentry.css" "$cssFile"
[ ! -f "$placeholder" ] && cp "/etc/xdg/i3lock/placeholder.png" "$placeholder"
echo '<!DOCTYPE html><html><head>' > "$output"
echo "<title>i3lock ($count)</title>" >> "$output"
echo "<link href=""\"data:image/x-icon;base64,
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
bWFnZVJlYWR5ccllPAAAAqFJREFUeNqkk09o01Acx39p0//NUtbi1s4W20qFzoNjCB42b+LUojsJ
O3gTsYjX3gTBkx71IurNkzBhyg7OgzhE2ZzaIdqsdpOl3Vq6SdskW5rONPH3Ht3IQfDgg08g7/2+
3/f7kzCmacL/LJY8bDabdS+KTCAjSH9vr4HkkVdIZT/QMAxgSAYWg4s+n+/K+Ph4Oh6PhznOz5Hz
ZrOlCIKwkc/ni6qqPsW4l38zmAwGg9ez2ezpWq3mKRZXQFXb4HA4gOd5CIfDGMdIMzMvFprN5kOM
n7EaxPDmB7lc7uzi4qLLx4chlT4BW7V1qIor4PF4oN1uA8dxaMjK09PP3+L7TTQo7+d+aWxsLF0u
iy5RFCGZOg6TUzfAx4WgUqmAoigwNDQE3W4XWJbtGx4ePkY0tH89g1Px+JGBQqEAmAkI3z7D4/u3
4dPSB1j7KUJlYxNkWYZIJAKdzh4kEskI0VgNBjmuz6soOzTdr1/ew7v5eRhMXoBzU3eB9QyCpmm0
BLJILNEcjBGXwzQNxm63g9/vpxw+OgKjo6P0sCOvgQvK4HQ6gcSYJsMQjdWg2Wg0NJ7v85Kuk1TN
vW0oCUt0Ql6HCiE+BLquowELkiRrRHNQAk7iY6EgSNFoFA8liMViEPB1oSG+BnnzDZyZOE/HWK/X
sYkuWF39IRGNNYNny8vLl1OpVH8gEHBVq1VsVILOn2QkFheoWNdNvGC3Iwjft4mGCOl3wNCS4CoK
bmUymbDdbnPs7OxSZ1K30+mmtFrK77m52ZqiSHfw6AnVWgzIuuZ2u3PpdPpQMpl083yANQwb3trS
S6WSViwWtjod7R7GPeqVfmBASgkiISSBZJCTyEDPuI4sIbPIOkJK+IVafd+ANNPbg/3HH9xFSH0q
ao0/AgwAVVMltdb1yu0AAAAASUVORK5CYII=""\" rel=""\"icon""\" type=""\"image/x-icon""\" />" >> "$output"
echo "<link rel=""\"stylesheet""\" type=""\"text/css""\" href=""\"${cssFile}""\" /></head>" >> "$output"
echo "<body><h2>Failed login count: ${count}</h2><div>" >> "$output"
for attempt in $(cat "$input"); do
timecode=$(date -d @$(echo "$attempt" | awk -F ":" '{print $1}') +${timeFormat})
capture=$(echo "$attempt" | awk -F ":" '{print $2}')
if [ ! -z "$capture" ]; then
echo "<a href=""\"file://${capture}""\"><img src=""\"file://${capture}""\" title=""\"${timecode}""\" width=""\"200px""\"></a>" >> "$output"
else
echo "<img src=""\"file://${placeholder}""\" title=""\"${timecode}""\" width=""\"200px""\">" >> "$output"
fi
done
echo "</div></body></html>" >> "$output"
DETECT_BROWSER
$browser "$output"
else
rm "$tmpDir"/* "$output" 2>/dev/null
fi
rm "$input" 2>/dev/null
}
mkdir -p "$configDir"
if [ "$1" = "parse" ]; then
LOCK_PARSE
elif [ "$1" = "fail" ]; then
LOCK_FAIL
fi
### END ###