Esempio n. 1
0
def remove_user_request(request_id, user_guid):
    """
    Remove user from request and sends email to all agency administrators and to user being removed.
    Delete row from UserRequests table and stores event object into Events.

    :param request_id: FOIL request ID
    :param user_guid: string guid of user being removed

    """
    user_request = UserRequests.query.options(joinedload(
        UserRequests.user)).filter_by(user_guid=user_guid,
                                      request_id=request_id).one()
    agency_admin_emails = get_agency_emails(request_id, admins_only=True)

    request = Requests.query.filter_by(id=request_id).one()
    agency_name = request.agency.name

    # send email to agency administrators
    tmp = safely_send_and_add_email(
        request_id,
        render_template(
            'email_templates/email_user_request_removed.html',
            request_id=request_id,
            name=' '.join(
                [user_request.user.first_name, user_request.user.last_name]),
            agency_name=agency_name,
            page=urljoin(flask_request.host_url,
                         url_for('request.view', request_id=request_id)),
            admin=True),
        'User Removed from Request {}'.format(request_id),
        to=agency_admin_emails)

    # send email to user being removed
    tmp = safely_send_and_add_email(
        request_id,
        render_template(
            'email_templates/email_user_request_removed.html',
            request_id=request_id,
            name=' '.join(
                [user_request.user.first_name, user_request.user.last_name]),
            agency_name=agency_name,
            page=urljoin(flask_request.host_url,
                         url_for('request.view', request_id=request_id))),
        'User Removed from Request {}'.format(request_id),
        to=[user_request.user.email])
    old_permissions = user_request.permissions
    old_point_of_contact = user_request.point_of_contact

    create_user_request_event(event_type.USER_REMOVED, user_request,
                              old_permissions, old_point_of_contact)
    delete_object(user_request)

    request.es_update()
Esempio n. 2
0
    def test_create_contact_record_public(self, send_contact_email_patch):
        request = self.rf.create_request_as_public_user()
        user = self.rf.public_user
        subject = 'Inquire about {}'.format(request.id)
        message = 'I need more information about my request.'
        body = "Name: {} {}\n\nEmail: {}\n\nSubject: {}\n\nMessage:\n{}".format(
            user.first_name, user.last_name, user.email, subject, message)
        agency_emails = get_agency_emails(request.id)

        with flask_login_user(user):
            create_contact_record(request,
                                  user.first_name,
                                  user.last_name,
                                  user.email,
                                  subject,
                                  message)
            send_contact_email_patch.assert_called_once_with(
                subject,
                agency_emails,
                message,
                user.email
            )
        email_obj = Emails.query.filter(Emails.request_id == request.id,
                                        Emails.subject == subject).one()
        self.assertEqual(
            [
                [email_obj.to],
                email_obj.body
            ],
            [
                agency_emails,
                body
            ]
        )

        contact_event = Events.query.filter_by(response_id=email_obj.id).one()
        self.assertEqual(
            [
                contact_event.request_id,
                contact_event.user_guid,
                contact_event.auth_user_type,
                contact_event.type,
                contact_event.new_value
            ],
            [
                request.id,
                user.guid,
                user.auth_user_type,
                event_type.CONTACT_EMAIL_SENT,
                email_obj.val_for_events
            ]
        )
