// GET: /node // To do: // - Iterate node queries func (cr *NodeController) ReadMany(cx *goweb.Context) { // Log Request and check for Auth LogRequest(cx.Request) u, err := AuthenticateRequest(cx.Request) if err != nil && err.Error() != e.NoAuth { handleAuthError(err, cx) return } // Gather query params query := &Query{list: cx.Request.URL.Query()} // Setup query and nodes objects q := bson.M{} nodes := store.Nodes{} if u != nil { // Admin sees all if !u.Admin { q["$or"] = []bson.M{bson.M{"acl.read": []string{}}, bson.M{"acl.read": u.Uuid}} } } else { if conf.ANON_READ { // select on only nodes with no read rights set q["acl.read"] = []string{} } else { cx.RespondWithErrorMessage(e.NoAuth, http.StatusUnauthorized) return } } // Gather params to make db query. Do not include the // following list. skip := map[string]int{"limit": 1, "skip": 1, "query": 1} if query.Has("query") { for key, val := range query.All() { _, s := skip[key] if !s { q[fmt.Sprintf("attributes.%s", key)] = val[0] } } } // Limit and skip. Set default if both are not specified if query.Has("limit") || query.Has("skip") { var lim, off int if query.Has("limit") { lim, _ = strconv.Atoi(query.Value("limit")) } else { lim = 100 } if query.Has("skip") { off, _ = strconv.Atoi(query.Value("skip")) } else { off = 0 } // Get nodes from db err := nodes.GetAllLimitOffset(q, lim, off) if err != nil { log.Error("err " + err.Error()) cx.RespondWithError(http.StatusBadRequest) return } } else { // Get nodes from db err := nodes.GetAll(q) if err != nil { log.Error("err " + err.Error()) cx.RespondWithError(http.StatusBadRequest) return } } cx.RespondWithData(nodes) return }
// GET: /node // To do: // - Iterate node queries func (cr *NodeController) ReadMany(cx *goweb.Context) { // Log Request and check for Auth LogRequest(cx.Request) u, err := AuthenticateRequest(cx.Request) if err != nil { // No Auth is not damning. Other errors are probably a dead db connection if err.Error() != e.NoAuth { if err.Error() == e.MongoDocNotFound { cx.RespondWithErrorMessage("Invalid username or password", http.StatusBadRequest) return } else { fmt.Println("Error at Auth:", err.Error()) cx.RespondWithError(http.StatusInternalServerError) return } } } // Gather query params query := &Query{list: cx.Request.URL.Query()} // Setup query and nodes objects q := bson.M{} nodes := new(store.Nodes) if u != nil { // Admin sees all if !u.Admin { q["$or"] = []bson.M{bson.M{"acl.read": []string{}}, bson.M{"acl.read": u.Uuid}} } } else { // select on only nodes with no read rights set q["acl.read"] = []string{} } // Gather params to make db query. Do not include the // following list. skip := map[string]int{"limit": 1, "skip": 1, "query": 1} if query.Has("query") { for key, val := range query.All() { _, s := skip[key] if !s { q[fmt.Sprintf("attributes.%s", key)] = val[0] } } } // Limit and skip. Set default if both are not specified if query.Has("limit") || query.Has("skip") { var lim, off int if query.Has("limit") { lim, _ = strconv.Atoi(query.Value("limit")) } else { lim = 100 } if query.Has("skip") { off, _ = strconv.Atoi(query.Value("skip")) } else { off = 0 } // Get nodes from db err := nodes.GetAllLimitOffset(q, lim, off) if err != nil { fmt.Println("err", err.Error()) cx.RespondWithError(http.StatusBadRequest) return } } else { // Get nodes from db err := nodes.GetAll(q) if err != nil { fmt.Println("err", err.Error()) cx.RespondWithError(http.StatusBadRequest) return } } cx.RespondWithData(nodes) return }