def create_rtbh(current_user): all_com = db.session.query(Community).all() if not all_com: insert_initial_communities() net_ranges = get_user_nets(current_user["id"]) json_request_data = request.get_json() form = RTBHForm(data=json_request_data, meta={"csrf": False}) form.community.choices = get_user_communities(current_user["role_ids"]) form.net_ranges = net_ranges if not form.validate(): form_errors = get_form_errors(form) if form_errors: return jsonify(form_errors), 400 model = get_rtbh_model_if_exists(form.data, 1) if model: model.expires, pref_format = parse_api_time(form.expires.data) flash_message = ( u"Existing RTBH Rule found. Expiration time was updated to new value." ) else: expires, pref_format = parse_api_time(form.expires.data) model = RTBH( ipv4=form.ipv4.data, ipv4_mask=form.ipv4_mask.data, ipv6=form.ipv6.data, ipv6_mask=form.ipv6_mask.data, community_id=form.community.data, expires=expires, comment=quote_to_ent(form.comment.data), user_id=current_user["id"], rstate_id=get_state_by_time(expires), ) db.session.add(model) db.session.commit() flash_message = u"RTBH Rule saved" # announce routes if model.rstate_id == 1: route = messages.create_rtbh(model, ANNOUNCE) announce_route(route) # log changes log_route( current_user["id"], model, RULE_TYPES["RTBH"], "{} / {}".format(current_user["uuid"], current_user["org"]), ) pref_format = output_date_format(json_request_data, pref_format) return jsonify({ "message": flash_message, "rule": model.to_dict(pref_format) }), 201
def create_ipv4(current_user): """ Api method for new IPv4 rule :param data: parsed json request :param current_user: data from jwt token :return: json response """ net_ranges = get_user_nets(current_user['id']) json_request_data = request.get_json() form = IPv4Form(data=json_request_data, meta={'csrf': False}) # add values to form instance form.action.choices = get_user_actions(current_user['role_ids']) form.net_ranges = net_ranges # if the form is not valid, we should return 404 with errors if not form.validate(): form_errors = get_form_errors(form) if form_errors: return jsonify(form_errors), 400 model = get_ipv4_model_if_exists(form.data, 1) if model: model.expires, pref_format = parse_api_time(form.expires.data) flash_message = u'Existing IPv4 Rule found. Expiration time was updated to new value.' else: expires, pref_format = parse_api_time(form.expires.data) model = Flowspec4(source=form.source.data, source_mask=form.source_mask.data, source_port=form.source_port.data, destination=form.dest.data, destination_mask=form.dest_mask.data, destination_port=form.dest_port.data, protocol=form.protocol.data, flags=";".join(form.flags.data), packet_len=form.packet_len.data, expires=expires, comment=quote_to_ent(form.comment.data), action_id=form.action.data, user_id=current_user['id'], rstate_id=get_state_by_time(expires)) flash_message = u'IPv4 Rule saved' db.session.add(model) db.session.commit() # announce route if model is in active state if model.rstate_id == 1: route = messages.create_ipv4(model, ANNOUNCE) announce_route(route) # log changes log_route(current_user['id'], model, RULE_TYPES['IPv4']) pref_format = output_date_format(json_request_data, pref_format) return jsonify({ 'message': flash_message, 'rule': model.to_dict(pref_format) }), 201
def test_parse_api_time(apitime, preformat): """ is the time parsed correctly """ result = utils.parse_api_time(apitime) assert type(result) == type((1,2)) assert result[0] == datetime(2015, 10, 15, 14, 50) assert result[1] == preformat
def create_ipv6(current_user): """ Create new IPv6 rule :param data: parsed json request :param current_user: data from jwt token :return: """ net_ranges = get_user_nets(current_user["id"]) json_request_data = request.get_json() form = IPv6Form(data=json_request_data, meta={"csrf": False}) form.action.choices = get_user_actions(current_user["role_ids"]) form.net_ranges = net_ranges if not form.validate(): form_errors = get_form_errors(form) if form_errors: return jsonify(form_errors), 400 model = get_ipv6_model_if_exists(form.data, 1) if model: model.expires, pref_format = parse_api_time(form.expires.data) flash_message = ( u"Existing IPv6 Rule found. Expiration time was updated to new value." ) else: expires, pref_format = parse_api_time(form.expires.data) model = Flowspec6( source=form.source.data, source_mask=form.source_mask.data, source_port=form.source_port.data, destination=form.dest.data, destination_mask=form.dest_mask.data, destination_port=form.dest_port.data, next_header=form.next_header.data, flags=";".join(form.flags.data), packet_len=form.packet_len.data, expires=expires, comment=quote_to_ent(form.comment.data), action_id=form.action.data, user_id=current_user["id"], rstate_id=get_state_by_time(expires), ) flash_message = u"IPv6 Rule saved" db.session.add(model) db.session.commit() # announce routes if model.rstate_id == 1: route = messages.create_ipv6(model, ANNOUNCE) announce_route(route) # log changes log_route( current_user["id"], model, RULE_TYPES["IPv6"], "{} / {}".format(current_user["uuid"], current_user["org"]), ) pref_format = output_date_format(json_request_data, pref_format) return jsonify({ "message": flash_message, "rule": model.to_dict(pref_format) }), 201
def test_parse_api_time_bad_time(apitime): """ is the time parsed correctly """ assert utils.parse_api_time(apitime) == False