web

package
v1.4.9 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 20, 2018 License: MIT Imports: 42 Imported by: 0

README

Web

This is the core webserver for YAGPDB, it handles general stuff like authentication.

Documentation

Index

Constants

View Source
const (
	AlertDanger  = "danger"
	AlertSuccess = "success"
	AlertInfo    = "info"
	AlertWarning = "warning"
)
View Source
const (
	SessionCookieName = "yagpdb-session"
)

Variables

View Source
var (
	ErrChannelNotFound = errors.New("Channel not found")
	ErrRoleNotFound    = errors.New("Role not found")
)
View Source
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
)
View Source
var ErrNotLoggedIn = errors.New("Not logged in")
View Source
var ErrTokenExpired = errors.New("OAUTH2 Token expired")
View Source
var (
	GAID = os.Getenv("YAGPDB_GA_ID")
)

Functions

func APIHandler

func APIHandler(inner CustomHandlerFunc) http.Handler

A helper wrapper that json encodes the returned value

func ActiveServerMW

func ActiveServerMW(inner http.Handler) http.Handler

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 AuthTokenFromB64

func AuthTokenFromB64(b64 string) (t *oauth2.Token, err error)

AuthTokenFromB64 Retrives an oauth2 token from the base64 string Returns an error if expired

func BaseTemplateDataMiddleware

func BaseTemplateDataMiddleware(inner http.Handler) http.Handler

Fills the template data in the context with basic data such as clientid and redirects

func CheckCSRFToken

func CheckCSRFToken(token string) (bool, error)

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 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

func CreateCSRFToken() (string, error)

CreateCSRFToken creates a csrf token and adds it the list

func CreateCookieSession

func CreateCookieSession(token *oauth2.Token) (cookie *http.Cookie, err error)

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

func CtxLogger(ctx context.Context) *log.Entry

CtxLogger Returns an always non nil entry either from the context or standard logger

func DiscordSessionFromContext

func DiscordSessionFromContext(ctx context.Context) *discordgo.Session

func FormParserMW

func FormParserMW(inner http.Handler, dst interface{}) http.Handler

Parses a form

func GenSessionCookie

func GenSessionCookie() *http.Cookie

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 HasPermissionCTX

func HasPermissionCTX(ctx context.Context, perms int) bool

func InitOauth

func InitOauth()

func IsAcceptingRequests

func IsAcceptingRequests() bool

func IsAdminCtx

func IsAdminCtx(ctx context.Context) bool

Checks the context if there is a logged in user and if so if he's and admin or not

func LoadAd added in v0.29.1

func LoadAd()

func LoadTemplates

func LoadTemplates()

func LogIgnoreErr

func LogIgnoreErr(err error)

func MiscMiddleware

func MiscMiddleware(inner http.Handler) http.Handler

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 RandBase64(size int) string

func RenderHandler

func RenderHandler(inner CustomHandlerFunc, tmpl string) http.Handler

A helper wrapper that renders a template

func RequestLogger

func RequestLogger(logger io.Writer) func(http.Handler) http.Handler

Writes the request log into logger, returns a new middleware

func RequireActiveServer

func RequireActiveServer(inner http.Handler) http.Handler

func RequireBotMemberMW

func RequireBotMemberMW(inner http.Handler) http.Handler

func RequireFullGuildMW

func RequireFullGuildMW(inner http.Handler) http.Handler

func RequireGuildChannelsMiddleware

func RequireGuildChannelsMiddleware(inner http.Handler) http.Handler

func RequirePermMW

func RequirePermMW(perms ...int) func(http.Handler) http.Handler

func RequireServerAdminMiddleware

func RequireServerAdminMiddleware(inner http.Handler) http.Handler

func RequireSessionMiddleware

func RequireSessionMiddleware(inner http.Handler) http.Handler

Will not serve pages unless a session is available Also validates the origin header if present

func Run

func Run()

func SessionMiddleware

func SessionMiddleware(inner http.Handler) http.Handler

Will put a session cookie in the response if not available and discord session in the context if available

func SetContextTemplateData

func SetContextTemplateData(ctx context.Context, data map[string]interface{}) context.Context

func SimpleConfigSaverHandler

func SimpleConfigSaverHandler(t SimpleConfigSaver, extraHandler http.Handler) http.Handler

Uses the FormParserMW to parse and validate the form, then saves it

func Stop

func Stop()

func UserInfoMiddleware

func UserInfoMiddleware(inner http.Handler) http.Handler

Fills the context with user and guilds if possible

func ValidateChannelField

func ValidateChannelField(s int64, channels []*discordgo.Channel, allowEmpty bool) error

func ValidateFloatField

func ValidateFloatField(f float64, min, max float64) error

func ValidateForm

func ValidateForm(guild *discordgo.Guild, tmpl TemplateData, form interface{}) bool

Probably needs some cleaning up

func ValidateIntField

func ValidateIntField(i int64, tags *ValidationTag, guild *discordgo.Guild) (keep bool, err error)

func ValidateIntMinMaxField

func ValidateIntMinMaxField(i int64, min, max int64) error

func ValidateIntSliceField added in v0.29.1

func ValidateIntSliceField(is []int64, tags *ValidationTag, guild *discordgo.Guild) (filtered []int64, err error)

func ValidateNormalStringField

func ValidateNormalStringField(s string, min, max int) error

func ValidateRegexField

func ValidateRegexField(s string, max int) error

func ValidateRoleField

func ValidateRoleField(s int64, roles []*discordgo.Role, allowEmpty bool) error

func ValidateStringField

func ValidateStringField(s string, tags *ValidationTag, guild *discordgo.Guild) (str string, err error)

func ValidateTemplateField

func ValidateTemplateField(s string, max int) error

func WriteErrorResponse

func WriteErrorResponse(w http.ResponseWriter, r *http.Request, err string, statusCode int)

Types

type APIError

type APIError struct {
	Message string
}
type Advertisement struct {
	Path    template.URL
	LinkURL template.URL
	Width   int
	Height  int
}

type Alert

type Alert struct {
	Style   string
	Message string
}

func ErrorAlert

func ErrorAlert(args ...interface{}) *Alert

func SucessAlert

func SucessAlert(args ...interface{}) *Alert

func WarningAlert

func WarningAlert(args ...interface{}) *Alert

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 CustomHandlerFunc

type CustomHandlerFunc func(w http.ResponseWriter, r *http.Request) interface{}

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 PublicError

type PublicError struct {
	// contains filtered or unexported fields
}

func (*PublicError) Error

func (p *PublicError) Error() string

type SimpleConfigSaver

type SimpleConfigSaver interface {
	Save(guildID int64) error
	Name() string // Returns this config's name, as it will be logged in the server's control panel log
}

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 HandleLandingPage

func HandleLandingPage(w http.ResponseWriter, r *http.Request) (TemplateData, error)

func HandleReconnectShard

func HandleReconnectShard(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

type ValidationTag

type ValidationTag struct {
	// contains filtered or unexported fields
}

func ParseValidationTag

func ParseValidationTag(tag string) *ValidationTag

func (*ValidationTag) Float

func (p *ValidationTag) Float(index int) (float64, bool)

func (*ValidationTag) Int

func (p *ValidationTag) Int(index int) (int, bool)

func (*ValidationTag) Len

func (p *ValidationTag) Len() int

func (*ValidationTag) Str

func (p *ValidationTag) Str(index int) (string, bool)

Directories

Path Synopsis
Simple blog
Simple blog

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL