func (e roomsEndpoint) getMessages(req *http.Request, params httprouter.Params) interface{} { room, user, err := e.getRoomAndUser(req, params) if err != nil { return err } var from *types.StreamToken var to *types.StreamToken query := req.URL.Query() fromStr := query.Get("from") toStr := query.Get("to") dir := query.Get("dir") limitStr := query.Get("limit") if fromStr != "" { token, err := types.ParseStreamToken(fromStr) if err != nil { return types.BadQueryError(err.Error()) } from = &token } if toStr != "" { token, err := types.ParseStreamToken(toStr) if err != nil { return types.BadQueryError(err.Error()) } to = &token } if dir == "b" { token := types.NewStreamToken(0, 0, 0) to = &token } var limit uint64 var parseErr error if limitStr == "" { limit = 10 //TODO: make configurable } else { limit, parseErr = strconv.ParseUint(limitStr, 10, 32) if parseErr != nil { return types.BadQueryError(parseErr.Error()) } if limit > 100 { limit = 100 //TODO: make configurable } } eventRange, err := e.eventService.Messages(user, room, from, to, uint(limit)) log.Println("TO", to, eventRange) if err != nil { return err } return eventRange }
func (e roomsEndpoint) doInitialSync(req *http.Request, params httprouter.Params) interface{} { room, user, err := e.getRoomAndUser(req, params) if err != nil { return err } query := req.URL.Query() limitStr := query.Get("limit") var limit uint64 var parseErr error if limitStr == "" { limit = 10 //TODO: make configurable } else { limit, parseErr = strconv.ParseUint(limitStr, 10, 32) if parseErr != nil { return types.BadQueryError(parseErr.Error()) } if limit > 100 { limit = 100 //TODO: make configurable } } roomSync, err := e.syncService.RoomSync(user, room, uint(limit)) if err != nil { return err } return roomSync }
func (q urlQuery) parseStreamToken(name string) (*types.StreamToken, types.Error) { str := q.Get(name) if str == "" { return nil, nil } token, err := types.ParseStreamToken(str) if err != nil { return nil, types.BadQueryError(err.Error()) } return &token, nil }
func (q urlQuery) parseUint(name string, defaultValue uint64) (uint64, types.Error) { str := q.Get(name) if str == "" { return defaultValue, nil } value, err := strconv.ParseUint(str, 10, 64) if err != nil { return 0, types.BadQueryError(err.Error()) } return value, nil }