67 lines
1.9 KiB
Python
Executable File
67 lines
1.9 KiB
Python
Executable File
#!/usr/bin/python3
|
|
|
|
import os
|
|
import sys
|
|
import configparser
|
|
from yms import database
|
|
from getpass import getpass
|
|
import bcrypt
|
|
|
|
cfg = {
|
|
'cfgfile': '~/.config/ymsgui.conf',
|
|
'host': 'localhost',
|
|
'db': 'yms',
|
|
'user': 'yms'
|
|
}
|
|
|
|
def set_pass(uid):
|
|
sql = "SELECT login, displayname FROM user WHERE userid=%s"
|
|
db.cur.execute(sql, (uid,))
|
|
user = db.cur.fetchone()
|
|
displayname = "{}/{}".format(user[0], user[1])
|
|
try:
|
|
newpass = getpass(f"New Password for '{displayname}': ")
|
|
except (EOFError, KeyboardInterrupt):
|
|
print("Aborted.")
|
|
return
|
|
cryptpass = bcrypt.hashpw(newpass.encode(), bcrypt.gensalt())
|
|
sql = "UPDATE user SET pass=%s WHERE userid=%s"
|
|
db.cur.execute(sql, (cryptpass.decode(), uid))
|
|
db.conn.commit()
|
|
print("Ok.")
|
|
|
|
def get_user():
|
|
try:
|
|
username = input('Username: ')
|
|
except (EOFError, KeyboardInterrupt):
|
|
print("Aborted.")
|
|
return -1
|
|
sql = "SELECT userid FROM user WHERE login=%s"
|
|
db.cur.execute(sql, (username,))
|
|
row = db.cur.fetchone()
|
|
if not row:
|
|
print("User not found")
|
|
return -1
|
|
else:
|
|
return row[0]
|
|
|
|
if __name__ == "__main__":
|
|
config = configparser.ConfigParser()
|
|
configfile = os.path.expanduser(cfg['cfgfile']);
|
|
if not config.read(configfile):
|
|
print(f"Configuration file '{configfile}' not found.")
|
|
else:
|
|
cfg['host'] = config.get('DB', 'host')
|
|
cfg['db'] = config.get('DB', 'db')
|
|
cfg['user'] = config.get('DB', 'user')
|
|
cfg['pass'] = config.get('DB', 'pass')
|
|
db = database.Database(cfg['host'], cfg['db'])
|
|
if db.connect(cfg['user'], cfg['pass']):
|
|
print("Connected to database {}@{}".format(cfg['db'], cfg['host']))
|
|
uid = get_user()
|
|
if uid >= 0:
|
|
set_pass(uid)
|
|
db.disconnect()
|
|
else:
|
|
print("Cannot connect to database {}@{}".format(cfg['db'], cfg['host']))
|