Statistics
| Branch: | Tag: | Revision:

root / snf-astakos-app / astakos / oa2 / management / commands / oauth2-client-add.py @ cb618cc0

History | View | Annotate | Download (3.9 kB)

1 3dd8a637 Sofia Papagiannaki
# Copyright 2013 GRNET S.A. All rights reserved.
2 3dd8a637 Sofia Papagiannaki
#
3 3dd8a637 Sofia Papagiannaki
# Redistribution and use in source and binary forms, with or
4 3dd8a637 Sofia Papagiannaki
# without modification, are permitted provided that the following
5 3dd8a637 Sofia Papagiannaki
# conditions are met:
6 3dd8a637 Sofia Papagiannaki
#
7 3dd8a637 Sofia Papagiannaki
#   1. Redistributions of source code must retain the above
8 3dd8a637 Sofia Papagiannaki
#      copyright notice, this list of conditions and the following
9 3dd8a637 Sofia Papagiannaki
#      disclaimer.
10 3dd8a637 Sofia Papagiannaki
#
11 3dd8a637 Sofia Papagiannaki
#   2. Redistributions in binary form must reproduce the above
12 3dd8a637 Sofia Papagiannaki
#      copyright notice, this list of conditions and the following
13 3dd8a637 Sofia Papagiannaki
#      disclaimer in the documentation and/or other materials
14 3dd8a637 Sofia Papagiannaki
#      provided with the distribution.
15 3dd8a637 Sofia Papagiannaki
#
16 3dd8a637 Sofia Papagiannaki
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 3dd8a637 Sofia Papagiannaki
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 3dd8a637 Sofia Papagiannaki
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 3dd8a637 Sofia Papagiannaki
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 3dd8a637 Sofia Papagiannaki
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 3dd8a637 Sofia Papagiannaki
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 3dd8a637 Sofia Papagiannaki
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 3dd8a637 Sofia Papagiannaki
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 3dd8a637 Sofia Papagiannaki
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 3dd8a637 Sofia Papagiannaki
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 3dd8a637 Sofia Papagiannaki
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 3dd8a637 Sofia Papagiannaki
# POSSIBILITY OF SUCH DAMAGE.
28 3dd8a637 Sofia Papagiannaki
#
29 3dd8a637 Sofia Papagiannaki
# The views and conclusions contained in the software and
30 3dd8a637 Sofia Papagiannaki
# documentation are those of the authors and should not be
31 3dd8a637 Sofia Papagiannaki
# interpreted as representing official policies, either expressed
32 3dd8a637 Sofia Papagiannaki
# or implied, of GRNET S.A.
33 3dd8a637 Sofia Papagiannaki
34 3dd8a637 Sofia Papagiannaki
from optparse import make_option
35 3dd8a637 Sofia Papagiannaki
36 3dd8a637 Sofia Papagiannaki
from django.db import transaction
37 3dd8a637 Sofia Papagiannaki
from django.core.management.base import CommandError
38 3dd8a637 Sofia Papagiannaki
39 3dd8a637 Sofia Papagiannaki
from snf_django.management.commands import SynnefoCommand
40 3dd8a637 Sofia Papagiannaki
41 3dd8a637 Sofia Papagiannaki
from astakos.oa2.models import Client, RedirectUrl
42 cb618cc0 Sofia Papagiannaki
from astakos.oa2 import settings
43 3dd8a637 Sofia Papagiannaki
44 3dd8a637 Sofia Papagiannaki
45 3dd8a637 Sofia Papagiannaki
class Command(SynnefoCommand):
46 3dd8a637 Sofia Papagiannaki
    args = "<identfier>"
47 5547485e Sofia Papagiannaki
    help = "Create an oauth2 client"
