Exemplo n.º 1
0
def send_change_email_notification(request_serialized):
    request = core_utils.deserialize_instance(request_serialized)
    link = settings.WALDUR_CORE['EMAIL_CHANGE_URL'].format(
        code=request.uuid.hex)
    context = {'request': request, 'link': link}
    core_utils.broadcast_mail('structure', 'change_email_request', context,
                              [request.email])
Exemplo n.º 2
0
def send_change_email_notification(request_serialized):
    request = core_utils.deserialize_instance(request_serialized)
    link = core_utils.format_homeport_link('user_email_change/{code}/',
                                           code=request.uuid.hex)
    context = {'request': request, 'link': link}
    core_utils.broadcast_mail('structure', 'change_email_request', context,
                              [request.email])
Exemplo n.º 3
0
def get_or_create_user(invitation_uuid, sender):
    invitation = models.Invitation.objects.get(uuid=invitation_uuid)

    user, created = utils.get_or_create_user(invitation)
    username = generate_safe_username(user.username)
    password = pwgen()
    try:
        profile, created = utils.get_or_create_profile(user, username,
                                                       password)
    except (freeipa_exceptions.FreeIPAError, requests.RequestException) as e:
        logger.exception(
            'Unable to create FreeIPA profile for user with ID: %s', user.id)
        invitation.error_message = str(e)
        invitation.save(update_fields=['error_message'])
        raise
    if created:
        sender = invitation.created_by.full_name or invitation.created_by.username
        context = utils.get_invitation_context(invitation, sender)
        context['username'] = username
        context['password'] = password
        context['link'] = invitation.link_template.format(uuid=invitation_uuid)
        broadcast_mail('users', 'invitation_approved', context,
                       [invitation.email])
    else:
        send_invitation_created(invitation_uuid, sender)
Exemplo n.º 4
0
def send_invitation_rejected(invitation_uuid, sender):
    """
    Invitation notification is sent to the user which has created invitation.
    """
    invitation = models.Invitation.objects.get(uuid=invitation_uuid)
    context = utils.get_invitation_context(invitation, sender)
    broadcast_mail('users', 'invitation_rejected', context,
                   [invitation.created_by.email])
Exemplo n.º 5
0
def send_mail_for_submitted_flow(flow_id):
    flow = models.FlowTracker.objects.get(id=flow_id)
    recipient_list = [
        user.email
        for user in flow.resource_create_request.offering.customer.get_owners()
    ]
    broadcast_mail(
        'marketplace_flows', 'flow_submitted', {'flow': flow}, recipient_list
    )
Exemplo n.º 6
0
def send_notifications_about_usages():
    for warning in utils.get_info_about_missing_usage_reports():
        customer = warning['customer']
        emails = [owner.email for owner in customer.get_owners()]
        warning['public_resources_url'] = utils.get_public_resources_url(
            customer)

        if customer.serviceprovider.enable_notifications and emails:
            core_utils.broadcast_mail('marketplace', 'notification_usages',
                                      warning, emails)
Exemplo n.º 7
0
def send_activation_email(user_uuid):
    user = get_user_model().objects.get(uuid=user_uuid, is_active=False)
    token = default_token_generator.make_token(user)
    url_template = settings.WALDUR_AUTH_SOCIAL['USER_ACTIVATION_URL_TEMPLATE']

    url = url_template.format(token=token, user_uuid=user_uuid)
    context = {'activation_url': url}

    logger.debug('About to send an activation email to %s' % user.email)
    broadcast_mail('waldur_auth_social', 'activation_email', context,
                   [user.email])
Exemplo n.º 8
0
def send_invoice_notification(invoice_uuid):
    """ Sends email notification with invoice link to customer owners """
    invoice = models.Invoice.objects.get(uuid=invoice_uuid)
    link_template = settings.WALDUR_INVOICES['INVOICE_LINK_TEMPLATE']

    if not link_template:
        logger.error(
            'INVOICE_LINK_TEMPLATE is not set. '
            'Sending of invoice notification is not available.'
        )
        return

    if '{uuid}' not in link_template:
        logger.error(
            'INVOICE_LINK_TEMPLATE must include \'{uuid}\' parameter. '
            'Sending of invoice notification is not available.'
        )
        return

    context = {
        'month': invoice.month,
        'year': invoice.year,
        'customer': invoice.customer.name,
        'link': link_template.format(uuid=invoice_uuid),
    }

    emails = [owner.email for owner in invoice.customer.get_owners()]
    filename = None
    attachment = None
    content_type = None

    if invoice._file:
        filename = '%s_%s_%s.pdf' % (
            settings.WALDUR_CORE['SITE_NAME'].replace(' ', '_'),
            invoice.year,
            invoice.month,
        )
        attachment = base64.b64decode(invoice._file)
        content_type = 'application/pdf'

    logger.debug(
        'About to send invoice {invoice} notification to {emails}'.format(
            invoice=invoice, emails=emails
        )
    )
    core_utils.broadcast_mail(
        'invoices',
        'notification',
        context,
        emails,
        filename=filename,
        attachment=attachment,
        content_type=content_type,
    )
