Remember lease_seconds when set

This commit is contained in:
Peter Stuifzand 2018-07-07 17:56:28 +02:00
parent c6902909b1
commit 471ff2c564
2 changed files with 51 additions and 7 deletions

View File

@ -19,6 +19,7 @@ type HubBackend interface {
CreateFeed(url, channel string) (int64, error) CreateFeed(url, channel string) (int64, error)
GetSecret(id int64) string GetSecret(id int64) string
UpdateFeed(feedID int64, contentType string, body io.Reader) error UpdateFeed(feedID int64, contentType string, body io.Reader) error
FeedSetLeaseSeconds(feedID int64, leaseSeconds int64) error
} }
type incomingHandler struct { type incomingHandler struct {
@ -37,10 +38,31 @@ func (h *incomingHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
log.Println(r.URL.Query()) log.Println(r.URL.Query())
log.Println(r.PostForm) log.Println(r.PostForm)
// find feed
matches := urlRegex.FindStringSubmatch(r.URL.Path)
feed, err := strconv.ParseInt(matches[1], 10, 64)
if err != nil {
fmt.Fprint(w, err)
}
if r.Method == http.MethodGet { if r.Method == http.MethodGet {
values := r.URL.Query() values := r.URL.Query()
// check // check
if leaseStr := values.Get("hub.lease_seconds"); leaseStr != "" {
// update lease_seconds
leaseSeconds, err := strconv.ParseInt(leaseStr, 10, 64)
if err != nil {
http.Error(w, fmt.Sprintf("error in hub.lease_seconds format %q: %s", leaseSeconds, err), 400)
return
}
err = h.Backend.FeedSetLeaseSeconds(feed, leaseSeconds)
if err != nil {
http.Error(w, fmt.Sprintf("error in while setting hub.lease_seconds: %s", err), 400)
return
}
}
verify := values.Get("hub.challenge") verify := values.Get("hub.challenge")
fmt.Fprint(w, verify) fmt.Fprint(w, verify)
@ -53,13 +75,6 @@ func (h *incomingHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
return return
} }
// find feed
matches := urlRegex.FindStringSubmatch(r.URL.Path)
feed, err := strconv.ParseInt(matches[1], 10, 64)
if err != nil {
fmt.Fprint(w, err)
}
// find secret // find secret
secret := h.Backend.GetSecret(feed) secret := h.Backend.GetSecret(feed)
if secret == "" { if secret == "" {

View File

@ -131,6 +131,35 @@ func (h *hubIncomingBackend) UpdateFeed(feedID int64, contentType string, body i
return err return err
} }
func (h *hubIncomingBackend) FeedSetLeaseSeconds(feedID int64, leaseSeconds int64) error {
conn := pool.Get()
defer conn.Close()
log.Printf("updating feed %d lease_seconds", feedID)
args := redis.Args{}.Add(fmt.Sprintf("feed:%d", feedID), "lease_seconds", leaseSeconds)
conn.Do("HSET", args...)
return nil
}
func (h *hubIncomingBackend) run() error {
ticker := time.NewTicker(10 * time.Minute)
quit := make(chan struct{})
go func() {
for {
select {
case <-ticker.C:
case <-quit:
ticker.Stop()
return
}
}
}()
return nil
}
func newPool(addr string) *redis.Pool { func newPool(addr string) *redis.Pool {
return &redis.Pool{ return &redis.Pool{
MaxIdle: 3, MaxIdle: 3,