3
0
mirror of https://github.com/jlu5/PyLink.git synced 2024-11-01 09:19:23 +01:00
PyLink/coremods/login.py

44 lines
1.3 KiB
Python
Raw Normal View History

"""
2016-11-20 01:29:53 +01:00
login.py - Implement core login abstraction
"""
from pylinkirc import conf, utils, world
from pylinkirc.log import log
from passlib.apps import custom_app_context as pwd_context
2016-11-20 01:29:53 +01:00
def checkLogin(user, password):
"""Checks whether the given user and password is a valid combination."""
try:
2016-11-20 01:29:53 +01:00
passhash = conf.conf['login']['accounts'][user].get('password')
except KeyError: # Invalid combination
return False
2016-11-20 01:29:53 +01:00
return verifyHash(password, passhash)
def verifyHash(password, passhash):
"""Checks whether the password given matches the hash."""
if password:
# ... good we have a password inputted
# XXX: the greatest thing here is that the hash
# is just a string either way, not a object with
# a method to output the hash
return pwd_context.verify(password, passhash)
return False
@utils.add_cmd
def mkpasswd(irc, source, args):
"""<password>
2016-11-20 01:29:53 +01:00
Hashes a password for use in the configuration file."""
# TODO: restrict to only certain users?
try:
password = args[0]
except IndexError:
irc.error("Not enough arguments. (Needs 1, password)")
2016-11-20 01:29:53 +01:00
return
if not password:
irc.error("Password cannot be empty.")
2016-11-20 01:29:53 +01:00
hashed_pass = pwd_context.encrypt(password)
irc.reply(hashed_pass, private=True)