Guest User

Untitled

a guest
Dec 27th, 2018
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.01 KB | None | 0 0
  1. from flask import flash, redirect, session, url_for, request
  2. from flask_appbuilder.views import expose, PublicFormView
  3. from flask_babel import lazy_gettext as _
  4. from .forms import CustomRegistration
  5. from flask_appbuilder.validators import Unique
  6. from flask_appbuilder._compat import as_unicode
  7. from flask_mail import Mail, Message
  8. from flask_appbuilder import const as c
  9. import logging
  10.  
  11. log = logging.getLogger(__name__)
  12.  
  13. def get_first_last_name(fullname):
  14. names = fullname.split()
  15. if len(names) > 1:
  16. return names[0], ' '.join(names[1:])
  17. elif names:
  18. return names[0], ''
  19.  
  20. # Create Registration system
  21. class MyRegisterUserDBView(PublicFormView):
  22.  
  23. # Email html file for registration with activation
  24. email_template = 'register_mail.html'
  25.  
  26. # Activation template for activating acount
  27. activation_template = 'activation.html'
  28.  
  29. # Subject for Email
  30. email_subject = _('Your Account activation for Lowell Help Forum')
  31.  
  32. # Title for form
  33. form_title = _('Fill out the registration form for Lowell Help Forum')
  34.  
  35. # Error message if form has a problem
  36. error_message = _('Not possible to register you at the moment, try again later')
  37.  
  38. # Message for succesful form
  39. message = _('Registration sent to your email')
  40.  
  41. def send_email(self, register_user):
  42. mail = Mail(self.appbuilder.get_app)
  43. msg = Message()
  44. msg.subject = self.email_subject
  45. url = url_for('.activation', _external=True, activation_hash=register_user.registration_hash)
  46. msg.html = self.render_template(self.email_template,
  47. url=url,
  48. username=register_user.username,)
  49. msg.recipients = [register_user.email]
  50. try:
  51. mail.send(msg)
  52. except Exception as e:
  53. return False
  54. return True
  55.  
  56. def add_registration(self, username, first_name, last_name, email, password=''):
  57. # MARK: either provide first_name and last_name or remove it from the function
  58. register_user = self.appbuilder.sm.add_register_user(username, first_name, last_name, email, password)
  59. if register_user:
  60. if self.send_email(register_user):
  61. flash(as_unicode(self.message), 'info')
  62. return register_user
  63. else:
  64. flash(as_unicode(self.error_message), 'danger')
  65. self.appbuilder.sm.del_register_user(register_user)
  66. return None
  67.  
  68. @expose('/activation/<string:activation_hash>')
  69. def activation(self, activation_hash):
  70. """
  71. Endpoint to expose an activation url, this url
  72. is sent to the user by email, when accessed the user is inserted
  73. and activated
  74. """
  75. reg = self.appbuilder.sm.find_register_user(activation_hash)
  76. if not reg:
  77. flash(as_unicode(self.false_error_message), 'danger')
  78. return redirect(self.appbuilder.get_url_for_index)
  79. if not self.appbuilder.sm.add_user(username=reg.username,
  80. email=reg.email,
  81. first_name=reg.first_name,
  82. last_name=reg.last_name,
  83. role=self.appbuilder.sm.find_role(
  84. self.appbuilder.sm.auth_user_registration_role),
  85. hashed_password=reg.password):
  86. flash(as_unicode(self.error_message), 'danger')
  87. return redirect(self.appbuilder.get_url_for_index)
  88. else:
  89. self.appbuilder.sm.del_register_user(reg)
  90. return self.render_template(self.activation_template,
  91. username=reg.username,
  92. appbuilder=self.appbuilder)
  93.  
  94. def add_form_unique_validations(self, form):
  95. datamodel_user = self.appbuilder.sm.get_user_datamodel
  96. datamodel_register_user = self.appbuilder.sm.get_register_user_datamodel
  97. if len(form.username.validators) == 1:
  98. form.username.validators.append(Unique(datamodel_user, 'username'))
  99. form.username.validators.append(Unique(datamodel_register_user, 'username'))
  100. if len(form.email.validators) == 2:
  101. form.email.validators.append(Unique(datamodel_user, 'email'))
  102. form.email.validators.append(Unique(datamodel_register_user, 'email'))
  103.  
  104. class Register(MyRegisterUserDBView):
  105.  
  106. form = CustomRegistration
  107.  
  108. redirect_url = '/home/new/'
  109.  
  110. def form_get(self, form):
  111. self.add_form_unique_validations(form)
  112.  
  113. def form_post(self, form):
  114. self.add_form_unique_validations(form)
  115. # MARK: not giving function first_name or last_name
  116. self.add_registration(username=form.username.data,
  117. first_name=form.username.data,
  118. last_name='',
  119. email=form.email.data,
  120. password=form.password.data
  121. )
Add Comment
Please, Sign In to add comment