htpasswd
from pathlib import Path
from passlib.apache import HtpasswdFile
class AuthManager:
def __init__(self, filename=None):
self.filename = filename or "htpasswd"
self._database = None
def _open_database(self):
filename = Path(self.filename).expanduser()
self._database = HtpasswdFile(filename, autosave=True, new=not filename.exists())
return self._database
@property
def database(self):
return self._database if self._database else self._open_database()
def list(self):
return self.database.users()
def exists(self, username):
return username in self.list()
def add(self, username, password):
if self.exists(username):
raise ValueError("User already exists")
self.database.set_password(username, password)
def update(self, username, password):
if not self.exists(username):
raise ValueError("User does not exist")
self.database.set_password(username, password)
def remove(self, username):
if not self.exists(username):
raise ValueError("User does not exist")
self.database.delete(username)
def check(self, username, password):
self._open_database()
if self.database.check_password(username, password):
return username
else:
return None