github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/api/usersserver/get_since.go (about)

     1  package usersserver
     2  
     3  import (
     4  	"encoding/json"
     5  	"net/http"
     6  	"time"
     7  
     8  	"github.com/pf-qiu/concourse/v6/atc"
     9  	"github.com/pf-qiu/concourse/v6/atc/api/present"
    10  	"github.com/pf-qiu/concourse/v6/atc/db"
    11  )
    12  
    13  const since = "since"
    14  const dateLayout = "2006-01-02"
    15  
    16  func (s *Server) GetUsersSince(w http.ResponseWriter, r *http.Request) {
    17  	hLog := s.logger.Session("list-users")
    18  	w.Header().Set("Content-Type", "application/json")
    19  
    20  	var (
    21  		users []db.User
    22  		err   error
    23  	)
    24  
    25  	err = r.ParseForm()
    26  	if err != nil {
    27  		hLog.Error("failed-to-parse-form-data", err)
    28  		w.WriteHeader(http.StatusBadRequest)
    29  		return
    30  	}
    31  
    32  	if isSinceSet(r) {
    33  		tmSince, err := time.Parse(dateLayout, r.FormValue(since))
    34  		if err != nil {
    35  			hLog.Error("failed-to-parse-time", err)
    36  			w.WriteHeader(http.StatusBadRequest)
    37  			if err = json.NewEncoder(w).Encode(map[string]string{"error": "wrong date format (yyyy-mm-dd)"}); err != nil {
    38  				hLog.Error("failed-to-encode-date-parsing-error", err)
    39  				w.WriteHeader(http.StatusInternalServerError)
    40  			}
    41  			return
    42  		}
    43  		users, err = s.userFactory.GetAllUsersByLoginDate(tmSince)
    44  		if err != nil {
    45  			hLog.Error("failed-to-get-users-since", err)
    46  			w.WriteHeader(http.StatusInternalServerError)
    47  			return
    48  		}
    49  	} else {
    50  		users, err = s.userFactory.GetAllUsers()
    51  		if err != nil {
    52  			hLog.Error("failed-to-get-users", err)
    53  			w.WriteHeader(http.StatusInternalServerError)
    54  			return
    55  		}
    56  	}
    57  
    58  	presentedUsers := make([]atc.User, len(users))
    59  	for idx, user := range users {
    60  		presentedUsers[idx] = present.User(user)
    61  	}
    62  
    63  	err = json.NewEncoder(w).Encode(presentedUsers)
    64  	if err != nil {
    65  		hLog.Error("failed-to-encode-users", err)
    66  		w.WriteHeader(http.StatusInternalServerError)
    67  	}
    68  	return
    69  }
    70  
    71  func isSinceSet(r *http.Request) bool {
    72  	if len(r.FormValue(since)) > 0 {
    73  		return true
    74  	}
    75  	return false
    76  }