Whew. This is a big update. I did some significant keeping work. I moved all of
[mediagoblin:mediagoblin.git] / mediagoblin / gmg_commands / users.py
1 # GNU MediaGoblin -- federated, autonomous media hosting
2 # Copyright (C) 2011, 2012 MediaGoblin contributors.  See AUTHORS.
3 #
4 # This program is free software: you can redistribute it and/or modify
5 # it under the terms of the GNU Affero General Public License as published by
6 # the Free Software Foundation, either version 3 of the License, or
7 # (at your option) any later version.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 # GNU Affero General Public License for more details.
13 #
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
16
17 from mediagoblin.gmg_commands import util as commands_util
18 from mediagoblin.auth import lib as auth_lib
19 from mediagoblin import mg_globals
20
21 def adduser_parser_setup(subparser):
22     subparser.add_argument(
23         '--username','-u',
24         help="Username used to login")
25     subparser.add_argument(
26         '--password','-p',
27         help="Your supersecret word to login, beware of storing it in bash history")
28     subparser.add_argument(
29         '--email','-e',
30         help="Email to receive notifications")
31
32
33 def adduser(args):
34     #TODO: Lets trust admins this do not validate Emails :)
35     commands_util.setup_app(args)
36
37     args.username = commands_util.prompt_if_not_set(args.username, "Username:")
38     args.password = commands_util.prompt_if_not_set(args.password, "Password:",True)
39     args.email = commands_util.prompt_if_not_set(args.email, "Email:")
40
41     db = mg_globals.database
42     users_with_username = \
43         db.User.find({
44             'username': args.username.lower(),
45         }).count()
46
47     if users_with_username:
48         print u'Sorry, a user with that name already exists.'
49
50     else:
51         # Create the user
52         entry = db.User()
53         entry.username = unicode(args.username.lower())
54         entry.email = unicode(args.email)
55         entry.pw_hash = auth_lib.bcrypt_gen_password_hash(args.password)
56         entry.status = u'active'
57         entry.email_verified = True
58         default_privileges = [ 
59             db.Privilege.one({'privilege_name':u'commenter'}),
60             db.Privilege.one({'privilege_name':u'uploader'}),
61             db.Privilege.one({'privilege_name':u'reporter'}),
62             db.Privilege.one({'privilege_name':u'active'})
63 ]
64         entry.all_privileges = default_privileges
65         entry.save()
66
67         print "User created (and email marked as verified)"
68
69
70 def makeadmin_parser_setup(subparser):
71     subparser.add_argument(
72         'username',
73         help="Username to give admin level")
74
75
76 def makeadmin(args):
77     commands_util.setup_app(args)
78
79     db = mg_globals.database
80
81     user = db.User.one({'username': unicode(args.username.lower())})
82     if user:
83         user.is_admin = True
84         user.all_privileges.append(
85             db.Privilege.one({
86                 'privilege_name':u'admin'})
87             )
88         user.save()
89         print 'The user is now Admin'
90     else:
91         print 'The user doesn\'t exist'
92
93
94 def changepw_parser_setup(subparser):
95     subparser.add_argument(
96         'username',
97         help="Username used to login")
98     subparser.add_argument(
99         'password',
100         help="Your NEW supersecret word to login")
101
102
103 def changepw(args):
104     commands_util.setup_app(args)
105
106     db = mg_globals.database
107
108     user = db.User.one({'username': unicode(args.username.lower())})
109     if user:
110         user.pw_hash = auth_lib.bcrypt_gen_password_hash(args.password)
111         user.save()
112         print 'Password successfully changed'
113     else:
114         print 'The user doesn\'t exist'