Started on CLI

This commit is contained in:
boltgolt 2018-02-08 01:11:47 +01:00
parent 10563589c2
commit 590d488c34
2 changed files with 79 additions and 42 deletions

35
cli.py Executable file
View file

@ -0,0 +1,35 @@
#!/usr/bin/env python3
import sys
import os
import json
import time
path = os.path.dirname(os.path.realpath(__file__))
cmd = sys.argv[1]
if cmd == "list":
if not os.path.exists(path + "/models"):
print("Face models have not been initialized yet, please run:")
print("\n\thowdy add\n")
sys.exit(1)
user = os.environ.get("USER")
enc_file = path + "/models/" + user + ".dat"
try:
encodings = json.load(open(enc_file))
except FileNotFoundError:
print("No face model known for the current user (" + user + "), please run:")
print("\n\thowdy add\n")
sys.exit(1)
print("Known face models for " + user + ":")
print("\n\t\033[1;29mID Date Label\033[0m")
for enc in encodings:
print("\t" + str(enc["id"]), end="")
print((4 - len(str(enc["id"]))) * " ", end="")
print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(enc["time"])), end="")
print(" " + enc["label"])
print()

View file

@ -7,18 +7,18 @@ import fileinput
import urllib.parse
def log(text):
print("\n>>> \033[32m" + text + "\033[0m\n")
print("\n>>> \033[32m" + text + "\033[0m\n")
def handleStatus(status):
if (status != 0):
print("\033[31mError while running last command\033[0m")
sys.exit()
if (status != 0):
print("\033[31mError while running last command\033[0m")
sys.exit()
user = os.getenv("SUDO_USER")
if user is None:
print("Please run this script as a sudo user")
sys.exit()
print("Please run this script as a sudo user")
sys.exit()
print("\n\033[33m HOWDY INSTALLER FOR UBUNTU\033[0m")
print(" Version 1, 2016/02/05\n")
@ -34,26 +34,26 @@ devices = os.listdir("/dev")
picked = False
for dev in devices:
if (dev[:5] == "video"):
time.sleep(.5)
if (dev[:5] == "video"):
time.sleep(.5)
print("Trying /dev/" + dev)
print("Trying /dev/" + dev)
sub = subprocess.Popen(["fswebcam -S 9999999999 -d /dev/" + dev + " /dev/null 2>/dev/null"], shell=True, preexec_fn=os.setsid)
sub = subprocess.Popen(["fswebcam -S 9999999999 -d /dev/" + dev + " /dev/null 2>/dev/null"], shell=True, preexec_fn=os.setsid)
print("\033[33mOne of your cameras should now be on.\033[0m")
ans = input("Did your IR emitters turn on? [y/N]: ")
print("\033[33mOne of your cameras should now be on.\033[0m")
ans = input("Did your IR emitters turn on? [y/N]: ")
os.killpg(os.getpgid(sub.pid), signal.SIGTERM)
os.killpg(os.getpgid(sub.pid), signal.SIGTERM)
if (ans.lower() == "y"):
picked = dev[5:]
break
else:
print("Inerpeting as a \"NO\"\n")
if (ans.lower() == "y"):
picked = dev[5:]
break
else:
print("Inerpeting as a \"NO\"\n")
if (picked == False):
print("\033[31mNo suitable IR camera found\033[0m")
print("\033[31mNo suitable IR camera found\033[0m")
log("Cloning dlib")
@ -74,14 +74,16 @@ handleStatus(subprocess.call(["pip3", "install", "face_recognition"]))
log("Cloning howdy")
if not os.path.exists("/lib/security"):
os.makedirs("/lib/security")
os.makedirs("/lib/security")
handleStatus(subprocess.call(["git", "clone", "https://github.com/Boltgolt/howdy.git", "/lib/security/howdy"]))
for line in fileinput.input(["/lib/security/howdy/config.ini"], inplace = 1):
print(line.replace("device_id = 1", "device_id = " + picked), end="")
print(line.replace("device_id = 1", "device_id = " + picked), end="")
handleStatus(subprocess.call(["chmod 600 -R /lib/security/howdy/"], shell=True))
handleStatus(subprocess.call(["ln -s /lib/security/howdy/cli.py /usr/bin/howdy"], shell=True))
handleStatus(subprocess.call(["chmod +x /usr/bin/howdy"], shell=True))
log("Adding howdy as PAM module")
@ -90,35 +92,35 @@ printlines = []
inserted = False
with open("/etc/pam.d/common-auth") as fp:
line = fp.readline()
cnt = 1
while line:
outlines.append(line)
line = fp.readline()
cnt = 1
while line:
outlines.append(line)
if line[:1] != "#":
printlines.append(line)
if line[:1] != "#":
printlines.append(line)
if not inserted:
line_comment = "# Howdy IR face recognition\n"
line_Link = "auth sufficient pam_python.so /lib/security/howdy/pam.py\n\n"
if not inserted:
line_comment = "# Howdy IR face recognition\n"
line_Link = "auth sufficient pam_python.so /lib/security/howdy/pam.py\n\n"
outlines.append(line_comment)
outlines.append(line_Link)
outlines.append(line_comment)
outlines.append(line_Link)
printlines.append("\033[33m" + line_comment + "\033[0m")
printlines.append("\033[33m" + line_Link + "\033[0m")
printlines.append("\033[33m" + line_comment + "\033[0m")
printlines.append("\033[33m" + line_Link + "\033[0m")
inserted = True
else:
printlines.append("\033[37m" + line + "\033[0m")
inserted = True
else:
printlines.append("\033[37m" + line + "\033[0m")
line = fp.readline()
cnt += 1
line = fp.readline()
cnt += 1
print("\033[33m" + ">>> START OF /etc/pam.d/common-auth" + "\033[0m")
for line in printlines:
print(line, end="")
print(line, end="")
print("\033[33m" + ">>> END OF /etc/pam.d/common-auth" + "\033[0m" + "\n")
@ -126,8 +128,8 @@ print("Lines will be insterted in /etc/pam.d/common-auth as shown above")
ans = input("Apply this change? [y/N]: ")
if (ans.lower() != "y"):
print("Inerpeting as a \"NO\", aborting")
sys.exit()
print("Inerpeting as a \"NO\", aborting")
sys.exit()
print("Adding lines to PAM\n")