views.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. # GNU MediaGoblin -- federated, autonomous media hosting
  2. # Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS.
  3. #
  4. # This program is free software: you can redistribute it and/or modify
  5. # it under the terms of the GNU Affero General Public License as published by
  6. # the Free Software Foundation, either version 3 of the License, or
  7. # (at your option) any later version.
  8. #
  9. # This program is distributed in the hope that it will be useful,
  10. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. # GNU Affero General Public License for more details.
  13. #
  14. # You should have received a copy of the GNU Affero General Public License
  15. # along with this program. If not, see <http://www.gnu.org/licenses/>.
  16. import six
  17. from mediagoblin import mg_globals, messages
  18. from mediagoblin.auth.tools import register_user
  19. from mediagoblin.db.models import User, LocalUser
  20. from mediagoblin.decorators import allow_registration, auth_enabled
  21. from mediagoblin.plugins.ldap import forms
  22. from mediagoblin.plugins.ldap.tools import LDAP
  23. from mediagoblin.tools.translate import pass_to_ugettext as _
  24. from mediagoblin.tools.response import redirect, render_to_response
  25. @auth_enabled
  26. def login(request):
  27. login_form = forms.LoginForm(request.form)
  28. login_failed = False
  29. if request.method == 'POST' and login_form.validate():
  30. l = LDAP()
  31. username, email = l.login(login_form.username.data,
  32. login_form.password.data)
  33. if username:
  34. user = LocalUser.query.filter(
  35. LocalUser.username==username
  36. ).first()
  37. if user:
  38. # set up login in session
  39. request.session['user_id'] = six.text_type(user.id)
  40. request.session.save()
  41. if request.form.get('next'):
  42. return redirect(request, location=request.form['next'])
  43. else:
  44. return redirect(request, "index")
  45. else:
  46. if not mg_globals.app.auth:
  47. messages.add_message(
  48. request,
  49. messages.WARNING,
  50. _('Sorry, authentication is disabled on this '
  51. 'instance.'))
  52. return redirect(request, 'index')
  53. register_form = forms.RegisterForm(username=username,
  54. email=email)
  55. return render_to_response(
  56. request,
  57. 'mediagoblin/auth/register.html',
  58. {'register_form': register_form,
  59. 'post_url': request.urlgen('mediagoblin.plugins.ldap.register')})
  60. login_failed = True
  61. return render_to_response(
  62. request,
  63. 'mediagoblin/auth/login.html',
  64. {'login_form': login_form,
  65. 'next': request.GET.get('next') or request.form.get('next'),
  66. 'login_failed': login_failed,
  67. 'post_url': request.urlgen('mediagoblin.plugins.ldap.login'),
  68. 'allow_registration': mg_globals.app_config["allow_registration"]})
  69. @allow_registration
  70. @auth_enabled
  71. def register(request):
  72. if request.method == 'GET':
  73. return redirect(
  74. request,
  75. 'mediagoblin.plugins.ldap.login')
  76. register_form = forms.RegisterForm(request.form)
  77. if register_form.validate():
  78. user = register_user(request, register_form)
  79. if user:
  80. # redirect the user to their homepage... there will be a
  81. # message waiting for them to verify their email
  82. return redirect(
  83. request, 'mediagoblin.user_pages.user_home',
  84. user=user.username)
  85. return render_to_response(
  86. request,
  87. 'mediagoblin/auth/register.html',
  88. {'register_form': register_form,
  89. 'post_url': request.urlgen('mediagoblin.plugins.ldap.register')})