Compress JSON, CSS and Javascript responses
This commit is contained in:
parent
a291d8a38b
commit
9f6533ece9
14 changed files with 41 additions and 35 deletions
|
@ -83,7 +83,7 @@ func (c *Controller) GetCategories(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
json.OK(w, categories)
|
json.OK(w, r, categories)
|
||||||
}
|
}
|
||||||
|
|
||||||
// RemoveCategory is the API handler to remove a category.
|
// RemoveCategory is the API handler to remove a category.
|
||||||
|
|
|
@ -48,7 +48,7 @@ func (c *Controller) GetFeedEntry(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
json.OK(w, entry)
|
json.OK(w, r, entry)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetEntry is the API handler to get a single entry.
|
// GetEntry is the API handler to get a single entry.
|
||||||
|
@ -73,7 +73,7 @@ func (c *Controller) GetEntry(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
json.OK(w, entry)
|
json.OK(w, r, entry)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetFeedEntries is the API handler to get all feed entries.
|
// GetFeedEntries is the API handler to get all feed entries.
|
||||||
|
@ -132,7 +132,7 @@ func (c *Controller) GetFeedEntries(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
json.OK(w, &entriesResponse{Total: count, Entries: entries})
|
json.OK(w, r, &entriesResponse{Total: count, Entries: entries})
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetEntries is the API handler to fetch entries.
|
// GetEntries is the API handler to fetch entries.
|
||||||
|
@ -184,7 +184,7 @@ func (c *Controller) GetEntries(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
json.OK(w, &entriesResponse{Total: count, Entries: entries})
|
json.OK(w, r, &entriesResponse{Total: count, Entries: entries})
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetEntryStatus is the API handler to change the status of entries.
|
// SetEntryStatus is the API handler to change the status of entries.
|
||||||
|
|
|
@ -146,7 +146,7 @@ func (c *Controller) GetFeeds(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
json.OK(w, feeds)
|
json.OK(w, r, feeds)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetFeed is the API handler to get a feed.
|
// GetFeed is the API handler to get a feed.
|
||||||
|
@ -168,7 +168,7 @@ func (c *Controller) GetFeed(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
json.OK(w, feed)
|
json.OK(w, r, feed)
|
||||||
}
|
}
|
||||||
|
|
||||||
// RemoveFeed is the API handler to remove a feed.
|
// RemoveFeed is the API handler to remove a feed.
|
||||||
|
|
|
@ -37,7 +37,7 @@ func (c *Controller) FeedIcon(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
json.OK(w, &feedIcon{
|
json.OK(w, r, &feedIcon{
|
||||||
ID: icon.ID,
|
ID: icon.ID,
|
||||||
MimeType: icon.MimeType,
|
MimeType: icon.MimeType,
|
||||||
Data: icon.DataURL(),
|
Data: icon.DataURL(),
|
||||||
|
|
|
@ -36,5 +36,5 @@ func (c *Controller) GetSubscriptions(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
json.OK(w, subscriptions)
|
json.OK(w, r, subscriptions)
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@ func (c *Controller) CurrentUser(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
json.OK(w, user)
|
json.OK(w, r, user)
|
||||||
}
|
}
|
||||||
|
|
||||||
// CreateUser is the API handler to create a new user.
|
// CreateUser is the API handler to create a new user.
|
||||||
|
@ -119,7 +119,7 @@ func (c *Controller) Users(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
|
|
||||||
users.UseTimezone(ctx.UserTimezone())
|
users.UseTimezone(ctx.UserTimezone())
|
||||||
json.OK(w, users)
|
json.OK(w, r, users)
|
||||||
}
|
}
|
||||||
|
|
||||||
// UserByID is the API handler to fetch the given user by the ID.
|
// UserByID is the API handler to fetch the given user by the ID.
|
||||||
|
@ -148,7 +148,7 @@ func (c *Controller) UserByID(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
|
|
||||||
user.UseTimezone(ctx.UserTimezone())
|
user.UseTimezone(ctx.UserTimezone())
|
||||||
json.OK(w, user)
|
json.OK(w, r, user)
|
||||||
}
|
}
|
||||||
|
|
||||||
// UserByUsername is the API handler to fetch the given user by the username.
|
// UserByUsername is the API handler to fetch the given user by the username.
|
||||||
|
@ -171,7 +171,7 @@ func (c *Controller) UserByUsername(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
json.OK(w, user)
|
json.OK(w, r, user)
|
||||||
}
|
}
|
||||||
|
|
||||||
// RemoveUser is the API handler to remove an existing user.
|
// RemoveUser is the API handler to remove an existing user.
|
||||||
|
|
|
@ -155,7 +155,7 @@ func (c *Controller) Handler(w http.ResponseWriter, r *http.Request) {
|
||||||
case r.FormValue("mark") == "group":
|
case r.FormValue("mark") == "group":
|
||||||
c.handleWriteGroups(w, r)
|
c.handleWriteGroups(w, r)
|
||||||
default:
|
default:
|
||||||
json.OK(w, newBaseResponse())
|
json.OK(w, r, newBaseResponse())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -203,7 +203,7 @@ func (c *Controller) handleGroups(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
result.FeedsGroups = c.buildFeedGroups(feeds)
|
result.FeedsGroups = c.buildFeedGroups(feeds)
|
||||||
result.SetCommonValues()
|
result.SetCommonValues()
|
||||||
json.OK(w, result)
|
json.OK(w, r, result)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -262,7 +262,7 @@ func (c *Controller) handleFeeds(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
result.FeedsGroups = c.buildFeedGroups(feeds)
|
result.FeedsGroups = c.buildFeedGroups(feeds)
|
||||||
result.SetCommonValues()
|
result.SetCommonValues()
|
||||||
json.OK(w, result)
|
json.OK(w, r, result)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -304,7 +304,7 @@ func (c *Controller) handleFavicons(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
|
|
||||||
result.SetCommonValues()
|
result.SetCommonValues()
|
||||||
json.OK(w, result)
|
json.OK(w, r, result)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -414,7 +414,7 @@ func (c *Controller) handleItems(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
|
|
||||||
result.SetCommonValues()
|
result.SetCommonValues()
|
||||||
json.OK(w, result)
|
json.OK(w, r, result)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -445,7 +445,7 @@ func (c *Controller) handleUnreadItems(w http.ResponseWriter, r *http.Request) {
|
||||||
var result unreadResponse
|
var result unreadResponse
|
||||||
result.ItemIDs = strings.Join(itemIDs, ",")
|
result.ItemIDs = strings.Join(itemIDs, ",")
|
||||||
result.SetCommonValues()
|
result.SetCommonValues()
|
||||||
json.OK(w, result)
|
json.OK(w, r, result)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -477,7 +477,7 @@ func (c *Controller) handleSavedItems(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
result := &savedResponse{ItemIDs: strings.Join(itemsIDs, ",")}
|
result := &savedResponse{ItemIDs: strings.Join(itemsIDs, ",")}
|
||||||
result.SetCommonValues()
|
result.SetCommonValues()
|
||||||
json.OK(w, result)
|
json.OK(w, r, result)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -534,7 +534,7 @@ func (c *Controller) handleWriteItems(w http.ResponseWriter, r *http.Request) {
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
json.OK(w, newBaseResponse())
|
json.OK(w, r, newBaseResponse())
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -575,7 +575,7 @@ func (c *Controller) handleWriteFeeds(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
json.OK(w, newBaseResponse())
|
json.OK(w, r, newBaseResponse())
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -616,7 +616,7 @@ func (c *Controller) handleWriteGroups(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
json.OK(w, newBaseResponse())
|
json.OK(w, r, newBaseResponse())
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -9,14 +9,14 @@ import (
|
||||||
"errors"
|
"errors"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/miniflux/miniflux/http/response"
|
||||||
"github.com/miniflux/miniflux/logger"
|
"github.com/miniflux/miniflux/logger"
|
||||||
)
|
)
|
||||||
|
|
||||||
// OK sends a JSON response with the status code 200.
|
// OK sends a JSON response with the status code 200.
|
||||||
func OK(w http.ResponseWriter, v interface{}) {
|
func OK(w http.ResponseWriter, r *http.Request, v interface{}) {
|
||||||
commonHeaders(w)
|
commonHeaders(w)
|
||||||
w.WriteHeader(http.StatusOK)
|
response.Compress(w, r, toJSON(v))
|
||||||
w.Write(toJSON(v))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Created sends a JSON response with the status code 201.
|
// Created sends a JSON response with the status code 201.
|
||||||
|
|
|
@ -23,7 +23,7 @@ func NotModified(w http.ResponseWriter) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cache returns a response with caching headers.
|
// Cache returns a response with caching headers.
|
||||||
func Cache(w http.ResponseWriter, r *http.Request, mimeType, etag string, content []byte, duration time.Duration) {
|
func Cache(w http.ResponseWriter, r *http.Request, mimeType, etag string, data []byte, duration time.Duration) {
|
||||||
w.Header().Set("Content-Type", mimeType)
|
w.Header().Set("Content-Type", mimeType)
|
||||||
w.Header().Set("ETag", etag)
|
w.Header().Set("ETag", etag)
|
||||||
w.Header().Set("Cache-Control", "public")
|
w.Header().Set("Cache-Control", "public")
|
||||||
|
@ -31,8 +31,14 @@ func Cache(w http.ResponseWriter, r *http.Request, mimeType, etag string, conten
|
||||||
|
|
||||||
if etag == r.Header.Get("If-None-Match") {
|
if etag == r.Header.Get("If-None-Match") {
|
||||||
w.WriteHeader(http.StatusNotModified)
|
w.WriteHeader(http.StatusNotModified)
|
||||||
} else {
|
return
|
||||||
w.Write(content)
|
}
|
||||||
|
|
||||||
|
switch mimeType {
|
||||||
|
case "text/javascript; charset=utf-8", "text/css; charset=utf-8":
|
||||||
|
Compress(w, r, data)
|
||||||
|
default:
|
||||||
|
w.Write(data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,13 +20,13 @@ func (m *Middleware) FeverAuth(next http.Handler) http.Handler {
|
||||||
user, err := m.store.UserByFeverToken(apiKey)
|
user, err := m.store.UserByFeverToken(apiKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("[Middleware:Fever] %v", err)
|
logger.Error("[Middleware:Fever] %v", err)
|
||||||
json.OK(w, map[string]int{"api_version": 3, "auth": 0})
|
json.OK(w, r, map[string]int{"api_version": 3, "auth": 0})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if user == nil {
|
if user == nil {
|
||||||
logger.Info("[Middleware:Fever] Fever authentication failure")
|
logger.Info("[Middleware:Fever] Fever authentication failure")
|
||||||
json.OK(w, map[string]int{"api_version": 3, "auth": 0})
|
json.OK(w, r, map[string]int{"api_version": 3, "auth": 0})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -49,5 +49,5 @@ func (c *Controller) FetchContent(w http.ResponseWriter, r *http.Request) {
|
||||||
entry.Content = sanitizer.Sanitize(entry.URL, content)
|
entry.Content = sanitizer.Sanitize(entry.URL, content)
|
||||||
c.store.UpdateEntryContent(entry)
|
c.store.UpdateEntryContent(entry)
|
||||||
|
|
||||||
json.Created(w, map[string]string{"content": entry.Content})
|
json.OK(w, r, map[string]string{"content": entry.Content})
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,5 +28,5 @@ func (c *Controller) ToggleBookmark(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
json.OK(w, "OK")
|
json.OK(w, r, "OK")
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,5 +35,5 @@ func (c *Controller) UpdateEntriesStatus(w http.ResponseWriter, r *http.Request)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
json.OK(w, "OK")
|
json.OK(w, r, "OK")
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,5 +50,5 @@ func (c *Controller) WebManifest(w http.ResponseWriter, r *http.Request) {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
json.OK(w, manifest)
|
json.OK(w, r, manifest)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue