Documentation
¶
Index ¶
- Constants
- Variables
- func AvailableFeatures() []string
- func BaseFromURL(uri string) string
- func ChunkTwts(twts types.Twts, chunkSize int) []types.Twts
- func CleanTwt(text string) string
- func CmdExists(cmd string) bool
- func CreateFeed(conf *Config, db Store, user *User, name string, force bool) error
- func CustomRelTime(a, b time.Time, albl, blbl string) string
- func CustomTime(then time.Time) string
- func DecodeHash(hash string) ([]byte, error)
- func DeleteFeed(db Store, user *User, feed *Feed) (err error)
- func DeleteLastTwt(conf *Config, user *User) error
- func DownloadImage(conf *Config, url string, resource, name string, opts *ImageOptions) (string, error)
- func ExtractHashFromSubject(subject string) string
- func FastHash(data []byte) string
- func FastHashFile(fn string) (string, error)
- func FastHashString(s string) string
- func FeedExists(conf *Config, username string) bool
- func FileExists(name string) bool
- func FilterTwtsAge(twts types.Twts, age, twtsPerPage int) int
- func FilterTwtsBy(twts types.Twts, f FilterFunc) (res types.Twts)
- func FirstNTwts(twts types.Twts, n int) types.Twts
- func FirstTwt(twts types.Twts) types.Twt
- func FormatForDateTime(t time.Time, timeFormat string) string
- func FormatMentionsAndTags(conf *Config, text string, format TwtTextFormat) string
- func FormatRequest(r *http.Request) string
- func FormatTwtContextFactory(conf *Config, cache *Cache, archive Archiver) func(twt types.Twt, u *User) template.HTML
- func FormatTwtFactory(conf *Config, cache *Cache, archive Archiver) func(twt types.Twt, u *User) template.HTML
- func GenerateAvatar(conf *Config, domainNick string) (image.Image, error)
- func GenerateRandomToken() string
- func GenerateWhoFollowsToken(feedurl string) string
- func GetAllFeeds(conf *Config) ([]string, error)
- func GetAllTwts(conf *Config, name string) (types.Twts, error)
- func GetArchivedFeeds(conf *Config, feed string) ([]string, error)
- func GetConvLength(conf *Config, cache *Cache, archive Archiver) func(twt types.Twt, u *User) int
- func GetExternalAvatar(conf *Config, twter types.Twter)
- func GetFeedCount(conf *Config, name string) (int, error)
- func GetForkLength(conf *Config, cache *Cache, archive Archiver) func(twt types.Twt, u *User) int
- func GetLastTwt(conf *Config, user *User) (twt types.Twt, offset int, err error)
- func GetLookupMatches(conf *Config, nick string, url string) (avatar, domain string)
- func GetMediaNamesFromText(text string) []string
- func GetRootTwtFactory(conf *Config, cache *Cache, archive Archiver) func(twt types.Twt, u *User) types.Twt
- func GetTwtConvSubjectHash(cache *Cache, archive Archiver, twt types.Twt) (string, string)
- func GroupBySubject(twt types.Twt) []string
- func GroupByTag(twt types.Twt) (res []string)
- func GroupTwtsBy(twts types.Twts, g GroupFunc) (res map[string]types.Twts)
- func HasExternalAvatarChanged(conf *Config, twter types.Twter) bool
- func HasString(a []string, x string) bool
- func HostnameFromURL(uri string) string
- func Indent(text, indent string) string
- func InitJobs(conf *Config)
- func IntPow(x, y int) int
- func IsAdminUserFactory(conf *Config) func(user *User) bool
- func IsAudio(fn string) bool
- func IsFeatureEnabled(fs *FeatureFlags, name string) bool
- func IsGifImage(fn string) bool
- func IsImage(fn string) bool
- func IsLocalURLFactory(conf *Config) func(url string) bool
- func IsSpecialFeed(feed string) bool
- func IsVideo(fn string) bool
- func LastSeenRelTime(a, b time.Time, albl, blbl string) string
- func LastSeenTime(then time.Time) string
- func LastTwt(twts types.Twts) types.Twt
- func LineCount(r io.Reader) (int, error)
- func MapStrings(xs []string, f func(s string) string) []string
- func MemoryUsage() string
- func MergeFollowers(old, new types.Followers) types.Followers
- func NewCachedFeedLookup(cache *Cache) types.FeedLookup
- func NewLocalFeedLookup(conf *Config, db Store) types.FeedLookup
- func NewMultiFeedLookup(feedLookupFns ...types.FeedLookup) types.FeedLookup
- func NewRemoteFeedLookup(conf *Config) types.FeedLookup
- func NewStats(name string) *expvar.Map
- func NewUserFollowedFeedLookup(user *User) types.FeedLookup
- func NormalizeFeedName(name string) string
- func NormalizeURL(url string) string
- func NormalizeUsername(username string) string
- func ParseArchivedFeedIds(fns []string) ([]int, error)
- func PreprocessMedia(user *User, conf *Config, u *url.URL, title, alt, renderAs string, ...) string
- func PrettyURL(uri string) string
- func ProcessImage(conf *Config, ifn string, resource, name string, opts *ImageOptions) (string, error)
- func ReceiveAudio(r io.Reader) (string, error)
- func ReceiveImage(r io.Reader) (string, error)
- func ReceiveVideo(r io.Reader) (string, error)
- func RedirectRefererURL(r *http.Request, conf *Config, defaultURL string) string
- func RemoveString(xs []string, e string) []string
- func RenderAudio(conf *Config, uri, title, renderAs string, full bool) string
- func RenderCSS(css string) (template.CSS, error)
- func RenderHTML(tpl string, ctx *Context) (string, error)
- func RenderImage(user *User, conf *Config, uri, caption, alt, renderAs string, full bool) string
- func RenderLogo(logo string, podName string) (template.HTML, error)
- func RenderPlainText(tpl string, ctx *Context) (string, error)
- func RenderVideo(conf *Config, uri, title, renderAs string, full bool) string
- func ReplaceExt(fn, newExt string) string
- func RequestGemini(conf *Config, uri string) (*gemini.Response, error)
- func RequestGopher(conf *Config, uri string) (*gopher.Response, error)
- func RequestHTTP(conf *Config, method, url string, headers http.Header) (*http.Response, error)
- func ResizeGif(srcFile string, width int, height int) (*gif.GIF, error)
- func ResourceExists(conf *Config, url string) bool
- func RotateFeed(conf *Config, feed string) error
- func RunCmd(timeout time.Duration, command string, args ...string) error
- func SafeParseInt(s string, d int) int
- func SaveFeedSources(feedsources *FeedSources, path string) error
- func SaveGif(gifImg *gif.GIF, desFile string) error
- func SendCandidatesForDeletionEmail(conf *Config, candidates []DeletionCandidate) error
- func SendEmail(conf *Config, recipients []string, replyTo, subject string, body string) error
- func SendMagicLinkAuthEmail(conf *Config, user *User, email, token string) error
- func SendNewUserEmail(conf *Config, username string) error
- func SendPasswordResetEmail(conf *Config, user *User, email, token string) error
- func SendReportAbuseEmail(conf *Config, nick, url, name, email, category, message string) error
- func SendSupportRequestEmail(conf *Config, name, email, subject, message string) error
- func Slugify(uri string) string
- func StoreUploadedImage(conf *Config, r io.Reader, resource, name string, opts *ImageOptions) (string, error)
- func StringKeys(kv map[string]string) []string
- func StringValues(kv map[string]string) []string
- func TextWithEllipsis(text string, maxLength int) string
- func TranscodeAudio(conf *Config, ifn string, resource, name string, opts *AudioOptions) (string, error)
- func TranscodeVideo(conf *Config, ifn string, resource, name string, opts *VideoOptions) (string, error)
- func URLForAvatar(baseURL, username, avatarHash string) string
- func URLForConvFactory(conf *Config, cache *Cache, archive Archiver) func(twt types.Twt) string
- func URLForExternalAvatar(conf *Config, uri string) string
- func URLForExternalProfile(conf *Config, nick, uri string) string
- func URLForForkFactory(conf *Config, cache *Cache, archive Archiver) func(twt types.Twt) string
- func URLForMedia(baseURL, name string) string
- func URLForPage(baseURL, page string) string
- func URLForRootConvFactory(conf *Config, cache *Cache, archive Archiver) func(twt types.Twt) string
- func URLForTag(baseURL, tag string) string
- func URLForTask(baseURL, uuid string) string
- func URLForTwt(baseURL, hash string) string
- func URLForUser(baseURL, username string) string
- func URLForWhoFollows(baseURL string, feed types.FetchFeedRequest, feedFollowers int) string
- func UniqStrings(xs []string) []string
- func UniqTwts(twts types.Twts) (res types.Twts)
- func UniqueKeyFor(kv map[string]string, k string) string
- func UnparseTwtFactory(conf *Config) func(twt types.Twt) string
- func UserURL(url string) string
- func ValidateFeed(conf *Config, nick, url string) (types.TwtFile, error)
- func ValidateFeedName(path string, name string) error
- func ValidateIndieRedirectURL(clientID, redirectURI string) error
- func ValidateUsername(username string) error
- func WebMention(target, source string) error
- type API
- func (a *API) AuthEndpoint() httprouter.Handle
- func (a *API) ConversationEndpoint() httprouter.Handle
- func (a *API) CreateToken(user *User, r *http.Request) (*Token, error)
- func (a *API) DiscoverEndpoint() httprouter.Handle
- func (a *API) ExternalProfileEndpoint() httprouter.Handle
- func (a *API) FetchTwtsEndpoint() httprouter.Handle
- func (a *API) FollowEndpoint() httprouter.Handle
- func (a *API) MentionsEndpoint() httprouter.Handle
- func (a *API) MuteEndpoint() httprouter.Handle
- func (a *API) OldUploadMediaEndpoint() httprouter.Handle
- func (a *API) PingEndpoint() httprouter.Handle
- func (a *API) PodConfigEndpoint() httprouter.Handle
- func (a *API) PostEndpoint() httprouter.Handle
- func (a *API) ProfileEndpoint() httprouter.Handle
- func (a *API) RegisterEndpoint() httprouter.Handle
- func (a *API) ReportEndpoint() httprouter.Handle
- func (a *API) SettingsEndpoint() httprouter.Handle
- func (a *API) SupportEndpoint() httprouter.Handle
- func (a *API) TimelineEndpoint() httprouter.Handle
- func (a *API) UnfollowEndpoint() httprouter.Handle
- func (a *API) UnmuteEndpoint() httprouter.Handle
- func (a *API) UploadMediaEndpoint() httprouter.Handle
- func (a *API) WebSubEndpoint() httprouter.Handle
- type ActiveUsersJob
- type Alternative
- type Alternatives
- type AppendTwtFunc
- type Archiver
- type AudioOptions
- type AudioTask
- type BaseTask
- func (t *BaseTask) Done()
- func (t *BaseTask) Error() error
- func (t *BaseTask) Fail(err error) error
- func (t *BaseTask) ID() string
- func (t *BaseTask) Result() TaskResult
- func (t *BaseTask) SetData(key, val string)
- func (t *BaseTask) SetState(state TaskState)
- func (t *BaseTask) State() TaskState
- func (t *BaseTask) String() string
- type BitcaskStore
- func (bs *BitcaskStore) Close() error
- func (bs *BitcaskStore) DelFeed(name string) error
- func (bs *BitcaskStore) DelSession(sid string) error
- func (bs *BitcaskStore) DelUser(username string) error
- func (bs *BitcaskStore) GetAllFeeds() ([]*Feed, error)
- func (bs *BitcaskStore) GetAllSessions() ([]*session.Session, error)
- func (bs *BitcaskStore) GetAllUsers() ([]*User, error)
- func (bs *BitcaskStore) GetFeed(name string) (*Feed, error)
- func (bs *BitcaskStore) GetSession(sid string) (*session.Session, error)
- func (bs *BitcaskStore) GetUser(username string) (*User, error)
- func (bs *BitcaskStore) HasFeed(name string) bool
- func (bs *BitcaskStore) HasSession(sid string) bool
- func (bs *BitcaskStore) HasUser(username string) bool
- func (bs *BitcaskStore) LenFeeds() int64
- func (bs *BitcaskStore) LenSessions() int64
- func (bs *BitcaskStore) LenUsers() int64
- func (bs *BitcaskStore) Merge() error
- func (bs *BitcaskStore) SearchFeeds(prefix string) []string
- func (bs *BitcaskStore) SearchUsers(prefix string) []string
- func (bs *BitcaskStore) SetFeed(name string, feed *Feed) error
- func (bs *BitcaskStore) SetSession(sid string, sess *session.Session) error
- func (bs *BitcaskStore) SetUser(username string, user *User) error
- func (bs *BitcaskStore) Sync() error
- func (bs *BitcaskStore) SyncSession(sess *session.Session) error
- type Cache
- func (cache *Cache) Converge(archive Archiver)
- func (cache *Cache) DeleteFeeds(feeds types.FetchFeedRequests)
- func (cache *Cache) DeleteUserViews(u *User)
- func (cache *Cache) DetectClientFromRequest(req *http.Request, profile types.Profile) error
- func (cache *Cache) DetectClientFromResponse(res *http.Response) error
- func (cache *Cache) DetectPodFromUserAgent(ua TwtxtUserAgent) error
- func (cache *Cache) FeedCount() int
- func (cache *Cache) FetchFeeds(conf *Config, archive Archiver, feeds types.FetchFeedRequests, ...)
- func (cache *Cache) FilterBy(f FilterFunc) types.Twts
- func (cache *Cache) FindTwter(s string) (found *types.Twter)
- func (cache *Cache) FollowedBy(user *User, uri string) bool
- func (cache *Cache) GetAll(refresh bool) types.Twts
- func (cache *Cache) GetByURL(url string) types.Twts
- func (cache *Cache) GetByUser(u *User, refresh bool) types.Twts
- func (cache *Cache) GetByUserView(u *User, view string, refresh bool) types.Twts
- func (cache *Cache) GetByView(key string) types.Twts
- func (cache *Cache) GetFollowerByURI(user *User, uri string) *types.Follower
- func (cache *Cache) GetFollowers(profile types.Profile) types.Followers
- func (cache *Cache) GetMentions(u *User, refresh bool) types.Twts
- func (cache *Cache) GetOldFollowers(profile types.Profile) map[string]string
- func (cache *Cache) GetOrSetCachedFeed(url string) *Cached
- func (cache *Cache) GetPeers() (peers Peers)
- func (cache *Cache) GetTwter(uri string) *types.Twter
- func (cache *Cache) GroupBy(g GroupFunc) (res map[string]types.Twts)
- func (cache *Cache) InjectFeed(url string, twt types.Twt)
- func (cache *Cache) IsCached(url string) bool
- func (cache *Cache) Lookup(hash string) (types.Twt, bool)
- func (cache *Cache) MarshalJSON() ([]byte, error)
- func (cache *Cache) PruneFollowers(olderThan time.Duration)
- func (cache *Cache) Refresh()
- func (cache *Cache) Reset()
- func (cache *Cache) SetTwter(uri string, twter *types.Twter)
- func (cache *Cache) ShouldRefreshFeed(uri string) bool
- func (cache *Cache) SnipeFeed(url string, twt types.Twt)
- func (cache *Cache) Store(conf *Config) error
- func (cache *Cache) TwtCount() int
- func (cache *Cache) UpdateFeed(url, lastmodified string, twts types.Twts)
- type Cached
- func (cached *Cached) GetLastFetched() time.Time
- func (cached *Cached) GetLastModified() string
- func (cached *Cached) GetMovingAverage() float64
- func (cached *Cached) GetTwts() types.Twts
- func (cached *Cached) Inject(twt types.Twt)
- func (cached *Cached) SetError(err error)
- func (cached *Cached) SetLastFetched()
- func (cached *Cached) Snipe(twt types.Twt)
- func (cached *Cached) Update(lastmodified string, twts types.Twts)
- func (cached *Cached) UpdateMovingAverage()
- type CandidatesByScore
- type CandidatesForDeletionEmailContext
- type Config
- func (c *Config) BlockedFeed(uri string) bool
- func (c *Config) ExternalURL(nick, uri string) string
- func (c *Config) IsLocalURL(url string) bool
- func (c *Config) IsShadowed(uri string) bool
- func (c *Config) LocalURL() *url.URL
- func (c *Config) PermittedImage(domain string) (bool, bool)
- func (c *Config) RandomTwtPrompt() string
- func (c *Config) RequestTimeout() time.Duration
- func (c *Config) Settings() *Settings
- func (c *Config) TemplatesFS() fs.FS
- func (c *Config) URLForAvatar(name, hash string) string
- func (c *Config) URLForMedia(name string) string
- func (c *Config) URLForTag(tag string) string
- func (c *Config) URLForUser(user string) string
- func (c *Config) UserURL(url string) string
- func (c *Config) Validate() error
- type Context
- type ContextKey
- type CreateAdminFeedsJob
- type CreateAutomatedFeedsJob
- type DeleteOldSessionsJob
- type DeletionCandidate
- type DiskArchiver
- type Dispatcher
- type ErrAudioUploadFailed
- type ErrCommandFailed
- type ErrCommandKilled
- type ErrTranscodeFailed
- type ErrTranscodeTimeout
- type ErrVideoUploadFailed
- type FeatureFlags
- func (f *FeatureFlags) AsStrings() []string
- func (f *FeatureFlags) Disable(feature FeatureType)
- func (f *FeatureFlags) DisableAll(features []FeatureType)
- func (f *FeatureFlags) Enable(feature FeatureType)
- func (f *FeatureFlags) EnableAll(features []FeatureType)
- func (f *FeatureFlags) IsEnabled(feature FeatureType) bool
- func (f *FeatureFlags) MarshalJSON() ([]byte, error)
- func (f *FeatureFlags) MarshalYAML() (interface{}, error)
- func (f *FeatureFlags) Reset()
- func (f *FeatureFlags) String() string
- func (f *FeatureFlags) UnmarshalJSON(b []byte) error
- func (f *FeatureFlags) UnmarshalYAML(unmarshal func(interface{}) error) error
- type FeatureType
- type Feed
- type FeedSource
- type FeedSourceMap
- type FeedSources
- type FilterFunc
- type FilterTwtsFunc
- type FixAdminFeedsJob
- type FrontMatter
- type FuncTask
- type GroupFunc
- type HApp
- type ImageOptions
- type ImageTask
- type Job
- func NewActiveUsersJob(conf *Config, cache *Cache, archive Archiver, db Store) Job
- func NewCreateAdminFeedsJob(conf *Config, cache *Cache, archive Archiver, db Store) Job
- func NewCreateAutomatedFeedsJob(conf *Config, cache *Cache, archive Archiver, db Store) Job
- func NewDeleteOldSessionsJob(conf *Config, cache *Cache, archive Archiver, db Store) Job
- func NewFixAdminFeedsJob(conf *Config, cache *Cache, archive Archiver, db Store) Job
- func NewPruneFollowersJob(conf *Config, cache *Cache, archive Archiver, db Store) Job
- func NewPruneUsersJob(conf *Config, cache *Cache, archive Archiver, db Store) Job
- func NewRotateFeedsJob(conf *Config, cache *Cache, archive Archiver, db Store) Job
- func NewStatsJob(conf *Config, cache *Cache, archive Archiver, db Store) Job
- func NewSyncStoreJob(conf *Config, cache *Cache, archive Archiver, db Store) Job
- func NewUpdateFeedSourcesJob(conf *Config, cache *Cache, archive Archiver, db Store) Job
- func NewUpdateFeedsJob(conf *Config, cache *Cache, archive Archiver, db Store) Job
- type JobFactory
- type JobSpec
- type Link
- type Links
- type MagicLinkAuthContext
- type Meta
- type Middleware
- type MultiUserAgent
- type NewUserEmailContext
- type NullArchiver
- type Option
- func WithAPISessionTime(duration time.Duration) Option
- func WithAPISigningKey(key string) Option
- func WithAdminEmail(adminEmail string) Option
- func WithAdminName(adminName string) Option
- func WithAdminUser(adminUser string) Option
- func WithBaseURL(baseURL string) Option
- func WithBlockedFeeds(blockedFeeds []string) Option
- func WithCookieSecret(secret string) Option
- func WithData(data string) Option
- func WithDebug(debug bool) Option
- func WithDescription(description string) Option
- func WithDisableFfmpeg(disableFfmpeg bool) Option
- func WithDisableGzip(disableGzip bool) Option
- func WithDisableLogger(disableLogger bool) Option
- func WithDisableMedia(disablemedia bool) Option
- func WithEnabledFeatures(features []FeatureType) Option
- func WithFeedSources(feedSources []string) Option
- func WithFetchInterval(fetchInterval string) Option
- func WithMagicLinkSecret(secret string) Option
- func WithMaxCacheFetchers(maxCacheFetchers int) Option
- func WithMaxCacheItems(maxCacheItems int) Option
- func WithMaxCacheTTL(maxCacheTTL time.Duration) Option
- func WithMaxFetchLimit(limit int64) Option
- func WithMaxTwtLength(maxTwtLength int) Option
- func WithMaxUploadSize(maxUploadSize int64) Option
- func WithName(name string) Option
- func WithOpenProfiles(openProfiles bool) Option
- func WithOpenRegistrations(openRegistrations bool) Option
- func WithPermittedImages(permittedImages []string) Option
- func WithSMTPFrom(from string) Option
- func WithSMTPHost(host string) Option
- func WithSMTPPass(pass string) Option
- func WithSMTPPort(port int) Option
- func WithSMTPUser(user string) Option
- func WithSessionCacheTTL(cacheTTL time.Duration) Option
- func WithSessionExpiry(expiry time.Duration) Option
- func WithStore(store string) Option
- func WithTLS(tls bool) Option
- func WithTLSCert(tlsCert string) Option
- func WithTLSKey(tlsKey string) Option
- func WithTheme(theme string) Option
- func WithTranscoderTimeout(timeout time.Duration) Option
- func WithTwtsPerPage(twtsPerPage int) Option
- type Page
- type PasswordResetEmailContext
- type Peer
- type Peers
- type PodInfo
- type PruneFollowersJob
- type PruneUsersJob
- type ReportAbuseEmailContext
- type RotateFeedsJob
- type Router
- func (r *Router) DELETE(path string, handle httprouter.Handle)
- func (r *Router) File(path, name string)
- func (r *Router) GET(path string, handle httprouter.Handle)
- func (r *Router) Group(path string, m ...Middleware) *Router
- func (r *Router) HEAD(path string, handle httprouter.Handle)
- func (r *Router) Handle(method, path string, handle httprouter.Handle)
- func (r *Router) Handler(method, path string, handler http.Handler)
- func (r *Router) HandlerFunc(method, path string, handler http.HandlerFunc)
- func (r *Router) OPTIONS(path string, handle httprouter.Handle)
- func (r *Router) PATCH(path string, handle httprouter.Handle)
- func (r *Router) POST(path string, handle httprouter.Handle)
- func (r *Router) PUT(path string, handle httprouter.Handle)
- func (r *Router) ServeFiles(path string, root http.FileSystem)
- func (r *Router) ServeFilesWithCacheControl(path string, root fs.FS)
- func (r *Router) ServeHTTP(w http.ResponseWriter, req *http.Request)
- func (r *Router) Static(path, root string)
- func (r *Router) Use(m ...Middleware) *Router
- type Server
- func (s *Server) AddCronJob(spec string, job cron.Job) error
- func (s *Server) AddRoute(method, path string, handler http.Handler)
- func (s *Server) AddShutdownHook(f func())
- func (s *Server) AddUserHandler() httprouter.Handle
- func (s *Server) AvatarHandler() httprouter.Handle
- func (s *Server) BookmarkHandler() httprouter.Handle
- func (s *Server) BookmarksHandler() httprouter.Handle
- func (s *Server) CaptchaHandler() httprouter.Handle
- func (s *Server) ConversationHandler() httprouter.Handle
- func (s *Server) DelFeedHandler() httprouter.Handle
- func (s *Server) DelUserHandler() httprouter.Handle
- func (s *Server) DeleteFeedHandler() httprouter.Handle
- func (s *Server) DeleteHandler() httprouter.Handle
- func (s *Server) DiscoverHandler() httprouter.Handle
- func (s *Server) ExternalAvatarHandler() httprouter.Handle
- func (s *Server) ExternalFollowingHandler() httprouter.Handle
- func (s *Server) ExternalHandler() httprouter.Handle
- func (s *Server) FeedHandler() httprouter.Handle
- func (s *Server) FeedsHandler() httprouter.Handle
- func (s *Server) FollowHandler() httprouter.Handle
- func (s *Server) FollowersHandler() httprouter.Handle
- func (s *Server) FollowingHandler() httprouter.Handle
- func (s *Server) ImportHandler() httprouter.Handle
- func (s *Server) IndieAuthCallbackHandler() httprouter.Handle
- func (s *Server) IndieAuthHandler() httprouter.Handle
- func (s *Server) IndieAuthVerifyHandler() httprouter.Handle
- func (s *Server) ListenAndServe() error
- func (s *Server) LoginEmailHandler() httprouter.Handle
- func (s *Server) LoginHandler() httprouter.Handle
- func (s *Server) LogoutHandler() httprouter.Handle
- func (s *Server) LookupHandler() httprouter.Handle
- func (s *Server) MagicLinkAuthHandler() httprouter.Handle
- func (s *Server) ManageFeedHandler() httprouter.Handle
- func (s *Server) ManageJobsHandler() httprouter.Handle
- func (s *Server) ManagePeersHandler() httprouter.Handle
- func (s *Server) ManagePodHandler() httprouter.Handle
- func (s *Server) ManageUsersHandler() httprouter.Handle
- func (s *Server) MediaHandler() httprouter.Handle
- func (s *Server) MentionsHandler() httprouter.Handle
- func (s *Server) MuteHandler() httprouter.Handle
- func (s *Server) MutedHandler() httprouter.Handle
- func (s *Server) NewPasswordHandler() httprouter.Handle
- func (s *Server) NotFoundHandler(w http.ResponseWriter, r *http.Request)
- func (s *Server) NotifyHandler() httprouter.Handle
- func (s *Server) PageHandler(name string) httprouter.Handle
- func (s *Server) PermalinkHandler() httprouter.Handle
- func (s *Server) PodConfigHandler() httprouter.Handle
- func (s *Server) PodInfoHandler() httprouter.Handle
- func (s *Server) PostHandler() httprouter.Handle
- func (s *Server) ProfileHandler() httprouter.Handle
- func (s *Server) RefreshCacheHandler() httprouter.Handle
- func (s *Server) RegisterHandler() httprouter.Handle
- func (s *Server) ReportHandler() httprouter.Handle
- func (s *Server) ResetPasswordHandler() httprouter.Handle
- func (s *Server) ResetPasswordMagicLinkHandler() httprouter.Handle
- func (s *Server) RobotsHandler() httprouter.Handle
- func (s *Server) RstUserHandler() httprouter.Handle
- func (s *Server) Run() (err error)
- func (s *Server) SearchHandler() httprouter.Handle
- func (s *Server) SettingsAddLinkHandler() httprouter.Handle
- func (s *Server) SettingsHandler() httprouter.Handle
- func (s *Server) SettingsRemoveLinkHandler() httprouter.Handle
- func (s *Server) Shutdown(ctx context.Context) error
- func (s *Server) SupportHandler() httprouter.Handle
- func (s *Server) SyndicationHandler() httprouter.Handle
- func (s *Server) TaskHandler() httprouter.Handle
- func (s *Server) TimelineHandler() httprouter.Handle
- func (s *Server) TwtxtHandler() httprouter.Handle
- func (s *Server) UnfollowHandler() httprouter.Handle
- func (s *Server) UnmuteHandler() httprouter.Handle
- func (s *Server) UploadMediaHandler() httprouter.Handle
- func (s *Server) UserConfigHandler() httprouter.Handle
- func (s *Server) WebMentionHandler() httprouter.Handle
- func (s *Server) WebSubHandler() httprouter.Handle
- func (s *Server) WhoFollowsHandler() httprouter.Handle
- type SessionStore
- func (s *SessionStore) Count() int
- func (s *SessionStore) DelSession(sid string) error
- func (s *SessionStore) GetAllSessions() ([]*session.Session, error)
- func (s *SessionStore) GetSession(sid string) (*session.Session, error)
- func (s *SessionStore) HasSession(sid string) bool
- func (s *SessionStore) SetSession(sid string, sess *session.Session) error
- func (s *SessionStore) SyncSession(sess *session.Session) error
- type Settings
- type SingleUserAgent
- type SoftwareConfig
- type StatsJob
- type Store
- type StoreFactory
- type SupportRequestEmailContext
- type SyncStoreJob
- type TTLCache
- func (cache *TTLCache) Dec(k string) int
- func (cache *TTLCache) Del(k string)
- func (cache *TTLCache) Get(k string) int
- func (cache *TTLCache) GetString(k string) string
- func (cache *TTLCache) Inc(k string) int
- func (cache *TTLCache) Reset(k string) int
- func (cache *TTLCache) Set(k string, v int) int
- func (cache *TTLCache) SetString(k string, v string) string
- type Task
- type TaskData
- type TaskResult
- type TaskState
- type TemplateManager
- type TimeVar
- type Token
- type Translator
- type TwtTextFormat
- type TwtxtUserAgent
- type URI
- type URLProcessor
- type UpdateFeedSourcesJob
- type UpdateFeedsJob
- type User
- func (u *User) AddFollower(nick, uri string)
- func (u *User) AddLink(title, url string)
- func (u *User) Bookmark(hash string)
- func (u *User) Bookmarked(hash string) bool
- func (u *User) Bytes() ([]byte, error)
- func (u *User) DisplayTimeFormat() string
- func (u *User) Filter(twts []types.Twt) (filtered []types.Twt)
- func (u *User) Follow(alias, uri string) error
- func (u *User) FollowAndValidate(conf *Config, alias, uri string) error
- func (u *User) FollowedBy(url string) bool
- func (u *User) Follows(url string) bool
- func (u *User) FollowsAs(url string) string
- func (u *User) Fork(twt types.Twt) string
- func (u *User) HasMuted(value string) bool
- func (u *User) Is(url string) bool
- func (u *User) IsZero() bool
- func (u *User) Mute(key, value string)
- func (u *User) OwnsFeed(name string) bool
- func (u *User) Profile(baseURL string, viewer *User) types.Profile
- func (u *User) RemoveLink(title string)
- func (u *User) Reply(twt types.Twt) string
- func (u *User) Source() types.FetchFeedRequests
- func (u *User) Sources() types.FetchFeedRequests
- func (u *User) String() string
- func (u *User) Twter(conf *Config) types.Twter
- func (u *User) Unfollow(alias string)
- func (u *User) Unmute(key string)
- type VideoOptions
- type VideoTask
- type Worker
- type YarndUserAgent
Constants ¶
const ( // InvalidConfigValue is the constant value for invalid config values // which must be changed for production configurations before successful // startup InvalidConfigValue = "INVALID CONFIG VALUE - PLEASE CHANGE THIS VALUE" // DefaultDebug is the default debug mode DefaultDebug = false // DefaultData is the default data directory for storage DefaultData = "./data" // DefaultTLS is the default for whether to enable TLS DefaultTLS = false // DefaultTLSKey is the default path to a TLS private key (if blank uses Let's Encrypt) DefaultTLSKey = "" // DefaultTLSCert is the default path to a TLS certificate (if blank uses Let's Encrypt) DefaultTLSCert = "" // DefaultStore is the default data store used for accounts, sessions, etc DefaultStore = "bitcask://yarn.db" // DefaultBaseURL is the default Base URL for the app used to construct feed URLs DefaultBaseURL = "http://0.0.0.0:8000" // DefaultAdminUser is the default username to grant admin privileges to DefaultAdminUser = "admin" // DefaultAdminName is the default name of the admin user used in support requests DefaultAdminName = "Administrator" // DefaultAdminEmail is the default email of the admin user used in support requests DefaultAdminEmail = "support@yarn.social" // DefaultName is the default instance name DefaultName = "yarn.local" // DefaultMetaxxx are the default set of <meta> tags used on non-specific views DefaultMetaTitle = "" DefaultMetaAuthor = "Yarn.social" DefaultMetaKeywords = "twtxt, twt, yarn, blog, micro-blog, microblogging, social, media, decentralised, pod" DefaultMetaDescription = "" /* 147-byte string literal not displayed */ // DefaultTheme is the default theme to use for templates and static assets // (en empty value means to use the builtin default theme) DefaultTheme = "" // DefaultLang is the default language to use ('en' or 'zh-cn') DefaultLang = "auto" // DefaultOpenRegistrations is the default for open user registrations DefaultOpenRegistrations = false // DefaultDisableGzip is the default for disabling Gzip compression DefaultDisableGzip = false // DefaultDisableLogger is the default for disabling the Logger (access logs) DefaultDisableLogger = false // DefaultDisableMedia is the default for disabling Media support DefaultDisableMedia = false // DefaultDisableFfmpeg is the default for disabling ffmpeg support DefaultDisableFfmpeg = false // DefaultCookieSecret is the server's default cookie secret DefaultCookieSecret = InvalidConfigValue // DefaultTwtsPerPage is the server's default twts per page to display DefaultTwtsPerPage = 50 // DefaultMaxTwtLength is the default maximum length of posts permitted DefaultMaxTwtLength = 1024 // DefaultMaxCacheTTL is the default maximum cache ttl of twts in memory DefaultMaxCacheTTL = time.Hour * 24 * 14 // 2 weeks // DefaultFetchInterval is the default interval used by the global feed cache // to control when to actually fetch and update feeds. DefaultFetchInterval = "@every 5m" // DefaultMaxCacheItems is the default maximum cache items (per feed source) // of twts in memory DefaultMaxCacheItems = DefaultTwtsPerPage * 3 // We get bored after paging thorughh > 3 pages :D // DefaultOpenProfiles is the default for whether or not to have open user profiles DefaultOpenProfiles = false // DefaultMaxUploadSize is the default maximum upload size permitted DefaultMaxUploadSize = 1 << 24 // ~16MB (enough for high-res photos) // DefaultSessionCacheTTL is the server's default session cache ttl DefaultSessionCacheTTL = 1 * time.Hour // DefaultSessionExpiry is the server's default session expiry time DefaultSessionExpiry = 240 * time.Hour // 10 days // DefaultTranscoderTimeout is the default vodeo transcoding timeout DefaultTranscoderTimeout = 10 * time.Minute // 10mins // DefaultMagicLinkSecret is the jwt magic link secret DefaultMagicLinkSecret = InvalidConfigValue // Default Messaging settings DefaultSMTPBind = "0.0.0.0:8025" DefaultPOP3Bind = "0.0.0.0:8110" // Default SMTP configuration DefaultSMTPHost = InvalidConfigValue DefaultSMTPPort = 0 DefaultSMTPUser = InvalidConfigValue DefaultSMTPPass = InvalidConfigValue DefaultSMTPFrom = InvalidConfigValue // DefaultMaxFetchLimit is the maximum fetch fetch limit in bytes DefaultMaxFetchLimit = 1 << 20 // ~1MB (or more than enough for months) // DefaultAPISessionTime is the server's default session time for API tokens DefaultAPISessionTime = 240 * time.Hour // 10 days // DefaultAPISigningKey is the default API JWT signing key for tokens DefaultAPISigningKey = InvalidConfigValue // MinimumCacheFetchInterval is the smallest allowable cache fetch interval for // production pods, an attempt to configure a pod with a smaller value than this // results in a configuration validation error. MinimumCacheFetchInterval = 59 * time.Second // DefaultMediaResolution is the default resolution used to downscale media (iamges) // (the original is also preserved and accessible via adding the query string ?full=1) DefaultMediaResolution = 850 // 850px width (maintaining aspect ratio) // DefaultAvatarResolution is the default resolution used to downscale avatars (profiles) DefaultAvatarResolution = 360 // 360px width (maintaining aspect ratio) )
const ( DayAgo = time.Hour * 24 WeekAgo = DayAgo * 7 MonthAgo = DayAgo * 30 YearAgo = MonthAgo * 12 )
const ( // MaxFailedLogins is the default maximum tolerable number of failed login attempts // TODO: Make this configurable via Pod Settings MaxFailedLogins = 3 // By default 3 failed login attempts per 5 minutes )
Variables ¶
var ( // ErrInvalidCredentials is returned for invalid credentials against /auth ErrInvalidCredentials = errors.New("error: invalid credentials") // ErrInvalidToken is returned for expired or invalid tokens used in Authorizeation headers ErrInvalidToken = errors.New("error: invalid token") )
var ( ErrTwtAlreadyArchived = errors.New("error: twt already archived") ErrTwtNotArchived = errors.New("error: twt not found in archived") ErrInvalidTwtHash = errors.New("error: invalid twt hash") )
var ( Jobs map[string]JobSpec StartupJobs map[string]JobSpec )
var ( ErrFeedAlreadyExists = errors.New("error: feed already exists by that name") ErrAlreadyFollows = errors.New("error: you already follow this feed") ErrTooManyFeeds = errors.New("error: you have too many feeds") )
var ( // DefaultLogo is the default logo (SVG) //go:embed logo.svg DefaultLogo string // DefaultCSS should be empty DefaultCSS string // Default Alert type and message DefaultAlertFloat bool DefaultAlertGuest bool DefaultAlertType = "safe" DefaultAlertMessage string // DefaultFeedSources is the default list of external feed sources DefaultFeedSources = []string{ "https://feeds.twtxt.net/we-are-feeds.txt", } // DefaultTwtPrompts are the set of default prompts for twt text(s) DefaultTwtPrompts = []string{ `What's on your mind? 🤔`, `Share something insightful! 💡`, `Good day to you! 👌 What's new? 🥳`, `Did something cool lately? 🤔 Share it! 🤗`, `Hi! 👋 Don't forget to post a Twt today! 😉`, `Let's have a Yarn! ✋`, } // DefaultPermittedImages is the default list of image domains // to permit for external images to display them inline DefaultPermittedImages = []string{ `imgur\.com`, `giphy\.com`, `imgs\.xkcd\.com`, `reactiongifs\.com`, `githubusercontent\.com`, } // DefaultBlockedFeeds is the default list of feed uris that are // blocked and prohibuted from being fetched by the global feed cache DefaultBlockedFeeds = []string{ `port70\.dk`, `enotty\.dk`, `gopher\.floodgap\.com`, } // DefaultMaxCacheFetchers is the default maximun number of fetchers used // by the global feed cache during update cycles. This controls how quickly // feeds are updated in each feed cache cycle. The default is the number of // available CPUs on the system. DefaultMaxCacheFetchers = runtime.NumCPU() // DefaultDisplayDatesInTimezone is the default timezone date and times are display in at the Pod level for // anonymous or unauthenticated users or users who have not changed their timezone rpefernece. DefaultDisplayDatesInTimezone = "UTC" // DefaultDisplayTimePreference is the default Pod level time representation (12hr or 24h) overridable by Users. DefaultDisplayTimePreference = "12h" // DefaultOpenLinksInPreference is the default Pod level behaviour for opening external links (overridable by Users). DefaultOpenLinksInPreference = "newwindow" // DisplayImagesPreference is the default Pod-level image display behaviour // (inline or lightbox) for displaying images (overridable by Users). DefaultDisplayImagesPreference = "inline" // DisplayMedia is the default for whether or not to display media at all or just link it DefaultDisplayMedia = true // OriginalMedia is the default for whether to link or display original media or not OriginalMedia bool )
var ( ErrInvalidStore = errors.New("error: invalid store") ErrUserNotFound = errors.New("error: user not found") ErrFeedNotFound = errors.New("error: feed not found") ErrInvalidSession = errors.New("error: invalid session") )
var ( ErrInvalidFeedName = errors.New("error: invalid feed name") ErrBadRequest = errors.New("error: request failed with non-200 response") ErrFeedNameTooLong = errors.New("error: feed name is too long") ErrInvalidUsername = errors.New("error: invalid username") ErrUsernameTooLong = errors.New("error: username is too long") ErrInvalidUserAgent = errors.New("error: invalid twtxt user agent") ErrReservedUsername = errors.New("error: username is reserved") ErrInvalidImage = errors.New("error: invalid image") ErrInvalidAudio = errors.New("error: invalid audio") ErrInvalidVideo = errors.New("error: invalid video") ErrInvalidVideoSize = errors.New("error: invalid video size") )
var (
ErrConfigPathMissing = errors.New("error: config file missing")
)
var (
ErrFeedImposter = errors.New("error: imposter detected, you do not own this feed")
)
var (
ErrSendingEmail = errors.New("error: unable to send email")
)
Functions ¶
func AvailableFeatures ¶
func AvailableFeatures() []string
func BaseFromURL ¶
func CleanTwt ¶
CleanTwt cleans a twt's text, replacing new lines with spaces and stripping surrounding spaces.
func CreateFeed ¶
func CustomTime ¶
func DecodeHash ¶
func DeleteLastTwt ¶
func DownloadImage ¶
func ExtractHashFromSubject ¶
func FastHashFile ¶
func FastHashString ¶
func FeedExists ¶
func FileExists ¶
func FilterTwtsAge ¶
FilterTwtsAge calculates what page to scroll to, provided we want to see twts >= :age: hours old, and with :twtsPerPage: twts on each page.
func FilterTwtsBy ¶
func FilterTwtsBy(twts types.Twts, f FilterFunc) (res types.Twts)
func FormatMentionsAndTags ¶
func FormatMentionsAndTags(conf *Config, text string, format TwtTextFormat) string
FormatMentionsAndTags turns `@<nick URL>` into `<a href="URL">@nick</a>` and `#<tag URL>` into `<a href="URL">#tag</a>` and a `!<hash URL>` into a `<a href="URL">!hash</a>`.
func FormatRequest ¶
FormatRequest generates ascii representation of a request
func FormatTwtContextFactory ¶
func FormatTwtContextFactory(conf *Config, cache *Cache, archive Archiver) func(twt types.Twt, u *User) template.HTML
FormatTwtContextFactory formats a twt's context into a valid HTML snippet A Twt's Context is defined as the content of the Root Twt of the Conversation rendered in plain text up to a maximu length with an elipsis if longer...
func FormatTwtFactory ¶
func FormatTwtFactory(conf *Config, cache *Cache, archive Archiver) func(twt types.Twt, u *User) template.HTML
FormatTwtFactory formats a twt into a valid HTML snippet
func GenerateRandomToken ¶
func GenerateRandomToken() string
func GenerateWhoFollowsToken ¶
func GetAllFeeds ¶
func GetArchivedFeeds ¶
GetArchivedFeeds ...
func GetConvLength ¶
func GetExternalAvatar ¶
func GetForkLength ¶
func GetLookupMatches ¶
func GetMediaNamesFromText ¶
func GetRootTwtFactory ¶
func GetTwtConvSubjectHash ¶
func GroupBySubject ¶
func GroupByTag ¶
func HostnameFromURL ¶
func IsAdminUserFactory ¶
IsAdminUserFactory returns a function that returns true if the user provided is the configured pod administrator, false otherwise.
func IsFeatureEnabled ¶
func IsFeatureEnabled(fs *FeatureFlags, name string) bool
func IsGifImage ¶
func IsLocalURLFactory ¶
func IsSpecialFeed ¶
IsSpecialFeed returns true if the feed is one of the special feeds an admin feed or automated feed.
func LastSeenTime ¶
func MemoryUsage ¶
func MemoryUsage() string
MemoryUsage returns information about thememory used by the runtime
func NewCachedFeedLookup ¶
func NewCachedFeedLookup(cache *Cache) types.FeedLookup
NewCachedFeedLookup returns a `types.FeedLookup` that resolves any @-mentions into `types.Twter()` objects used for later expansion into the proper Twtxt URI mention syntax @<nick url>; This check against local users and feeds.
func NewLocalFeedLookup ¶
func NewLocalFeedLookup(conf *Config, db Store) types.FeedLookup
NewLocalFeedLookup returns a `types.FeedLookup` that resolves any @-mentions into `types.Twter()` objects used for later expansion into the proper Twtxt URI mention syntax @<nick url>; This check against local users and feeds.
func NewMultiFeedLookup ¶
func NewMultiFeedLookup(feedLookupFns ...types.FeedLookup) types.FeedLookup
NewMultiFeedLookup returns a `types.FeedLookup` that resolves any @-mentions into `types.Twter()` objects used for later expansion into the proper Twtxt URI mention syntax @<nick url>; This relies on calling a chain of multiple `types.FeedLookup`(s) in turn until one of them returns a non-nil / non-zero `types.Twter`.
func NewRemoteFeedLookup ¶
func NewRemoteFeedLookup(conf *Config) types.FeedLookup
NewRemoteFeedLookup returns a `types.FeedLookup` that resolves any @-mentions into `types.Twter()` objects used for later expansion into the proper Twtxt URI mention syntax @<nick url>; This uses a remote lookup mechanism based on a discovery protocol as documetned here: xxx (TBD).
func NewUserFollowedFeedLookup ¶
func NewUserFollowedFeedLookup(user *User) types.FeedLookup
NewUserFollowedFeedLookup returns a `types.FeedLookup` that resolves any @-mentions into `types.Twter()` objects used for later expansion into the proper Twtxt URI mention syntax @<nick url>
func NormalizeFeedName ¶
func NormalizeURL ¶
func NormalizeUsername ¶
func ParseArchivedFeedIds ¶
ParseArchivedFeedIds ...
func PreprocessMedia ¶
func PreprocessMedia(user *User, conf *Config, u *url.URL, title, alt, renderAs string, display, full bool) string
PreprocessMedia ...
func ProcessImage ¶
func RedirectRefererURL ¶
RedirectRefererURL constructs a Redirect URL from the given Request URL and possibly Referer, if the Referer's Base URL matches the Pod's Base URL will return the Referer URL otherwise the defaultURL. This is primarily used to redirect a user from a successful /login back to the page they were on.
func RemoveString ¶
func RenderAudio ¶
RenderAudio ...
func RenderImage ¶
RenderImage ...
func RenderLogo ¶
RenderLogo ...
func RenderPlainText ¶
RenderPlainText ...
func RenderVideo ¶
RenderVideo ...
func ReplaceExt ¶
func RequestGemini ¶
func RequestGopher ¶
func RequestHTTP ¶
func ResourceExists ¶
func RotateFeed ¶
func SaveFeedSources ¶
func SaveFeedSources(feedsources *FeedSources, path string) error
func SendCandidatesForDeletionEmail ¶
func SendCandidatesForDeletionEmail(conf *Config, candidates []DeletionCandidate) error
func SendMagicLinkAuthEmail ¶
func SendNewUserEmail ¶
func SendPasswordResetEmail ¶
func SendReportAbuseEmail ¶
func SendSupportRequestEmail ¶
func StoreUploadedImage ¶
func StringKeys ¶
func StringValues ¶
func TextWithEllipsis ¶
TextWithEllipsis formats a a string with at most `maxLength` characters using an ellipsis (...) tto indicate more content...
func TranscodeAudio ¶
func TranscodeVideo ¶
func URLForAvatar ¶
func URLForConvFactory ¶
func URLForExternalAvatar ¶
func URLForExternalProfile ¶
func URLForForkFactory ¶
func URLForMedia ¶
func URLForPage ¶
func URLForRootConvFactory ¶
func URLForTask ¶
func URLForUser ¶
func URLForWhoFollows ¶
func URLForWhoFollows(baseURL string, feed types.FetchFeedRequest, feedFollowers int) string
func UniqStrings ¶
func UnparseTwtFactory ¶
UnparseTwtFactory is the opposite of CleanTwt and ExpandMentions/ExpandTags
func ValidateFeedName ¶
func ValidateIndieRedirectURL ¶
ValidateIndieRedirectURL ...
func ValidateUsername ¶
ValidateUsername validates the username before allowing it to be created. This ensures usernames match a defined pattern and that some usernames that are reserved are never used by users.
func WebMention ¶
Types ¶
type API ¶
type API struct {
// contains filtered or unexported fields
}
API ...
func NewAPI ¶
func NewAPI(router *Router, config *Config, cache *Cache, archive Archiver, db Store, pm passwords.Passwords, tasks *Dispatcher) *API
NewAPI ...
func (*API) ConversationEndpoint ¶
func (a *API) ConversationEndpoint() httprouter.Handle
ConversationEndpoint ...
func (*API) CreateToken ¶
CreateToken ...
func (*API) DiscoverEndpoint ¶
func (a *API) DiscoverEndpoint() httprouter.Handle
DiscoverEndpoint ...
func (*API) ExternalProfileEndpoint ¶
func (a *API) ExternalProfileEndpoint() httprouter.Handle
ExternalProfileEndpoint ...
func (*API) FetchTwtsEndpoint ¶
func (a *API) FetchTwtsEndpoint() httprouter.Handle
FetchTwtsEndpoint ...
func (*API) MentionsEndpoint ¶
func (a *API) MentionsEndpoint() httprouter.Handle
MentionsEndpoint ...
func (*API) OldUploadMediaEndpoint ¶
func (a *API) OldUploadMediaEndpoint() httprouter.Handle
OldUploadMediaEndpoint ... TODO: Remove when the api_old_upload_media counter nears zero XXX: Used for Goryon < v1.0.3
func (*API) PodConfigEndpoint ¶
func (a *API) PodConfigEndpoint() httprouter.Handle
PodConfigEndpoint ...
func (*API) RegisterEndpoint ¶
func (a *API) RegisterEndpoint() httprouter.Handle
RegisterEndpoint ...
func (*API) SettingsEndpoint ¶
func (a *API) SettingsEndpoint() httprouter.Handle
SettingsEndpoint ...
func (*API) TimelineEndpoint ¶
func (a *API) TimelineEndpoint() httprouter.Handle
TimelineEndpoint ...
func (*API) UnfollowEndpoint ¶
func (a *API) UnfollowEndpoint() httprouter.Handle
UnfollowEndpoint ...
func (*API) UploadMediaEndpoint ¶
func (a *API) UploadMediaEndpoint() httprouter.Handle
UploadMediaHandler ...
type ActiveUsersJob ¶
type ActiveUsersJob struct {
// contains filtered or unexported fields
}
func (*ActiveUsersJob) Run ¶
func (job *ActiveUsersJob) Run()
func (*ActiveUsersJob) String ¶
func (job *ActiveUsersJob) String() string
type Alternative ¶
type Alternatives ¶
type Alternatives []Alternative
type AppendTwtFunc ¶
type AppendTwtFunc func(user *User, feed *Feed, text string, args ...interface{}) (types.Twt, error)
func AppendTwtFactory ¶
func AppendTwtFactory(conf *Config, cache *Cache, db Store) AppendTwtFunc
type Archiver ¶
type Archiver interface { Del(hash string) error Has(hash string) bool Get(hash string) (types.Twt, error) Archive(twt types.Twt) error Count() (int, error) }
Archiver is an interface for retrieving old twts from an archive storage such as an on-disk hash layout with one directory per 2-letter part of the hash sequence.
func NewDiskArchiver ¶
func NewNullArchiver ¶
type AudioOptions ¶
type AudioTask ¶
type AudioTask struct { *BaseTask // contains filtered or unexported fields }
func NewAudioTask ¶
type BaseTask ¶
type BaseTask struct {
// contains filtered or unexported fields
}
func NewBaseTask ¶
func NewBaseTask() *BaseTask
func (*BaseTask) Result ¶
func (t *BaseTask) Result() TaskResult
type BitcaskStore ¶
type BitcaskStore struct {
// contains filtered or unexported fields
}
BitcaskStore ...
func (*BitcaskStore) DelFeed ¶
func (bs *BitcaskStore) DelFeed(name string) error
func (*BitcaskStore) DelSession ¶
func (bs *BitcaskStore) DelSession(sid string) error
func (*BitcaskStore) DelUser ¶
func (bs *BitcaskStore) DelUser(username string) error
func (*BitcaskStore) GetAllFeeds ¶
func (bs *BitcaskStore) GetAllFeeds() ([]*Feed, error)
func (*BitcaskStore) GetAllSessions ¶
func (bs *BitcaskStore) GetAllSessions() ([]*session.Session, error)
func (*BitcaskStore) GetAllUsers ¶
func (bs *BitcaskStore) GetAllUsers() ([]*User, error)
func (*BitcaskStore) GetSession ¶
func (bs *BitcaskStore) GetSession(sid string) (*session.Session, error)
func (*BitcaskStore) HasFeed ¶
func (bs *BitcaskStore) HasFeed(name string) bool
func (*BitcaskStore) HasSession ¶
func (bs *BitcaskStore) HasSession(sid string) bool
func (*BitcaskStore) HasUser ¶
func (bs *BitcaskStore) HasUser(username string) bool
func (*BitcaskStore) LenFeeds ¶
func (bs *BitcaskStore) LenFeeds() int64
func (*BitcaskStore) LenSessions ¶
func (bs *BitcaskStore) LenSessions() int64
func (*BitcaskStore) LenUsers ¶
func (bs *BitcaskStore) LenUsers() int64
func (*BitcaskStore) SearchFeeds ¶
func (bs *BitcaskStore) SearchFeeds(prefix string) []string
func (*BitcaskStore) SearchUsers ¶
func (bs *BitcaskStore) SearchUsers(prefix string) []string
func (*BitcaskStore) SetSession ¶
func (bs *BitcaskStore) SetSession(sid string, sess *session.Session) error
func (*BitcaskStore) SyncSession ¶
func (bs *BitcaskStore) SyncSession(sess *session.Session) error
type Cache ¶
type Cache struct { Version int List *Cached Map map[string]types.Twt Peers map[string]*Peer Feeds map[string]*Cached Views map[string]*Cached Followers map[string]types.Followers Twters map[string]*types.Twter // contains filtered or unexported fields }
Cache ...
func FromOldCacheFile ¶
FromOldCacheFile attempts to load an oldver version of the on-disk cache stored at /path/to/data/cache -- If you change the way the `*Cache` is stored on disk by modifying `Cache.Store()` or any of the data structures, please modfy this function to support loading the previous version of the on-disk cache.
func LoadCacheFromFile ¶
LoadCacheFromFile ...
func (*Cache) DeleteFeeds ¶
func (cache *Cache) DeleteFeeds(feeds types.FetchFeedRequests)
DeleteFeeds ...
func (*Cache) DetectClientFromRequest ¶
DetectClientFromRequest ...
func (*Cache) DetectClientFromResponse ¶
DetectClientFromResponse ...
func (*Cache) DetectPodFromUserAgent ¶
func (cache *Cache) DetectPodFromUserAgent(ua TwtxtUserAgent) error
DetectPodFromUserAgent ...
func (*Cache) FetchFeeds ¶
func (cache *Cache) FetchFeeds(conf *Config, archive Archiver, feeds types.FetchFeedRequests, publicFollowers map[types.FetchFeedRequest][]string)
FetchFeeds ...
func (*Cache) FindTwter ¶
FindTwter locates a valid cached Twter by searching the Cache for previously fetched feeds and their Twter(s) using basic string matching TODO: Add Fuzzy matching?
func (*Cache) GetByUserView ¶
GetByUserView ...
func (*Cache) GetFollowerByURI ¶
GetFollowerByURI ...
func (*Cache) GetFollowers ¶
GetFollowers ...
func (*Cache) GetMentions ¶
GetMentions ...
func (*Cache) GetOldFollowers ¶
GetOldFollowers ... XXX: Returns a map[string]string of nick -> url for APIv1 compat TODO: Remove when Mobile App is upgraded
func (*Cache) GetOrSetCachedFeed ¶
GetOrSetCachedFeed ...
func (*Cache) MarshalJSON ¶
func (*Cache) PruneFollowers ¶
PruneFollowers ...
func (*Cache) ShouldRefreshFeed ¶
ShouldRefreshFeed ...
type Cached ¶
type Cached struct { Twts types.Twts Errors int LastError string LastFetched time.Time LastModified string MovingAverage float64 // contains filtered or unexported fields }
Cached ...
func (*Cached) GetMovingAverage ¶
GetMovingAverage ...
func (*Cached) UpdateMovingAverage ¶
func (cached *Cached) UpdateMovingAverage()
UpdateMovingAverage ...
type CandidatesByScore ¶
type CandidatesByScore []DeletionCandidate
func (CandidatesByScore) Len ¶
func (c CandidatesByScore) Len() int
func (CandidatesByScore) Less ¶
func (c CandidatesByScore) Less(i, j int) bool
func (CandidatesByScore) Swap ¶
func (c CandidatesByScore) Swap(i, j int)
type CandidatesForDeletionEmailContext ¶
type CandidatesForDeletionEmailContext struct { Pod string BaseURL string AdminUser string Candidates []DeletionCandidate }
type Config ¶
type Config struct { Version SoftwareConfig Debug bool TLS bool TLSKey string TLSCert string Data string `json:"-"` Name string Logo string CSS string Description string Store string `json:"-"` StartPage string Theme string `json:"-"` AlertFloat bool AlertGuest bool AlertMessage string AlertType string Lang string BaseURL string AdminUser string `json:"-"` AdminName string `json:"-"` AdminEmail string `json:"-"` FeedSources []string CookieSecret string `json:"-"` TwtPrompts []string TwtsPerPage int MaxUploadSize int64 MaxTwtLength int MediaResolution int AvatarResolution int MaxCacheTTL time.Duration FetchInterval string MaxCacheItems int OpenProfiles bool OpenRegistrations bool DisableGzip bool DisableLogger bool DisableMedia bool DisableFfmpeg bool SessionExpiry time.Duration SessionCacheTTL time.Duration TranscoderTimeout time.Duration MagicLinkSecret string `json:"-"` SMTPHost string `json:"-"` SMTPPort int `json:"-"` SMTPUser string `json:"-"` SMTPPass string `json:"-"` SMTPFrom string `json:"-"` MaxCacheFetchers int MaxFetchLimit int64 APISessionTime time.Duration `json:"-"` APISigningKey string `json:"-"` PermittedImages []string `json:"-"` BlockedFeeds []string `json:"-"` Features *FeatureFlags // Pod Level Settings (overridable by Users) DisplayDatesInTimezone string DisplayTimePreference string OpenLinksInPreference string DisplayImagesPreference string DisplayMedia bool OriginalMedia bool VisibilityCompact bool VisibilityReadmore bool LinkVerification bool StripTrackingParam bool CustomPrimaryColor string CustomSecondaryColor string // contains filtered or unexported fields }
Config contains the server configuration parameters
func (*Config) BlockedFeed ¶
BlockedFeed returns true if the feed uri matches any blocked feeds per the pod's configuration, the pod itself cannot be blocked.
func (*Config) ExternalURL ¶
func (*Config) IsLocalURL ¶
func (*Config) IsShadowed ¶
IsShadowed returns true if a feed has been Shadowed Banned by the Pod Owner/Operator (poderator) This is currently functionally equivilent to Blocklisting a feed and uses the same configuration
func (*Config) PermittedImage ¶
PermittedImage returns true if the domain name of an image's url provided is a whiltelisted domain as per the configuration
func (*Config) RandomTwtPrompt ¶
RandomTwtPrompt returns a random Twt Prompt for display by the UI
func (*Config) RequestTimeout ¶
RequestTimeout returns the configured timeout for outgoing HTTP requests. If not defined, it defaults to 30 seconds.
func (*Config) Settings ¶
Settings returns a `Settings` struct containing pod settings that can then be persisted to disk to override some configuration options.
func (*Config) TemplatesFS ¶
func (*Config) URLForAvatar ¶
func (*Config) URLForMedia ¶
func (*Config) URLForUser ¶
type Context ¶
type Context struct { Debug bool Logo template.HTML CSS template.CSS BaseURL string InstanceName string SoftwareVersion SoftwareConfig TwtsPerPage int TwtPrompt string MaxTwtLength int AvatarResolution int MediaResolution int RegisterDisabled bool OpenProfiles bool DisableMedia bool DisableFfmpeg bool PermittedImages []string BlockedFeeds []string EnabledFeatures []string AlertFloat bool AlertGuest bool AlertMessage string AlertType string Timezones []*timezones.Zoneinfo Reply string Username string User *User LastTwt types.Twt Profile types.Profile Authenticated bool IsAdmin bool DisplayDatesInTimezone string DisplayTimePreference string OpenLinksInPreference string DisplayImagesPreference string DisplayMedia bool OriginalMedia bool VisibilityCompact bool VisibilityReadmore bool LinkVerification bool StripTrackingParam bool CustomPrimaryColor string CustomSecondaryColor string Error bool Message string Callback string Lang string // language AcceptLangs string // accept languages StartPage string Theme string // not to be confused with the config.Theme Commit string Page string View string Content template.HTML Title string Meta Meta Links Links Alternatives Alternatives Twter types.Twter Twts types.Twts Root types.Twt Pager *paginator.Paginator LocalFeeds []*Feed UserFeeds []*Feed FeedSources FeedSourceMap // Time TimelineUpdatedAt time.Time DiscoverUpdatedAt time.Time LastMentionedAt time.Time // Discovered Pods peering with us Peers Peers // Background Jobs Jobs []*cron.Entry // Search SearchQuery string // Tools Bookmarklet string // Report abuse ReportNick string ReportURL string // Reset Password Token PasswordResetToken string // CSRF Token CSRFToken string // Login Referer Referer string // Profile post box user handle PostText string // Prompt text PromptTitle string PromptMessage string PromptCallback string PromptApprove string PromptCancel string PromptTarget string }
func (*Context) Translate ¶
func (ctx *Context) Translate(translator *Translator, data ...interface{})
type ContextKey ¶
type ContextKey int
ContextKey ...
const ( TokenContextKey ContextKey = iota UserContextKey )
type CreateAdminFeedsJob ¶
type CreateAdminFeedsJob struct {
// contains filtered or unexported fields
}
func (*CreateAdminFeedsJob) Run ¶
func (job *CreateAdminFeedsJob) Run()
func (*CreateAdminFeedsJob) String ¶
func (job *CreateAdminFeedsJob) String() string
type CreateAutomatedFeedsJob ¶
type CreateAutomatedFeedsJob struct {
// contains filtered or unexported fields
}
func (*CreateAutomatedFeedsJob) Run ¶
func (job *CreateAutomatedFeedsJob) Run()
func (*CreateAutomatedFeedsJob) String ¶
func (job *CreateAutomatedFeedsJob) String() string
type DeleteOldSessionsJob ¶
type DeleteOldSessionsJob struct {
// contains filtered or unexported fields
}
func (*DeleteOldSessionsJob) Run ¶
func (job *DeleteOldSessionsJob) Run()
func (*DeleteOldSessionsJob) String ¶
func (job *DeleteOldSessionsJob) String() string
type DeletionCandidate ¶
type DiskArchiver ¶
type DiskArchiver struct {
// contains filtered or unexported fields
}
DiskArchiver implements Archiver using an on-disk hash layout directory structure with one directory per 2-letter hash sequence with a single JSON encoded file per twt.
func (*DiskArchiver) Count ¶
func (a *DiskArchiver) Count() (int, error)
func (*DiskArchiver) Del ¶
func (a *DiskArchiver) Del(hash string) error
func (*DiskArchiver) Has ¶
func (a *DiskArchiver) Has(hash string) bool
type Dispatcher ¶
Dispatcher maintains a pool for available workers and a task queue that workers will process
func NewDispatcher ¶
func NewDispatcher(maxWorkers int, maxQueue int) *Dispatcher
NewDispatcher creates a new dispatcher with the given number of workers and buffers the task queue based on maxQueue. It also initializes the channels for the worker pool and task queue
func (*Dispatcher) Dispatch ¶
func (d *Dispatcher) Dispatch(task Task) (string, error)
Dispatch pushes the given task into the task queue. The first available worker will perform the task
func (*Dispatcher) DispatchFunc ¶
func (d *Dispatcher) DispatchFunc(f func() error) (string, error)
DispatchFunc pushes the given func into the task queue by first wrapping it with a `TaskFunc` task.
func (*Dispatcher) Lookup ¶
func (d *Dispatcher) Lookup(id string) (Task, bool)
Lookup returns the matching `Task` given its id
func (*Dispatcher) Start ¶
func (d *Dispatcher) Start()
Start creates and starts workers, adding them to the worker pool. Then, it starts a select loop to wait for tasks to be dispatched to available workers
func (*Dispatcher) Stop ¶
func (d *Dispatcher) Stop()
Stop ends execution for all workers and closes all channels, then removes all workers
type ErrAudioUploadFailed ¶
type ErrAudioUploadFailed struct {
Err error
}
func (*ErrAudioUploadFailed) Error ¶
func (e *ErrAudioUploadFailed) Error() string
func (*ErrAudioUploadFailed) Unwrap ¶
func (e *ErrAudioUploadFailed) Unwrap() error
type ErrCommandFailed ¶
func (*ErrCommandFailed) Error ¶
func (e *ErrCommandFailed) Error() string
func (*ErrCommandFailed) Is ¶
func (e *ErrCommandFailed) Is(target error) bool
func (*ErrCommandFailed) Unwrap ¶
func (e *ErrCommandFailed) Unwrap() error
type ErrCommandKilled ¶
func (*ErrCommandKilled) Error ¶
func (e *ErrCommandKilled) Error() string
func (*ErrCommandKilled) Is ¶
func (e *ErrCommandKilled) Is(target error) bool
func (*ErrCommandKilled) Unwrap ¶
func (e *ErrCommandKilled) Unwrap() error
type ErrTranscodeFailed ¶
type ErrTranscodeFailed struct {
Err error
}
func (*ErrTranscodeFailed) Error ¶
func (e *ErrTranscodeFailed) Error() string
func (*ErrTranscodeFailed) Unwrap ¶
func (e *ErrTranscodeFailed) Unwrap() error
type ErrTranscodeTimeout ¶
type ErrTranscodeTimeout struct {
Err error
}
func (*ErrTranscodeTimeout) Error ¶
func (e *ErrTranscodeTimeout) Error() string
func (*ErrTranscodeTimeout) Unwrap ¶
func (e *ErrTranscodeTimeout) Unwrap() error
type ErrVideoUploadFailed ¶
type ErrVideoUploadFailed struct {
Err error
}
func (*ErrVideoUploadFailed) Error ¶
func (e *ErrVideoUploadFailed) Error() string
func (*ErrVideoUploadFailed) Unwrap ¶
func (e *ErrVideoUploadFailed) Unwrap() error
type FeatureFlags ¶
FeatureFlags describes a set of Pods optional Features and whether they are enabled or disabled
func NewFeatureFlags ¶
func NewFeatureFlags() *FeatureFlags
func (*FeatureFlags) AsStrings ¶
func (f *FeatureFlags) AsStrings() []string
func (*FeatureFlags) Disable ¶
func (f *FeatureFlags) Disable(feature FeatureType)
func (*FeatureFlags) DisableAll ¶
func (f *FeatureFlags) DisableAll(features []FeatureType)
func (*FeatureFlags) Enable ¶
func (f *FeatureFlags) Enable(feature FeatureType)
func (*FeatureFlags) EnableAll ¶
func (f *FeatureFlags) EnableAll(features []FeatureType)
func (*FeatureFlags) IsEnabled ¶
func (f *FeatureFlags) IsEnabled(feature FeatureType) bool
func (*FeatureFlags) MarshalJSON ¶
func (f *FeatureFlags) MarshalJSON() ([]byte, error)
func (*FeatureFlags) MarshalYAML ¶
func (f *FeatureFlags) MarshalYAML() (interface{}, error)
func (*FeatureFlags) Reset ¶
func (f *FeatureFlags) Reset()
func (*FeatureFlags) String ¶
func (f *FeatureFlags) String() string
func (*FeatureFlags) UnmarshalJSON ¶
func (f *FeatureFlags) UnmarshalJSON(b []byte) error
func (*FeatureFlags) UnmarshalYAML ¶
func (f *FeatureFlags) UnmarshalYAML(unmarshal func(interface{}) error) error
type FeatureType ¶
type FeatureType int
const ( // FeatureInvalid is the invalid feature (0) FeatureInvalid FeatureType = iota FeatureFoo FeatureMovingAverageFeedRefresh FeatureJumpTimelineAge FeatureWebSub )
func FeatureFromString ¶
func FeatureFromString(s string) (FeatureType, error)
func FeaturesFromStrings ¶
func FeaturesFromStrings(xs []string) ([]FeatureType, error)
func (FeatureType) String ¶
func (f FeatureType) String() string
type Feed ¶
type Feed struct { Name string Description string URL string CreatedAt time.Time AvatarHash string `defaulf:""` Followers map[string]string `default:"{}"` // contains filtered or unexported fields }
Feed ...
func (*Feed) AddFollower ¶
func (*Feed) FollowedBy ¶
func (*Feed) Source ¶
func (f *Feed) Source() types.FetchFeedRequests
type FeedSource ¶
func ParseFeedSource ¶
func ParseFeedSource(scanner *bufio.Scanner) (feedsources []FeedSource, err error)
type FeedSourceMap ¶
type FeedSourceMap map[string][]FeedSource
type FeedSources ¶
type FeedSources struct {
Sources FeedSourceMap `json:"sources"`
}
func FetchFeedSources ¶
func FetchFeedSources(conf *Config, sources []string) *FeedSources
func LoadFeedSources ¶
func LoadFeedSources(path string) (*FeedSources, error)
type FilterFunc ¶
FilterFunc ...
func FilterByMentionFactory ¶
func FilterByMentionFactory(u *User) FilterFunc
func FilterOutFeedsAndBotsFactory ¶
func FilterOutFeedsAndBotsFactory(conf *Config) FilterFunc
TODO: We need to define a formal way of declaring a feed is automated. Suggestion by @jan6 on #yarn.social is to introduce a new field: # automated = true
type FilterTwtsFunc ¶
func FilterTwtsFactory ¶
func FilterTwtsFactory(conf *Config) FilterTwtsFunc
FilterTwtsFactory returns a function that filters out Twts from users/feeds that a User has chosen to mute or are otherwise shadowed by the Pod (as decided by a Pod Owner/Operator).
type FixAdminFeedsJob ¶
type FixAdminFeedsJob struct {
// contains filtered or unexported fields
}
func (*FixAdminFeedsJob) Run ¶
func (job *FixAdminFeedsJob) Run()
func (*FixAdminFeedsJob) String ¶
func (job *FixAdminFeedsJob) String() string
type FrontMatter ¶
type FuncTask ¶
type FuncTask struct { *BaseTask // contains filtered or unexported fields }
func NewFuncTask ¶
type ImageOptions ¶
type ImageTask ¶
type ImageTask struct { *BaseTask // contains filtered or unexported fields }
func NewImageTask ¶
type Job ¶
func NewActiveUsersJob ¶
func NewCreateAdminFeedsJob ¶
func NewDeleteOldSessionsJob ¶
func NewFixAdminFeedsJob ¶
func NewPruneFollowersJob ¶
func NewPruneUsersJob ¶
func NewRotateFeedsJob ¶
func NewSyncStoreJob ¶
func NewUpdateFeedSourcesJob ¶
type JobFactory ¶
type JobSpec ¶
type JobSpec struct { Schedule string Factory JobFactory }
JobSpec ...
func NewJobSpec ¶
func NewJobSpec(schedule string, factory JobFactory) JobSpec
type MagicLinkAuthContext ¶
type MultiUserAgent ¶
type MultiUserAgent struct { WhoFollowsURL string SupportURL string // contains filtered or unexported fields }
MultiUserAgent is a multi-user Twtxt client, currently only `yarnd` is such a client.
func (*MultiUserAgent) Followers ¶
func (ua *MultiUserAgent) Followers(conf *Config) types.Followers
func (*MultiUserAgent) IsPublicURL ¶
func (ua *MultiUserAgent) IsPublicURL() bool
func (*MultiUserAgent) PodBaseURL ¶
func (ua *MultiUserAgent) PodBaseURL() string
func (*MultiUserAgent) String ¶
func (ua *MultiUserAgent) String() string
type NewUserEmailContext ¶
type NullArchiver ¶
type NullArchiver struct{}
NullArchiver implements Archiver using dummy implementation stubs
func (*NullArchiver) Count ¶
func (a *NullArchiver) Count() (int, error)
func (*NullArchiver) Del ¶
func (a *NullArchiver) Del(hash string) error
func (*NullArchiver) Has ¶
func (a *NullArchiver) Has(hash string) bool
type Option ¶
Option is a function that takes a config struct and modifies it
func WithAPISessionTime ¶
WithAPISessionTime sets the API session time for tokens
func WithAPISigningKey ¶
WithAPISigningKey sets the API JWT signing key for tokens
func WithAdminEmail ¶
WithAdminEmail sets the Admin email used to contact the pod operator
func WithAdminName ¶
WithAdminName sets the Admin name used to identify the pod operator
func WithAdminUser ¶
WithAdminUser sets the Admin user used for granting special features to
func WithBaseURL ¶
WithBaseURL sets the Base URL used for constructing feed URLs
func WithBlockedFeeds ¶
WithBlockedFeeds sets the list of feed uris blocked and prohibited from being fetched by the global feed cache
func WithCookieSecret ¶
WithCookieSecret sets the server's cookie secret
func WithDescription ¶
WithDescription sets the instance's description
func WithDisableFfmpeg ¶
WithDisableFfmpeg sets the disable ffmpeg flag
func WithDisableGzip ¶
WithDisableGzip sets the disable Gzip flag
func WithDisableLogger ¶
WithDisableLogger sets the disable Logger flag
func WithDisableMedia ¶
WithDisableMedia sets the disable Media flag
func WithEnabledFeatures ¶
func WithEnabledFeatures(features []FeatureType) Option
WithEnabledFeatures enables the selected features
func WithFeedSources ¶
WithFeedSources sets the feed sources to use for external feeds
func WithFetchInterval ¶
WithFetchInterval sets the cache fetch interval Accepts a string as parsed by `time.ParseDuration`
func WithMagicLinkSecret ¶
WithMagicLinkSecret sets the MagicLinkSecert used to create password reset tokens
func WithMaxCacheFetchers ¶
WithMaxCacheFetchers sets the maximum number of fetchers for the feed cache
func WithMaxCacheItems ¶
WithMaxCacheItems sets the maximum cache items (per feed source) of twts in memory
func WithMaxCacheTTL ¶
WithMaxCacheTTL sets the maximum cache ttl of twts in memory
func WithMaxFetchLimit ¶
WithMaxFetchLimit sets the maximum feed fetch limit in bytes
func WithMaxTwtLength ¶
WithMaxTwtLength sets the maximum length of posts permitted on the server
func WithMaxUploadSize ¶
WithMaxUploadSize sets the maximum upload size permitted by the server
func WithOpenProfiles ¶
WithOpenProfiles sets whether or not to have open user profiles
func WithOpenRegistrations ¶
WithOpenRegistrations sets the open registrations flag
func WithPermittedImages ¶
WithPermittedImages sets the list of image domains permitted for external iamges to display inline
func WithSMTPFrom ¶
WithSMTPFrom sets the SMTPFrom address to use for sending email
func WithSMTPHost ¶
WithSMTPHost sets the SMTPHost to use for sending email
func WithSMTPPass ¶
WithSMTPPass sets the SMTPPass to use for sending email
func WithSMTPPort ¶
WithSMTPPort sets the SMTPPort to use for sending email
func WithSMTPUser ¶
WithSMTPUser sets the SMTPUser to use for sending email
func WithSessionCacheTTL ¶
WithSessionCacheTTL sets the server's session cache ttl
func WithSessionExpiry ¶
WithSessionExpiry sets the server's session expiry time
func WithTLSCert ¶
WithTLSCert sets the path to a TLS certificate
func WithTLSKey ¶
WithTLSKey sets the path to a TLS private key
func WithTranscoderTimeout ¶
WithTranscoderTimeout sets the video transcoding timeout
func WithTwtsPerPage ¶
WithTwtsPerPage sets the server's twts per page
type Peer ¶
type Peer struct { URI string `json:"-"` Name string `json:"name"` Description string `json:"description"` SoftwareVersion string `json:"software_version"` // lastSeen records the timestamp of when we last saw this pod. LastSeen time.Time `json:"-"` // lastUpdated is used to periodically re-check the peering pod's /info endpoint in case of changes. LastUpdated time.Time `json:"-"` }
func (*Peer) ShouldRefresh ¶
type PruneFollowersJob ¶
type PruneFollowersJob struct {
// contains filtered or unexported fields
}
func (*PruneFollowersJob) Run ¶
func (job *PruneFollowersJob) Run()
func (*PruneFollowersJob) String ¶
func (job *PruneFollowersJob) String() string
type PruneUsersJob ¶
type PruneUsersJob struct {
// contains filtered or unexported fields
}
func (*PruneUsersJob) Run ¶
func (job *PruneUsersJob) Run()
func (*PruneUsersJob) String ¶
func (job *PruneUsersJob) String() string
type ReportAbuseEmailContext ¶
type RotateFeedsJob ¶
type RotateFeedsJob struct {
// contains filtered or unexported fields
}
func (*RotateFeedsJob) Run ¶
func (job *RotateFeedsJob) Run()
func (*RotateFeedsJob) String ¶
func (job *RotateFeedsJob) String() string
type Router ¶
type Router struct { httprouter.Router // contains filtered or unexported fields }
Router ...
func (*Router) DELETE ¶
func (r *Router) DELETE(path string, handle httprouter.Handle)
DELETE is a shortcut for Router.Handle("DELETE", path, handle)
func (*Router) GET ¶
func (r *Router) GET(path string, handle httprouter.Handle)
GET is a shortcut for Router.Handle("GET", path, handle)
func (*Router) Group ¶
func (r *Router) Group(path string, m ...Middleware) *Router
Group returns new *Router with given path and middlewares. It should be used for handles which have same path prefix or common middlewares.
func (*Router) HEAD ¶
func (r *Router) HEAD(path string, handle httprouter.Handle)
HEAD is a shortcut for Router.Handle("HEAD", path, handle)
func (*Router) Handle ¶
func (r *Router) Handle(method, path string, handle httprouter.Handle)
Handle registers a new request handle combined with middlewares.
func (*Router) HandlerFunc ¶
func (r *Router) HandlerFunc(method, path string, handler http.HandlerFunc)
HandlerFunc is an adapter for http.HandlerFunc.
func (*Router) OPTIONS ¶
func (r *Router) OPTIONS(path string, handle httprouter.Handle)
OPTIONS is a shortcut for Router.Handle("OPTIONS", path, handle)
func (*Router) PATCH ¶
func (r *Router) PATCH(path string, handle httprouter.Handle)
PATCH is a shortcut for Router.Handle("PATCH", path, handle)
func (*Router) POST ¶
func (r *Router) POST(path string, handle httprouter.Handle)
POST is a shortcut for Router.Handle("POST", path, handle)
func (*Router) PUT ¶
func (r *Router) PUT(path string, handle httprouter.Handle)
PUT is a shortcut for Router.Handle("PUT", path, handle)
func (*Router) ServeFiles ¶
func (r *Router) ServeFiles(path string, root http.FileSystem)
ServeFiles ...
func (*Router) ServeFilesWithCacheControl ¶
ServeFilesWithCacheControl ...
func (*Router) Use ¶
func (r *Router) Use(m ...Middleware) *Router
Use appends new middleware to current Router.
type Server ¶
type Server struct { // Factory Functions AppendTwt AppendTwtFunc FilterTwts FilterTwtsFunc // contains filtered or unexported fields }
Server ...
func (*Server) AddCronJob ¶
AddCronJob ...
func (*Server) AddUserHandler ¶
func (s *Server) AddUserHandler() httprouter.Handle
AddUserHandler ...
func (*Server) BookmarkHandler ¶
func (s *Server) BookmarkHandler() httprouter.Handle
BookmarkHandler ...
func (*Server) BookmarksHandler ¶
func (s *Server) BookmarksHandler() httprouter.Handle
BookmarksHandler ...
func (*Server) CaptchaHandler ¶
func (s *Server) CaptchaHandler() httprouter.Handle
CaptchaHandler ...
func (*Server) ConversationHandler ¶
func (s *Server) ConversationHandler() httprouter.Handle
ConversationHandler ...
func (*Server) DelFeedHandler ¶
func (s *Server) DelFeedHandler() httprouter.Handle
DelFeedHandler ...
func (*Server) DelUserHandler ¶
func (s *Server) DelUserHandler() httprouter.Handle
DelUserHandler ...
func (*Server) DeleteFeedHandler ¶
func (s *Server) DeleteFeedHandler() httprouter.Handle
DeleteFeedHandler...
func (*Server) DiscoverHandler ¶
func (s *Server) DiscoverHandler() httprouter.Handle
DiscoverHandler ...
func (*Server) ExternalAvatarHandler ¶
func (s *Server) ExternalAvatarHandler() httprouter.Handle
ExternalAvatarHandler ...
func (*Server) ExternalFollowingHandler ¶
func (s *Server) ExternalFollowingHandler() httprouter.Handle
ExternalFollowingHandler ...
func (*Server) ExternalHandler ¶
func (s *Server) ExternalHandler() httprouter.Handle
ExternalHandler ...
func (*Server) FollowersHandler ¶
func (s *Server) FollowersHandler() httprouter.Handle
FollowersHandler ...
func (*Server) FollowingHandler ¶
func (s *Server) FollowingHandler() httprouter.Handle
FollowingHandler ...
func (*Server) IndieAuthCallbackHandler ¶
func (s *Server) IndieAuthCallbackHandler() httprouter.Handle
IndieAuthCallbackHandler ...
func (*Server) IndieAuthHandler ¶
func (s *Server) IndieAuthHandler() httprouter.Handle
IndieAuthHandler ...
func (*Server) IndieAuthVerifyHandler ¶
func (s *Server) IndieAuthVerifyHandler() httprouter.Handle
IndieAuthVerifyHandler ...
func (*Server) LoginEmailHandler ¶
func (s *Server) LoginEmailHandler() httprouter.Handle
LoginEmailHandler ...
func (*Server) MagicLinkAuthHandler ¶
func (s *Server) MagicLinkAuthHandler() httprouter.Handle
MagicLinkAuthHandler ...
func (*Server) ManageFeedHandler ¶
func (s *Server) ManageFeedHandler() httprouter.Handle
ManageFeedHandler...
func (*Server) ManageJobsHandler ¶
func (s *Server) ManageJobsHandler() httprouter.Handle
ManageJobsHandler ...
func (*Server) ManagePeersHandler ¶
func (s *Server) ManagePeersHandler() httprouter.Handle
ManagePeersHandler ...
func (*Server) ManagePodHandler ¶
func (s *Server) ManagePodHandler() httprouter.Handle
ManagePodHandler ...
func (*Server) ManageUsersHandler ¶
func (s *Server) ManageUsersHandler() httprouter.Handle
ManageUsersHandler ...
func (*Server) MentionsHandler ¶
func (s *Server) MentionsHandler() httprouter.Handle
MentionsHandler ...
func (*Server) NewPasswordHandler ¶
func (s *Server) NewPasswordHandler() httprouter.Handle
NewPasswordHandler ...
func (*Server) NotFoundHandler ¶
func (s *Server) NotFoundHandler(w http.ResponseWriter, r *http.Request)
func (*Server) PageHandler ¶
func (s *Server) PageHandler(name string) httprouter.Handle
PageHandler ...
func (*Server) PermalinkHandler ¶
func (s *Server) PermalinkHandler() httprouter.Handle
PermalinkHandler ...
func (*Server) PodConfigHandler ¶
func (s *Server) PodConfigHandler() httprouter.Handle
PodConfigHandler ...
func (*Server) PodInfoHandler ¶
func (s *Server) PodInfoHandler() httprouter.Handle
PodInfoHandler ...
func (*Server) PostHandler ¶
func (s *Server) PostHandler() httprouter.Handle
PostHandler handles the creation/modification/deletion of a twt.
TODO: Support deleting/patching last feed (`postas`) twt too.
func (*Server) ProfileHandler ¶
func (s *Server) ProfileHandler() httprouter.Handle
ProfileHandler ...
func (*Server) RefreshCacheHandler ¶
func (s *Server) RefreshCacheHandler() httprouter.Handle
RefreshCacheHandler ...
func (*Server) RegisterHandler ¶
func (s *Server) RegisterHandler() httprouter.Handle
RegisterHandler ...
func (*Server) ResetPasswordHandler ¶
func (s *Server) ResetPasswordHandler() httprouter.Handle
ResetPasswordHandler ...
func (*Server) ResetPasswordMagicLinkHandler ¶
func (s *Server) ResetPasswordMagicLinkHandler() httprouter.Handle
ResetPasswordMagicLinkHandler ...
func (*Server) RstUserHandler ¶
func (s *Server) RstUserHandler() httprouter.Handle
RstUserHandler ...
func (*Server) SettingsAddLinkHandler ¶
func (s *Server) SettingsAddLinkHandler() httprouter.Handle
SettingsAddLinkHandler ...
func (*Server) SettingsHandler ¶
func (s *Server) SettingsHandler() httprouter.Handle
SettingsHandler ...
func (*Server) SettingsRemoveLinkHandler ¶
func (s *Server) SettingsRemoveLinkHandler() httprouter.Handle
SettingsRemoveLinkHandler ...
func (*Server) SupportHandler ¶
func (s *Server) SupportHandler() httprouter.Handle
SupportHandler ...
func (*Server) SyndicationHandler ¶
func (s *Server) SyndicationHandler() httprouter.Handle
SyndicationHandler ...
func (*Server) TimelineHandler ¶
func (s *Server) TimelineHandler() httprouter.Handle
TimelineHandler ...
func (*Server) UnfollowHandler ¶
func (s *Server) UnfollowHandler() httprouter.Handle
UnfollowHandler ...
func (*Server) UploadMediaHandler ¶
func (s *Server) UploadMediaHandler() httprouter.Handle
UploadMediaHandler ...
func (*Server) UserConfigHandler ¶
func (s *Server) UserConfigHandler() httprouter.Handle
UserConfigHandler ...
func (*Server) WebMentionHandler ¶
func (s *Server) WebMentionHandler() httprouter.Handle
WebMentionHandler ...
func (*Server) WhoFollowsHandler ¶
func (s *Server) WhoFollowsHandler() httprouter.Handle
WhoFollowsHandler ...
type SessionStore ¶
type SessionStore struct {
// contains filtered or unexported fields
}
SessionStore ...
func NewSessionStore ¶
func NewSessionStore(store Store, sessionCacheTTL time.Duration) *SessionStore
func (*SessionStore) Count ¶
func (s *SessionStore) Count() int
func (*SessionStore) DelSession ¶
func (s *SessionStore) DelSession(sid string) error
func (*SessionStore) GetAllSessions ¶
func (s *SessionStore) GetAllSessions() ([]*session.Session, error)
func (*SessionStore) GetSession ¶
func (s *SessionStore) GetSession(sid string) (*session.Session, error)
func (*SessionStore) HasSession ¶
func (s *SessionStore) HasSession(sid string) bool
func (*SessionStore) SetSession ¶
func (s *SessionStore) SetSession(sid string, sess *session.Session) error
func (*SessionStore) SyncSession ¶
func (s *SessionStore) SyncSession(sess *session.Session) error
type Settings ¶
type Settings struct { Name string `yaml:"pod_name"` Logo string `yaml:"pod_logo"` CSS string `yaml:"pod_css"` Description string `yaml:"pod_description"` AlertFloat bool `yaml:"pod_alert_float"` AlertGuest bool `yaml:"pod_alert_guest"` AlertMessage string `yaml:"pod_alert_message"` AlertType string `yaml:"pod_alert_type"` MaxTwtLength int `yaml:"max_twt_length"` TwtsPerPage int `yaml:"twts_per_page"` MediaResolution int `yaml:"media_resolution"` AvatarResolution int `yaml:"avatar_resolution"` OpenProfiles bool `yaml:"open_profiles"` OpenRegistrations bool `yaml:"open_registrations"` // XXX: Deprecated fields (See: https://git.mills.io/yarnsocial/yarn/pulls/711) // TODO: Remove post v0.14.x BlacklistedFeeds []string `yaml:"blacklisted_feeds"` WhitelistedImages []string `yaml:"whitelisted_images"` BlockedFeeds []string `yaml:"blocked_feeds"` PermittedImages []string `yaml:"permitted_images"` Features *FeatureFlags `yaml:"features"` // Pod Level Settings (overridable by Users) DisplayDatesInTimezone string `yaml:"display_dates_in_timezone"` DisplayTimePreference string `yaml:"display_time_preference"` OpenLinksInPreference string `yaml:"open_links_in_preference"` DisplayImagesPreference string `yaml:"display_images_preference"` DisplayMedia bool `yaml:"display_media"` OriginalMedia bool `yaml:"original_media"` VisibilityCompact bool `yaml:"visibility_compact"` VisibilityReadmore bool `yaml:"visibility_readmore"` LinkVerification bool `yaml:"link_verification"` StripTrackingParam bool `yaml:"strip_trackingparam"` CustomPrimaryColor string `yaml:"custom_primarycolor"` CustomSecondaryColor string `yaml:"custom_secondarycolor"` }
Settings contains Pod Settings that can be customised via the Web UI
func LoadSettings ¶
LoadSettings loads pod settings from the given path
type SingleUserAgent ¶
SingleUserAgent is a single Twtxt User Agent whether it be `tt`, `jenny` or a single-user `yarnd` client.
func (*SingleUserAgent) Followers ¶
func (ua *SingleUserAgent) Followers(conf *Config) types.Followers
func (*SingleUserAgent) IsPublicURL ¶
func (ua *SingleUserAgent) IsPublicURL() bool
func (*SingleUserAgent) PodBaseURL ¶
func (ua *SingleUserAgent) PodBaseURL() string
func (*SingleUserAgent) String ¶
func (ua *SingleUserAgent) String() string
type SoftwareConfig ¶
type SoftwareConfig struct { Software string FullVersion string Version string Commit string Author string License string Copyright string }
SoftwareConfig contains the server version information
type Store ¶
type Store interface { Merge() error Close() error Sync() error DelFeed(name string) error HasFeed(name string) bool GetFeed(name string) (*Feed, error) SetFeed(name string, user *Feed) error LenFeeds() int64 SearchFeeds(prefix string) []string GetAllFeeds() ([]*Feed, error) DelUser(username string) error HasUser(username string) bool GetUser(username string) (*User, error) SetUser(username string, user *User) error LenUsers() int64 SearchUsers(prefix string) []string GetAllUsers() ([]*User, error) GetSession(sid string) (*session.Session, error) SetSession(sid string, sess *session.Session) error HasSession(sid string) bool DelSession(sid string) error SyncSession(sess *session.Session) error LenSessions() int64 GetAllSessions() ([]*session.Session, error) }
type StoreFactory ¶
type SyncStoreJob ¶
type SyncStoreJob struct {
// contains filtered or unexported fields
}
func (*SyncStoreJob) Run ¶
func (job *SyncStoreJob) Run()
func (*SyncStoreJob) String ¶
func (job *SyncStoreJob) String() string
type TTLCache ¶
func NewTTLCache ¶
type Task ¶
type Task interface { fmt.Stringer ID() string State() TaskState Result() TaskResult Error() error Run() error }
Task is an interface that represents a single task to be executed by a worker. Any object can implement a `Task` if it implements the interface.
type TaskResult ¶
type TemplateManager ¶
func NewTemplateManager ¶
func NewTemplateManager(conf *Config, translator *Translator, cache *Cache, archive Archiver) (*TemplateManager, error)
func (*TemplateManager) Add ¶
func (m *TemplateManager) Add(name string, template *template.Template)
func (*TemplateManager) LoadTemplates ¶
func (m *TemplateManager) LoadTemplates() error
type Token ¶
type Token struct { Signature string Value string UserAgent string CreatedAt time.Time ExpiresAt time.Time }
Token ...
type Translator ¶
func NewTranslator ¶
func NewTranslator() (*Translator, error)
type TwtTextFormat ¶
type TwtTextFormat int
TwtTextFormat represents the format of which the twt text gets formatted to
const ( // MarkdownFmt to use markdown format MarkdownFmt TwtTextFormat = iota // HTMLFmt to use HTML format HTMLFmt // TextFmt to use for og:description TextFmt )
type TwtxtUserAgent ¶
type TwtxtUserAgent interface { fmt.Stringer // IsPod returns true if the Twtxt client's User-Agent appears to be a Yarn.social pod (single or multi-user). IsPod() bool // PodBaseURL returns the base URL of the client's User-Agent if it appears to be a Yarn.social pod (single or multi-user). PodBaseURL() string // IsPublicURL returns true if the Twtxt client's User-Agent is from what appears to be the public internet. IsPublicURL() bool // Followers returns a list of followers for this client follows, in the case of a // single user agent, it is simply a list of itself, with a multi-user agent the // client (i.e: a `yarnd` pod) is aksed who followers the user/feed by requesting // the whoFollows resource Followers(conf *Config) types.Followers }
TwtxtUserAgent ...
func ParseUserAgent ¶
func ParseUserAgent(ua string) (TwtxtUserAgent, error)
type URLProcessor ¶
type URLProcessor struct { Images []string // contains filtered or unexported fields }
func (*URLProcessor) RenderNodeHook ¶
func (p *URLProcessor) RenderNodeHook(w io.Writer, node ast.Node, entering bool) (ast.WalkStatus, bool)
type UpdateFeedSourcesJob ¶
type UpdateFeedSourcesJob struct {
// contains filtered or unexported fields
}
func (*UpdateFeedSourcesJob) Run ¶
func (job *UpdateFeedSourcesJob) Run()
func (*UpdateFeedSourcesJob) String ¶
func (job *UpdateFeedSourcesJob) String() string
type UpdateFeedsJob ¶
type UpdateFeedsJob struct {
// contains filtered or unexported fields
}
func (*UpdateFeedsJob) Run ¶
func (job *UpdateFeedsJob) Run()
func (*UpdateFeedsJob) String ¶
func (job *UpdateFeedsJob) String() string
type User ¶
type User struct { Username string Password string Tagline string URL string CreatedAt time.Time LastSeenAt time.Time StartPage string `default:"#origin"` Theme string `default:"auto"` Lang string `default:""` Recovery string `default:""` AvatarHash string `default:""` DisplayDatesInTimezone string `default:"UTC"` DisplayTimePreference string `default:"24h"` OpenLinksInPreference string `default:"newwindow"` DisplayTimelinePreference string `default:"list"` DisplayImagesPreference string `default:"inline"` DisplayMedia bool `default:"true"` OriginalMedia bool `default:"false"` VisibilityCompact bool `default:"false"` VisibilityReadmore bool `default:"false"` LinkVerification bool `default:"false"` StripTrackingParam bool `default:"false"` CustomPrimaryColor string `default:""` CustomSecondaryColor string `default:""` IsFollowersPubliclyVisible bool `default:"true"` IsFollowingPubliclyVisible bool `default:"true"` IsBookmarksPubliclyVisible bool `default:"true"` Feeds []string `default:"[]"` Bookmarks map[string]string `default:"{}"` Followers map[string]string `default:"{}"` Following map[string]string `default:"{}"` Links map[string]string `default:"{}"` Muted map[string]string `default:"{}"` // contains filtered or unexported fields }
User ...
func GetUserFromTwter ¶
func (*User) AddFollower ¶
func (*User) Bookmarked ¶
func (*User) DisplayTimeFormat ¶
func (*User) FollowAndValidate ¶
func (*User) FollowedBy ¶
func (*User) RemoveLink ¶
func (*User) Source ¶
func (u *User) Source() types.FetchFeedRequests
func (*User) Sources ¶
func (u *User) Sources() types.FetchFeedRequests
type VideoOptions ¶
type VideoTask ¶
type VideoTask struct { *BaseTask // contains filtered or unexported fields }
func NewVideoTask ¶
type Worker ¶
type Worker struct {
// contains filtered or unexported fields
}
Worker attaches to a provided worker pool, and looks for tasks on its task channel
func NewWorker ¶
NewWorker creates a new worker using the given id and attaches to the provided worker pool. It also initializes the task/quit channels
type YarndUserAgent ¶
type YarndUserAgent struct { Name string SupportURL string // contains filtered or unexported fields }
YarndUserAgent is a generic `yarnd` client.
func (*YarndUserAgent) Followers ¶
func (ua *YarndUserAgent) Followers(conf *Config) types.Followers
func (*YarndUserAgent) IsPublicURL ¶
func (ua *YarndUserAgent) IsPublicURL() bool
func (*YarndUserAgent) PodBaseURL ¶
func (ua *YarndUserAgent) PodBaseURL() string
func (*YarndUserAgent) String ¶
func (ua *YarndUserAgent) String() string
Source Files
¶
- api.go
- archive.go
- audio_task.go
- base_task.go
- bitcask_store.go
- bookmark_handlers.go
- cache.go
- config.go
- context.go
- conversation_handler.go
- dispatcher.go
- email.go
- errors.go
- external_handlers.go
- features.go
- feeds_handlers.go
- feedsources.go
- follow_handlers.go
- func_task.go
- handlers.go
- image_task.go
- indieauth_handlers.go
- init.go
- jobs.go
- login_handlers.go
- logout_handler.go
- manage_handlers.go
- media_handlers.go
- models.go
- mute_handlers.go
- options.go
- page_handlers.go
- password_handlers.go
- permalink_handler.go
- post_handler.go
- profile_handler.go
- register_handler.go
- robots.go
- router.go
- search_handler.go
- server.go
- session_store.go
- settings_handlers.go
- stats.go
- store.go
- support_handlers.go
- task.go
- templates.go
- tokencache.go
- translator.go
- ttlcache.go
- twt.go
- twtxt_handlers.go
- utils.go
- video_task.go
- view_handlers.go
- websub_handlers.go
- whofollows_handler.go
- worker.go