Esempio n. 3
0
def remove_user_request(request_id, user_guid):
    """
    Remove user from request and sends email to all agency administrators and to user being removed.
    Delete row from UserRequests table and stores event object into Events.

    :param request_id: FOIL request ID
    :param user_guid: string guid of user being removed

    """
    user_request = UserRequests.query.filter_by(user_guid=user_guid,
                                                request_id=request_id).first()
    agency_admin_emails = get_agency_emails(request_id, admins_only=True)

    request = Requests.query.filter_by(id=request_id).one()
    agency_name = request.agency.name

    # send email to agency administrators
    tmp = safely_send_and_add_email(
        request_id,
        render_template(
            'email_templates/email_user_request_removed.html',
            request_id=request_id,
            name=' '.join([user_request.user.first_name, user_request.user.last_name]),
            agency_name=agency_name,
            page=urljoin(flask_request.host_url, url_for('request.view', request_id=request_id)),
            admin=True),
        'User Removed from Request {}'.format(request_id),
        to=agency_admin_emails)

    # send email to user being removed
    tmp = safely_send_and_add_email(
        request_id,
        render_template(
            'email_templates/email_user_request_removed.html',
            request_id=request_id,
            name=' '.join([user_request.user.first_name, user_request.user.last_name]),
            agency_name=agency_name,
            page=urljoin(flask_request.host_url, url_for('request.view', request_id=request_id))),
        'User Removed from Request {}'.format(request_id),
        to=[user_request.user.email])
    old_permissions = user_request.permissions
    old_point_of_contact = user_request.point_of_contact

    create_user_request_event(event_type.USER_REMOVED, user_request, old_permissions, old_point_of_contact)
    delete_object(user_request)

    request.es_update()
Esempio n. 4
0
def edit_user_request(request_id, user_guid, permissions, point_of_contact):
    """
    Edit a users permissions on a request and notify all agency administrators and the user that the permissions
    have changed.

    :param request_id: FOIL request ID
    :param user_guid: string guid of the user being edited
    :param permissions: Updated permissions values {'permission': true}
    :param point_of_contact: boolean value to set user as point of contact or not
    """
    user_request = UserRequests.query.filter_by(user_guid=user_guid,
                                                request_id=request_id).one()

    agency_admin_emails = get_agency_emails(request_id, admins_only=True)

    agency_name = Requests.query.filter_by(id=request_id).one().agency.name

    added_permissions = []
    removed_permissions = []
    for i, val in enumerate(permission.ALL):
        if i in permissions:
            added_permissions.append(val)
        else:
            removed_permissions.append(val)

    # send email to agency administrators
    tmp = safely_send_and_add_email(
        request_id,
        render_template(
            'email_templates/email_user_request_edited.html',
            request_id=request_id,
            name=user_request.user.name,
            agency_name=agency_name,
            page=urljoin(flask_request.host_url, url_for('request.view', request_id=request_id)),
            added_permissions=[capability.label for capability in added_permissions],
            removed_permissions=[capability.label for capability in removed_permissions],
            admin=True),
        'User Permissions Edited for Request {}'.format(request_id),
        to=agency_admin_emails)

    # send email to user being edited
    tmp = safely_send_and_add_email(
        request_id,
        render_template(
            'email_templates/email_user_request_edited.html',
            request_id=request_id,
            name=' '.join([user_request.user.first_name, user_request.user.last_name]),
            agency_name=agency_name,
            page=urljoin(flask_request.host_url, url_for('request.view', request_id=request_id)),
            added_permissions=[capability.label for capability in added_permissions],
            removed_permissions=[capability.label for capability in removed_permissions],
        ),
        'User Permissions Edited for Request {}'.format(request_id),
        to=[user_request.user.notification_email or user_request.user.email])

    old_permissions = user_request.permissions
    old_point_of_contact = user_request.point_of_contact

    if added_permissions:
        user_request.add_permissions([capability.value for capability in added_permissions])
    if removed_permissions:
        user_request.remove_permissions([capability.value for capability in removed_permissions])

    determine_point_of_contact_change(request_id, user_request, point_of_contact)
    create_user_request_event(event_type.USER_PERM_CHANGED, user_request, old_permissions, old_point_of_contact)
