def submit_issue(event, context, is_test=False, session=None): helper.log_method_initiated("Submit issue", event, logger) if session == None: session = get_db_session(is_test, session) issue = Issue() #create object from issue_model.py (DB table: issues) issue = helper.body_to_object(event['body'], issue) # add ip address try: ip_address = event['requestContext']['identity']['sourceIp'] setattr(issue, 'ip_address', ip_address) except Exception: response = { "statusCode": 400, "body": "Could not read/add ip address. Check HTTP POST payload. Stacktrace: {}" .format(traceback.format_exc()) } issue = add_object(issue, is_test, session) if issue is None: response = { "statusCode": 400, "body": "Could not write issue to database. Check HTTP POST payload. Stacktrace: {}" .format(traceback.format_exc()) } response_cors = helper.set_cors(response, event, is_test) return response_cors response = send_issue_notification(issue) if response == False: response = { "statusCode": 500, "body": "Could not send issue mail. Stacktrace: {}".format( traceback.format_exc()) } response_cors = helper.set_cors(response, event, is_test) return response_cors else: response = {"statusCode": 201, "body": json.dumps(issue.to_dict())} response_cors = helper.set_cors(response, event, is_test) return response_cors
def submit_issue(event, context, is_test=False, session=None): helper.log_method_initiated("Submit issue", event, logger) if session == None: session = get_db_session(is_test, session) issue = Issue() issue = helper.body_to_object(event['body'], issue) issue = add_object(issue, is_test, session) if issue is None: response = { "statusCode": 400, "body": "Could not write issue to database. Check HTTP POST payload. Stacktrace: {}" .format(traceback.format_exc()) } response_cors = helper.set_cors(response, event, is_test) return response_cors response = send_issue_notification(issue) if response == False: response = { "statusCode": 500, "body": "Could not send issue mail. Stacktrace: {}".format( traceback.format_exc()) } response_cors = helper.set_cors(response, event, is_test) return response_cors else: response = {"statusCode": 201, "body": json.dumps(issue.to_dict())} response_cors = helper.set_cors(response, event, is_test) return response_cors
def submit_item(event, context): client = boto3.client('stepfunctions', region_name="eu-central-1") helper.log_method_initiated("Item submission", event, logger) with Session() as session: try: body = event['body'] if isinstance(body, str): body_dict = json.loads(body) else: body_dict = body content = body_dict["content"] del body_dict["content"] if "type" in body_dict: type = body_dict["type"] del body_dict["type"] else: type = None if "item_type_id" in body_dict: item_type_id = body_dict["item_type_id"] del body_dict["item_type_id"] else: item_type_id = None if "item" in body_dict: del body_dict["item"] submission = Submission() helper.body_to_object(body_dict, submission) # add ip address ip_address = event['requestContext']['identity']['sourceIp'] setattr(submission, 'ip_address', ip_address) try: # Item already exists, item_id in submission is the id of the found item item = item_handler.get_item_by_content(content, session) submission.item_id = item.id new_item_created = False except Exception: # Item does not exist yet, item_id in submission is the id of the newly created item item = Item() item.content = content item.item_type_id = item_type_id item.type = type item = item_handler.create_item(item, session) new_item_created = True if content: str_urls = re.findall( 'http[s]?://(?:[a-zA-ZäöüÄÖÜ]|[0-9]|[$-_@.&+]|[!*(),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', content) url_handler.prepare_and_store_urls(item, str_urls, session) submission.item_id = item.id submission.status = item.status # Create submission submission_handler.create_submission_db(submission, session) if submission.mail: if item.status != 'Unsafe': send_confirmation_mail(submission) # Create response if item.status == 'Unsafe': response = { "statusCode": 403, "headers": { "content-type": "application/json; charset=utf-8", "new-item-created": str(new_item_created) }, "body": "Item not valid" } else: response = { "statusCode": 201, "headers": { "content-type": "application/json; charset=utf-8", "new-item-created": str(new_item_created) }, "body": json.dumps(item.to_dict()) } except Exception as e: logger.error("Couldn't submit item. Exception: %s", e) response = { "statusCode": 400, "body": "Could not create item and/or submission. Check HTTP POST payload. Stacktrace: {}" .format(traceback.format_exc()) } ## start SearchFactChecks only for safe items if (item.status != 'Unsafe') and (new_item_created == True): stage = os.environ['STAGE'] client.start_execution( stateMachineArn= 'arn:aws:states:eu-central-1:891514678401:stateMachine:SearchFactChecks_new-' + stage, name='SFC_' + item.id, input="{\"item\":{" "\"id\":\"" + item.id + "\"," "\"content\":\"" + remove_control_characters(item.content) + "\" } }") response_cors = helper.set_cors(response, event) return response_cors
def test_submit_issue(good_event, bad_event): conn = boto3.client("ses", region_name="eu-central-1") conn.verify_email_identity(EmailAddress="*****@*****.**") with Session() as session: # Send good event response = submit_issue(good_event, None) # Check response assert response['statusCode'] == 201 assert good_event['body']['message'] in response['body'] # Check e-mail notification send_quota = conn.get_send_quota() sent_count = int(send_quota["SentLast24Hours"]) assert sent_count == 1 message = ses_backend.sent_messages[0] assert '*****@*****.**' in message.destinations['ToAddresses'] assert good_event['body']['message'] in message.body # Check database entry issue_count = session.query(Issue).count() issue = session.query(Issue).first() assert issue.ip_address == '1.2.3.4' assert issue_count == 1 # Send bad event response = submit_issue(bad_event, None) # Check response assert response['statusCode'] == 400 # Check e-mail notification send_quota = conn.get_send_quota() sent_count = int(send_quota["SentLast24Hours"]) assert sent_count == 1 # Check database entry issue_count = session.query(Issue).count() assert issue_count == 1 # Send item event item = get_item('Content TestItem 111') session.add(item) session.commit() item_event = get_item_event(item) response = submit_issue(item_event, None) # Check response assert response['statusCode'] == 201 assert item_event['body']['message'] in response['body'] issue = Issue() issue = body_to_object(response['body'], issue) assert issue.message == "This is a feedback." # Check e-mail notification send_quota = conn.get_send_quota() sent_count = int(send_quota["SentLast24Hours"]) assert sent_count == 2 message = ses_backend.sent_messages[1] assert '*****@*****.**' in message.destinations['ToAddresses'] assert item_event['body']['message'] in message.body assert item.id in message.body assert item.content in message.body # Check database entry issue_count = session.query(Issue).count() assert issue_count == 2 # Send item-event with another item item = get_item('Content TestItem 222') session.add(item) session.commit() item_event = get_item_event(item, 'complaint', 'This is a complaint.') response = submit_issue(item_event, None) # Check response assert response['statusCode'] == 201 assert item_event['body']['message'] in response['body'] issue = Issue() issue = body_to_object(response['body'], issue) assert issue.message == "This is a complaint." # Check database entry issue_count = session.query(Issue).count() assert issue_count == 3
def submit_item(event, context, is_test=False, session=None): client = boto3.client('stepfunctions', region_name="eu-central-1") helper.log_method_initiated("Item submission", event, logger) if session == None: session = connection_handler.get_db_session(False, None) try: body = event['body'] if isinstance(body, str): body_dict = json.loads(body) else: body_dict = body content = body_dict["content"] del body_dict["content"] if ("type" in body_dict): type = body_dict["type"] del body_dict["type"] else: type = None if ("item_type_id" in body_dict): item_type_id = body_dict["item_type_id"] del body_dict["item_type_id"] else: item_type_id = None submission = Submission() helper.body_to_object(body_dict, submission) # add ip address ip_address = event['requestContext']['identity']['sourceIp'] setattr(submission, 'ip_address', ip_address) try: # Item already exists, item_id in submission is the id of the found item item = item_handler.get_item_by_content(content, is_test, session) submission.item_id = item.id new_item_created = False except Exception: # Item does not exist yet, item_id in submission is the id of the newly created item item = Item() item.content = content item.item_type_id = item_type_id item.type = type item = item_handler.create_item(item, is_test, session) new_item_created = True submission.item_id = item.id stage = os.environ['STAGE'] client.start_execution( stateMachineArn= 'arn:aws:states:eu-central-1:891514678401:stateMachine:SearchFactChecks_new-' + stage, name='SFC_' + item.id, input="{\"item\":{" "\"id\":\"" + item.id + "\"," "\"content\":\"" + remove_control_characters(item.content) + "\" } }") # Create submission submission_handler.create_submission_db(submission, is_test, session) if submission.mail: send_confirmation_mail(submission) response = { "statusCode": 201, 'headers': { "content-type": "application/json; charset=utf-8", "new-item-created": str(new_item_created) }, "body": json.dumps(item.to_dict()) } except Exception: response = { "statusCode": 400, "body": "Could not create item and/or submission. Check HTTP POST payload. Stacktrace: {}" .format(traceback.format_exc()) } response_cors = helper.set_cors(response, event, is_test) return response_cors