Statistics
| Branch: | Tag: | Revision:

root / snf-astakos-app / astakos / im / management / commands / modifyuser.py @ 27e26a41

History | View | Annotate | Download (5.2 kB)

1
# Copyright 2012 GRNET S.A. All rights reserved.
2
#
3
# Redistribution and use in source and binary forms, with or
4
# without modification, are permitted provided that the following
5
# conditions are met:
6
#
7
#   1. Redistributions of source code must retain the above
8
#      copyright notice, this list of conditions and the following
9
#      disclaimer.
10
#
11
#   2. Redistributions in binary form must reproduce the above
12
#      copyright notice, this list of conditions and the following
13
#      disclaimer in the documentation and/or other materials
14
#      provided with the distribution.
15
#
16
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
# POSSIBILITY OF SUCH DAMAGE.
28
#
29
# The views and conclusions contained in the software and
30
# documentation are those of the authors and should not be
31
# interpreted as representing official policies, either expressed
32
# or implied, of GRNET S.A.
33

    
34
from optparse import make_option
35

    
36
from django.core.management.base import BaseCommand, CommandError
37
from django.contrib.auth.models import Group
38
from django.core.exceptions import ValidationError
39

    
40
from ._common import get_user
41

    
42
from astakos.im.models import AstakosUser
43

    
44
class Command(BaseCommand):
45
    args = "<user ID>"
46
    help = "Modify a user's attributes"
47
    
48
    option_list = BaseCommand.option_list + (
49
        make_option('--invitations',
50
            dest='invitations',
51
            metavar='NUM',
52
            help="Update user's invitations"),
53
        make_option('--level',
54
            dest='level',
55
            metavar='NUM',
56
            help="Update user's level"),
57
        make_option('--password',
58
            dest='password',
59
            metavar='PASSWORD',
60
            help="Set user's password"),
61
        make_option('--renew-token',
62
            action='store_true',
63
            dest='renew_token',
64
            default=False,
65
            help="Renew the user's token"),
66
        make_option('--set-admin',
67
            action='store_true',
68
            dest='admin',
69
            default=False,
70
            help="Give user admin rights"),
71
        make_option('--set-noadmin',
72
            action='store_true',
73
            dest='noadmin',
74
            default=False,
75
            help="Revoke user's admin rights"),
76
        make_option('--set-active',
77
            action='store_true',
78
            dest='active',
79
            default=False,
80
            help="Change user's state to inactive"),
81
        make_option('--set-inactive',
82
            action='store_true',
83
            dest='inactive',
84
            default=False,
85
            help="Change user's state to inactive"),
86
        make_option('--add-group',
87
            dest='add-group',
88
            help="Add user group"),
89
        make_option('--delete-group',
90
            dest='delete-group',
91
            help="Delete user group"),
92
        )
93
    
94
    def handle(self, *args, **options):
95
        if len(args) != 1:
96
            raise CommandError("Please provide a user ID")
97
        
98
        if args[0].isdigit():
99
            user = AstakosUser.objects.get(id=int( args[0]))
100
        else:
101
            raise CommandError("Invalid ID")
102
        
103
        if not user:
104
            raise CommandError("Unknown user")
105
        
106
        if options.get('admin'):
107
            user.is_superuser = True
108
        elif options.get('noadmin'):
109
            user.is_superuser = False
110
        
111
        if options.get('active'):
112
            user.is_active = True
113
        elif options.get('inactive'):
114
            user.is_active = False
115
        
116
        invitations = options.get('invitations')
117
        if invitations is not None:
118
            user.invitations = int(invitations)
119
        
120
        groupname = options.get('add-group')
121
        if groupname is not None:
122
            try:
123
                group = Group.objects.get(name=groupname)
124
                user.groups.add(group)
125
            except Group.DoesNotExist, e:
126
                raise CommandError("Group named %s does not exist." % groupname)
127
        
128
        groupname = options.get('delete-group')
129
        if groupname is not None:
130
            try:
131
                group = Group.objects.get(name=groupname)
132
                user.groups.remove(group)
133
            except Group.DoesNotExist, e:
134
                raise CommandError("Group named %s does not exist." % groupname)
135
        
136
        level = options.get('level')
137
        if level is not None:
138
            user.level = int(level)
139
        
140
        password = options.get('password')
141
        if password is not None:
142
            user.set_password(password)
143
        
144
        if options['renew_token']:
145
            user.renew_token()
146
        
147
        try:
148
            user.save()
149
        except ValidationError, e:
150
            raise CommandError(e)