Esempio n. 5
0
def add_user_request(request_id, user_guid, permissions, point_of_contact):
    """
    Create a users permissions entry for a request and notify all agency administrators and the user that the permissions
    have changed.

    :param request_id: FOIL request ID
    :param user_guid: string guid of the user being edited
    :param permissions: Updated permissions values {'permission': true}
    :param point_of_contact: boolean value to set user as point of contact or not
    """
    user_request = UserRequests.query.filter_by(user_guid=user_guid,
                                                request_id=request_id).first()

    agency_name = Requests.query.filter_by(id=request_id).one().agency.name

    if user_request:
        raise UserRequestException(action="create", request_id=request_id, reason="UserRequest entry already exists.")

    user = Users.query.filter_by(guid=user_guid).one()

    agency_admin_emails = get_agency_emails(request_id, admins_only=True)

    added_permissions = []
    for i, val in enumerate(permission.ALL):
        if i in permissions:
            added_permissions.append(val)

    # send email to agency administrators
    safely_send_and_add_email(
        request_id,
        render_template(
            'email_templates/email_user_request_added.html',
            request_id=request_id,
            name=user.name,
            agency_name=agency_name,
            page=urljoin(flask_request.host_url, url_for('request.view', request_id=request_id)),
            added_permissions=[capability.label for capability in added_permissions],
            admin=True),
        'User Added to Request {}'.format(request_id),
        to=agency_admin_emails)

    # send email to user being added
    safely_send_and_add_email(
        request_id,
        render_template(
            'email_templates/email_user_request_added.html',
            request_id=request_id,
            name=user.name,
            agency_name=agency_name,
            page=urljoin(flask_request.host_url, url_for('request.view', request_id=request_id)),
            added_permissions=[capability.label for capability in added_permissions],
        ),
        'User Added to Request {}'.format(request_id),
        to=[user.notification_email or user.email])

    if point_of_contact and has_point_of_contact(request_id):
        remove_point_of_contact(request_id)
    user_request = UserRequests(
        user_guid=user.guid,
        request_id=request_id,
        request_user_type=user_type_request.AGENCY,
        permissions=0,
        point_of_contact=point_of_contact
    )

    create_object(user_request)

    if added_permissions:
        user_request.add_permissions([capability.value for capability in added_permissions])

    user_request.request.es_update()

    create_user_request_event(event_type.USER_ADDED, user_request)
Esempio n. 6
0
def edit_user_request(request_id, user_guid, permissions):
    """
    Edit a users permissions on a request and notify all agency administrators and the user that the permissions
    have changed.

    :param request_id: FOIL request ID
    :param user_guid: string guid of the user being edited
    :param permissions: Updated permissions values {'permission': true}
    """
    user_request = UserRequests.query.filter_by(user_guid=user_guid,
                                                request_id=request_id).one()

    agency_admin_emails = get_agency_emails(request_id, admins_only=True)

    added_permissions = []
    removed_permissions = []
    for i, val in enumerate(permission.ALL):
        if i in permissions:
            added_permissions.append(val)
        else:
            removed_permissions.append(val)

    # send email to agency administrators
    safely_send_and_add_email(
        request_id,
        render_template(
            'email_templates/email_user_request_edited.html',
            request_id=request_id,
            name=user_request.user.name,
            agency_name=user_request.user.agency.name,
            page=urljoin(flask_request.host_url,
                         url_for('request.view', request_id=request_id)),
            added_permissions=[
                capability.label for capability in added_permissions
            ],
            removed_permissions=[
                capability.label for capability in removed_permissions
            ],
            admin=True),
        'User Permissions Edited for Request {}'.format(request_id),
        to=agency_admin_emails)

    # send email to user being edited
    safely_send_and_add_email(
        request_id,
        render_template(
            'email_templates/email_user_request_edited.html',
            request_id=request_id,
            name=' '.join(
                [user_request.user.first_name, user_request.user.last_name]),
            agency_name=user_request.user.agency.name,
            page=urljoin(flask_request.host_url,
                         url_for('request.view', request_id=request_id)),
            added_permissions=[
                capability.label for capability in added_permissions
            ],
            removed_permissions=[
                capability.label for capability in removed_permissions
            ],
        ),
        'User Permissions Edited for Request {}'.format(request_id),
        to=[user_request.user.notification_email or user_request.user.email])

    old_permissions = user_request.permissions

    if added_permissions:
        user_request.add_permissions(
            [capability.value for capability in added_permissions])
    if removed_permissions:
        user_request.remove_permissions(
            [capability.value for capability in removed_permissions])

    create_user_request_event(event_type.USER_PERM_CHANGED, user_request,
                              old_permissions)
