Revision a39b3e16
b/docs/admin-guide.rst | ||
---|---|---|
878 | 878 |
============================ =========================== |
879 | 879 |
fix-superusers Transform superusers created by syncdb into AstakosUser instances |
880 | 880 |
cleanup-full Cleanup sessions and session catalog |
881 |
invitation-list List invitation |
|
882 |
invitation-show Show invitation details |
|
883 | 881 |
project-control Manage projects and applications |
884 | 882 |
project-list List projects |
885 | 883 |
project-show Show project details |
... | ... | |
904 | 902 |
authpolicy-show Show authentication provider profile details |
905 | 903 |
group-add Create a group with the given name |
906 | 904 |
group-list List available groups |
907 |
user-invite Invite somebody |
|
908 | 905 |
user-list List users |
909 | 906 |
user-modify Modify user |
910 | 907 |
user-show Show user details |
b/docs/astakos.rst | ||
---|---|---|
55 | 55 |
Invited user |
56 | 56 |
~~~~~~~~~~~~ |
57 | 57 |
|
58 |
.. note:: |
|
59 |
|
|
60 |
Invitation feature is currently disabled. |
|
61 |
|
|
58 | 62 |
A registered ~okeanos user, invites student Alice to subscribe to ~okeanos |
59 | 63 |
services. Alice receives an email and through a link is navigated to Astakos's |
60 | 64 |
signup page. The system prompts her to select one of the available |
/dev/null | ||
---|---|---|
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 astakos.im.models import Invitation |
|
35 |
from synnefo.webproject.management.commands import ListCommand |
|
36 |
|
|
37 |
class Command(ListCommand): |
|
38 |
help = "List invitations" |
|
39 |
|
|
40 |
object_class = Invitation |
|
41 |
|
|
42 |
FIELDS = { |
|
43 |
"id": ("id", "The ID of the invitation"), |
|
44 |
"inviter": ("inviter.username", "The inviter of the invitation"), |
|
45 |
"username": ("username", "The receiver username"), |
|
46 |
"realname": ("realname", "The receiver name"), |
|
47 |
"code": ("code", "The code of the invitation"), |
|
48 |
"is_consumed": ("is_consumed", "Whether the invitation is consumed or not"), |
|
49 |
} |
|
50 |
|
|
51 |
fields = ["id", "inviter", "username", "realname", "code", "is_consumed"] |
/dev/null | ||
---|---|---|
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 django.core.management.base import CommandError |
|
35 |
|
|
36 |
from astakos.im.models import Invitation |
|
37 |
from synnefo.webproject.management.commands import SynnefoCommand |
|
38 |
|
|
39 |
from synnefo.webproject.management import utils |
|
40 |
|
|
41 |
|
|
42 |
class Command(SynnefoCommand): |
|
43 |
args = "<invitation ID or code>" |
|
44 |
help = "Show invitation info" |
|
45 |
|
|
46 |
def handle(self, *args, **options): |
|
47 |
if len(args) != 1: |
|
48 |
raise CommandError("Please provide an invitation id") |
|
49 |
|
|
50 |
try: |
|
51 |
invitation = Invitation.objects.get(id=int(args[0])) |
|
52 |
except Invitation.DoesNotExist: |
|
53 |
try: |
|
54 |
invitation = Invitation.objects.get(code=args[0]) |
|
55 |
except Invitation.DoesNotExist: |
|
56 |
raise CommandError("Unknown invitation id '%s'" % (args[0],)) |
|
57 |
|
|
58 |
kv = { |
|
59 |
'id': invitation.id, |
|
60 |
'real name': invitation.realname, |
|
61 |
'email': invitation.username, |
|
62 |
'code': invitation.code, |
|
63 |
'consumed': invitation.is_consumed, |
|
64 |
'date created': invitation.created, |
|
65 |
'date consumed': invitation.consumed, |
|
66 |
'inviter real name': invitation.inviter.realname, |
|
67 |
'invitater email': invitation.inviter.email, |
|
68 |
} |
|
69 |
|
|
70 |
utils.pprint_table(self.stdout, [kv.values()], kv.keys(), |
|
71 |
options["output_format"], vertical=True) |
/dev/null | ||
---|---|---|
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 django.core.management.base import BaseCommand, CommandError |
|
35 |
from django.db.utils import IntegrityError |
|
36 |
from django.db import transaction |
|
37 |
|
|
38 |
from ._common import get_user |
|
39 |
|
|
40 |
|
|
41 |
@transaction.commit_manually |
|
42 |
class Command(BaseCommand): |
|
43 |
args = "<inviter id or email> <email> <real name>" |
|
44 |
help = "Invite a user" |
|
45 |
|
|
46 |
def handle(self, *args, **options): |
|
47 |
if len(args) != 3: |
|
48 |
raise CommandError("Invalid number of arguments") |
|
49 |
|
|
50 |
inviter = get_user(args[0], is_active=True) |
|
51 |
if not inviter: |
|
52 |
raise CommandError("Unknown inviter") |
|
53 |
if not inviter.is_active: |
|
54 |
raise CommandError("Inactive inviter") |
|
55 |
|
|
56 |
if inviter.invitations > 0: |
|
57 |
email = args[1] |
|
58 |
realname = args[2] |
|
59 |
|
|
60 |
try: |
|
61 |
inviter.invite(email, realname) |
|
62 |
self.stdout.write("Invitation sent to '%s'\n" % (email,)) |
|
63 |
except IntegrityError: |
|
64 |
transaction.rollback() |
|
65 |
raise CommandError( |
|
66 |
"There is already an invitation for %s" % (email,)) |
|
67 |
else: |
|
68 |
transaction.commit() |
|
69 |
else: |
|
70 |
raise CommandError("No invitations left") |
b/snf-astakos-app/astakos/im/management/commands/user-show.py | ||
---|---|---|
102 | 102 |
('last update', user.updated), |
103 | 103 |
#('token', user.auth_token), |
104 | 104 |
('token expiration', user.auth_token_expires), |
105 |
('invitations', user.invitations), |
|
106 |
('invitation level', user.level), |
|
107 | 105 |
('providers', user.auth_providers_display), |
108 | 106 |
('verified', user.is_verified), |
109 | 107 |
('groups', [elem.name for elem in user.groups.all()]), |
Also available in: Unified diff