Statistics
| Branch: | Tag: | Revision:

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

History | View | Annotate | Download (5.2 kB)

1 ca96a346 Giorgos Verigakis
# Copyright 2012 GRNET S.A. All rights reserved.
2 df48dd1b Giorgos Verigakis
#
3 df48dd1b Giorgos Verigakis
# Redistribution and use in source and binary forms, with or
4 df48dd1b Giorgos Verigakis
# without modification, are permitted provided that the following
5 df48dd1b Giorgos Verigakis
# conditions are met:
6 df48dd1b Giorgos Verigakis
#
7 df48dd1b Giorgos Verigakis
#   1. Redistributions of source code must retain the above
8 df48dd1b Giorgos Verigakis
#      copyright notice, this list of conditions and the following
9 df48dd1b Giorgos Verigakis
#      disclaimer.
10 df48dd1b Giorgos Verigakis
#
11 df48dd1b Giorgos Verigakis
#   2. Redistributions in binary form must reproduce the above
12 df48dd1b Giorgos Verigakis
#      copyright notice, this list of conditions and the following
13 df48dd1b Giorgos Verigakis
#      disclaimer in the documentation and/or other materials
14 df48dd1b Giorgos Verigakis
#      provided with the distribution.
15 df48dd1b Giorgos Verigakis
#
16 df48dd1b Giorgos Verigakis
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 df48dd1b Giorgos Verigakis
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 df48dd1b Giorgos Verigakis
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 df48dd1b Giorgos Verigakis
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 df48dd1b Giorgos Verigakis
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 df48dd1b Giorgos Verigakis
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 df48dd1b Giorgos Verigakis
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 df48dd1b Giorgos Verigakis
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 df48dd1b Giorgos Verigakis
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 df48dd1b Giorgos Verigakis
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 df48dd1b Giorgos Verigakis
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 df48dd1b Giorgos Verigakis
# POSSIBILITY OF SUCH DAMAGE.
28 df48dd1b Giorgos Verigakis
#
29 df48dd1b Giorgos Verigakis
# The views and conclusions contained in the software and
30 df48dd1b Giorgos Verigakis
# documentation are those of the authors and should not be
31 df48dd1b Giorgos Verigakis
# interpreted as representing official policies, either expressed
32 df48dd1b Giorgos Verigakis
# or implied, of GRNET S.A.
33 df48dd1b Giorgos Verigakis
34 df48dd1b Giorgos Verigakis
from optparse import make_option
35 df48dd1b Giorgos Verigakis
36 df48dd1b Giorgos Verigakis
from django.core.management.base import BaseCommand, CommandError
37 18ffbee1 Sofia Papagiannaki
from django.contrib.auth.models import Group
38 0a569195 Sofia Papagiannaki
from django.core.exceptions import ValidationError
39 df48dd1b Giorgos Verigakis
40 397d5cbe Giorgos Verigakis
from ._common import get_user
41 df48dd1b Giorgos Verigakis
42 0a569195 Sofia Papagiannaki
from astakos.im.models import AstakosUser
43 df48dd1b Giorgos Verigakis
44 df48dd1b Giorgos Verigakis
class Command(BaseCommand):
45 0a569195 Sofia Papagiannaki
    args = "<user ID>"
46 df48dd1b Giorgos Verigakis
    help = "Modify a user's attributes"
47 df48dd1b Giorgos Verigakis
    
48 df48dd1b Giorgos Verigakis
    option_list = BaseCommand.option_list + (
49 df48dd1b Giorgos Verigakis
        make_option('--invitations',
50 df48dd1b Giorgos Verigakis
            dest='invitations',
51 df48dd1b Giorgos Verigakis
            metavar='NUM',
52 df48dd1b Giorgos Verigakis
            help="Update user's invitations"),
53 ebd369d0 Sofia Papagiannaki
        make_option('--level',
54 ebd369d0 Sofia Papagiannaki
            dest='level',
55 ebd369d0 Sofia Papagiannaki
            metavar='NUM',
56 ebd369d0 Sofia Papagiannaki
            help="Update user's level"),
57 df48dd1b Giorgos Verigakis
        make_option('--password',
58 df48dd1b Giorgos Verigakis
            dest='password',
59 df48dd1b Giorgos Verigakis
            metavar='PASSWORD',
60 df48dd1b Giorgos Verigakis
            help="Set user's password"),
61 df48dd1b Giorgos Verigakis
        make_option('--renew-token',
62 df48dd1b Giorgos Verigakis
            action='store_true',
63 df48dd1b Giorgos Verigakis
            dest='renew_token',
64 df48dd1b Giorgos Verigakis
            default=False,
65 df48dd1b Giorgos Verigakis
            help="Renew the user's token"),
66 df48dd1b Giorgos Verigakis
        make_option('--set-admin',
67 df48dd1b Giorgos Verigakis
            action='store_true',
68 df48dd1b Giorgos Verigakis
            dest='admin',
69 df48dd1b Giorgos Verigakis
            default=False,
70 df48dd1b Giorgos Verigakis
            help="Give user admin rights"),
71 df48dd1b Giorgos Verigakis
        make_option('--set-noadmin',
72 df48dd1b Giorgos Verigakis
            action='store_true',
73 df48dd1b Giorgos Verigakis
            dest='noadmin',
74 df48dd1b Giorgos Verigakis
            default=False,
75 df48dd1b Giorgos Verigakis
            help="Revoke user's admin rights"),
76 ebd369d0 Sofia Papagiannaki
        make_option('--set-active',
77 ebd369d0 Sofia Papagiannaki
            action='store_true',
78 ebd369d0 Sofia Papagiannaki
            dest='active',
79 ebd369d0 Sofia Papagiannaki
            default=False,
80 ebd369d0 Sofia Papagiannaki
            help="Change user's state to inactive"),
81 ebd369d0 Sofia Papagiannaki
        make_option('--set-inactive',
82 fc28d013 Sofia Papagiannaki
            action='store_true',
83 fc28d013 Sofia Papagiannaki
            dest='inactive',
84 fc28d013 Sofia Papagiannaki
            default=False,
85 fc28d013 Sofia Papagiannaki
            help="Change user's state to inactive"),
86 4e30244e Sofia Papagiannaki
        make_option('--add-group',
87 4e30244e Sofia Papagiannaki
            dest='add-group',
88 4e30244e Sofia Papagiannaki
            help="Add user group"),
89 4e30244e Sofia Papagiannaki
        make_option('--delete-group',
90 4e30244e Sofia Papagiannaki
            dest='delete-group',
91 4e30244e Sofia Papagiannaki
            help="Delete user group"),
92 df48dd1b Giorgos Verigakis
        )
