示例#1
0
def dao_create_service(
    service,
    user,
    service_id=None,
    service_permissions=None,
):
    # the default property does not appear to work when there is a difference between the sqlalchemy schema and the
    # db schema (ie: during a migration), so we have to set sms_sender manually here. After the GOVAU sms_sender
    # migration is completed, this code should be able to be removed.

    if not user:
        raise ValueError("Can't create a service without a user")

    if service_permissions is None:
        service_permissions = DEFAULT_SERVICE_PERMISSIONS

    from app.dao.permissions_dao import permission_dao
    service.users.append(user)
    permission_dao.add_default_service_permissions_for_user(user, service)
    service.id = service_id or uuid.uuid4(
    )  # must be set now so version history model can use same id
    service.active = True
    service.research_mode = False
    service.crown = service.organisation_type == 'central'
    service.count_as_live = not user.platform_admin

    for permission in service_permissions:
        service_permission = ServicePermission(service_id=service.id,
                                               permission=permission)
        service.permissions.append(service_permission)

    # do we just add the default - or will we get a value from FE?
    insert_service_sms_sender(service, current_app.config['FROM_NUMBER'])
    db.session.add(service)
示例#2
0
    def format_for_data_model(self, in_data):
        if isinstance(in_data, dict) and 'permissions' in in_data:
            str_permissions = in_data['permissions']
            permissions = []
            for p in str_permissions:
                permission = ServicePermission(service_id=in_data["id"], permission=p)
                permissions.append(permission)

            in_data['permissions'] = permissions
示例#3
0
def dao_create_service(
    service,
    user,
    service_id=None,
    service_permissions=None,
):
    # the default property does not appear to work when there is a difference between the sqlalchemy schema and the
    # db schema (ie: during a migration), so we have to set sms_sender manually here. After the GOVUK sms_sender
    # migration is completed, this code should be able to be removed.

    if not user:
        raise ValueError("Can't create a service without a user")

    if service_permissions is None:
        service_permissions = DEFAULT_SERVICE_PERMISSIONS

    organisation = dao_get_organisation_by_email_address(user.email_address)

    from app.dao.permissions_dao import permission_dao

    service.users.append(user)
    permission_dao.add_default_service_permissions_for_user(user, service)
    service.id = service_id or uuid.uuid4(
    )  # must be set now so version history model can use same id
    service.active = True
    service.research_mode = False

    for permission in service_permissions:
        service_permission = ServicePermission(service_id=service.id,
                                               permission=permission)
        service.permissions.append(service_permission)

    # do we just add the default - or will we get a value from FE?
    insert_service_sms_sender(service, current_app.config["FROM_NUMBER"])

    if organisation:
        service.organisation_id = organisation.id
        service.organisation_type = organisation.organisation_type
        if organisation.email_branding:
            service.email_branding = organisation.email_branding

        if organisation.letter_branding and not service.letter_branding:
            service.letter_branding = organisation.letter_branding

    elif service.organisation_type in NHS_ORGANISATION_TYPES or email_address_is_nhs(
            user.email_address):
        service.email_branding = dao_get_email_branding_by_name("NHS")
        service.letter_branding = dao_get_letter_branding_by_name("NHS")
    if organisation:
        service.crown = organisation.crown
    elif service.organisation_type in CROWN_ORGANISATION_TYPES:
        service.crown = True
    elif service.organisation_type in NON_CROWN_ORGANISATION_TYPES:
        service.crown = False
    service.count_as_live = not user.platform_admin

    db.session.add(service)
示例#4
0
def test_update_service_permission_creates_a_history_record_with_current_data(
    notify_db_session, ):
    user = create_user()
    assert Service.query.count() == 0
    assert Service.get_history_model().query.count() == 0
    service = Service(
        name="service_name",
        email_from="email_from",
        message_limit=1000,
        restricted=False,
        created_by=user,
    )
    dao_create_service(
        service,
        user,
        service_permissions=[
            SMS_TYPE,
            EMAIL_TYPE,
            INTERNATIONAL_SMS_TYPE,
        ],
    )

    service.permissions.append(
        ServicePermission(service_id=service.id, permission="letter"))
    dao_update_service(service)

    assert Service.query.count() == 1
    assert Service.get_history_model().query.count() == 2

    service_from_db = Service.query.first()

    assert service_from_db.version == 2

    _assert_service_permissions(
        service.permissions,
        (SMS_TYPE, EMAIL_TYPE, INTERNATIONAL_SMS_TYPE, LETTER_TYPE))

    permission = [p for p in service.permissions if p.permission == "sms"][0]
    service.permissions.remove(permission)
    dao_update_service(service)

    assert Service.query.count() == 1
    assert Service.get_history_model().query.count() == 3

    service_from_db = Service.query.first()
    assert service_from_db.version == 3
    _assert_service_permissions(
        service.permissions, (EMAIL_TYPE, INTERNATIONAL_SMS_TYPE, LETTER_TYPE))

    assert len(Service.get_history_model().query.filter_by(
        name="service_name").all()) == 3
    assert Service.get_history_model().query.filter_by(
        name="service_name").all()[2].version == 3
