import xmlrpc.client
class RegistrationError(RuntimeError):
pass
# ValueError returns with a reason, and permits token/username reuse
# RegistrationError returns a reason but requires staff intervention (stuck account)
def register_user(username, password, certfp):
services = xmlrpc.client.ServerProxy("http://localhost:8192/xmlrpc")
fakemail = "{}@tor.fake.mail.freenode.net".format(username)
feedback = services.atheme.command("*", "*", "::1337", "nickserv", "register", username, password, fakemail)
if "is now registered" not in feedback:
raise ValueError(feedback)
try:
cookie = services.atheme.login(username, password)
except xmlrpc.client.Fault as e:
raise RegistrationError(
"Unable to update account {}, fault {}. Please report this error and username to staff".format(
username, e.faultCode
)
)
feedback = services.atheme.command(cookie, username, "::1337", "nickserv", "cert", "add", certfp)
if "Added fingerprint" not in feedback:
token = services.atheme.command(cookie, username, "::1337", "nickserv", "drop", username).split()[-1]
services.atheme.command(cookie, username, "::1337", "nickserv", "drop", username, token)
raise ValueError(feedback)