#!/usr/bin/python

from string import split
from string import strip
from string import lower
import subprocess

class EPasswd:
	def _check_apr1(self, pwhash, pw):
		spl = split(pwhash, '$')
		salt = spl[2]
		hash = subprocess.check_output(['openssl', 'passwd', '-apr1', '-salt', salt, pw]).decode('utf-8').strip()
		return hash==pwhash

	def __init__(self, file):
		self.data = {}
		try:
			fp = open(file,"r")
		except:
			fp = None
		if fp != None:
			while True:
				line = fp.readline()
				if not line: break
				line = strip(line)
				[id, email, passwd] = split(line, ":")[0:3]
				lc_id = lower(id)
				self.data[lc_id] = {}
				self.data[lc_id]["id"] = id
				self.data[lc_id]["email"] = email
				self.data[lc_id]["passwd"] = passwd
			fp.close()

	def check(self, id, passwd):
		pw = self.get_passwd(id)
		if pw[0:6]=='$apr1$':
			return self._check_apr1(pw, passwd)
		return pw == passwd

	def get_passwd(self, id):
		return self.data[lower(id)]["passwd"]
	
	def get_email(self, id):
		return self.data[lower(id)]["email"]
	
	def get_canon_id(self, id):
		return self.data[lower(id)]["id"]

	def fac_exists(self, id):
		return self.data.has_key(lower(id))