def evaluate_update_notification(session, state, latest_version): priv_fact = ConfigFactory(session, 1) stored_latest = priv_fact.get_val('latest_version') # Check if the running version is lower than the latest version if parse_version(stored_latest) >= parse_version(latest_version): return Cache.invalidate() priv_fact.set_val('latest_version', latest_version) # Check to reduce number of email notifications of new updates if parse_version(__version__) != parse_version(stored_latest): return for user_desc in db_get_users(session, 1, 'admin'): if not user_desc['notification']: continue lang = user_desc['language'] template_vars = { 'type': 'software_update_available', 'latest_version': latest_version, 'node': db_admin_serialize_node(session, 1, lang), 'notification': db_get_notification(session, 1, lang), 'user': user_desc, } state.format_and_send_mail(session, 1, user_desc, template_vars)
def certificate_mail_creation(self, session, mail_type, tid, expiration_date): for user_desc in db_get_users(session, tid, 'admin'): lang = user_desc['language'] template_vars = { 'type': mail_type, 'node': db_admin_serialize_node(session, tid, lang), 'notification': db_get_notification(session, tid, lang), 'expiration_date': expiration_date, 'user': user_desc, } self.state.format_and_send_mail(session, tid, user_desc, template_vars)
def generate_admin_alert_mail(session, tid, alert): for user_desc in db_get_users(session, tid, 'admin'): user_language = user_desc['language'] data = { 'type': 'admin_anomaly', 'node': db_admin_serialize_node(session, tid, user_language), 'notification': db_get_notification(session, tid, user_language), 'alert': alert, 'user': user_desc, } subject, body = Templating().get_mail_subject_and_body(data) db_schedule_email(session, tid, user_desc['mail_address'], subject, body)
def prepare_admin_pgp_alerts(self, session, tid, expired_or_expiring): for user_desc in db_get_users(session, tid, 'admin'): user_language = user_desc['language'] data = { 'type': 'admin_pgp_alert', 'node': db_admin_serialize_node(session, tid, user_language), 'notification': db_get_notification(session, tid, user_language), 'users': expired_or_expiring, 'user': user_desc, } subject, body = Templating().get_mail_subject_and_body(data) db_schedule_email(session, tid, user_desc['mail_address'], subject, body)
def evaluate_update_notification(session, state, latest_version): priv_fact = ConfigFactory(session, 1) stored_latest = priv_fact.get_val('latest_version') if parse_version(stored_latest) < parse_version(latest_version): Cache.invalidate() priv_fact.set_val('latest_version', latest_version) if parse_version(__version__) != parse_version(stored_latest): return for user_desc in db_get_users(session, 1, 'admin'): lang = user_desc['language'] template_vars = { 'type': 'software_update_available', 'latest_version': latest_version, 'node': db_admin_serialize_node(session, 1, lang), 'notification': db_get_notification(session, 1, lang), 'user': user_desc, } state.format_and_send_mail(session, 1, user_desc, template_vars)
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(32) 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.Signup.subdomain == request['subdomain'], not_(models.Signup.activation_token.is_(None)), models.Tenant.id == models.Signup.tid, models.Tenant.subdomain == models.Signup.subdomain) \ .subquery() session.query(models.Tenant).filter( models.Tenant.id.in_(subquery)).delete(synchronize_session=False) tenant_id = db_preallocate_tenant(session, { 'label': request['subdomain'], 'subdomain': request['subdomain'] }).id signup = models.Signup(request) signup.tid = tenant_id session.add(signup) # 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)