From 96108ea2859780807a69941184c41950a923e38e Mon Sep 17 00:00:00 2001 From: Alejandro Villanueva Date: Wed, 22 Jun 2011 11:51:31 -0500 Subject: [PATCH] Adding new function to gmg_commands, adduser,makeadmin and changepw issue 373 --- mediagoblin/gmg_commands/__init__.py | 13 +++ mediagoblin/gmg_commands/users.py | 128 +++++++++++++++++++++++++++ 2 files changed, 141 insertions(+) create mode 100644 mediagoblin/gmg_commands/users.py diff --git a/mediagoblin/gmg_commands/__init__.py b/mediagoblin/gmg_commands/__init__.py index d1f7bfc1..20ea5224 100644 --- a/mediagoblin/gmg_commands/__init__.py +++ b/mediagoblin/gmg_commands/__init__.py @@ -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 index 00000000..368834d0 --- /dev/null +++ b/mediagoblin/gmg_commands/users.py @@ -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' + -- 2.25.1