def survey_confirm_organisation(_):
    # Get and decrypt enrolment code
    cryptographer = Cryptographer()
    encrypted_enrolment_code = request.args.get("encrypted_enrolment_code",
                                                None)
    enrolment_code = cryptographer.decrypt(
        encrypted_enrolment_code.encode()).decode()

    # Validate enrolment code before retrieving organisation data
    iac_controller.validate_enrolment_code(enrolment_code)

    logger.info(
        "Attempting to retrieve data for confirm add organisation/survey page",
        enrolment_code=enrolment_code)
    try:
        # Get organisation name
        case = case_controller.get_case_by_enrolment_code(enrolment_code)
        business_party_id = case["caseGroup"]["partyId"]
        business_party = party_controller.get_party_by_business_id(
            business_party_id, app.config["PARTY_URL"],
            app.config["BASIC_AUTH"])

        # Get survey name
        collection_exercise_id = case["caseGroup"]["collectionExerciseId"]
        collection_exercise = collection_exercise_controller.get_collection_exercise(
            collection_exercise_id)
        survey_id = collection_exercise["surveyId"]
        survey_name = survey_controller.get_survey(app.config["SURVEY_URL"],
                                                   app.config["BASIC_AUTH"],
                                                   survey_id).get("longName")
def survey_confirm_organisation(_):
    # Get and decrypt enrolment code
    cryptographer = Cryptographer()
    encrypted_enrolment_code = request.args.get('encrypted_enrolment_code',
                                                None)
    enrolment_code = cryptographer.decrypt(
        encrypted_enrolment_code.encode()).decode()

    # Validate enrolment code before retrieving organisation data
    iac_controller.validate_enrolment_code(enrolment_code)

    logger.info(
        'Attempting to retrieve data for confirm add organisation/survey page')
    try:
        # Get organisation name
        case = case_controller.get_case_by_enrolment_code(enrolment_code)
        business_party_id = case['caseGroup']['partyId']
        business_party = party_controller.get_party_by_business_id(
            business_party_id, app.config['PARTY_URL'],
            app.config['BASIC_AUTH'])

        # Get survey name
        collection_exercise_id = case['caseGroup']['collectionExerciseId']
        collection_exercise = collection_exercise_controller.get_collection_exercise(
            collection_exercise_id)
        survey_id = collection_exercise['surveyId']
        survey_name = survey_controller.get_survey(app.config['SURVEY_URL'],
                                                   app.config['BASIC_AUTH'],
                                                   survey_id).get('longName')
Exemple #3
0
def register_confirm_organisation_survey():
    # Get and decrypt enrolment code
    cryptographer = Cryptographer()
    encrypted_enrolment_code = request.args.get("encrypted_enrolment_code")
    try:
        enrolment_code = cryptographer.decrypt(
            encrypted_enrolment_code.encode()).decode()
    except AttributeError:
        logger.error("No enrolment code supplied",
                     exc_info=True,
                     url=request.url)
        raise
    # Validate enrolment code before retrieving organisation data
    iac_controller.validate_enrolment_code(enrolment_code)

    logger.info(
        "Attempting to retrieve data for confirm organisation/survey page",
        enrolment_code=enrolment_code)
    try:
        # Get organisation name
        case = case_controller.get_case_by_enrolment_code(enrolment_code)
        business_party_id = case["caseGroup"]["partyId"]
        business_party = party_controller.get_party_by_business_id(
            business_party_id, app.config["PARTY_URL"],
            app.config["BASIC_AUTH"])

        # Get survey name
        collection_exercise_id = case["caseGroup"]["collectionExerciseId"]
        collection_exercise = collection_exercise_controller.get_collection_exercise(
            collection_exercise_id)
        survey_id = collection_exercise["surveyId"]
        survey_name = survey_controller.get_survey(app.config["SURVEY_URL"],
                                                   app.config["BASIC_AUTH"],
                                                   survey_id).get("longName")
Exemple #4
0
def add_survey_submit(session):
    party_id = session.get_party_id()

    cryptographer = Cryptographer()
    encrypted_enrolment_code = request.args.get("encrypted_enrolment_code")
    enrolment_code = cryptographer.decrypt(
        encrypted_enrolment_code.encode()).decode()
    logger.info("Assigning new survey to a user",
                party_id=party_id,
                enrolment_code=enrolment_code)

    try:
        # Verify enrolment code is active
        iac = iac_controller.get_iac_from_enrolment(enrolment_code)
        if iac is None:
            # Showing the client an error screen if the enrolment code is either not found or inactive isn't great
            # but it's better then what used to happen, which was raise TypeError and show them the generic exception
            # page.  This lets us more easily debug the issue.  Ideally we'd redirect the user to the surveys_list
            # page with a 'Something went wrong when signing you up for the survey, try again or call us' error.
            logger.error("IAC code not found or inactive",
                         enrolment_code=enrolment_code)
            abort(400)

        # Add enrolment for user in party
        case_id = iac["caseId"]
        case = case_controller.get_case_by_enrolment_code(enrolment_code)
        business_party_id = case["partyId"]
        collection_exercise_id = case["caseGroup"]["collectionExerciseId"]
        # Get survey ID from collection Exercise
        added_survey_id = collection_exercise_controller.get_collection_exercise(
            case["caseGroup"]["collectionExerciseId"]).get("surveyId")

        info = party_controller.get_party_by_business_id(
            business_party_id, app.config["PARTY_URL"],
            app.config["BASIC_AUTH"], collection_exercise_id)

        already_enrolled = None
        if is_respondent_and_business_enrolled(info["associations"],
                                               case["caseGroup"]["surveyId"],
                                               party_id):
            logger.info(
                "User tried to enrol onto a survey they are already enrolled on",
                case_id=case_id,
                party_id=party_id,
                enrolment_code=enrolment_code,
            )
            already_enrolled = True
        else:
def add_survey_submit(session):
    party_id = session['party_id']
    logger.info('Assigning new survey to a user', party_id=party_id)

    cryptographer = Cryptographer()
    encrypted_enrolment_code = request.args.get('encrypted_enrolment_code')
    enrolment_code = cryptographer.decrypt(
        encrypted_enrolment_code.encode()).decode()

    try:
        # Verify enrolment code is active
        iac = iac_controller.get_iac_from_enrolment(enrolment_code)

        # Add enrolment for user in party
        case_id = iac['caseId']
        case = case_controller.get_case_by_enrolment_code(enrolment_code)
        business_party_id = case['partyId']
        case_controller.post_case_event(
            case_id,
            party_id=business_party_id,
            category='ACCESS_CODE_AUTHENTICATION_ATTEMPT',
            description='Access code authentication attempted')

        party_controller.add_survey(party_id, enrolment_code)

        # Get survey ID from collection Exercise
        added_survey_id = collection_exercise_controller.get_collection_exercise(
            case['caseGroup']['collectionExerciseId']).get('surveyId')

    except ApiError as exc:
        logger.error('Failed to assign user to a survey',
                     party_id=party_id,
                     status_code=exc.status_code)
        raise

    logger.info(
        'Successfully retrieved data for confirm add organisation/survey page',
        case_id=case_id,
        party_id=party_id)
    return redirect(
        url_for('surveys_bp.get_survey_list',
                _anchor=(business_party_id, added_survey_id),
                _external=True,
                business_party_id=business_party_id,
                survey_id=added_survey_id,
                tag='todo'))