Subtitle interface using attachments
[mediagoblin.git] / mediagoblin / gmg_commands / users.py
index 14b6875d1969a4c8ba8160ed8a997d748be4f151..d1a8b72df7f9b5f9ae8107891f0c84ffe07df40e 100644 (file)
@@ -1,5 +1,5 @@
 # GNU MediaGoblin -- federated, autonomous media hosting
-# Copyright (C) 2011 Free Software Foundation, Inc
+# Copyright (C) 2011, 2012 MediaGoblin contributors.  See AUTHORS.
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU Affero General Public License as published by
 # You should have received a copy of the GNU Affero General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+from __future__ import print_function
+
+import sys
+
+import six
+
+from mediagoblin.db.models import LocalUser
 from mediagoblin.gmg_commands import util as commands_util
-from mediagoblin.auth import lib as auth_lib
+from mediagoblin import auth
 from mediagoblin import mg_globals
 
-
 def adduser_parser_setup(subparser):
     subparser.add_argument(
-        'username',
+        '--username','-u',
         help="Username used to login")
     subparser.add_argument(
-        'password',
-        help="Your supersecret word to login")
-    subparser.add_argument(
-        'email',
-        help="Email to recieve notifications")
+        '--password','-p',
+        help="Your supersecret word to login, beware of storing it in bash history")
     subparser.add_argument(
-        '-cf', '--conf_file', default='mediagoblin.ini',
-        help="Config file used to set up environment")
+        '--email','-e',
+        help="Email to receive notifications")
 
 
 def adduser(args):
     #TODO: Lets trust admins this do not validate Emails :)
     commands_util.setup_app(args)
 
+    args.username = six.text_type(commands_util.prompt_if_not_set(args.username, "Username:"))
+    args.password = commands_util.prompt_if_not_set(args.password, "Password:",True)
+    args.email = commands_util.prompt_if_not_set(args.email, "Email:")
+
     db = mg_globals.database
     users_with_username = \
-        db.User.find({
-            'username': args.username.lower()
-        }).count()
+        db.LocalUser.query.filter(
+            LocalUser.username==args.username.lower()
+        ).count()
 
     if users_with_username:
-        print u'Sorry, a user with that name already exists.'
+        print(u'Sorry, a user with that name already exists.')
+        sys.exit(1)
 
     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['status'] = u'active'
-        entry['email_verified'] = True
-        entry.save(validate=True)
-
-        print "User created (and email marked as verified)"
+        entry = db.LocalUser()
+        entry.username = six.text_type(args.username.lower())
+        entry.email = six.text_type(args.email)
+        entry.pw_hash = auth.gen_password_hash(args.password)
+        default_privileges = [
+            db.Privilege.query.filter(
+                db.Privilege.privilege_name==u'commenter').one(),
+            db.Privilege.query.filter(
+                db.Privilege.privilege_name==u'uploader').one(),
+            db.Privilege.query.filter(
+                db.Privilege.privilege_name==u'reporter').one(),
+            db.Privilege.query.filter(
+                db.Privilege.privilege_name==u'active').one()
+        ]
+        entry.all_privileges = default_privileges
+        entry.save()
+
+        print(u"User created (and email marked as verified).")
 
 
 def makeadmin_parser_setup(subparser):
     subparser.add_argument(
         'username',
-        help="Username to give admin level")
-    subparser.add_argument(
-        '-cf', '--conf_file', default='mediagoblin.ini',
-        help="Config file used to set up environment")
+        help="Username to give admin level",
+        type=six.text_type)
 
 
 def makeadmin(args):
@@ -74,25 +89,29 @@ def makeadmin(args):
 
     db = mg_globals.database
 
-    user = db.User.one({'username':unicode(args.username.lower())})
+    user = db.LocalUser.query.filter(
+        LocalUser.username==args.username.lower()
+    ).first()
     if user:
-        user['is_admin'] = True
+        user.all_privileges.append(
+            db.Privilege.query.filter(
+                db.Privilege.privilege_name==u'admin').one()
+        )
         user.save()
-        print 'The user is now Admin'
+        print(u'The user %s is now an admin.' % args.username)
     else:
-        print 'The user doesn\'t exist'
+        print(u'The user %s doesn\'t exist.' % args.username)
+        sys.exit(1)
 
 
 def changepw_parser_setup(subparser):
     subparser.add_argument(
         'username',
-        help="Username used to login")
+        help="Username used to login",
+        type=six.text_type)
     subparser.add_argument(
         '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):
@@ -100,11 +119,36 @@ def changepw(args):
 
     db = mg_globals.database
 
-    user = db.User.one({'username':unicode(args.username.lower())})
+    user = db.LocalUser.query.filter(
+        LocalUser.username==args.username.lower()
+    ).first()
     if user:
-        user['pw_hash'] = auth_lib.bcrypt_gen_password_hash(args.password)
+        user.pw_hash = auth.gen_password_hash(args.password)
         user.save()
-        print 'Password successfully changed'
+        print(u'Password successfully changed for user %s.' % args.username)
     else:
-        print 'The user doesn\'t exist'
+        print(u'The user %s doesn\'t exist.' % args.username)
+        sys.exit(1)
 
+
+def deleteuser_parser_setup(subparser):
+    subparser.add_argument(
+        'username',
+        help="Username to delete",
+        type=six.text_type)
+
+
+def deleteuser(args):
+    commands_util.setup_app(args)
+
+    db = mg_globals.database
+
+    user = db.LocalUser.query.filter(
+        LocalUser.username==args.username.lower()
+    ).first()
+    if user:
+        user.delete()
+        print('The user %s has been deleted.' % args.username)
+    else:
+        print('The user %s doesn\'t exist.' % args.username)
+        sys.exit(1)