Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var ErrCaptchaFailed = errors.New("incorrect captcha")
View Source
var ErrInternal = errors.New("internal error")
View Source
var ErrThreadClosed = errors.New("thread is closed")
View Source
var ErrThrottle = errors.New("too frequent requests")
Client is sending too many requests in short timeframe
Functions ¶
func EncodePath ¶
Panics if length of string representation of any path element is more than 35 characters
func EncodePathComponent ¶
Types ¶
type Comment ¶
type Comment struct {
ID IDType `json:"id" db:"id"` // unique id of the comment
ThreadID IDType `json:"tid" db:"tid"` // unique id of the thread this comment belongs to
Path string `json:"path" db:"path"` // materialized path of this comment
Body string `json:"body" db:"body"` // body of the comment
RemoteAddr string `json:"remote_addr" db:"remote_addr"` // Remote address (IP) of author of this comment
Likes int64 `json:"likes" db:"likes"` // Number of likes this comment received
Dislikes int64 `json:"dislikes" db:"dislikes"` // number of dislikes this comment received
Depth int32 `json:"depth" db:"depth"`
Created *time.Time `json:"created" db:"created"` // when this comment was created
Modified *time.Time `json:"modified" db:"modified"` // when this comment was modified
Author *string `json:"author,omitempty" db:"author"` // name of author of this comment as left by author
Email *string `json:"email,omitempty" db:"email"` // email left by author of this comment
Website *string `json:"website,omitempty" db:"website"` // url to website leaved by author if any
Voters []byte `json:"-" db:"voters"` // binary representation of remote ip for the voters on the post
Parent *IDType `json:"parent" db:"parent"` // id of the parent comment
}
Comment in the thread
type Config ¶
type Config struct {
RequireEmail bool // Specifies if email is required for commenting
MaxThreadDepth uint8 // Configures maximum allowed thread depth
ReCaptchaEnabled bool // If ReCaptcha is enabled
ReCaptchaApiKey string // Key for the ReCaptcha
ReCaptchaApiSecret string // Secret for ReCaptcha
}
Config specifying different settings of running instance
type Storage ¶
type Storage interface {
// Adds new comment and returns new comment with all storage-related fields populated
AddComment(thread *Thread, parent *Comment, comment *Comment) (*Comment, error)
// Delete comment
DeleteComment(*Comment) (bool, error)
// Retrieve comment by id
GetComment(IDType) (*Comment, error)
// Retrieve thread by uri
GetThread(string) (*Thread, error)
// Creates thread
CreateThread(uri, title string) (*Thread, error)
// Retrieve comments for thread at specific URI
GetThreadedComments(uri *string) (*ThreadedComments, error)
LikeComment(idType IDType) error
DislikeComment(idType IDType) error
}
Storage handles storing/retrieving of comments and does not do any access-related checks
func MustOpenSqliteStorage ¶
type Thread ¶
type Thread struct {
ID IDType `json:"id" db:"id"` // unique id of the comment
URI string `json:"uri" db:"uri"` // uri for this comment thread
Title string `json:"title" db:"title"` // title of the comment
}
Thread represents an ongoing discussion for specific url. Each comment belongs to thread
type ThreadedComments ¶
Click to show internal directories.
Click to hide internal directories.