Browse Source

Add sandbox functionality for users to generate a dashboard user

This allows members of the public to play around with the dashboard
site.
master
David Winterbottom 13 years ago
parent
commit
df83a0041f

+ 1
- 2
oscar/apps/customer/forms.py View File

@@ -14,7 +14,6 @@ from oscar.core.loading import get_profile_class
14 14
 
15 15
 def generate_username():
16 16
     uname = ''.join([random.choice(string.letters + string.digits + '_') for i in range(30)])
17
-
18 17
     try:
19 18
         User.objects.get(username=uname)
20 19
         return generate_username()
@@ -197,4 +196,4 @@ if hasattr(settings, 'AUTH_PROFILE_MODULE'):
197 196
 
198 197
     ProfileForm = UserAndProfileForm
199 198
 else:
200
-    ProfileForm = UserForm 
199
+    ProfileForm = UserForm

+ 0
- 2
oscar/templates/oscar/promotions/home.html View File

@@ -14,7 +14,5 @@
14 14
 </div>
15 15
 {% endblock header %}
16 16
 
17
-
18 17
 {% block content %}
19 18
 {% endblock content %}
20
-

+ 0
- 0
sandbox/apps/gateway/__init__.py View File


+ 18
- 0
sandbox/apps/gateway/forms.py View File

@@ -0,0 +1,18 @@
1
+from django import forms
2
+from django.contrib.auth.models import User
3
+
4
+
5
+class GatewayForm(forms.Form):
6
+    email = forms.EmailField()
7
+
8
+    def clean_email(self):
9
+        email = self.cleaned_data['email']
10
+        try:
11
+            User.objects.get(email=email)
12
+        except User.DoesNotExist:
13
+            pass
14
+        else:
15
+            raise forms.ValidationError(
16
+                "A user already exists with email %s" % email
17
+            )
18
+        return email

+ 0
- 0
sandbox/apps/gateway/models.py View File


+ 7
- 0
sandbox/apps/gateway/urls.py View File

@@ -0,0 +1,7 @@
1
+from django.conf.urls.defaults import patterns, url
2
+
3
+from apps.gateway import views
4
+
5
+urlpatterns = patterns('',
6
+    url(r'^$', views.GatewayView.as_view(), name='gateway')
7
+)

+ 52
- 0
sandbox/apps/gateway/views.py View File

@@ -0,0 +1,52 @@
1
+import logging
2
+
3
+from django.views import generic
4
+from django.contrib.auth.models import User
5
+from django.contrib import messages
6
+from django.core.mail import send_mail
7
+from django import http
8
+from django.core.urlresolvers import reverse
9
+from django.template.loader import get_template
10
+from django.template import Context
11
+
12
+from apps.gateway import forms
13
+from oscar.apps.customer.forms import generate_username
14
+
15
+logger = logging.getLogger('gateway')
16
+
17
+
18
+class GatewayView(generic.FormView):
19
+    template_name = 'gateway/form.html'
20
+    form_class = forms.GatewayForm
21
+
22
+    def form_valid(self, form):
23
+        real_email = form.cleaned_data['email']
24
+        username = generate_username()
25
+        password = generate_username()
26
+        email = 'dashboard-user-%s@oscarcommerce.com' % username
27
+
28
+        user = self.create_dashboard_user(username, email, password)
29
+        self.send_confirmation_email(real_email, user, password)
30
+        logger.info("Created dashboard user #%d for %s",
31
+                    user.id, real_email)
32
+
33
+        messages.success(
34
+            self.request,
35
+            "The credentials for a dashboard user have been sent to %s" % real_email)
36
+        return http.HttpResponseRedirect(reverse('gateway'))
37
+
38
+    def create_dashboard_user(self, username, email, password):
39
+        user = User.objects.create_user(username, email, password)
40
+        user.is_staff = True
41
+        user.save()
42
+        return user
43
+
44
+    def send_confirmation_email(self, real_email, user, password):
45
+        msg = get_template('gateway/email.txt').render(Context({
46
+            'email': user.email,
47
+            'password': password
48
+        }))
49
+        send_mail('Dashboard access to Oscar sandbox',
50
+                  msg, 'blackhole@sandbox.qa.tangentlabs.co.uk',
51
+                  [real_email])
52
+

