def signup_activation(session, state, tid, token, language): node = config.ConfigFactory(session, 1, 'node') if not node.get_val(u'enable_signup'): raise errors.ForbiddenOperation signup = session.query(models.Signup).filter(models.Signup.activation_token == token).one_or_none() if signup is None: return {} if signup.tid is None: signup.tid = db_create_tenant(session, {'label': signup.subdomain, 'subdomain': signup.subdomain}).id wizard = { 'node_name': signup.subdomain, 'admin_name': signup.name + ' ' + signup.surname, 'admin_password': '', 'admin_mail_address': signup.email, 'receiver_name': signup.name + ' ' + signup.surname, 'receiver_mail_address': signup.email, 'profile': 'default', 'enable_developers_exception_notification': True } db_wizard(session, state, signup.tid, wizard, False, language) template_vars = { 'type': 'activation', 'node': db_admin_serialize_node(session, 1, language), 'notification': db_get_notification(session, 1, language), 'signup': serialize_signup(signup), 'activation_url': '', 'expiration_date': datetime_to_ISO8601(signup.registration_date + timedelta(days=7)) } state.format_and_send_mail(session, 1, {'mail_address': signup.email}, template_vars) if session.query(models.Tenant).filter(models.Tenant.id == signup.tid).one_or_none() is not None: admin = session.query(models.User).filter(models.User.tid == signup.tid, models.User.role == u'admin').one() admin.password_change_needed = False recipient = session.query(models.User).filter(models.User.tid == signup.tid, models.User.role == u'receiver').one() recipient.password_change_needed = False return { 'platform_url': 'https://%s.%s' % (signup.subdomain, node.get_val(u'rootdomain')), 'login_url': 'https://%s.%s/#/login' % (signup.subdomain, node.get_val(u'rootdomain')), 'admin_login_url': 'https://%s.%s/#/login?token=%s' % (signup.subdomain, node.get_val(u'rootdomain'), admin.auth_token), 'recipient_login_url': 'https://%s.%s/#/login?token=%s' % (signup.subdomain, node.get_val(u'rootdomain'), recipient.auth_token), 'expiration_date': datetime_to_ISO8601(signup.registration_date + timedelta(days=7)) } else: return {}
def signup(session, request, language): """ Transact handling the registration of a new signup :param session: An ORM session :param request: A user request :param language: A language of the request """ config = ConfigFactory(session, 1) if not config.get_val('enable_signup'): raise errors.ForbiddenOperation request['activation_token'] = generateRandomKey() request['language'] = language # Delete the tenants created for the same subdomain that have still not been activated # Ticket reference: https://github.com/globaleaks/GlobaLeaks/issues/2640 subquery = session.query(models.Tenant.id) \ .filter(models.Subscriber.subdomain == request['subdomain'], not_(models.Subscriber.activation_token.is_(None)), models.Tenant.id == models.Subscriber.tid) \ .subquery() db_del(session, models.Tenant, models.Tenant.id.in_(subquery)) tenant = db_create_tenant( session, { 'active': False, 'name': request['subdomain'], 'subdomain': request['subdomain'], 'mode': config.get_val('mode') }) signup = models.Subscriber(request) signup.tid = tenant.id session.add(signup) session.flush() # We need to send two emails # # The first one is sent to the platform owner with the activation email. # # The second goes to the instance administrators notifying them that a new # platform has been added. signup_dict = serialize_signup(signup) # Email 1 - Activation Link template_vars = { 'type': 'signup', 'node': db_admin_serialize_node(session, 1, language), 'notification': db_get_notification(session, 1, language), 'signup': signup_dict } State.format_and_send_mail(session, 1, {'mail_address': signup.email}, template_vars) # Email 2 - Admin Notification for user_desc in db_get_users(session, 1, 'admin'): template_vars = { 'type': 'admin_signup_alert', 'node': db_admin_serialize_node(session, 1, user_desc['language']), 'notification': db_get_notification(session, 1, user_desc['language']), 'user': user_desc, 'signup': signup_dict } State.format_and_send_mail(session, 1, user_desc, template_vars)