diff options
author | Alexandru DAMIAN <alexandru.damian@intel.com> | 2014-06-27 15:09:04 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2014-07-14 14:10:03 +0100 |
commit | 9cfa66bd13afd339760209ad9977c67464118c93 (patch) | |
tree | 6fdddb8b7eb052204b8cd5a461e15b4e55e0c85b | |
parent | cff19351a8b9d6267177dc548d994e3f28590391 (diff) | |
download | poky-9cfa66bd13afd339760209ad9977c67464118c93.tar.gz |
bitbake: toaster: add automated login in new project page
Toaster uses the Django authentication system to assign
user accounts to the projects that are being created.
In the current implementation, the user accounts are
created/authenticated automatically, on the fly, based
on the fields specified in the create new project page.
(Bitbake rev: a9062d9692525e24e59b5b2bb4dfdef90b41bf2a)
Signed-off-by: Alexandru DAMIAN <alexandru.damian@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r-- | bitbake/lib/toaster/toastergui/templates/newproject.html | 35 | ||||
-rwxr-xr-x | bitbake/lib/toaster/toastergui/views.py | 29 |
2 files changed, 46 insertions, 18 deletions
diff --git a/bitbake/lib/toaster/toastergui/templates/newproject.html b/bitbake/lib/toaster/toastergui/templates/newproject.html index e5a6551967..ce01800e08 100644 --- a/bitbake/lib/toaster/toastergui/templates/newproject.html +++ b/bitbake/lib/toaster/toastergui/templates/newproject.html | |||
@@ -6,36 +6,39 @@ | |||
6 | <div class="span6"> | 6 | <div class="span6"> |
7 | <div class="page-header"> | 7 | <div class="page-header"> |
8 | <h1>Create a new project</h1> | 8 | <h1>Create a new project</h1> |
9 | </div> | 9 | </div> |
10 | <form> | 10 | <div class="container-fluid"> |
11 | {% for a in alerts %} | ||
12 | <div class="alert alert-error row-fluid" role="alert">{{a}}</div> | ||
13 | {% endfor %} | ||
14 | </div> | ||
15 | <form method="POST">{% csrf_token %} | ||
11 | <fieldset> | 16 | <fieldset> |
12 | <label>Project name <span class="muted">(required)</span></label> | 17 | <label>Project name <span class="muted">(required)</span></label> |
13 | <input type="text" class="input-xlarge" required name="projectname"> | 18 | <input type="text" class="input-xlarge" required name="projectname" value="{{projectname}}"> |
14 | <label class="project-form"> | 19 | <label class="project-form"> |
15 | Project owner | 20 | Project owner |
16 | <i class="icon-question-sign get-help" title="The go-to person for this project"></i> | 21 | <i class="icon-question-sign get-help" title="The go-to person for this project"></i> |
17 | </label> | 22 | </label> |
18 | <form method="POST"> | 23 | <input type="text" name="username" value="{{username}}"> |
19 | <input type="text"> | ||
20 | <label class="project-form">Owner's email</label> | 24 | <label class="project-form">Owner's email</label> |
21 | <input type="email" class="input-large" name="email"> | 25 | <input type="email" class="input-large" name="email" value="{{email}}"> |
22 | <label class="project-form"> | 26 | <label class="project-form"> |
23 | Yocto Project version | 27 | Yocto Project version |
24 | <i class="icon-question-sign get-help" title="This sets the branch for the Yocto Project core layers (meta, meta-yocto and meta-yocto-bsp), and for the layers you use from the OpenEmbedded Metadata Index"></i> | 28 | <i class="icon-question-sign get-help" title="This sets the branch for the Yocto Project core layers (meta, meta-yocto and meta-yocto-bsp), and for the layers you use from the OpenEmbedded Metadata Index"></i> |
25 | </label> | 29 | </label> |
26 | <select> | 30 | <select name="projectversion"> |
27 | <option>Yocto Project 1.7 "D?"</option> | 31 | <option value="1.7" {%if projectversion == "1.7" %}selected{%endif%}>Yocto Project 1.7 "D?"</option> |
28 | <option>Yocto Project 1.6 "Daisy"</option> | 32 | <option value="1.6" {%if projectversion == "1.6" %}selected{%endif%}>Yocto Project 1.6 "Daisy"</option> |
29 | <option>Yocto Project 1.5 "Dora"</option> | 33 | <option value="1.5" {%if projectversion == "1.5" %}selected{%endif%}>Yocto Project 1.5 "Dora"</option> |
30 | </select> | 34 | </select> |
31 | </form> | ||
32 | </fieldset> | 35 | </fieldset> |
33 | 36 | ||
34 | <div class="form-actions"> | 37 | <div class="form-actions"> |
35 | <a href="project-with-targets.html" class="btn btn-primary btn-large">Create project</a> | 38 | <input type="submit" class="btn btn-primary btn-large" value="Create project"/> |
36 | </div> | 39 | </div> |
37 | </form> | 40 | </form> |
38 | </div> | 41 | </div> |
39 | </div> | 42 | </div> |
40 | </div> | 43 | </div> |
41 | {% endblock %} | 44 | {% endblock %} |
diff --git a/bitbake/lib/toaster/toastergui/views.py b/bitbake/lib/toaster/toastergui/views.py index 7dc0108393..89c02d41ab 100755 --- a/bitbake/lib/toaster/toastergui/views.py +++ b/bitbake/lib/toaster/toastergui/views.py | |||
@@ -1768,17 +1768,42 @@ def managedcontextprocessor(request): | |||
1768 | # a default "page not available" simple functions for interactive mode | 1768 | # a default "page not available" simple functions for interactive mode |
1769 | if toastermain.settings.MANAGED: | 1769 | if toastermain.settings.MANAGED: |
1770 | 1770 | ||
1771 | from django.contrib.auth.models import User | ||
1772 | from django.contrib.auth import authenticate, login | ||
1773 | from django.contrib.auth.decorators import login_required | ||
1774 | |||
1775 | |||
1771 | # new project | 1776 | # new project |
1772 | def newproject(request): | 1777 | def newproject(request): |
1773 | template = "newproject.html" | 1778 | template = "newproject.html" |
1774 | context = {} | 1779 | context = { |
1780 | 'email': request.user.email if request.user.is_authenticated() else '', | ||
1781 | 'username': request.user.username if request.user.is_authenticated() else '', | ||
1782 | } | ||
1783 | |||
1784 | |||
1775 | if request.method == "GET": | 1785 | if request.method == "GET": |
1776 | # render new project page | 1786 | # render new project page |
1777 | return render(request, template, context) | 1787 | return render(request, template, context) |
1778 | elif request.method == "POST": | 1788 | elif request.method == "POST": |
1779 | if request.method: | 1789 | mandatory_fields = ['projectname', 'email', 'username', 'projectversion'] |
1790 | if reduce( lambda x, y: x and y, map(lambda x: x in request.POST and len(request.POST[x]) > 0, mandatory_fields)): | ||
1791 | if not request.user.is_authenticated(): | ||
1792 | user = authenticate(username = request.POST['username'], password = 'nopass') | ||
1793 | if user is None: | ||
1794 | user = User.objects.create_user(username = request.POST['username'], email = request.POST['email'], password = "nopass") | ||
1795 | raise Exception("User cannot be authed, creating") | ||
1796 | user = authenticate(username = request.POST['username'], password = '') | ||
1797 | login(request, user) | ||
1798 | |||
1780 | return redirect(project) | 1799 | return redirect(project) |
1781 | else: | 1800 | else: |
1801 | alerts = [] | ||
1802 | # set alerts for missing fields | ||
1803 | map(lambda x: alerts.append('Field '+ x + ' not filled in') if not x in request.POST or len(request.POST[x]) == 0 else None, mandatory_fields) | ||
1804 | # fill in new page with already submitted values | ||
1805 | map(lambda x: context.__setitem__(x, request.POST[x]), mandatory_fields) | ||
1806 | context['alerts'] = alerts | ||
1782 | return render(request, template, context) | 1807 | return render(request, template, context) |
1783 | raise Exception("Invalid HTTP method for this page") | 1808 | raise Exception("Invalid HTTP method for this page") |
1784 | 1809 | ||