Documentation ¶
Overview ¶
Common functions, constants, and structures package for the backend.
Index ¶
- Constants
- func FlushUserData(users *map[string]models.User, callerID string) *map[string]models.User
- func UnmarshalRequestData[T any](r *http.Request, model *T) error
- func WriteResponse(w http.ResponseWriter, resp interface{}, code int) error
- type APIResponse
- type Logger
- func (l *Logger) Error(err error) *Logger
- func (l *Logger) Log() *Logger
- func (l *Logger) Msg(msg string) *Logger
- func (l *Logger) Payload(pl interface{}) *Logger
- func (l *Logger) Println(msg string, code int) bool
- func (l *Logger) RemovePrefix() *Logger
- func (l *Logger) SetPrefix(prefix string) *Logger
- func (l *Logger) Status(code int) *Logger
- func (l *Logger) Write(w http.ResponseWriter)
Constants ¶
const ( HDR_PAGE_NO = "X-Page-No" HDR_HIDE_REPLIES = "X-Hide-Replies" HDR_DUMP_TOKEN = "X-Dump-Token" DHR_API_TOKEN = "X-API-Token" )
Header names.
const ( // Auth-related error messages ERR_AUTH_FAIL = "wrong credentials entered, or such user does not exist" ERR_AUTH_ACC_TOKEN_FAIL = "could not generate new access token" ERR_AUTH_REF_TOKEN_FAIL = "could not generate new refresh token" ERR_TOKEN_SAVE_FAIL = "could not save new token to database" // Generic error messages ERR_CALLER_BLANK = "callerID cannot be empty" ERR_CALLER_FAIL = "could not get caller's name" ERR_CALLER_NOT_FOUND = "caller not found in the database" ERR_USER_NOT_FOUND = "user not found in the database" ERR_PAGENO_INCORRECT = "pageNo has to be specified as integer/number" ERR_PAGE_EXPORT_NIL = "could not get more pages, one exported map is nil!" ERR_INPUT_DATA_FAIL = "could not process the input data, try again" ERR_API_TOKEN_BLANK = "blank API token sent" ERR_API_TOKEN_INVALID = "invalid API token sent" ERR_NO_SERVER_SECRET = "missing the server's secret (APP_PEPPER)" // Image-processing-related error messages ERR_IMG_DECODE_FAIL = "image: could not decode to byte stream" ERR_IMG_ENCODE_FAIL = "image: could not re-encode" ERR_IMG_ORIENTATION_FAIL = "image: could not fix the orientation" ERR_IMG_GIF_TO_WEBP_FAIL = "image: could not convert GIF to WebP" ERR_IMG_UNKNOWN_TYPE = "image: unsupported format entered" ERR_IMG_SAVE_FILE_FAIL = "image: could not save to a file" ERR_IMG_THUMBNAIL_FAIL = "image: could not re-encode the thumbnail" // Poll-related error messages ERR_POLL_AUTHOR_MISMATCH = "you cannot post a foreigner's poll" ERR_POLL_SAVE_FAIL = "could not save the poll, try again" ERR_POLL_POST_FAIL = "could not save a post about the new poll" ERR_POLL_NOT_FOUND = "such poll not found in the database (may be deleted)" ERR_POLL_SELF_VOTE = "you cannot vote in yours own poll" ERR_POLL_EXISTING_VOTE = "you have already voted on such poll" ERR_POLL_DELETE_FOREIGN = "you cannot delete a foreigner's poll" ERR_POLL_DELETE_FAIL = "could not delete the poll, try again" ERR_POLLID_BLANK = "pollID param is required" ERR_POLL_INVALID_VOTE_COUNT = "you can pass only one vote per poll" ERR_POLL_DUPLICIT_OPTIONS = "all options (inc. the very question) have to be unique" // Post-related error messages ERR_POST_BLANK = "post has got no content" ERR_POSTER_INVALID = "you can add yours posts only" ERR_POST_SAVE_FAIL = "could not save the post, try again" ERR_POST_NOT_FOUND = "could not find the post (may be deleted)" ERR_POST_SELF_RATE = "you cannot rate your own posts" ERR_POST_UPDATE_FOREIGN = "you cannot update a foreigner's post" ERR_POST_DELETE_FOREIGN = "you cannot delete a foreigner's post" ERR_POST_DELETE_FAIL = "could not delete the post, try again" ERR_POST_DELETE_THUMB = "could not delete associated thumbnail" ERR_POST_DELETE_FULLIMG = "could not delete associated full image" ERR_POSTID_BLANK = "postID param is required" ERR_HASHTAG_BLANK = "hashtag param is required" // Push-related (non-)error messages MSG_WEBPUSH_GW_RESPONSE = "push goroutine: webpush gateway:" ERR_DEVICE_NOT_FOUND = "devices not found in the database" ERR_SUBSCRIPTION_SAVE_FAIL = "could not save the subscription to database" ERR_SUBSCRIPTION_NOT_FOUND = "such subscription not found in the database" ERR_DEVICE_SUBSCRIBED_ALREADY = "this device has been already registered" ERR_PUSH_SELF_NOTIF = "will not notify oneself" ERR_PUSH_DISABLED_NOTIF = "will not notify original poster" ERR_PUSH_UUID_BLANK = "device's UUID cannot be sent empty" ERR_PUSH_BODY_COMPOSE_FAIL = "failed to compose the notification body" ERR_NOTIFICATION_NOT_SENT = "notification could not be sent" ERR_NOTIFICATION_RESP_BODY_FAIL = "failed to read the notification's response body" ERR_DEVICE_LIST_UPDATE_FAIL = "failed to save the updated device list" ERR_UUID_BLANK = "uuid param is required" // User-related error messages ERR_USER_DELETE_FOREIGN = "you cannot delete a foreigner's account" ERR_USER_DELETE_FAIL = "could not delete the user from user database, try again" ERR_SUBSCRIPTION_DELETE_FAIL = "could not delete the user from subscriptions, try again" ERR_MISSING_IMG_CONTENT = "no image data received, try again" ERR_REGISTRATION_DISABLED = "registration is disabled at the moment" ERR_RESTRICTED_NICKNAME = "this nickname is restricted" ERR_USER_NICKNAME_TAKEN = "this nickname has been already taken" ERR_NICKNAME_CHARSET_MISMATCH = "the nickname can only consist of characters a-z, A-Z and numbers 0-9" ERR_NICKNAME_TOO_LONG_SHORT = "nickname is too long (>12 runes), or too short (<3 runes)" ERR_WRONG_EMAIL_FORMAT = "wrong format of the e-mail address" ERR_EMAIL_ALREADY_USED = "this e-mail address has been already used" ERR_USER_SAVE_FAIL = "could not save new user to database" ERR_POSTREG_POST_SAVE_FAIL = "could not save a new post about the new user's addition" ERR_USER_UPDATE_FOREIGN = "could not update a foreign's account" ERR_USERID_BLANK = "userID param is required" ERR_USER_UPDATE_FAIL = "could not update the user in database" ERR_USER_PASSPHRASE_FOREIGN = "you can change yours passphrase only" ERR_PASSPHRASE_REQ_INCOMPLETE = "passphrase change request is partly or completely empty" ERR_PASSPHRASE_CURRENT_WRONG = "current passphrase sent is wrong" ERR_NO_EMAIL_MATCH = "could not find a match for such e-mail address" ERR_MAIL_COMPOSITION_FAIL = "could not compose the mail properly, try again" ERR_MAIL_NOT_SENT = "could not send the mail, try again" ERR_REQUEST_UUID_BLANK = "could not process blank request's UUID" ERR_REQUEST_EMAIL_BLANK = "could not process blank request's e-mail address" ERR_REQUEST_UUID_INVALID = "entered UUID is invalid" ERR_REQUEST_UUID_EXPIRED = "entered UUID has expired" ERR_REQUEST_DELETE_FAIL = "could not delete the request from database, try again" ERR_PASSPHRASE_UPDATE_FAIL = "could not update the passphrase in database, try again" ERR_TARGET_USER_NOT_PRIVATE = "target user is not private, no need to file new follow requests" ERR_USER_AVATAR_FOREIGN = "you can update yours avatar only" ERR_ACTIVATION_MAIL_FAIL = "the activation mail was not sent, try again" ERR_USER_NOT_ACTIVATED = "user has not been activated yet, check your mail inbox" )
(Non-)Error messages.
const ( // Localhost as the IPv4 address. LOCALHOST4 = "127.0.0.1" // Localhost as the IPv6 address. LOCALHOST6 = "::1" )
const ( // Refresh token's TTL. TOKEN_TTL = time.Hour * 168 * 4 )
Token consts.
Variables ¶
This section is empty.
Functions ¶
func FlushUserData ¶ added in v0.42.1
helper function to flush sensitive user data in the export for response
func UnmarshalRequestData ¶
UnmarshalRequestData is a helper function that combines reading the request body and data structure unmarshalling from a JSON stream.
func WriteResponse ¶ added in v0.41.0
func WriteResponse(w http.ResponseWriter, resp interface{}, code int) error
Types ¶
type APIResponse ¶ added in v0.42.0
type APIResponse struct { // Common fields for all responses Message string `json:"message"` Timestamp int64 `json:"timestamp"` // Data field for any payload Data interface{} `json:"data"` }
new generic API response schema idea
type Logger ¶
type Logger struct { // CallerID is a nickname of the user calling the API. CallerID string `json:"-"` // Code integer is a HTTP return code. Code int `json:"code" validation:"required"` // IPAddress string is basically an user's IPv4/IPv6 address (beware of proxies). IPAddress string `json:"-"` // Message string holds a custom message returned by a various HTTP handler. Message string `json:"message" validation:"required"` // Prefix stands at the start of the logger output before the very message. Prefix string `json:"-"` // Method string hold a HTTP method name. Method string `json:"method"` // Route string is the very route called by user. Route string `json:"route"` // Time property hold the actual time of the request processing. Time time.Time `json:"time" validation:"required"` // Version is the tagged version of the client's SW (compiled in). Version string `json:"version"` // WorkerName string is the name of a worker processing such request. WorkerName string `json:"worker_name" validation:"required"` // Response is a helper field to hold the prepared API response for sending. Response *APIResponse `json:"-"` // Err is a helper error field to hold the error type from the BE logging callback procedure. Err error `json:"-"` }
func NewLogger ¶
NewLogger takes the HTTP request structure in (can be nil), and the worker's name (required string) to prepare a new Logger instance. Returns a pointer to the new Logger instance.
func (*Logger) Error ¶ added in v0.42.0
Error takes an error and holds it in the Logger structure for the possible output.
func (*Logger) Msg ¶ added in v0.42.0
Msg writes the input <msg> string to the Logger struct for its following output.
func (*Logger) Payload ¶ added in v0.42.0
Payload takes and prepares the HTTP response's body payload. The input can be nil.
func (*Logger) Println ¶
Println formats the encoded Logger struct into an output string to stdin. Deprecated.
func (*Logger) RemovePrefix ¶ added in v0.44.0
func (*Logger) SetPrefix ¶ added in v0.44.0
SetPrefix sets the log's prefix according to the input <prefix> string.
func (*Logger) Status ¶ added in v0.42.0
Status writes the HTTP Status code (as integer) for the following logger output.
func (*Logger) Write ¶ added in v0.42.0
func (l *Logger) Write(w http.ResponseWriter)
Write writes the HTTP headers and sends the response to the client.