48 3dd8a637 Sofia Papagiannaki
49 3dd8a637 Sofia Papagiannaki
    option_list = SynnefoCommand.option_list + (
50 3dd8a637 Sofia Papagiannaki
        make_option('--secret',
51 3dd8a637 Sofia Papagiannaki
                    dest='secret',
52 3dd8a637 Sofia Papagiannaki
                    metavar='SECRET',
53 3dd8a637 Sofia Papagiannaki
                    action='store',
54 3dd8a637 Sofia Papagiannaki
                    default=None,
55 3dd8a637 Sofia Papagiannaki
                    help="Set client's secret"),
56 3dd8a637 Sofia Papagiannaki
        make_option('--is-trusted',
57 3dd8a637 Sofia Papagiannaki
                    action='store_true',
58 3dd8a637 Sofia Papagiannaki
                    dest='is_trusted',
59 3dd8a637 Sofia Papagiannaki
                    default=False,
60 3dd8a637 Sofia Papagiannaki
                    help="Whether client is trusted or not"),
61 3dd8a637 Sofia Papagiannaki
        make_option('--type',
62 3dd8a637 Sofia Papagiannaki
                    action='store',
63 3dd8a637 Sofia Papagiannaki
                    dest='type',
64 3dd8a637 Sofia Papagiannaki
                    default='confidential',
65 3dd8a637 Sofia Papagiannaki
                    help="Set client's type"),
66 3dd8a637 Sofia Papagiannaki
        make_option('--url',
67 3dd8a637 Sofia Papagiannaki
                    action='append',
68 3dd8a637 Sofia Papagiannaki
                    dest='urls',
69 3dd8a637 Sofia Papagiannaki
                    default=[],
70 3dd8a637 Sofia Papagiannaki
                    help="Set client's redirect URLs"),
71 3dd8a637 Sofia Papagiannaki
    )
72 3dd8a637 Sofia Papagiannaki
73 3dd8a637 Sofia Papagiannaki
    @transaction.commit_on_success
74 3dd8a637 Sofia Papagiannaki
    def handle(self, *args, **options):
75 3dd8a637 Sofia Papagiannaki
        if len(args) != 1:
76 3dd8a637 Sofia Papagiannaki
            raise CommandError("Invalid number of arguments")
77 3dd8a637 Sofia Papagiannaki
78 cb618cc0 Sofia Papagiannaki
        urls = filter(lambda u: len(u) <
79 cb618cc0 Sofia Papagiannaki
                      settings.MAXIMUM_ALLOWED_REDIRECT_URI_LENGTH,
80 cb618cc0 Sofia Papagiannaki
                      options['urls'])
81 cb618cc0 Sofia Papagiannaki
82 cb618cc0 Sofia Papagiannaki
        if len(options['urls']) != len(urls):
83 cb618cc0 Sofia Papagiannaki
            self.stdout.write('The following urls are over the allowed limit '
84 cb618cc0 Sofia Papagiannaki
                              'and are going to be ignored: %s\n' %
85 cb618cc0 Sofia Papagiannaki
                              ','.join(set(options['urls']) - set(urls)))
86 cb618cc0 Sofia Papagiannaki
87 cb618cc0 Sofia Papagiannaki
        if not urls:
88 252eb705 Sofia Papagiannaki
            raise CommandError("There should be at least one redirect URI")
89 252eb705 Sofia Papagiannaki
90 3dd8a637 Sofia Papagiannaki
        identifier = args[0].decode('utf8')
91 3dd8a637 Sofia Papagiannaki
92 3dd8a637 Sofia Papagiannaki
        try:
93 3dd8a637 Sofia Papagiannaki
            c = Client(identifier=identifier, secret=options['secret'],
94 3dd8a637 Sofia Papagiannaki
                       type=options['type'], is_trusted=options['is_trusted'])
95 3dd8a637 Sofia Papagiannaki
            c.save()
96 3dd8a637 Sofia Papagiannaki
            c.redirecturl_set.bulk_create((RedirectUrl(client=c, url=url) for
97 cb618cc0 Sofia Papagiannaki
                                          url in urls))
98 3dd8a637 Sofia Papagiannaki
            c.save()
99 3dd8a637 Sofia Papagiannaki
100 3dd8a637 Sofia Papagiannaki
        except BaseException, e:
101 3dd8a637 Sofia Papagiannaki
            raise CommandError(e)
102 3dd8a637 Sofia Papagiannaki
        else:
103 3dd8a637 Sofia Papagiannaki
            self.stdout.write('Client created successfully\n')