Exemplo n.º 9
0
def send_activation_email(user_uuid):
    user = get_user_model().objects.get(uuid=user_uuid, is_active=False)
    token = default_token_generator.make_token(user)

    url = format_homeport_link(
        'activate/{user_uuid}/{token}/', user_uuid=user_uuid, token=token
    )
    context = {'activation_url': url}

    logger.debug('About to send an activation email to %s' % user.email)
    broadcast_mail('waldur_auth_social', 'activation_email', context, [user.email])
Exemplo n.º 10
0
def notify_create_user(id, password, url):
    user = models.RancherUser.objects.get(id=id)
    email = user.user.email

    context = {
        'rancher_url': url,
        'user': user,
        'password': password,
    }

    core_utils.broadcast_mail('rancher', 'notification_create_user', context,
                              [email])
Exemplo n.º 11
0
def notify_order_approvers(uuid):
    order = models.Order.objects.get(uuid=uuid)
    users = order.get_approvers()
    emails = [u.email for u in users if u.email]
    link_template = settings.WALDUR_MARKETPLACE['ORDER_LINK_TEMPLATE']

    context = {
        'order_url': link_template.format(project_uuid=order.project.uuid),
        'order': order,
        'site_name': settings.WALDUR_CORE['SITE_NAME'],
    }

    core_utils.broadcast_mail('marketplace', 'notification_approval', context, emails)
Exemplo n.º 12
0
def notify_about_stale_resource():
    if not settings.WALDUR_MARKETPLACE['ENABLE_STALE_RESOURCE_NOTIFICATIONS']:
        return

    today = datetime.datetime.today()
    prev_1 = today - relativedelta(months=1)
    prev_2 = today - relativedelta(months=2)
    items = invoices_models.InvoiceItem.objects.filter(
        Q(
            invoice__month=today.month,
            invoice__year=today.year,
        )
        | Q(invoice__month=prev_1.month, invoice__year=prev_1.year)
        | Q(invoice__month=prev_2.month, invoice__year=prev_2.year))
    actual_resources_ids = []

    for item in items:
        if item.price:
            actual_resources_ids.append(item.resource.id)

    resources = (models.Resource.objects.exclude(
        id__in=actual_resources_ids).exclude(
            Q(state=models.Resource.States.TERMINATED)
            | Q(state=models.Resource.States.TERMINATING)
            | Q(state=models.Resource.States.CREATING)).exclude(
                offering__billable=False))
    user_resources = collections.defaultdict(list)

    for resource in resources:
        owners = resource.project.customer.get_owners().exclude(email='')
        resource_url = core_utils.format_homeport_link(
            '/projects/{project_uuid}/marketplace-project-resource-details/{resource_uuid}/',
            project_uuid=resource.project.uuid.hex,
            resource_uuid=resource.uuid.hex,
        )

        for user in owners:
            user_resources[user.email].append({
                'resource': resource,
                'resource_url': resource_url
            })

    for key, value in user_resources.items():
        core_utils.broadcast_mail(
            'marketplace',
            'notification_about_stale_resources',
            {'resources': value},
            [key],
        )
Exemplo n.º 13
0
def send_notifications_about_upcoming_ends():
    upcoming_ends = utils.get_upcoming_ends_of_fixed_payment_profiles()

    for profile in upcoming_ends:
        context = {
            'organization_name': profile.organization.name,
            'end': utils.get_end_date_for_profile(profile),
            'contract_number': profile.attributes.get('contract_number', ''),
        }
        emails = [owner.email for owner in profile.organization.get_owners()]
        core_utils.broadcast_mail(
            'invoices',
            'upcoming_ends_notification',
            context,
            emails,
        )
Exemplo n.º 14
0
def notify_order_approvers(uuid):
    order = models.Order.objects.get(uuid=uuid)
    users = order.get_approvers()
    emails = [u.email for u in users if u.email]
    link = core_utils.format_homeport_link(
        'projects/{project_uuid}/marketplace-order-list/',
        project_uuid=order.project.uuid,
    )

    context = {
        'order_url': link,
        'order': order,
        'site_name': settings.WALDUR_CORE['SITE_NAME'],
    }

    core_utils.broadcast_mail('marketplace', 'notification_approval', context,
                              emails)
Exemplo n.º 15
0
def send_invitation_created(invitation_uuid, sender):
    """
    Invitation notification is sent to the user so that he can accept it and receive permissions.
    """
    invitation = models.Invitation.objects.get(uuid=invitation_uuid)
    context = utils.get_invitation_context(invitation, sender)
    context['link'] = invitation.link_template.format(uuid=invitation_uuid)

    logger.debug(
        'About to send invitation to {email} to join {name} {type} as {role}'.
        format(email=invitation.email, **context))
    try:
        broadcast_mail('users', 'invitation_created', context,
                       [invitation.email])
    except SMTPException as e:
        invitation.error_message = str(e)
        invitation.save(update_fields=['error_message'])
        raise
