X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=dak%2Fadd_user.py;h=77de3e3fb617290c769a2752d0e5db66b2e7234d;hb=1e5659500391bce37a28870ef7bce5c59eba68c7;hp=fd06a72b3ce5f3d68d341ce44ccd3b43959a5b62;hpb=9f371390bb90395b2f2f0b65c91c21047896774a;p=dak.git diff --git a/dak/add_user.py b/dak/add_user.py index fd06a72b..77de3e3f 100755 --- a/dak/add_user.py +++ b/dak/add_user.py @@ -18,25 +18,17 @@ add his key to the GPGKeyring # I know what I say. I dont know python and I wrote it. So go and read some other stuff. import commands -import pg -import re import sys -import time -import os import apt_pkg -from daklib import database -from daklib import logging -from daklib import queue + from daklib import utils +from daklib.dbconn import DBConn, add_database_user, get_or_set_uid from daklib.regexes import re_gpg_fingerprint, re_user_address, re_user_mails, re_user_name ################################################################################ Cnf = None -projectB = None Logger = None -Upload = None -Subst = None ################################################################################ @@ -108,10 +100,10 @@ Additionally there is now an account created for you. ################################################################################ def main(): - global Cnf, projectB + global Cnf keyrings = None - Cnf = daklib.utils.get_conf() + Cnf = utils.get_conf() Arguments = [('h',"help","Add-User::Options::Help"), ('c',"create","Add-User::Options::Create"), @@ -129,8 +121,7 @@ def main(): if Options["help"]: usage() - projectB = pg.connect(Cnf["DB::Name"], Cnf["DB::Host"], int(Cnf["DB::Port"])) - daklib.database.init(Cnf, projectB) + session = DBConn().session() if not keyrings: keyrings = Cnf.ValueList("Dinstall::GPGKeyring") @@ -138,18 +129,18 @@ def main(): # Ignore the PGP keyring for download of new keys. Ignore errors, if key is missing it will # barf with the next commands. cmd = "gpg --no-secmem-warning --no-default-keyring %s --recv-keys %s" \ - % (daklib.utils.gpg_keyring_args(keyrings), Cnf["Add-User::Options::Key"]) + % (utils.gpg_keyring_args(keyrings), Cnf["Add-User::Options::Key"]) (result, output) = commands.getstatusoutput(cmd) cmd = "gpg --with-colons --no-secmem-warning --no-auto-check-trustdb --no-default-keyring %s --with-fingerprint --list-key %s" \ - % (daklib.utils.gpg_keyring_args(keyrings), + % (utils.gpg_keyring_args(keyrings), Cnf["Add-User::Options::Key"]) (result, output) = commands.getstatusoutput(cmd) m = re_gpg_fingerprint.search(output) if not m: print output - daklib.utils.fubar("0x%s: (1) No fingerprint found in gpg output but it returned 0?\n%s" \ - % (Cnf["Add-User::Options::Key"], daklib.utils.prefix_multi_line_string(output, \ + utils.fubar("0x%s: (1) No fingerprint found in gpg output but it returned 0?\n%s" \ + % (Cnf["Add-User::Options::Key"], utils.prefix_multi_line_string(output, \ " [GPG output:] "))) primary_key = m.group(1) primary_key = primary_key.replace(" ","") @@ -162,8 +153,8 @@ def main(): u = re_user_address.search(output) if not u: print output - daklib.utils.fubar("0x%s: (2) No userid found in gpg output but it returned 0?\n%s" \ - % (Cnf["Add-User::Options::Key"], daklib.utils.prefix_multi_line_string(output, " [GPG output:] "))) + utils.fubar("0x%s: (2) No userid found in gpg output but it returned 0?\n%s" \ + % (Cnf["Add-User::Options::Key"], utils.prefix_multi_line_string(output, " [GPG output:] "))) uid = u.group(1) n = re_user_name.search(output) name = n.group(1) @@ -180,7 +171,7 @@ def main(): print "0x%s -> %s <%s> -> %s -> %s" % (Cnf["Add-User::Options::Key"], name, emails[0], uid, primary_key) prompt = "Add user %s with above data (y/N) ? " % (uid) - yn = daklib.utils.our_raw_input(prompt).lower() + yn = utils.our_raw_input(prompt).lower() if yn == "y": # Create an account for the user? @@ -196,28 +187,30 @@ def main(): % (pwcrypt, name, uid) (result, output) = commands.getstatusoutput(cmd) if (result != 0): - daklib.utils.fubar("Invocation of '%s' failed:\n%s\n" % (cmd, output), result) + utils.fubar("Invocation of '%s' failed:\n%s\n" % (cmd, output), result) try: summary+=createMail(uid, password, Cnf["Add-User::Options::Key"], Cnf["Dinstall::GPGKeyring"]) except: summary="" - daklib.utils.warn("Could not prepare password information for mail, not sending password.") + utils.warn("Could not prepare password information for mail, not sending password.") # Now add user to the database. - projectB.query("BEGIN WORK") - uid_id = daklib.database.get_or_set_uid_id(uid) - projectB.query('CREATE USER "%s"' % (uid)) - projectB.query("COMMIT WORK") + # Note that we provide a session, so we're responsible for committing + uidobj = get_or_set_uid(uid, session=session) + uid_id = uidobj.uid_id + add_database_user(uid) + session.commit() # The following two are kicked out in rhona, so we don't set them. kelly adds # them as soon as she installs a package with unknown ones, so no problems to expect here. # Just leave the comment in, to not think about "Why the hell aren't they added" in # a year, if we ever touch uma again. -# maint_id = daklib.database.get_or_set_maintainer_id(name) -# projectB.query("INSERT INTO fingerprint (fingerprint, uid) VALUES ('%s', '%s')" % (primary_key, uid_id)) +# maint_id = database.get_or_set_maintainer_id(name) +# session.execute("INSERT INTO fingerprint (fingerprint, uid) VALUES (:fingerprint, uid)", +# {'fingerprint': primary_key, 'uid': uid_id}) # Lets add user to the email-whitelist file if its configured. if Cnf.has_key("Dinstall::MailWhiteList") and Cnf["Dinstall::MailWhiteList"] != "": - file = daklib.utils.open_file(Cnf["Dinstall::MailWhiteList"], "a") + file = utils.open_file(Cnf["Dinstall::MailWhiteList"], "a") for mail in emails: file.write(mail+'\n') file.close() @@ -228,8 +221,7 @@ def main(): # Should we send mail to the newly added user? if Cnf.FindB("Add-User::SendEmail"): mail = name + "<" + emails[0] +">" - Upload = daklib.queue.Upload(Cnf) - Subst = Upload.Subst + Subst = {} Subst["__NEW_MAINTAINER__"] = mail Subst["__UID__"] = uid Subst["__KEYID__"] = Cnf["Add-User::Options::Key"] @@ -237,8 +229,8 @@ def main(): Subst["__FROM_ADDRESS__"] = Cnf["Dinstall::MyEmailAddress"] Subst["__HOSTNAME__"] = Cnf["Dinstall::MyHost"] Subst["__SUMMARY__"] = summary - new_add_message = daklib.utils.TemplateSubst(Subst,Cnf["Dir::Templates"]+"/add-user.added") - daklib.utils.send_mail(new_add_message) + new_add_message = utils.TemplateSubst(Subst,Cnf["Dir::Templates"]+"/add-user.added") + utils.send_mail(new_add_message) else: uid = None