Documentation ¶
Index ¶
- Constants
- Variables
- func APIHandler(inner CustomHandlerFunc) http.Handler
- func ActiveServerMW(inner http.Handler) http.Handler
- func AddGlobalTemplateData(key string, data interface{})
- func AddSidebarItem(category string, sItem *SidebarItem)
- func AuthTokenFromB64(b64 string) (t *oauth2.Token, err error)
- func BaseTemplateDataMiddleware(inner http.Handler) http.Handler
- func BaseURL() string
- func CheckCSRFToken(token string) (bool, error)
- func CheckErr(t TemplateData, err error, errMsg string, logger func(...interface{})) bool
- func ContextGuild(ctx context.Context) *discordgo.Guild
- func ContextIsAdmin(ctx context.Context) bool
- func ContextMember(ctx context.Context) *discordgo.Member
- func ContextMemberPerms(ctx context.Context) int
- 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 GetRequestIP(r *http.Request) string
- 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 HasAccesstoGuildSettings(userID int64, g *common.GuildWithConnected, config *models.CoreConfig, ...) bool
- func HasPermissionCTX(ctx context.Context, aperms int) bool
- func Indicator(enabled bool) string
- func InitOauth()
- func IsAcceptingRequests() bool
- func IsAdminRequest(ctx context.Context, r *http.Request) bool
- func IsRequestPartial(ctx context.Context) bool
- func LoadAd()
- func LoadCoreConfigMiddleware(inner http.Handler) http.Handler
- func LoadHTMLTemplate(pathTesting, pathProd string)
- func LogIgnoreErr(err error)
- func MiscMiddleware(inner http.Handler) http.Handler
- 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 RequireGuildChannelsMiddleware(inner http.Handler) http.Handler
- func RequirePermMW(perms ...int) 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) 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 []*discordgo.Channel, allowEmpty bool) error
- func ValidateFloatField(f float64, min, max float64) error
- func ValidateForm(guild *discordgo.Guild, tmpl TemplateData, form interface{}) bool
- func ValidateIntField(i int64, tags *ValidationTag, guild *discordgo.Guild) (keep bool, err error)
- func ValidateIntMinMaxField(i int64, min, max int64) error
- func ValidateIntSliceField(is []int64, tags *ValidationTag, guild *discordgo.Guild) (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 *discordgo.Guild) (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 ControlPanelPlugin
- type ControllerHandlerFunc
- type ControllerHandlerFuncJson
- type CoreConfigPostForm
- type CustomHandlerFunc
- type CustomResponseWriter
- type CustomValidator
- type Plugin
- type PluginWithServerHomeWidget
- type PluginWithServerHomeWidgetMiddlewares
- type PublicError
- type RenderedServerHomeWidget
- type ServerHomeWidgetWithOrder
- type SidebarItem
- type SimpleConfigSaver
- type TemplateData
- func GetBaseCPContextData(ctx context.Context) (*discordgo.Guild, 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 HandleStatus(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" )
const (
SessionCookieName = "yagpdb-session"
)
Variables ¶
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 ServerPubliAPIMux *goji.Mux StartedAt = time.Now() CurrentAd *Advertisement ConfAdVideos = config.RegisterOption("yagpdb.ad.video_paths", "Comma seperated list of video paths in different formats", "") )
var ErrNotLoggedIn = errors.New("Not logged in")
var ErrTokenExpired = errors.New("OAUTH2 Token expired")
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 AddSidebarItem ¶ added in v1.19.0
func AddSidebarItem(category string, sItem *SidebarItem)
func AuthTokenFromB64 ¶
AuthTokenFromB64 Retrives an oauth2 token from the base64 string Returns an error if expired
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 ContextIsAdmin ¶ added in v1.17.0
func ContextMemberPerms ¶ added in v1.17.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{}, logMsg string) 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 GetRequestIP ¶ added in v1.19.11
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 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 LoadHTMLTemplate ¶ added in v1.17.0
func LoadHTMLTemplate(pathTesting, pathProd string)
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 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 RequireGuildChannelsMiddleware ¶
RequireGuildChannelsMiddleware ensures that the channels are available for the guild were on during this request, and yes this has to be done seperately cause discord
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) 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 ValidateFloatField ¶
func ValidateForm ¶
func ValidateForm(guild *discordgo.Guild, tmpl TemplateData, form interface{}) bool
Probably needs some cleaning up
func ValidateIntField ¶
func ValidateIntMinMaxField ¶
func ValidateIntSliceField ¶ added in v0.29.1
func ValidateRegexField ¶
func ValidateRoleField ¶
func ValidateStringField ¶
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 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 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) (*discordgo.Guild, 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 HandleStatus ¶
func HandleStatus(w http.ResponseWriter, r *http.Request) (TemplateData, error)
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