Exemplo n.º 16
0
def send_invitation_requested(invitation_uuid, sender):
    """
    Invitation request is sent to staff users so that they can approve or reject invitation.
    """
    invitation = models.Invitation.objects.get(uuid=invitation_uuid)
    base_context = utils.get_invitation_context(invitation, sender)

    staff_users = core_models.User.objects.filter(
        is_staff=True, is_active=True
    ).exclude(email='')
    for user in staff_users:
        token = utils.get_invitation_token(invitation, user)
        approve_link = format_homeport_link('invitation_approve/{token}/', token=token)
        reject_link = format_homeport_link('invitation_reject/{token}/', token=token)
        context = dict(
            approve_link=approve_link, reject_link=reject_link, **base_context
        )
        broadcast_mail('users', 'invitation_requested', context, [user.email])
Exemplo n.º 17
0
def send_invitation_requested(invitation_uuid, sender):
    """
    Invitation request is sent to staff users so that they can approve or reject invitation.
    """
    invitation = models.Invitation.objects.get(uuid=invitation_uuid)
    base_context = utils.get_invitation_context(invitation, sender)

    staff_users = core_models.User.objects.filter(
        is_staff=True, is_active=True).exclude(email='')
    for user in staff_users:
        token = utils.get_invitation_token(invitation, user)
        approve_link = settings.WALDUR_CORE['INVITATION_APPROVE_URL'].format(
            token=token)
        reject_link = settings.WALDUR_CORE['INVITATION_REJECT_URL'].format(
            token=token)
        context = dict(approve_link=approve_link,
                       reject_link=reject_link,
                       **base_context)
        broadcast_mail('users', 'invitation_requested', context, [user.email])
Exemplo n.º 18
0
def send_request_mail(event_type, request, users, extra_context=None):
    """
    Shorthand to send email notification about expert request event.
    """

    recipient_list = list(users.exclude(email='').values_list('email', flat=True))

    context = dict(
        request=request,
        customer_name=request.project.customer.name,
        project_name=request.project.name,
        currency_name=settings.WALDUR_EXPERTS['CURRENCY_NAME'],
        site_name=settings.WALDUR_CORE['SITE_NAME'],
    )
    if extra_context:
        context.update(extra_context)

    logger.debug('About to send expert request {request_name} to {recipient_list}.'.format(
        request_name=request.name,
        recipient_list=', '.join(recipient_list)
    ))

    broadcast_mail('experts', event_type, context, recipient_list)
Exemplo n.º 19
0
def notify_about_resource_termination(resource_uuid,
                                      user_uuid,
                                      is_staff_action=None):
    resource = models.Resource.objects.get(uuid=resource_uuid)
    user = User.objects.get(uuid=user_uuid)
    admin_emails = set(
        resource.project.get_users(
            structure_models.ProjectRole.ADMINISTRATOR).exclude(
                email='').values_list('email', flat=True))
    manager_emails = set(
        resource.project.get_users(
            structure_models.ProjectRole.MANAGER).exclude(
                email='').values_list('email', flat=True))
    emails = admin_emails | manager_emails
    resource_url = core_utils.format_homeport_link(
        '/projects/{project_uuid}/marketplace-project-resource-details/{resource_uuid}/',
        project_uuid=resource.project.uuid.hex,
        resource_uuid=resource.uuid.hex,
    )
    context = {
        'resource': resource,
        'user': user,
        'resource_url': resource_url
    }

    if is_staff_action:
        core_utils.broadcast_mail(
            'marketplace',
            'marketplace_resource_terminatate_scheduled_staff',
            context,
            emails,
        )
    else:
        core_utils.broadcast_mail(
            'marketplace', 'marketplace_resource_terminatate_scheduled',
            context, emails)
Exemplo n.º 20
0
def send_mail_for_rejected_flow(flow_id):
    flow = models.FlowTracker.objects.get(id=flow_id)
    broadcast_mail(
        'marketplace_flows', 'flow_rejected', {'flow': flow}, [flow.requested_by.email]
    )
Exemplo n.º 21
0
def notify_about_resource_change(event_type, context, resource_uuid):
    resource = models.Resource.objects.get(uuid=resource_uuid)
    project = structure_models.Project.all_objects.get(id=resource.project_id)
    emails = project.get_users().values_list('email', flat=True)
    core_utils.broadcast_mail('marketplace', event_type, context, emails)
Exemplo n.º 22
0
def send_notifications_about_upcoming_bookings():
    for info in utils.get_info_about_upcoming_bookings():
        emails = [info['user'].email]
        core_utils.broadcast_mail('booking', 'notification', info, emails)