Ejemplo n.º 1
0
def scanschedule():
    site = request.json


    scan_id = site.get('scan_id')
    schedule = site.get('schedule')

    plan = site.get('plan')
    target = site.get('target')

    removeSite = schedule.get('remove')
    enabled = True
    crontab = {}
    message = "Scan Schedule not set"

    if removeSite is not None:
        # Removing scan from scanschedule results in incomplete removal because of celerybeat-mongo running in background
        # Hence  we just set "enabled" to false
        enabled = False
        message = "Removed Schedule for: " + target

    else:
        enabled = True
        message="Scheduled Scan successfully set for site: " + target



    crontab = {
      'minute':str(schedule.get('minute')),
      'hour':str(schedule.get('hour')),
      'day_of_week':str(schedule.get('dayOfWeek')),
      'day_of_month':str(schedule.get('dayOfMonth')),
      'month_of_year':str(schedule.get('monthOfYear'))
    }

    # Validate Crontab schedule values
    crontab_errors = check_cron(crontab)
    if crontab_errors:
        message = "Error in crontab values"
        return jsonify(message=message,success=False,errors=crontab_errors)

    data = {
      'task': "minion.backend.tasks.run_scheduled_scan",
      'args': [target, plan],
      'site': target,
      'queue':'scanschedule',
      'routing_key':'scanschedule',
      'exchange':'', #Exchange is not required. Fails sometimes if exchange is provided. #TODO Figure out why
      'plan': plan,
      'name': target + ":" + plan,
      'enabled': enabled,
      'crontab': crontab
    }

    # Insert/Update existing schedule by target and plan
    schedule = ScanSchedule.get_schedule(site, plan)

    schedule = scanschedules.find_one({"site":target, "plan":plan})
    if not schedule:
      schedule = ScanSchedule()
      schedule.data = json.dumps(data)
    else:
      old_data = json.loads(schedule.data)
      schedule.data = json.dumps(old_data.update(data))
      scanschedules.update({"site":target, "plan":plan},
                       {"$set": {"crontab": crontab, "enabled":enabled}});


    return jsonify(message=message,success=True)