+ 13
- 1
sandbox/settings.py View File

@@ -144,7 +144,7 @@ LOGGING = {
144 144
             'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
145 145
         },
146 146
         'simple': {
147
-            'format': '%(levelname)s %(message)s'
147
+            'format': '[%(asctime)s] %(message)s'
148 148
         },
149 149
     },
150 150
     'handlers': {
@@ -163,6 +163,12 @@ LOGGING = {
163 163
              'filename': 'checkout.log',
164 164
              'formatter': 'verbose'
165 165
         },
166
+        'gateway_file': {
167
+             'level': 'INFO',
168
+             'class': 'oscar.core.logging.handlers.EnvFileHandler',
169
+             'filename': 'gateway.log',
170
+             'formatter': 'simple'
171
+        },
166 172
         'error_file': {
167 173
              'level': 'INFO',
168 174
              'class': 'oscar.core.logging.handlers.EnvFileHandler',
@@ -190,6 +196,11 @@ LOGGING = {
190 196
             'propagate': True,
191 197
             'level':'INFO',
192 198
         },
199
+        'gateway': {
200
+            'handlers': ['gateway_file'],
201
+            'propagate': True,
202
+            'level':'INFO',
203
+        },
193 204
         'django.db.backends': {
194 205
             'handlers':['null'],
195 206
             'propagate': False,
@@ -216,6 +227,7 @@ INSTALLED_APPS = [
216 227
     'rosetta',
217 228
     # For profile testing
218 229
     'apps.user',
230
+    'apps.gateway',
219 231
 ]
220 232
 from oscar import get_core_apps
221 233
 INSTALLED_APPS = INSTALLED_APPS + get_core_apps(['apps.shipping'])

+ 13
- 0
sandbox/templates/gateway/email.txt View File

@@ -0,0 +1,13 @@
1
+A dashboard user has been created for you with credentials:
2
+
3
+- Email: {{ email }}
4
+- Password: {{ password }}
5
+
6
+Sign into the dashboard here:
7
+http://sandbox.oscar.tangentlabs.co.uk/dashboard/
8
+
9
+Feel free to play around with the dashboard, although please don't deface the
10
+public-facing pages.
11
+
12
+Best wishes,
13
+Oscar Team, Tangent Labs

+ 15
- 0
sandbox/templates/gateway/form.html View File

@@ -0,0 +1,15 @@
1
+{% extends 'layout.html' %}
2
+
3
+{% block content %}
4
+
5
+<h1>Dashboard access</h1>
6
+
7
+<form action="." method="post">
8
+	<p>Let us know your email address and we'll create a dashboard user for you and email you
9
+	the details.</p>
10
+	{% csrf_token %}
11
+	{% include 'partials/form_fields.html' with form=form %}
12
+	<button type="submit" class="btn btn-large btn-primary">Send email</button>
13
+</form>
14
+
15
+{% endblock %}

+ 6
- 0
sandbox/templates/promotions/home.html View File

@@ -0,0 +1,6 @@
1
+{% extends 'oscar/promotions/home.html' %}
2
+
3
+{% block content %}
4
+<a href="{% url gateway %}">Get dashboard access</a>
5
+
6
+{% endblock %}

+ 2
- 1
sandbox/urls.py View File

@@ -1,4 +1,4 @@
1
-from django.conf.urls.defaults import *
1
+from django.conf.urls.defaults import patterns, include, url
2 2
 from django.conf import settings
3 3
 from django.contrib import admin
4 4
 from django.contrib.staticfiles.urls import staticfiles_urlpatterns
@@ -12,6 +12,7 @@ admin.autodiscover()
12 12
 
13 13
 urlpatterns = patterns('',
14 14
     (r'^admin/', include(admin.site.urls)),
15
+    (r'^gateway/', include('apps.gateway.urls')),
15 16
     (r'', include(shop.urls)),
16 17
 )
17 18
 

Loading…
Cancel
Save