Bill to visitor and set TTL in response
This commit is contained in:
parent
fb2fa4c478
commit
6bfe4a9779
2 changed files with 16 additions and 1 deletions
|
@ -92,4 +92,5 @@ var (
|
|||
errHTTPInternalError = &errHTTP{50001, http.StatusInternalServerError, "internal server error", ""}
|
||||
errHTTPInternalErrorInvalidPath = &errHTTP{50002, http.StatusInternalServerError, "internal server error: invalid path", ""}
|
||||
errHTTPInternalErrorMissingBaseURL = &errHTTP{50003, http.StatusInternalServerError, "internal server error: base-url must be be configured for this feature", "https://ntfy.sh/docs/config/"}
|
||||
errHTTPWontStoreMessage = &errHTTP{50701, http.StatusInsufficientStorage, "topic is inactive; no device available to recieve message", ""}
|
||||
)
|
||||
|
|
|
@ -372,6 +372,7 @@ func (s *Server) handleError(w http.ResponseWriter, r *http.Request, v *visitor,
|
|||
}
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.Header().Set("Access-Control-Allow-Origin", s.config.AccessControlAllowOrigin) // CORS, allow cross-origin requests
|
||||
w.Header().Set("TTL", "0") // if message is not being stored because of an error, tell them
|
||||
w.WriteHeader(httpErr.HTTPCode)
|
||||
io.WriteString(w, httpErr.JSON()+"\n")
|
||||
}
|
||||
|
@ -605,6 +606,14 @@ func (s *Server) handlePublishWithoutResponse(r *http.Request, v *visitor) (*mes
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
v_old := v
|
||||
if strings.HasPrefix(t.ID, subscriberBilledTopicPrefix) {
|
||||
v = t.getBillee()
|
||||
if v == nil {
|
||||
return nil, errHTTPWontStoreMessage
|
||||
}
|
||||
}
|
||||
|
||||
if !v.MessageAllowed() {
|
||||
return nil, errHTTPTooManyRequestsLimitMessages
|
||||
}
|
||||
|
@ -639,8 +648,9 @@ func (s *Server) handlePublishWithoutResponse(r *http.Request, v *visitor) (*mes
|
|||
"message_email": email,
|
||||
}).
|
||||
Debug("Received message")
|
||||
//Where should I log the original visitor vs the billing visitor
|
||||
if log.IsTrace() {
|
||||
logvrm(v, r, m).
|
||||
logvrm(v_old, r, m).
|
||||
Tag(tagPublish).
|
||||
Field("message_body", util.MaybeMarshalJSON(m)).
|
||||
Trace("Message body")
|
||||
|
@ -684,6 +694,10 @@ func (s *Server) handlePublish(w http.ResponseWriter, r *http.Request, v *visito
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
w.Header().Set("TTL", strconv.FormatInt(m.Expires-m.Time, 10)) // return how long a message will be stored for
|
||||
|
||||
// using m.Time, not time.Now() so the value isn't negative if the request is processed at a second boundary
|
||||
return s.writeJSON(w, m)
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue