Docs, still WIP

This commit is contained in:
Philipp Heckel 2022-04-19 23:26:46 -04:00
parent 0eb511c714
commit 8900df27c9
6 changed files with 256 additions and 57 deletions

View file

@ -39,7 +39,7 @@ var (
errHTTPBadRequestAttachmentsExpiryBeforeDelivery = &errHTTP{40015, http.StatusBadRequest, "invalid request: attachment expiry before delayed delivery date", "https://ntfy.sh/docs/publish/#scheduled-delivery"}
errHTTPBadRequestWebSocketsUpgradeHeaderMissing = &errHTTP{40016, http.StatusBadRequest, "invalid request: client not using the websocket protocol", "https://ntfy.sh/docs/subscribe/api/#websockets"}
errHTTPBadRequestJSONInvalid = &errHTTP{40017, http.StatusBadRequest, "invalid request: request body must be message JSON", "https://ntfy.sh/docs/publish/#publish-as-json"}
errHTTPBadRequestActionJSONInvalid = &errHTTP{40018, http.StatusBadRequest, "invalid request: actions are invalid JSON", ""} // FIXME link
errHTTPBadRequestActionsInvalid = &errHTTP{40018, http.StatusBadRequest, "invalid request: actions are invalid format", "https://ntfy.sh/docs/publish/#user-actions"}
errHTTPNotFound = &errHTTP{40401, http.StatusNotFound, "page not found", ""}
errHTTPUnauthorized = &errHTTP{40101, http.StatusUnauthorized, "unauthorized", "https://ntfy.sh/docs/publish/#authentication"}
errHTTPForbidden = &errHTTP{40301, http.StatusForbidden, "forbidden", "https://ntfy.sh/docs/publish/#authentication"}

View file

@ -540,7 +540,7 @@ func (s *Server) parsePublishParams(r *http.Request, v *visitor, m *message) (ca
if actionsStr != "" {
m.Actions, err = parseActions(actionsStr)
if err != nil {
return false, false, "", false, errHTTPBadRequestActionJSONInvalid
return false, false, "", false, errHTTPBadRequestActionsInvalid
}
}
unifiedpush = readBoolParam(r, false, "x-unifiedpush", "unifiedpush", "up") // see GET too!

View file

@ -34,8 +34,6 @@ type message struct {
Encoding string `json:"encoding,omitempty"` // empty for raw UTF-8, or "base64" for encoded bytes
}
// FIXME persist actions
type attachment struct {
Name string `json:"name"`
Type string `json:"type,omitempty"`

View file

@ -46,6 +46,7 @@ func readQueryParam(r *http.Request, names ...string) string {
}
func parseActions(s string) (actions []*action, err error) {
// Parse JSON or simple format
s = strings.TrimSpace(s)
if strings.HasPrefix(s, "[") {
actions, err = parseActionsFromJSON(s)
@ -55,14 +56,23 @@ func parseActions(s string) (actions []*action, err error) {
if err != nil {
return nil, err
}
// Add ID field
for i := range actions {
actions[i].ID = util.RandomString(actionIDLength)
if !util.InStringList([]string{"view", "broadcast", "http"}, actions[i].Action) {
return nil, fmt.Errorf("cannot parse actions: action '%s' unknown", actions[i].Action)
} else if actions[i].Label == "" {
}
// Validate
for _, action := range actions {
if !util.InStringList([]string{"view", "broadcast", "http"}, action.Action) {
return nil, fmt.Errorf("cannot parse actions: action '%s' unknown", action.Action)
} else if action.Label == "" {
return nil, fmt.Errorf("cannot parse actions: label must be set")
} else if util.InStringList([]string{"view", "http"}, action.Action) && action.URL != "" {
return nil, fmt.Errorf("parameter 'url' is required for action '%s'", action.Action)
}
}
return actions, nil
}