forked from github/server
51 lines
1.1 KiB
Python
Executable File
51 lines
1.1 KiB
Python
Executable File
#!/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))
|