From 36f8f7939b574d19f2b53bb9cffe9b5a73898fd7 Mon Sep 17 00:00:00 2001 From: juanifioren Date: Wed, 14 Jan 2015 18:27:46 -0300 Subject: [PATCH] Add client creation. Remove user from client model. --- openid_provider/models.py | 12 ----- .../openid_provider/client_create.html | 50 +++++++++++++++++++ .../openid_provider/client_detail.html | 6 +-- .../openid_provider/client_list.html | 2 +- openid_provider/urls.py | 1 + openid_provider/views/clients.py | 43 +++++++++++++++- 6 files changed, 95 insertions(+), 19 deletions(-) create mode 100644 openid_provider/templates/openid_provider/client_create.html diff --git a/openid_provider/models.py b/openid_provider/models.py index c4769b2..830d558 100644 --- a/openid_provider/models.py +++ b/openid_provider/models.py @@ -18,22 +18,10 @@ class Client(models.Model): ] name = models.CharField(max_length=100, default='') - user = models.ForeignKey(User) client_id = models.CharField(max_length=255, unique=True) client_secret = models.CharField(max_length=255, unique=True) client_type = models.CharField(max_length=20, choices=CLIENT_TYPE_CHOICES) response_type = models.CharField(max_length=30, choices=RESPONSE_TYPE_CHOICES) - - # TODO: Need to be implemented. - # The list of scopes the client may request access to. - _scope = models.TextField(default='') - def scope(): - def fget(self): - return self._scope.split() - def fset(self, value): - self._scope = ' '.join(value) - return locals() - scope = property(**scope()) _redirect_uris = models.TextField(default='') def redirect_uris(): diff --git a/openid_provider/templates/openid_provider/client_create.html b/openid_provider/templates/openid_provider/client_create.html new file mode 100644 index 0000000..867a114 --- /dev/null +++ b/openid_provider/templates/openid_provider/client_create.html @@ -0,0 +1,50 @@ +{% extends "openid_provider/base.html" %} + +{% load i18n %} + +{% block content %} + +
+
+
+
+

Create new client

+
+
+ {% if error %} + + {% endif %} +
+ {% csrf_token %} +
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
Go Back +
+
+
+
+
+ +{% endblock %} \ No newline at end of file diff --git a/openid_provider/templates/openid_provider/client_detail.html b/openid_provider/templates/openid_provider/client_detail.html index c8c728f..b910043 100644 --- a/openid_provider/templates/openid_provider/client_detail.html +++ b/openid_provider/templates/openid_provider/client_detail.html @@ -33,16 +33,12 @@ Redirect URIs {{ object.redirect_uris|join:', ' }} - - Scopes - {{ object.scope|join:', ' }} -
- Go Back Delete Edit
+
Go Back diff --git a/openid_provider/templates/openid_provider/client_list.html b/openid_provider/templates/openid_provider/client_list.html index bb39220..44d43aa 100644 --- a/openid_provider/templates/openid_provider/client_list.html +++ b/openid_provider/templates/openid_provider/client_list.html @@ -14,7 +14,7 @@ Total - New Client + New Client diff --git a/openid_provider/urls.py b/openid_provider/urls.py index 906a1c6..4a82c21 100644 --- a/openid_provider/urls.py +++ b/openid_provider/urls.py @@ -15,5 +15,6 @@ urlpatterns = patterns('', url(r'^clients/$', clients.ClientListView.as_view(), name='client_list'), url(r'^clients/(?P[\d]+)/$', clients.ClientDetailView.as_view(), name='client_detail'), + url(r'^clients/create/$', clients.client_create, name='client_create'), ) \ No newline at end of file diff --git a/openid_provider/views/clients.py b/openid_provider/views/clients.py index 5114888..afebaa8 100644 --- a/openid_provider/views/clients.py +++ b/openid_provider/views/clients.py @@ -1,8 +1,13 @@ +from django.shortcuts import redirect +from django.shortcuts import render from django.utils.decorators import method_decorator from django.views.generic.detail import DetailView +from django.views.generic.edit import CreateView from django.views.generic.list import ListView from openid_provider.lib.utils.decorators import staff_required from openid_provider.models import Client +from random import random +import uuid class ClientListView(ListView): @@ -15,4 +20,40 @@ class ClientListView(ListView): class ClientDetailView(DetailView): - model = Client \ No newline at end of file + model = Client + + @method_decorator(staff_required) + def dispatch(self, *args, **kwargs): + return super(ClientListView, self).dispatch(*args, **kwargs) + +@staff_required +def client_create(request): + + error = False + + if request.method == 'POST': + + try: + client = Client() + + client.name = request.POST.get('name') + client.client_type = request.POST.get('client_type') + client.response_type = request.POST.get('response_type') + client.redirect_uris = request.POST.get('redirect_uris') + + client.client_id = str(random()).split('.')[1][:8] + client.client_secret = uuid.uuid4().hex + + client.save() + + return redirect('openid_provider:client_list') + + except Exception as e: + print e + error = True + + data = { + 'error': error, + } + + return render(request, 'openid_provider/client_create.html', data) \ No newline at end of file