From: Stefan Kögl Date: Sun, 26 May 2013 09:40:12 +0000 (+0200) Subject: add admin view to manually activate a user X-Git-Url: https://repo.or.cz/w/mygpo.git/commitdiff_plain/3715372f9f81af6f9e2da8c751d207a925a94f48 add admin view to manually activate a user --- diff --git a/mygpo/admin/templates/admin/activate-user.html b/mygpo/admin/templates/admin/activate-user.html new file mode 100644 index 00000000..792df1f0 --- /dev/null +++ b/mygpo/admin/templates/admin/activate-user.html @@ -0,0 +1,41 @@ +{% extends "base.html" %} +{% load i18n %} +{% load podcasts %} + +{% load menu %} +{% block mainmenu %}{{ "/admin/"|main_menu }}{% endblock %} +{% block sectionmenu %}{{ "/admin/"|section_menu:"Admin" }}{% endblock %} + +{% block title %}{% trans "Activate User" %}{% endblock %} + +{% block header %} +

{% trans "Activate User" %}

+{% endblock %} + +{% block content %} +
+ {% csrf_token %} + +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+
+ +
+
+
+ +{% endblock %} + diff --git a/mygpo/admin/templates/admin/overview.html b/mygpo/admin/templates/admin/overview.html index 3d0eeb24..0ee08c66 100644 --- a/mygpo/admin/templates/admin/overview.html +++ b/mygpo/admin/templates/admin/overview.html @@ -20,6 +20,7 @@
  • {% trans "User-Agent Stats" %}
  • {% trans "File Type Stats" %}
  • {% trans "General Stats" %} ({% trans "JSON" %})
  • +
  • {% trans "Activate User" %}
  • {% endblock %} diff --git a/mygpo/admin/urls.py b/mygpo/admin/urls.py index ff475cb5..13e7da9d 100644 --- a/mygpo/admin/urls.py +++ b/mygpo/admin/urls.py @@ -3,7 +3,7 @@ from django.conf.urls import * from mygpo.admin.views import Overview, MergeSelect, MergeVerify, \ MergeProcess, MergeStatus, ClientStatsView, ClientStatsJsonView, \ UserAgentStatsView, StatsView, StatsJsonView, HostInfo, \ - FiletypeStatsView + FiletypeStatsView, ActivateUserView urlpatterns = patterns('mygpo.admin.views', url(r'^$', Overview.as_view(), name='admin-overview'), @@ -26,4 +26,8 @@ urlpatterns = patterns('mygpo.admin.views', url(r'^filetypes/$', FiletypeStatsView.as_view(), name='admin-filetypes'), + + url(r'^activate-user/$', + ActivateUserView.as_view(), + name='admin-activate-user'), ) diff --git a/mygpo/admin/views.py b/mygpo/admin/views.py index 94b0db0b..e4af3ab0 100644 --- a/mygpo/admin/views.py +++ b/mygpo/admin/views.py @@ -24,6 +24,7 @@ from mygpo.utils import get_git_head from mygpo.api.httpresponse import JsonResponse from mygpo.cel import celery from mygpo.db.couchdb import get_main_database +from mygpo.db.couchdb.user import activate_user from mygpo.db.couchdb.episode import episode_count, filetype_stats from mygpo.db.couchdb.podcast import podcast_count, podcast_for_url @@ -298,3 +299,40 @@ class FiletypeStatsView(AdminView): 'max_num': max_num, 'stats': stats.most_common(), }) + + +class ActivateUserView(AdminView): + """ Lets admins manually activate users """ + + template_name = 'admin/activate-user.html' + + def get(self, request): + return self.render_to_response({}) + + def post(self, request): + + username = request.POST.get('username') + email = request.POST.get('email') + + if not (username or email): + messages.error(request, + _('Provide either username or email address')) + return HttpResponseRedirect(reverse('admin-activate-user')) + + user = None + + if username: + user = User.get_user(username, is_active=None) + + if email and not user: + user = User.get_user_by_email(email, is_active=None) + + if not user: + messages.error(request, _('No user found')) + return HttpResponseRedirect(reverse('admin-activate-user')) + + activate_user(user) + messages.success(request, + _('User {username} ({email}) activated'.format( + username=user.username, email=user.email))) + return HttpResponseRedirect(reverse('admin-activate-user')) diff --git a/mygpo/db/couchdb/user.py b/mygpo/db/couchdb/user.py index d2cf7263..74b349dd 100644 --- a/mygpo/db/couchdb/user.py +++ b/mygpo/db/couchdb/user.py @@ -271,3 +271,11 @@ def get_user_by_id(user_id): return User.get(user_id) except ResourceNotFound: return None + + +@repeat_on_conflict(['user']) +def activate_user(user): + """ activates a user so that he is able to login """ + user.is_active = True + user.activation_key = None + user.save()