Esempio n. 7
0
def add_user_request(request_id, user_guid, permissions):
    """
    Create a users permissions entry for a request and notify all agency administrators and the user that the permissions
    have changed.

    :param request_id: FOIL request ID
    :param user_guid: string guid of the user being edited
    :param permissions: Updated permissions values {'permission': true}
    """
    user_request = UserRequests.query.filter_by(user_guid=user_guid,
                                                request_id=request_id).first()

    if user_request:
        raise UserRequestException(action="create",
                                   request_id=request_id,
                                   reason="UserRequest entry already exists.")

    user = Users.query.filter_by(guid=user_guid).one()

    agency_admin_emails = get_agency_emails(request_id, admins_only=True)

    added_permissions = []
    for i, val in enumerate(permission.ALL):
        if i in permissions:
            added_permissions.append(val)

    # send email to agency administrators
    safely_send_and_add_email(
        request_id,
        render_template(
            'email_templates/email_user_request_added.html',
            request_id=request_id,
            name=user.name,
            agency_name=user.agency.name,
            page=urljoin(flask_request.host_url,
                         url_for('request.view', request_id=request_id)),
            added_permissions=[
                capability.label for capability in added_permissions
            ],
            admin=True),
        'User Added to Request {}'.format(request_id),
        to=agency_admin_emails)

    # send email to user being added
    safely_send_and_add_email(
        request_id,
        render_template(
            'email_templates/email_user_request_added.html',
            request_id=request_id,
            name=user.name,
            agency_name=user.agency.name,
            page=urljoin(flask_request.host_url,
                         url_for('request.view', request_id=request_id)),
            added_permissions=[
                capability.label for capability in added_permissions
            ],
        ),
        'User Added to Request {}'.format(request_id),
        to=[user.notification_email or user.email])

    user_request = UserRequests(user_guid=user.guid,
                                auth_user_type=user.auth_user_type,
                                request_id=request_id,
                                request_user_type=user_type_request.AGENCY,
                                permissions=0)

    create_object(user_request)

    if added_permissions:
        user_request.add_permissions(
            [capability.value for capability in added_permissions])

    create_user_request_event(event_type.USER_ADDED, user_request)
Esempio n. 8
0
def create_contact_record(request, first_name, last_name, email, subject,
                          message):
    """
    Creates Users, Emails, and Events entries for a contact submission for a request.
    Sends email with message to all agency users associated with
    
    :param request: request object
    :param first_name: sender's first name
    :param last_name: sender's last name
    :param email: sender's email
    :param subject: subject of email
    :param message: email body
    """
    if current_user == request.requester:
        user = current_user
    else:
        user = Users(
            guid=generate_guid(),
            auth_user_type=ANONYMOUS_USER,
            email=email,
            first_name=first_name,
            last_name=last_name,
            email_validated=False,
            terms_of_use_accepted=False,
        )
        create_object(user)

        create_object(
            Events(request_id=request.id,
                   user_guid=None,
                   auth_user_type=None,
                   type_=event_type.USER_CREATED,
                   new_value=user.val_for_events))

    body = "Name: {} {}\n\nEmail: {}\n\nSubject: {}\n\nMessage:\n{}".format(
        first_name, last_name, email, subject, message)

    agency_emails = get_agency_emails(request.id)

    email_obj = Emails(request.id,
                       PRIVATE,
                       to=','.join([
                           email.replace('{', '').replace('}', '')
                           for email in agency_emails
                       ]),
                       cc=None,
                       bcc=None,
                       subject=subject,
                       body=body)

    create_object(email_obj)

    create_object(
        Events(request_id=request.id,
               user_guid=user.guid,
               auth_user_type=user.auth_user_type,
               type_=event_type.CONTACT_EMAIL_SENT,
               response_id=email_obj.id,
               new_value=email_obj.val_for_events))

    send_contact_email(subject, agency_emails, message, email)
