[PATCH 4/5] views: Provide a way to view, (re)generate tokens

Daniel Axtens dja at axtens.net
Wed Jun 14 17:57:16 AEST 2017


Daniel Axtens <dja at axtens.net> writes:

> Hi Stephen and Andrew,
>
> I've installed this on py[23].patchwork.dja.id.au
>
>> diff --git a/htdocs/css/style.css b/htdocs/css/style.css
>> index 5218f6d..af2f073 100644
>> --- a/htdocs/css/style.css
>> +++ b/htdocs/css/style.css
>> @@ -369,7 +369,6 @@ table.form th.headerrow {
>>  }
>>  
>>  table.form th {
>> -	font-weight: normal;
> What does this change?
>
>>  	text-align: left;
>>  	vertical-align: top;
>>  	padding-top: 0.6em;
>> diff --git a/patchwork/templates/patchwork/profile.html b/patchwork/templates/patchwork/profile.html
>> index f976195..2005687 100644
>> --- a/patchwork/templates/patchwork/profile.html
>> +++ b/patchwork/templates/patchwork/profile.html
>> @@ -134,7 +134,35 @@ address.</p>
>>  
>>  <div class="box">
>>  <h2>Authentication</h2>
>> -<a href="{% url 'password_change' %}">Change password</a>
>> +
>> +<table class="form">
>> + <tr>
>> +  <th>Password:</th>
>> +  <td><a href="{% url 'password_change' %}">Change password</a>
>> + </tr>
>> + <tr>
>> +  <th>API Token:</th>
>> +  <td>
>> +   {% if api_token %}
>> +   <input id="token" style="width: 25em;" readonly value="{{ api_token }}">
>> +   <button type="button" class="btn-copy" title="Copy to clipboard"
>> +    data-clipboard-target="#token">Copy</button>
>
> This doesn't work for me in Chrome:
>
> Uncaught ReferenceError: Clipboard is not defined
>     at HTMLDocument.<anonymous> (py3.patchwork.dja.id.au/:26)
>     at c (jquery-1.10.1.min.js:4)
>     at Object.fireWith [as resolveWith] (jquery-1.10.1.min.js:4)
>     at Function.ready (jquery-1.10.1.min.js:4)
>     at HTMLDocument.q (jquery-1.10.1.min.js:4)
Ah, this would be due to me forgetting to run collectstatic.

But even when I do that, I still get errors from a broken

clipboard.min.js:
Uncaught SyntaxError: Unexpected end of input

Any thoughts?

Regards,
Daniel
>
> The rest seems to work fine, I can create and use tokens (as far as I
> can tell - I haven't tried to do anything with the permissions they
> grant.)
>
>> +   {% endif %}
>> +  </td>
>> + <tr>
>> +  <th></th>
>> +  <td>
>> +   <form method="post" action="{%url 'generate_token' %}">
> That should probably be "{% url" -- a space between % and url.
>
> Regards,
> Daniel
>
>> +    {% csrf_token %}
>> +    {% if api_token %}
>> +    <input type="submit" value="Regenerate token"/>
>> +    {% else %}
>> +    <input type="submit" value="Generate token"/>
>> +    {% endif %}
>> +   </form>
>> +  </td>
>> + </tr>
>> +</table>
>>  </div>
>>  
>>  </div>
>> diff --git a/patchwork/urls.py b/patchwork/urls.py
>> index be996c0..285d565 100644
>> --- a/patchwork/urls.py
>> +++ b/patchwork/urls.py
>> @@ -235,6 +235,10 @@ if settings.ENABLE_REST_API:
>>  
>>      urlpatterns += [
>>          url(r'^api/(?:(?P<version>(1.0))/)?', include(api_patterns)),
>> +
>> +        # token change
>> +        url(r'^user/generate-token/$', user_views.generate_token,
>> +            name='generate_token'),
>>      ]
>>  
>>  
>> diff --git a/patchwork/views/user.py b/patchwork/views/user.py
>> index 375d3d9..d99fedf 100644
>> --- a/patchwork/views/user.py
>> +++ b/patchwork/views/user.py
>> @@ -41,6 +41,7 @@ from patchwork.models import Person
>>  from patchwork.models import Project
>>  from patchwork.models import State
>>  from patchwork.views import generic_list
>> +from patchwork.views import utils
>>  
>>  
>>  def register(request):
>> @@ -126,6 +127,7 @@ def profile(request):
>>          .extra(select={'is_optout': optout_query})
>>      context['linked_emails'] = people
>>      context['linkform'] = EmailForm()
>> +    context['api_token'] = request.user.profile.token
>>  
>>      return render(request, 'patchwork/profile.html', context)
>>  
>> @@ -232,3 +234,9 @@ def todo_list(request, project_id):
>>      context['action_required_states'] = \
>>          State.objects.filter(action_required=True).all()
>>      return render(request, 'patchwork/todo-list.html', context)
>> +
>> +
>> + at login_required
>> +def generate_token(request):
>> +    utils.regenerate_token(request.user)
>> +    return HttpResponseRedirect(reverse('user-profile'))
>> -- 
>> 2.9.4
>>
>> _______________________________________________
>> Patchwork mailing list
>> Patchwork at lists.ozlabs.org
>> https://lists.ozlabs.org/listinfo/patchwork


More information about the Patchwork mailing list