93 df48dd1b Giorgos Verigakis
    
94 df48dd1b Giorgos Verigakis
    def handle(self, *args, **options):
95 df48dd1b Giorgos Verigakis
        if len(args) != 1:
96 0a569195 Sofia Papagiannaki
            raise CommandError("Please provide a user ID")
97 0a569195 Sofia Papagiannaki
        
98 0a569195 Sofia Papagiannaki
        if args[0].isdigit():
99 0a569195 Sofia Papagiannaki
            user = AstakosUser.objects.get(id=int( args[0]))
100 0a569195 Sofia Papagiannaki
        else:
101 0a569195 Sofia Papagiannaki
            raise CommandError("Invalid ID")
102 df48dd1b Giorgos Verigakis
        
103 397d5cbe Giorgos Verigakis
        if not user:
104 397d5cbe Giorgos Verigakis
            raise CommandError("Unknown user")
105 df48dd1b Giorgos Verigakis
        
106 df48dd1b Giorgos Verigakis
        if options.get('admin'):
107 df48dd1b Giorgos Verigakis
            user.is_superuser = True
108 df48dd1b Giorgos Verigakis
        elif options.get('noadmin'):
109 df48dd1b Giorgos Verigakis
            user.is_superuser = False
110 df48dd1b Giorgos Verigakis
        
111 ebd369d0 Sofia Papagiannaki
        if options.get('active'):
112 ebd369d0 Sofia Papagiannaki
            user.is_active = True
113 ebd369d0 Sofia Papagiannaki
        elif options.get('inactive'):
114 ebd369d0 Sofia Papagiannaki
            user.is_active = False
115 ebd369d0 Sofia Papagiannaki
        
116 df48dd1b Giorgos Verigakis
        invitations = options.get('invitations')
117 df48dd1b Giorgos Verigakis
        if invitations is not None:
118 df48dd1b Giorgos Verigakis
            user.invitations = int(invitations)
119 df48dd1b Giorgos Verigakis
        
120 4e30244e Sofia Papagiannaki
        groupname = options.get('add-group')
121 18ffbee1 Sofia Papagiannaki
        if groupname is not None:
122 18ffbee1 Sofia Papagiannaki
            try:
123 18ffbee1 Sofia Papagiannaki
                group = Group.objects.get(name=groupname)
124 18ffbee1 Sofia Papagiannaki
                user.groups.add(group)
125 18ffbee1 Sofia Papagiannaki
            except Group.DoesNotExist, e:
126 18ffbee1 Sofia Papagiannaki
                raise CommandError("Group named %s does not exist." % groupname)
127 18ffbee1 Sofia Papagiannaki
        
128 4e30244e Sofia Papagiannaki
        groupname = options.get('delete-group')
129 4e30244e Sofia Papagiannaki
        if groupname is not None:
130 4e30244e Sofia Papagiannaki
            try:
131 4e30244e Sofia Papagiannaki
                group = Group.objects.get(name=groupname)
132 4e30244e Sofia Papagiannaki
                user.groups.remove(group)
133 4e30244e Sofia Papagiannaki
            except Group.DoesNotExist, e:
134 4e30244e Sofia Papagiannaki
                raise CommandError("Group named %s does not exist." % groupname)
135 4e30244e Sofia Papagiannaki
        
136 ebd369d0 Sofia Papagiannaki
        level = options.get('level')
137 ebd369d0 Sofia Papagiannaki
        if level is not None:
138 ebd369d0 Sofia Papagiannaki
            user.level = int(level)
139 ebd369d0 Sofia Papagiannaki
        
140 df48dd1b Giorgos Verigakis
        password = options.get('password')
141 df48dd1b Giorgos Verigakis
        if password is not None:
142 df48dd1b Giorgos Verigakis
            user.set_password(password)
143 df48dd1b Giorgos Verigakis
        
144 df48dd1b Giorgos Verigakis
        if options['renew_token']:
145 df48dd1b Giorgos Verigakis
            user.renew_token()
146 df48dd1b Giorgos Verigakis
        
147 0a569195 Sofia Papagiannaki
        try:
148 0a569195 Sofia Papagiannaki
            user.save()
149 0a569195 Sofia Papagiannaki
        except ValidationError, e:
150 0a569195 Sofia Papagiannaki
            raise CommandError(e.message_dict)