Adding new function to gmg_commands, adduser,makeadmin and changepw issue 373
authorAlejandro Villanueva <admin@ialex.org>
Wed, 22 Jun 2011 16:51:31 +0000 (11:51 -0500)
committerChristopher Allan Webber <cwebber@dustycloud.org>
Thu, 23 Jun 2011 02:49:06 +0000 (21:49 -0500)
mediagoblin/gmg_commands/__init__.py
mediagoblin/gmg_commands/users.py [new file with mode: 0644]

index d1f7bfc127992c1315287d2da69ae1c70ddd3753..20ea522485e302e8c69f02dc5259d798b0ddba8a 100644 (file)
@@ -28,6 +28,18 @@ SUBCOMMAND_MAP = {
         'setup': 'mediagoblin.gmg_commands.migrate:migrate_parser_setup',
         'func': 'mediagoblin.gmg_commands.migrate:migrate',
         'help': 'Apply all unapplied bulk migrations to the database'},
+    'adduser':{
+        'setup': 'mediagoblin.gmg_commands.users:adduser_parser_setup',
+        'func': 'mediagoblin.gmg_commands.users:adduser',
+        'help': 'Creates an user, \nUsage: adduser -u username -p password -m email'},
+    'makeadmin': {
+        'setup': 'mediagoblin.gmg_commands.users:makeadmin_parser_setup',
+        'func': 'mediagoblin.gmg_commands.users:makeadmin',
+        'help': 'Makes admin an user, \nUsage: makeadmin -u username'},
+    'changepw': {
+        'setup': 'mediagoblin.gmg_commands.users:changepw_parser_setup',
+        'func': 'mediagoblin.gmg_commands.users:changepw',
+        'help': 'Makes admin an user, \nUsage: changepw -u username -p new_password'},
     }
 
 
@@ -56,3 +68,4 @@ def main_cli():
 
 if __name__ == '__main__':
     main_cli()
+
diff --git a/mediagoblin/gmg_commands/users.py b/mediagoblin/gmg_commands/users.py
new file mode 100644 (file)
index 0000000..368834d
--- /dev/null
@@ -0,0 +1,128 @@
+import os
+
+from mediagoblin.gmg_commands import util as commands_util
+from mediagoblin.db.open import setup_connection_and_db_from_config
+from mediagoblin.auth import lib as auth_lib
+from mediagoblin import mg_globals
+
+def adduser_usage():
+    print '\nUsage: adduser -u username -p password -m email'
+
+
+def adduser_parser_setup(subparser):
+    subparser.add_argument(
+        '-u', '--username',
+        help="Username used to login")
+    subparser.add_argument(
+        '-p', '--password',
+        help="Your supersecret word to login")
+    subparser.add_argument(
+        '-m', '--email',
+        help="Email to recieve notifications")
+    subparser.add_argument(
+        '-cf', '--conf_file', default='mediagoblin.ini',
+        help="Config file used to set up environment")
+
+
+def adduser(args):
+    #TODO: Lets trust admins this do not validate Emails :)
+    if args.username == None :
+        print 'You must provide an username'
+        adduser_usage()
+    elif args.password == None:
+        print 'You must provide a password'
+        adduser_usage()
+    elif args.email == None:
+        print 'You must provide an email'
+        adduser_usage()
+    else:
+        mgoblin_app = commands_util.setup_app(args)
+
+        db = mg_globals.database
+        users_with_username = \
+            db.User.find({
+                'username': args.username.lower()
+            }).count()
+
+        if users_with_username:
+            print u'Sorry, a user with that name already exists.'
+
+        else:
+            # Create the user
+            entry = db.User()
+            entry['username'] = unicode(args.username.lower())
+            entry['email'] = unicode(args.email)
+            entry['pw_hash'] = auth_lib.bcrypt_gen_password_hash(args.password)
+            entry['email_verified'] = True
+            entry.save(validate=True)
+
+            print "User Created: Already Verified :)"
+
+
+def makeadmin_usage():
+    print '\nUsage: makeadmin -u username'
+
+
+def makeadmin_parser_setup(subparser):
+    subparser.add_argument(
+        '-u', '--username',
+        help="Username to give admin level")
+    subparser.add_argument(
+        '-cf', '--conf_file', default='mediagoblin.ini',
+        help="Config file used to set up environment")
+
+
+def makeadmin(args):
+    if args.username == None:
+        print 'You must provide an username'
+        makeadmin_usage()
+    else:
+        mgoblin_app = commands_util.setup_app(args)
+
+        db = mg_globals.database
+
+        user = db.User.one({'username':unicode(args.username.lower())})
+        if user:
+            user['is_admin'] = True
+            user.save()
+            print 'The user is now Admin'
+        else:
+            print 'The user doesn\'t exist'
+
+
+def changepw_usage():
+    print '\nUsage: changepw -u username -p new_password'
+
+
+def changepw_parser_setup(subparser):
+    subparser.add_argument(
+        '-u', '--username',
+        help="Username used to login")
+    subparser.add_argument(
+        '-p', '--password',
+        help="Your NEW supersecret word to login")
+    subparser.add_argument(
+        '-cf', '--conf_file', default='mediagoblin.ini',
+        help="Config file used to set up environment")
+
+
+def changepw(args):
+    if args.username == None:
+        print 'You must provide an username'
+        adduser_usage()
+    elif args.password == None:
+        print 'You must provide a password'
+        adduser_usage()
+    else:
+        mgoblin_app = commands_util.setup_app(args)
+
+        db = mg_globals.database
+
+        user = db.User.one({'username':unicode(args.username.lower())})
+        if user:
+            user['pw_hash'] = auth_lib.bcrypt_gen_password_hash(args.password)
+            user.save()
+            print 'Password successfully changed'
+        else:
+            print 'The user doesn\'t exist'
+