Documentation ¶
Index ¶
- Constants
- Variables
- func APIHandler(inner CustomHandlerFunc) http.Handler
- func ActiveServerMW(inner http.Handler) http.Handler
- func AddGlobalTemplateData(key string, data interface{})
- func AddHTMLTemplate(name, contents string)
- func AddSidebarItem(category string, sItem *SidebarItem)
- func BaseTemplateDataMiddleware(inner http.Handler) http.Handler
- func BaseURL() string
- func CSRFProtectionMW(inner http.Handler) http.Handler
- func CheckCSRFToken(token string) (bool, error)
- func CheckErr(t TemplateData, err error, errMsg string, logger func(...interface{})) bool
- func ContextGuild(ctx context.Context) *dstate.GuildSet
- func ContextIsAdmin(ctx context.Context) bool
- func ContextMember(ctx context.Context) *discordgo.Member
- func ContextMemberPerms(ctx context.Context) int64
- func ContextUser(ctx context.Context) *discordgo.User
- func ControllerHandler(f ControllerHandlerFunc, templateName string) http.Handler
- func ControllerPostHandler(mainHandler ControllerHandlerFunc, extraHandler http.Handler, ...) http.Handler
- func CreateCSRFToken() (string, error)
- func CreateCookieSession(token *oauth2.Token) (cookie *http.Cookie, err error)
- func CtxLogger(ctx context.Context) *logrus.Entry
- func DiscordSessionFromContext(ctx context.Context) *discordgo.Session
- func EnabledDisabledSpanStatus(enabled bool) (str string)
- func FormParserMW(inner http.Handler, dst interface{}) http.Handler
- func GenSessionCookie() *http.Cookie
- func GetIsReadOnly(ctx context.Context) bool
- func GetRequestIP(r *http.Request) string
- func GetUserAccessLevel(userID int64, g *common.GuildWithConnected, config *models.CoreConfig, ...) (hasRead bool, hasWrite bool)
- func GetUserGuilds(ctx context.Context) ([]*common.GuildWithConnected, error)
- func GuildScopeCacheMW(plugin common.Plugin, inner http.Handler) http.Handler
- func HandleCPLogs(w http.ResponseWriter, r *http.Request) interface{}
- func HandleChanenlPermissions(w http.ResponseWriter, r *http.Request) interface{}
- func HandleConfirmLogin(w http.ResponseWriter, r *http.Request)
- func HandleLogin(w http.ResponseWriter, r *http.Request)
- func HandleLogout(w http.ResponseWriter, r *http.Request)
- func HandleSelectServer(w http.ResponseWriter, r *http.Request) interface{}
- func HandleStatusJSON(w http.ResponseWriter, r *http.Request) interface{}
- func HasAccesstoGuildSettings(userID int64, g *common.GuildWithConnected, config *models.CoreConfig, ...) bool
- func HasPermissionCTX(ctx context.Context, aperms int64) bool
- func Indicator(enabled bool) string
- func InitOauth()
- func IsAcceptingRequests() bool
- func IsAdminRequest(ctx context.Context, r *http.Request) (read bool, write bool)
- func IsRequestPartial(ctx context.Context) bool
- func LoadCoreConfigMiddleware(inner http.Handler) http.Handler
- func LogIgnoreErr(err error)
- func MiscMiddleware(inner http.Handler) http.Handler
- func NewLogEntryFromContext(ctx context.Context, action string, params ...*cplogs.Param) *cplogs.LogEntry
- func NewPublicError(a ...interface{}) error
- func ParamOrEmpty(r *http.Request, key string) string
- func RandBase64(size int) string
- func RenderHandler(inner CustomHandlerFunc, tmpl string) http.Handler
- func RequestLogger(logger io.Writer) func(http.Handler) http.Handler
- func RequireActiveServer(inner http.Handler) http.Handler
- func RequireBotMemberMW(inner http.Handler) http.Handler
- func RequireBotOwnerMW(inner http.Handler) http.Handler
- func RequirePermMW(perms ...int64) func(http.Handler) http.Handler
- func RequireServerAdminMiddleware(inner http.Handler) http.Handler
- func RequireSessionMiddleware(inner http.Handler) http.Handler
- func Run()
- func SessionMiddleware(inner http.Handler) http.Handler
- func SetContextTemplateData(ctx context.Context, data map[string]interface{}) context.Context
- func SetGuildMemberMiddleware(inner http.Handler) http.Handler
- func SimpleConfigSaverHandler(t SimpleConfigSaver, extraHandler http.Handler, key string) http.Handler
- func SkipStaticMW(maybeSkip func(http.Handler) http.Handler, alwaysRunSuffixes ...string) func(http.Handler) http.Handler
- func StaticRoleProvider(roles []int64) func(guildID, userID int64) []int64
- func Stop()
- func UserInfoMiddleware(inner http.Handler) http.Handler
- func ValidateChannelField(s int64, channels []dstate.ChannelState, allowEmpty bool) error
- func ValidateFloatField(f float64, min, max float64, onlyMin bool) error
- func ValidateForm(guild *dstate.GuildSet, tmpl TemplateData, form interface{}) bool
- func ValidateIntField(i int64, tags *ValidationTag, guild *dstate.GuildSet, forceAllowEmpty bool) (keep bool, err error)
- func ValidateIntMinMaxField(i int64, min, max int64, onlyMin bool) error
- func ValidateIntSliceField(is []int64, tags *ValidationTag, guild *dstate.GuildSet) (filtered []int64, err error)
- func ValidateNormalStringField(s string, min, max int) error
- func ValidateRegexField(s string, max int) error
- func ValidateRoleField(s int64, roles []discordgo.Role, allowEmpty bool) error
- func ValidateStringField(s string, tags *ValidationTag, guild *dstate.GuildSet) (str string, err error)
- func ValidateTemplateField(s string, max int) error
- func WriteErrorResponse(w http.ResponseWriter, r *http.Request, err string, statusCode int)
- type APIError
- type Advertisement
- type Alert
- type BotStatus
- type ControlPanelPlugin
- type ControllerHandlerFunc
- type ControllerHandlerFuncJson
- type CoreConfigPostForm
- type CustomHandlerFunc
- type CustomResponseWriter
- type CustomValidator
- type HostStatus
- type Plugin
- type PluginWithServerHomeWidget
- type PluginWithServerHomeWidgetMiddlewares
- type PublicError
- type RenderedServerHomeWidget
- type ServerHomeWidgetWithOrder
- type SidebarItem
- type SimpleConfigSaver
- type TemplateData
- func GetBaseCPContextData(ctx context.Context) (*dstate.GuildSet, TemplateData)
- func GetCreateTemplateData(ctx context.Context) (context.Context, TemplateData)
- func HandleGetManagedGuilds(w http.ResponseWriter, r *http.Request) (TemplateData, error)
- func HandleLandingPage(w http.ResponseWriter, r *http.Request) (TemplateData, error)
- func HandlePostCoreSettings(w http.ResponseWriter, r *http.Request) (TemplateData, error)
- func HandleReconnectShard(w http.ResponseWriter, r *http.Request) (TemplateData, error)
- func HandleServerHome(w http.ResponseWriter, r *http.Request) (TemplateData, error)
- func HandleStatusHTML(w http.ResponseWriter, r *http.Request) (TemplateData, error)
- type ValidationTag
- type WidgetCacheItem
Constants ¶
const ( AlertDanger = "danger" AlertSuccess = "success" AlertInfo = "info" AlertWarning = "warning" )
const ( SidebarCategoryTopLevel = "Top" SidebarCategoryFeeds = "Feeds" SidebarCategoryTools = "Tools" SidebarCategoryFun = "Fun" SidebarCategoryCore = "Core" )
Variables ¶
var ( SessionCookieName = "yagpdb-session-3" OauthConf *oauth2.Config )
var ( ErrChannelNotFound = errors.New("channel not found") ErrRoleNotFound = errors.New("role not found") )
var ( // Core template files Templates *template.Template Debug = true // Turns on debug mode ListenAddressHTTP = ":5000" ListenAddressHTTPS = ":5001" // Muxers RootMux *goji.Mux CPMux *goji.Mux ServerPublicMux *goji.Mux ServerPublicAPIMux *goji.Mux StartedAt = time.Now() CurrentAd *Advertisement ConfAdVideos = config.RegisterOption("yagpdb.ad.video_paths", "Comma seperated list of video paths in different formats", "") ConfAdsTxt = config.RegisterOption("yagpdb.ads.ads_txt", "Path to the ads.txt file for monetization using ad networks", "") // can be overriden by plugins // main prurpose is to plug in a onboarding process through a properietary plugin SelectServerHomePageHandler http.Handler = RenderHandler(HandleSelectServer, "cp_selectserver") )
var (
ErrDuplicateToken = errors.New("somehow a duplicate token was found")
)
var ErrNotLoggedIn = errors.New("not logged in")
var ErrTokenExpired = errors.New("OAUTH2 Token expired")
var StaticFilesFS fs.FS = frontend.StaticFiles
var WidgetCache = cache.New(time.Second*10, time.Second*10)
Functions ¶
func APIHandler ¶
func APIHandler(inner CustomHandlerFunc) http.Handler
A helper wrapper that json encodes the returned value
func ActiveServerMW ¶
Sets the active guild context and template data It will only attempt to fetch full guild if not logged in
func AddGlobalTemplateData ¶
func AddGlobalTemplateData(key string, data interface{})
func AddHTMLTemplate ¶ added in v1.31.10
func AddHTMLTemplate(name, contents string)
func AddSidebarItem ¶ added in v1.19.0
func AddSidebarItem(category string, sItem *SidebarItem)
func BaseTemplateDataMiddleware ¶
Fills the template data in the context with basic data such as clientid and redirects
func CheckCSRFToken ¶
CheckCSRFToken returns true if it matched and false if not, an error if something bad happened
func CheckErr ¶
func CheckErr(t TemplateData, err error, errMsg string, logger func(...interface{})) bool
Checks and error and logs it aswell as adding it to the alerts returns true if an error occured
func ContextGuild ¶ added in v1.6.0
func ContextIsAdmin ¶ added in v1.17.0
func ContextMember ¶ added in v1.15.1
func ContextMemberPerms ¶ added in v1.17.0
func ContextUser ¶ added in v1.6.0
func ControllerHandler ¶
func ControllerHandler(f ControllerHandlerFunc, templateName string) http.Handler
Handlers can return templatedata and an erro. If error is not nil and publicerror it will be added as an alert, if error is not a publicerror it will render a error page
func ControllerPostHandler ¶
func ControllerPostHandler(mainHandler ControllerHandlerFunc, extraHandler http.Handler, formData interface{}) http.Handler
Uses the FormParserMW to parse and validate the form, then saves it
func CreateCSRFToken ¶
CreateCSRFToken creates a csrf token and adds it the list
func CreateCookieSession ¶
CreateCookieSession creates a session cookie where the value is the access token itself, this way we don't have to store it on our end anywhere.
func CtxLogger ¶
CtxLogger Returns an always non nil entry either from the context or standard logger
func EnabledDisabledSpanStatus ¶ added in v1.17.0
func FormParserMW ¶
Parses a form
func GenSessionCookie ¶
func GetIsReadOnly ¶ added in v1.31.10
func GetRequestIP ¶ added in v1.19.11
func GetUserAccessLevel ¶ added in v1.31.10
func GetUserAccessLevel(userID int64, g *common.GuildWithConnected, config *models.CoreConfig, roleProvider func(guildID, userID int64) []int64) (hasRead bool, hasWrite bool)
func GetUserGuilds ¶ added in v1.17.0
func GetUserGuilds(ctx context.Context) ([]*common.GuildWithConnected, error)
func GuildScopeCacheMW ¶ added in v1.17.0
Writes the request log into logger, returns a new middleware
func HandleCPLogs ¶
func HandleCPLogs(w http.ResponseWriter, r *http.Request) interface{}
func HandleChanenlPermissions ¶
func HandleChanenlPermissions(w http.ResponseWriter, r *http.Request) interface{}
func HandleConfirmLogin ¶
func HandleConfirmLogin(w http.ResponseWriter, r *http.Request)
func HandleLogin ¶
func HandleLogin(w http.ResponseWriter, r *http.Request)
func HandleLogout ¶
func HandleLogout(w http.ResponseWriter, r *http.Request)
func HandleSelectServer ¶
func HandleSelectServer(w http.ResponseWriter, r *http.Request) interface{}
func HandleStatusJSON ¶ added in v1.31.10
func HandleStatusJSON(w http.ResponseWriter, r *http.Request) interface{}
HandleStatusJSON handles GET /status.json
func HasAccesstoGuildSettings ¶ added in v1.17.0
func HasAccesstoGuildSettings(userID int64, g *common.GuildWithConnected, config *models.CoreConfig, roleProvider func(guildID, userID int64) []int64, write bool) bool
HasAccesstoGuildSettings retrusn true if the specified user (or 0 if not logged in or not on the server) has access
func IsAcceptingRequests ¶
func IsAcceptingRequests() bool
func IsAdminRequest ¶ added in v1.6.0
Checks the context if there is a logged in user and if so if he's and admin or not
func IsRequestPartial ¶ added in v1.6.0
func LoadCoreConfigMiddleware ¶ added in v1.17.0
LoadCoreConfigMiddleware ensures that the core config is available
func LogIgnoreErr ¶
func LogIgnoreErr(err error)
func MiscMiddleware ¶
Misc mw that adds some headers, (Strict-Transport-Security) And discards requests when shutting down And a logger
func NewLogEntryFromContext ¶ added in v1.31.10
func NewPublicError ¶
func NewPublicError(a ...interface{}) error
func RandBase64 ¶
func RenderHandler ¶
func RenderHandler(inner CustomHandlerFunc, tmpl string) http.Handler
A helper wrapper that renders a template
func RequestLogger ¶
Writes the request log into logger, returns a new middleware
func RequireActiveServer ¶
RequireActiveServer ensures that were accessing a guild specific page, and guild information is available (e.g a valid guild)
func RequireBotMemberMW ¶
RequireBotMemberMW ensures that the bot member for the curreng guild is available, mostly used for checking the bot's roles
func RequireBotOwnerMW ¶ added in v1.31.10
RequireBotOwnerMW requires the user to be logged in and that they're a bot owner
func RequireServerAdminMiddleware ¶
RequireServerAdminMiddleware restricts access to guild admins only (or bot admins)
func RequireSessionMiddleware ¶
RequireSessionMiddleware ensures that a session is available, and otherwise refuse to continue down the chain of handlers Also validates the origin header if present (on POST requests that is)
func SessionMiddleware ¶
SessionMiddleware retrieves a session from the request using the session cookie which is actually just a B64 encoded version of the oatuh2 token from discord for the user
func SetContextTemplateData ¶
func SetGuildMemberMiddleware ¶ added in v1.15.1
func SimpleConfigSaverHandler ¶
func SimpleConfigSaverHandler(t SimpleConfigSaver, extraHandler http.Handler, key string) http.Handler
Uses the FormParserMW to parse and validate the form, then saves it
func SkipStaticMW ¶ added in v1.15.1
func SkipStaticMW(maybeSkip func(http.Handler) http.Handler, alwaysRunSuffixes ...string) func(http.Handler) http.Handler
SkipStaticMW skips the "maybeSkip" handler if this is a static link
func StaticRoleProvider ¶ added in v1.17.0
func UserInfoMiddleware ¶
UserInfoMiddleware fills the context with user information and the guilds it's on guilds if possible
func ValidateChannelField ¶
func ValidateForm ¶
func ValidateForm(guild *dstate.GuildSet, tmpl TemplateData, form interface{}) bool
Probably needs some cleaning up
func ValidateIntField ¶
func ValidateIntField(i int64, tags *ValidationTag, guild *dstate.GuildSet, forceAllowEmpty bool) (keep bool, err error)
func ValidateIntMinMaxField ¶
func ValidateIntSliceField ¶ added in v0.29.1
func ValidateIntSliceField(is []int64, tags *ValidationTag, guild *dstate.GuildSet) (filtered []int64, err error)
func ValidateRegexField ¶
func ValidateRoleField ¶
func ValidateStringField ¶
func ValidateStringField(s string, tags *ValidationTag, guild *dstate.GuildSet) (str string, err error)
func ValidateTemplateField ¶
func WriteErrorResponse ¶
Types ¶
type Advertisement ¶ added in v0.29.1
type Alert ¶
func ErrorAlert ¶
func ErrorAlert(args ...interface{}) *Alert
func SucessAlert ¶
func SucessAlert(args ...interface{}) *Alert
func WarningAlert ¶
func WarningAlert(args ...interface{}) *Alert
type BotStatus ¶ added in v1.31.10
type BotStatus struct { // Invidual statuses HostStatuses []*HostStatus `json:"host_statuses"` NumNodes int `json:"num_nodes"` TotalShards int `json:"total_shards"` OfflineShards []int `json:"offline_shards"` EventsPerSecondAverage float64 `json:"events_per_second_average"` EventsPerSecondMin float64 `json:"events_per_second_min"` EventsPerSecondMax float64 `json:"events_per_second_max"` UptimeMax time.Duration `json:"uptim_emax"` UptimeMin time.Duration `json:"uptime_min"` }
BotStatus represents the bot's full status
type ControlPanelPlugin ¶ added in v1.17.0
type ControlPanelPlugin struct{}
func (*ControlPanelPlugin) LoadServerHomeWidget ¶ added in v1.17.0
func (p *ControlPanelPlugin) LoadServerHomeWidget(w http.ResponseWriter, r *http.Request) (TemplateData, error)
func (*ControlPanelPlugin) PluginInfo ¶ added in v1.17.0
func (p *ControlPanelPlugin) PluginInfo() *common.PluginInfo
func (*ControlPanelPlugin) ServerHomeWidgetOrder ¶ added in v1.17.0
func (p *ControlPanelPlugin) ServerHomeWidgetOrder() int
type ControllerHandlerFunc ¶
type ControllerHandlerFunc func(w http.ResponseWriter, r *http.Request) (TemplateData, error)
type ControllerHandlerFuncJson ¶
type ControllerHandlerFuncJson func(w http.ResponseWriter, r *http.Request) (interface{}, error)
type CoreConfigPostForm ¶ added in v1.17.0
type CustomHandlerFunc ¶
type CustomHandlerFunc func(w http.ResponseWriter, r *http.Request) interface{}
type CustomResponseWriter ¶ added in v1.17.0
type CustomResponseWriter struct {
// contains filtered or unexported fields
}
func (*CustomResponseWriter) Header ¶ added in v1.17.0
func (c *CustomResponseWriter) Header() http.Header
func (*CustomResponseWriter) Write ¶ added in v1.17.0
func (c *CustomResponseWriter) Write(b []byte) (int, error)
func (*CustomResponseWriter) WriteHeader ¶ added in v1.17.0
func (c *CustomResponseWriter) WriteHeader(statusCode int)
type CustomValidator ¶ added in v1.14.0
type CustomValidator interface {
Validate(tmplData TemplateData) (ok bool)
}
type HostStatus ¶ added in v1.31.10
type HostStatus struct { Name string EventsPerSecond float64 TotalEvents int64 Nodes []*botrest.NodeStatus }
type Plugin ¶
type Plugin interface { common.Plugin // Parse the templates and set up the http routes here // mainMuxer is the root and cpmuxer handles the /cp/ route // the cpmuxer requires a session and to be a admin of the server // being managed, otherwise it will redirect to the homepage InitWeb() }
Plugin represents a web plugin
type PluginWithServerHomeWidget ¶ added in v1.17.0
type PluginWithServerHomeWidget interface {
LoadServerHomeWidget(w http.ResponseWriter, r *http.Request) (TemplateData, error)
}
type PluginWithServerHomeWidgetMiddlewares ¶ added in v1.17.0
type PluginWithServerHomeWidgetMiddlewares interface { PluginWithServerHomeWidget ServerHomeWidgetApplyMiddlewares(inner http.Handler) http.Handler }
type PublicError ¶
type PublicError struct {
// contains filtered or unexported fields
}
func (*PublicError) Error ¶
func (p *PublicError) Error() string
type RenderedServerHomeWidget ¶ added in v1.17.0
type ServerHomeWidgetWithOrder ¶ added in v1.17.0
type ServerHomeWidgetWithOrder interface {
ServerHomeWidgetOrder() int
}
type SidebarItem ¶ added in v1.19.0
type SimpleConfigSaver ¶
type TemplateData ¶
type TemplateData map[string]interface{}
func GetBaseCPContextData ¶
func GetBaseCPContextData(ctx context.Context) (*dstate.GuildSet, TemplateData)
Returns base context data for control panel plugins
func GetCreateTemplateData ¶
func GetCreateTemplateData(ctx context.Context) (context.Context, TemplateData)
func HandleGetManagedGuilds ¶ added in v1.17.0
func HandleGetManagedGuilds(w http.ResponseWriter, r *http.Request) (TemplateData, error)
func HandleLandingPage ¶
func HandleLandingPage(w http.ResponseWriter, r *http.Request) (TemplateData, error)
func HandlePostCoreSettings ¶ added in v1.17.0
func HandlePostCoreSettings(w http.ResponseWriter, r *http.Request) (TemplateData, error)
func HandleReconnectShard ¶
func HandleReconnectShard(w http.ResponseWriter, r *http.Request) (TemplateData, error)
func HandleServerHome ¶ added in v1.17.0
func HandleServerHome(w http.ResponseWriter, r *http.Request) (TemplateData, error)
func HandleStatusHTML ¶ added in v1.31.10
func HandleStatusHTML(w http.ResponseWriter, r *http.Request) (TemplateData, error)
HandleStatusHTML handles GET /status
func (TemplateData) AddAlerts ¶
func (t TemplateData) AddAlerts(alerts ...*Alert) TemplateData
func (TemplateData) Alerts ¶ added in v1.6.0
func (t TemplateData) Alerts() []*Alert
type ValidationTag ¶
type ValidationTag struct {
// contains filtered or unexported fields
}
func ParseValidationTag ¶
func ParseValidationTag(tag string) *ValidationTag
func (*ValidationTag) Len ¶
func (p *ValidationTag) Len() int