示例#5
0
def dao_create_service(
    service,
    user,
    service_id=None,
    service_permissions=None,
):

    if not user:
        raise ValueError("Can't create a service without a user")

    if service_permissions is None:
        service_permissions = DEFAULT_SERVICE_PERMISSIONS

    organisation = dao_get_organisation_by_email_address(user.email_address)

    from app.dao.permissions_dao import permission_dao
    service.users.append(user)
    permission_dao.add_default_service_permissions_for_user(user, service)
    service.id = service_id or uuid.uuid4(
    )  # must be set now so version history model can use same id
    service.active = True
    service.research_mode = False

    for permission in service_permissions:
        service_permission = ServicePermission(service_id=service.id,
                                               permission=permission)
        service.permissions.append(service_permission)

    # do we just add the default - or will we get a value from FE?
    insert_service_sms_sender(service, current_app.config['FROM_NUMBER'])

    if organisation:
        service.organisation_id = organisation.id
        service.organisation_type = organisation.organisation_type
        if organisation.email_branding:
            service.email_branding = organisation.email_branding

        if organisation.letter_branding and not service.letter_branding:
            service.letter_branding = organisation.letter_branding

    elif service.organisation_type in NHS_ORGANISATION_TYPES or email_address_is_nhs(
            user.email_address):
        service.email_branding = dao_get_email_branding_by_name('NHS')
        service.letter_branding = dao_get_letter_branding_by_name('NHS')
    if organisation:
        service.crown = organisation.crown
    elif service.organisation_type in CROWN_ORGANISATION_TYPES:
        service.crown = True
    elif service.organisation_type in NON_CROWN_ORGANISATION_TYPES:
        service.crown = False
    service.count_as_live = not user.platform_admin

    db.session.add(service)
示例#6
0
def set_broadcast_service_type(service, service_mode, broadcast_channel,
                               provider_restriction):
    insert_or_update_service_broadcast_settings(
        service,
        channel=broadcast_channel,
        provider_restriction=provider_restriction)

    # Remove all permissions and add broadcast permission
    if not service.has_permission(BROADCAST_TYPE):
        service_permission = ServicePermission(service_id=service.id,
                                               permission=BROADCAST_TYPE)
        db.session.add(service_permission)

    ServicePermission.query.filter(
        ServicePermission.service_id == service.id,
        ServicePermission.permission != BROADCAST_TYPE,
        # Email auth is an exception to the other service permissions (which relate to what type
        # of notifications a service can send) where a broadcast service is allowed to have the
        # email auth permission (but doesn't have to)
        ServicePermission.permission != EMAIL_AUTH_TYPE).delete()

    # Refresh the service object as it has references to the service permissions but we don't yet
    # want to commit the permission changes incase all of this needs to rollback
    db.session.refresh(service)

    # Set service count as live false always
    service.count_as_live = False

    # Set service into training mode or live mode
    if service_mode == "live":
        if service.restricted:
            # Only update the go live at timestamp if this if moving from training mode
            # to live mode, not if it's moving from one type of live mode service to another
            service.go_live_at = datetime.utcnow()
        service.restricted = False
    else:
        service.restricted = True
        service.go_live_at = None

    # Add service to organisation
    organisation = Organisation.query.filter_by(
        id=current_app.config['BROADCAST_ORGANISATION_ID']).one()
    service.organisation_id = organisation.id
    service.organisation_type = organisation.organisation_type
    service.crown = organisation.crown

    db.session.add(service)
def dao_add_service_permission(service_id, permission):
    service_permission = ServicePermission(service_id=service_id,
                                           permission=permission)
    db.session.add(service_permission)