func UserIndex()

in src/users/src/users-service/handlers.go [28:91]


func UserIndex(w http.ResponseWriter, r *http.Request) {

	enableCors(&w)

	var offset = 0
	var count = 20

	var keys = r.URL.Query()
	var offsetParam = keys.Get("offset")
	if len(offsetParam) > 0 {
		i, err := strconv.Atoi(offsetParam)
		if err != nil {
			panic(err)
		}

		if i < 0 {
			http.Error(w, "Offset must be >= 0", http.StatusUnprocessableEntity)
			return
		}
		offset = i
	}

	var countParam = keys.Get("count")
	if len(countParam) > 0 {
		i, err := strconv.Atoi(countParam)
		if err != nil {
			panic(err)
		}

		if i < 1 {
			http.Error(w, "Count must be > 0", http.StatusUnprocessableEntity)
			return
		}

		if i > 10000 {
			http.Error(w, "Count exceeds maximum value; please use paging by offset", http.StatusUnprocessableEntity)
			return
		}

		count = i
	}

	w.Header().Set("Content-Type", "application/json; charset=UTF-8")

	var end = offset + count
	if end > len(users) {
		end = len(users)
	}

	ret := make([]User, 0, count)

	idx := offset
	for len(ret) < count && idx < len(users) {
		// Do NOT return any users with an associated identity ID.
		if len(users[idx].IdentityId) == 0 {
			ret = append(ret, users[idx])
		}
		idx++
	}

	if err := json.NewEncoder(w).Encode(ret); err != nil {
		panic(err)
	}
}