Add query to api
This commit is contained in:
@@ -91,6 +91,7 @@ func NewServer(cfg config.FrontendConfig, hs *honeypot.HoneypotServer, store sto
|
||||
r.Use(middleware.SetHeader("Content-Type", "application/json"))
|
||||
r.Get("/stats", s.HandlerStats)
|
||||
r.Get("/stream", s.HandlerAttemptStream)
|
||||
r.Get("/query", s.HandlerQuery)
|
||||
})
|
||||
})
|
||||
s.Handler = r
|
||||
@@ -185,6 +186,7 @@ func (s *Server) HandlerAttemptStream(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
func (s *Server) HandlerStats(w http.ResponseWriter, r *http.Request) {
|
||||
w.Header().Add("Content-Type", "application/json")
|
||||
statType := store.LoginStats(r.URL.Query().Get("type"))
|
||||
if statType == store.LoginStatsUndefined {
|
||||
statType = store.LoginStatsPasswords
|
||||
@@ -209,6 +211,36 @@ func (s *Server) HandlerStats(w http.ResponseWriter, r *http.Request) {
|
||||
s.ServerLogger.Debugf("Error encoding or writing response", "remote_ip", r.RemoteAddr, "error", err)
|
||||
}
|
||||
}
|
||||
func (s *Server) HandlerQuery(w http.ResponseWriter, r *http.Request) {
|
||||
w.Header().Add("Content-Type", "application/json")
|
||||
queryType := r.URL.Query().Get("type")
|
||||
query := r.URL.Query().Get("query")
|
||||
|
||||
if query == "" || queryType == "" {
|
||||
s.WriteAPIError(w, r, http.StatusBadRequest, "Invalid query or query type")
|
||||
return
|
||||
}
|
||||
|
||||
aq := store.AttemptQuery{
|
||||
QueryType: store.AttemptQueryType(queryType),
|
||||
Query: query,
|
||||
}
|
||||
|
||||
results, err := s.store.Query(aq)
|
||||
if err != nil {
|
||||
s.WriteAPIError(w, r, http.StatusInternalServerError, "Unable to perform query")
|
||||
s.ServerLogger.Warnw("Error performing query", "error", err)
|
||||
return
|
||||
}
|
||||
if results == nil {
|
||||
results = []models.LoginAttempt{}
|
||||
}
|
||||
|
||||
encoder := json.NewEncoder(w)
|
||||
if err := encoder.Encode(&results); err != nil {
|
||||
s.ServerLogger.Warnw("Error writing query results", "error", err)
|
||||
}
|
||||
}
|
||||
|
||||
type APIErrorResponse struct {
|
||||
Error string `json:"error"`
|
||||
|
Reference in New Issue
Block a user