Add CLI version of mysql thing
authorMichael Spang <mspang@csclub.uwaterloo.ca>
Mon, 2 Nov 2009 20:18:55 +0000 (20:18 +0000)
committerMichael Spang <mspang@csclub.uwaterloo.ca>
Mon, 2 Nov 2009 20:18:55 +0000 (20:18 +0000)
bin/ceo
ceo/console/main.py
ceo/console/mysql.py [new file with mode: 0644]
src/op-mysql

diff --git a/bin/ceo b/bin/ceo
index 6fae10e..7322493 100755 (executable)
--- a/bin/ceo
+++ b/bin/ceo
@@ -8,16 +8,19 @@ from ceo import ldapi, members, library
 
 def start():
     try:
-        print "Reading config file...",
-        members.configure()
-        library.configure()
+        if len(sys.argv) == 1:
+          print "Reading config file...",
+          members.configure()
+          library.configure()
 
-        print "Connecting to LDAP..."
-        members.connect(AuthCallback())
+          print "Connecting to LDAP..."
+          members.connect(AuthCallback())
 
-        if len(sys.argv) == 1:
           ceo.urwid.main.start()
         else:
+          members.configure()
+          library.configure()
+          members.connect(AuthCallback())
           ceo.console.main.start()
     except ldap.LOCAL_ERROR, e:
         print ldapi.format_ldaperror(e)
index f43150d..463fb21 100644 (file)
@@ -5,15 +5,16 @@ from ceo.console.memberlist import MemberList
 from ceo.console.updateprograms import UpdatePrograms
 from ceo.console.expiredaccounts import ExpiredAccounts
 from ceo.console.inactive import Inactive
+from ceo.console.mysql import MySQL
 
 commands = {
   'memberlist' : MemberList(),
   'updateprograms' : UpdatePrograms(),
   'expiredaccounts' : ExpiredAccounts(),
   'inactive': Inactive(),
+  'mysql': MySQL(),
 }
 help_opts = [ '--help', '-h' ]
-
 def start():
   args = sys.argv[1:]
   if args[0] in help_opts:
diff --git a/ceo/console/mysql.py b/ceo/console/mysql.py
new file mode 100644 (file)
index 0000000..f617751
--- /dev/null
@@ -0,0 +1,38 @@
+from ceo import members, terms, mysql
+
+class MySQL:
+  help = '''
+mysql create <username>
+
+Creates a mysql database for a user.
+'''
+  def main(self, args):
+    if len(args) != 2 or args[0] != 'create':
+        print self.help
+        return
+    username = args[1]
+    problem = None
+    try:
+        password = mysql.create_mysql(username)
+
+        try:
+            mysql.write_mysql_info(username, password)
+            helpfiletext = "Settings written to ~%s/ceo-mysql-info." % username
+        except (KeyError, IOError, OSError), e:
+            helpfiletext = "An error occured writing the settings file: %s" % e
+
+        print "MySQL database created"
+        print ("Connection Information: \n"
+               "\n"
+               "Database: %s\n"
+               "Username: %s\n"
+               "Hostname: localhost\n"
+               "Password: %s\n"
+               "\n"
+               "%s\n"
+               % (username, username, password, helpfiletext))
+    except mysql.MySQLException, e:
+        print "Failed to create MySQL database"
+        print
+        print "We failed to create the database. The error was:\n\n%s" % e
+
index ba54358..c47a220 100755 (executable)
@@ -29,6 +29,8 @@ def check_auth(remote_user, mysql_user, response):
     if remote_user == mysql_user:
         return response_message(response, 0, 'user %s creating database for self' % remote_user)
     club = members.get(mysql_user)
+    if not club:
+        return response_message(response, errno.EPERM, 'user %s does not exist' % mysql_user)
     if 'club' in club.get('objectClass', []):
         if check_group(remote_user, mysql_user):
             return response_message(response, 0, 'user %s is in club group %s' % (remote_user, mysql_user))