Esempio n. 9
0
    def test_create_contact_record_anon(self, send_contact_email_patch):
        request = self.rf.create_request_as_anonymous_user()
        first_name = 'John'
        last_name = 'Doris'
        subject = 'Inquire about {}'.format(request.id)
        email = '*****@*****.**'
        message = 'I need more information about my request.'
        body = "Name: {} {}\n\nEmail: {}\n\nSubject: {}\n\nMessage:\n{}".format(
            first_name, last_name, email, subject, message)
        agency_emails = get_agency_emails(request.id)

        create_contact_record(request,
                              first_name,
                              last_name,
                              email,
                              subject,
                              message)
        send_contact_email_patch.assert_called_once_with(
            subject,
            agency_emails,
            message,
            email
        )

        user = Users.query.filter_by(email=email).one()
        self.assertEqual(
            [
                user.first_name,
                user.last_name,
                user.auth_user_type,
                user.email
            ],
            [
                first_name,
                last_name,
                user_type_auth.ANONYMOUS_USER,
                email
            ]
        )
        user_created_event = Events.query.filter(Events.request_id == request.id,
                                                 Events.type == event_type.USER_CREATED).one()
        self.assertEqual(user.val_for_events, user_created_event.new_value)
        email_obj = Emails.query.filter(Emails.request_id == request.id,
                                        Emails.subject == subject).one()
        self.assertEqual(
            [
                [email_obj.to],
                email_obj.body
            ],
            [
                agency_emails,
                body
            ]
        )

        contact_event = Events.query.filter_by(response_id=email_obj.id).one()
        self.assertEqual(
            [
                contact_event.request_id,
                contact_event.user_guid,
                contact_event.auth_user_type,
                contact_event.type,
                contact_event.new_value
            ],
            [
                request.id,
                user.guid,
                user.auth_user_type,
                event_type.CONTACT_EMAIL_SENT,
                email_obj.val_for_events
            ]
        )
Esempio n. 10
0
def create_contact_record(request, first_name, last_name, email, subject, message):
    """
    Creates Users, Emails, and Events entries for a contact submission for a request.
    Sends email with message to all agency users associated with the request.

    :param request: request object
    :param first_name: sender's first name
    :param last_name: sender's last name
    :param email: sender's email
    :param subject: subject of email
    :param message: email body
    """
    if current_user == request.requester:
        user = current_user
    else:
        user = Users(
            guid=generate_guid(),
            email=email,
            first_name=first_name,
            last_name=last_name,
            email_validated=False,
            terms_of_use_accepted=False,
            is_anonymous_requester=True
        )
        create_object(user)

        create_object(Events(
            request_id=request.id,
            user_guid=None,
            type_=event_type.USER_CREATED,
            new_value=user.val_for_events
        ))

    body = "Name: {} {}\n\nEmail: {}\n\nSubject: {}\n\nMessage:\n{}".format(
        first_name, last_name, email, subject, message)

    agency_emails = get_agency_emails(request.id)

    email_obj = Emails(
        request.id,
        PRIVATE,
        to=','.join([email.replace('{', '').replace('}', '') for email in agency_emails]),
        cc=None,
        bcc=None,
        subject=subject,
        body=body
    )

    create_object(email_obj)

    create_object(Events(
        request_id=request.id,
        user_guid=user.guid,
        type_=event_type.CONTACT_EMAIL_SENT,
        response_id=email_obj.id,
        new_value=email_obj.val_for_events
    ))

    send_contact_email(
        subject,
        agency_emails,
        message,
        email
    )