Example #1
0
func (s *server) statusHandler(w http.ResponseWriter, r *http.Request) {
	switch {
	case r.Method == "POST":
		data, err := ioutil.ReadAll(r.Body)
		if err != nil {
			w.WriteHeader(http.StatusBadRequest)
			orujo.RegisterError(w, fmt.Errorf("Reading POST:", err))
			return
		}
		var cmd MonmqCmd
		if err = json.Unmarshal(data, &cmd); err != nil {
			w.WriteHeader(http.StatusBadRequest)
			orujo.RegisterError(w, fmt.Errorf("Parsing json:", err))
			return
		}
		var command monmq.Command
		switch {
		case cmd.Command == "softshutdown":
			command = monmq.SoftShutdown
		case cmd.Command == "hardshutdown":
			command = monmq.HardShutdown
		case cmd.Command == "pause":
			command = monmq.Pause
		case cmd.Command == "resume":
			command = monmq.Resume
		}
		if err = s.supervisor.Invoke(command, cmd.Target); err != nil {
			w.WriteHeader(http.StatusBadRequest)
			orujo.RegisterError(w, fmt.Errorf("Invoking monmq command:", err))
			return
		}
	case r.Method == "GET":
		b, err := json.Marshal(s.supervisor.Status())
		if err != nil {
			w.WriteHeader(http.StatusInternalServerError)
			orujo.RegisterError(w, fmt.Errorf("error marshaling status:", err))
			return
		}
		fmt.Fprintf(w, "%s", b)
	}
}
Example #2
0
func (s *server) tasksHandler(w http.ResponseWriter, r *http.Request) {
	data, err := ioutil.ReadAll(r.Body)
	if err != nil {
		w.WriteHeader(http.StatusBadRequest)
		orujo.RegisterError(w, fmt.Errorf("Reading POST:", err))
		return
	}
	tasks := strings.Split(string(data), ",")
	tm := newTaskManager(s.client, s.database)
	go tm.runTasks(tasks)
	fmt.Fprintln(w, "{\"status\": \"success\"}")
}
Example #3
0
func (s *server) queryHandler(w http.ResponseWriter, r *http.Request) {
	f := extractFilters(r)

	t := template.Must(template.New("query").Parse(queryTemplate))
	query := &bytes.Buffer{}
	err := t.Execute(query, f)
	if err != nil {
		log.Println("executing template:", err)
	}

	stmt, err := s.database.Prepare(query.String())
	if err != nil {
		log.Println("preparing statement:", err)
	}

	data := make([]interface{}, 0, len(f.Ports))
	if f.Ip != "" {
		data = append(data, f.Ip)
	}
	for _, v := range f.Ports {
		data = append(data, v)
	}
	for _, v := range f.Services {
		data = append(data, v)
	}
	if f.Regexp != "" {
		data = append(data, f.Regexp)
	}

	rows, err := stmt.Query(data...)
	if err != nil {
		w.WriteHeader(http.StatusInternalServerError)
		orujo.RegisterError(w, fmt.Errorf("error querying:", err))
		return
	}
	defer rows.Close()

	var result []Banner
	for rows.Next() {
		var curr Banner
		if err := rows.Scan(&curr.Ip, &curr.Port, &curr.Service, &curr.Content); err != nil {
			log.Fatal(err)
		}
		result = append(result, curr)
	}
	jsoned, err := json.Marshal(result)
	if err != nil {
		log.Println("marshaling:", err)
	}
	fmt.Fprintf(w, string(jsoned))
}