Documentation
¶
Overview ¶
Package ambient is a pluggable web app framework.
Index ¶
- Constants
- func AuthAssetAllowed(loggedIn bool, f Asset) bool
- func GlobalFuncMap(fm template.FuncMap) template.FuncMap
- func SetupRouter(logger Logger, mux AppRouter, te Renderer, customServeHTTP CustomServeHTTP)
- func Validate(p PluginCore) error
- type AppLogger
- type AppRouter
- type AppSession
- type Asset
- type AssetInjector
- type AssetLocation
- type AssetType
- type Attribute
- type AuthType
- type CustomServeHTTP
- type DataStorer
- type Error
- type FileSystemReader
- type GRPCPluginBase
- type GRPCSystem
- type Grant
- type GrantRequest
- type LayoutInjector
- type LayoutType
- type LogLevel
- type Logger
- type LoggingPlugin
- type MiddlewarePlugin
- type Plugin
- type PluginBase
- func (p *PluginBase) Assets() ([]Asset, FileSystemReader)
- func (p *PluginBase) Disable() error
- func (p *PluginBase) Enable(toolkit *Toolkit) error
- func (p *PluginBase) FuncMap() func(r *http.Request) template.FuncMap
- func (p *PluginBase) GrantRequests() []GrantRequest
- func (p *PluginBase) Middleware() []func(next http.Handler) http.Handler
- func (p *PluginBase) Routes()
- func (p *PluginBase) Settings() []Setting
- type PluginCore
- type PluginData
- type PluginGrants
- type PluginLoader
- type PluginSettings
- type PluginSystem
- type Post
- type PostList
- type PostWithID
- type PostWithIDList
- type Renderer
- type Replace
- type Route
- type Router
- type RouterPlugin
- type SecureSite
- type SessionManagerPlugin
- type SessionStorer
- type Setting
- type SettingDescription
- type SettingType
- type Site
- type StatusError
- type Storage
- type StorageEncryption
- type StoragePlugin
- type StoragePluginGroup
- type Tag
- type TagList
- type TemplateEnginePlugin
- type Toolkit
- func (t *Toolkit) JSON(w http.ResponseWriter, status int, response interface{}) error
- func (t *Toolkit) JSONPretty(w http.ResponseWriter, status int, response interface{}) error
- func (t *Toolkit) Path(url string) string
- func (t *Toolkit) Redirect(w http.ResponseWriter, r *http.Request, url string, code int)
Constants ¶
const ( // LocationHead is at the bottom of the HTML <head> section. LocationHead AssetLocation = "head" // LocationHeader is at the top the HTML <header> section. LocationHeader AssetLocation = "header" // LocationMain is at the bottom of the HTML <main> section. LocationMain AssetLocation = "main" LocationFooter AssetLocation = "footer" // LocationBody is at the bottom of the HTML <body> section. LocationBody AssetLocation = "body" // AssetStylesheet is a stylesheet element. AssetStylesheet AssetType = "stylesheet" // AssetJavaScript is a javascript element. AssetJavaScript AssetType = "javascript" // AssetGeneric is a generic element. AssetGeneric AssetType = "generic" // AuthAll is both anonymous and authenticated users. AuthAll AuthType = "all" // Default. // AuthAnonymousOnly is only non-authenticated users. AuthAnonymousOnly AuthType = "anonymous" // AuthOnly is only authenticated users. AuthOnly AuthType = "authenticated" // LayoutPage is a page layout. LayoutPage LayoutType = "page" // LayoutPost is a post layout. LayoutPost LayoutType = "post" )
Variables ¶
This section is empty.
Functions ¶
func AuthAssetAllowed ¶
AuthAssetAllowed return true if the user has access to the asset.
func GlobalFuncMap ¶
GlobalFuncMap returns the FuncMaps available in all templates.
func SetupRouter ¶
func SetupRouter(logger Logger, mux AppRouter, te Renderer, customServeHTTP CustomServeHTTP)
SetupRouter sets the router with the NotFound handler and the default handler.
func Validate ¶
func Validate(p PluginCore) error
Validate returns an error if the plugin name or version is not valid.
Types ¶
type AppLogger ¶
type AppLogger interface {
Logger
// Fatal is reserved for the app level only.
Fatal(format string, v ...interface{})
SetLogLevel(level LogLevel)
Named(name string) AppLogger
Name() string
}
AppLogger represents the log service for the app.
type AppRouter ¶
type AppRouter interface {
Router
ServeHTTP(w http.ResponseWriter, r *http.Request)
SetNotFound(notFound http.Handler)
SetServeHTTP(h func(w http.ResponseWriter, r *http.Request, err error))
}
AppRouter represents a router.
type AppSession ¶
type AppSession interface {
AuthenticatedUser(r *http.Request) (string, error)
Login(r *http.Request, username string)
Logout(r *http.Request)
LogoutAll(r *http.Request) error
Persist(r *http.Request, persist bool)
SetCSRF(r *http.Request) string
CSRF(r *http.Request, token string) bool
SessionValue(r *http.Request, name string) string
SetSessionValue(r *http.Request, name string, value string) error
DeleteSessionValue(r *http.Request, name string)
}
AppSession represents a user session.
type Asset ¶
type Asset struct {
// Filetype is the type of asset: generic, stylesheet, or javascript. (required)
Filetype AssetType `json:"filetype"`
// Location is the location on the HTML page where the asset will be
// added. (required)
Location AssetLocation `json:"location"`
// Auth determines whether to show the asset to all users, only authenticated
// users, or only non-authenticated users. Will display to all users if
// not specified. (optional)
Auth AuthType `json:"auth"`
// Attributes are a list of HTML attributes on all filetypes except on
// generic with no TagName. (optional)
Attributes []Attribute `json:"attributes"`
// LayoutOnly are a list of layout types where the element will be added.
// Supports page and post. Will display on all layouts if not specified.
// (optional)
LayoutOnly []LayoutType `json:"layout"`
// TagName is only for generic assets when Inline is true. Will specify the
// type of element to create. If empty, then the asset will be written to
// the page without a surrounding HTML element.
TagName string `json:"tagname"`
// ClosingTag, if true, will add a closing tag. It's only for generic assets
// when inline is false.
ClosingTag bool `json:"closingtag"`
// External, if true, will just use the path as the source of the element.
// It is only for stylesheet and javascript filetypes.
External bool `json:"external"`
// Inline if true, will output the contents from an embedded file (Path) or
// the contents (Content) after doing a find/replace (Replace).
Inline bool `json:"inline"`
// SkipExistCheck if true, will not check for the file existing because it's
// managed by a route.
SkipExistCheck bool `json:"skipexist"`
// Path is relative path to the embedded file or the full path to the
// external asset. (optional)
Path string `json:"path"`
// Content is the content that will output on the page. Path must be empty
// for content to be used and content is only used when Inline is true.
Content string `json:"content"`
// Replace is a list of find and replace strings that are run on the Path
// or Content when Inline is true.
Replace []Replace `json:"replace"`
}
Asset represents an HTML asset like a stylesheet or javascript file.
func (*Asset) Contents ¶
Contents returns the text of the file to inline in HTML after doing replace.
func (Asset) Routable ¶
Routable returns true if the file can be served from the embedded filesystem.
func (Asset) SanitizedPath ¶
SanitizedPath returns an HTML escaped asset path.
type AssetInjector ¶
type AssetInjector interface {
Inject(injector LayoutInjector, t *template.Template, r *http.Request, layoutType LayoutType, vars map[string]interface{}) (*template.Template, error)
DebugTemplates() bool
EscapeTemplates() bool
}
AssetInjector represents code that can inject files into a template.
type AssetLocation ¶
type AssetLocation string
AssetLocation is a location where assets can be added.
type Attribute ¶
type Attribute struct {
Name string
Value interface{}
}
Attribute represents an HTML attribute.
type CustomServeHTTP ¶
type CustomServeHTTP func(log Logger, renderer Renderer, w http.ResponseWriter, r *http.Request, err error)
CustomServeHTTP allows customization of error handling by the router.
type DataStorer ¶
DataStorer reads and writes data to an object.
type Error ¶
Error represents a handler error. It provides methods for a HTTP status code and embeds the built-in error interface.
type FileSystemReader ¶
type FileSystemReader interface {
Open(name string) (fs.File, error)
ReadDir(name string) ([]fs.DirEntry, error)
ReadFile(name string) ([]byte, error)
}
FileSystemReader can be used with embed.FS and avfs.FS.
type GRPCPluginBase ¶
type GRPCPluginBase struct {
PluginBase
// contains filtered or unexported fields
}
GRPCPluginBase represents a base gRPC plugin that works with Ambient.
func NewGRPCPlugin ¶
func NewGRPCPlugin(pluginName string, pluginPath string) *GRPCPluginBase
NewGRPCPlugin returns gRPC plugin base.
func (*GRPCPluginBase) PluginName ¶
func (p *GRPCPluginBase) PluginName() string
PluginName returns the gRPC plugin name.
func (*GRPCPluginBase) PluginPath ¶
func (p *GRPCPluginBase) PluginPath() string
PluginPath returns the gRPC plugin path.
func (*GRPCPluginBase) PluginVersion ¶
func (p *GRPCPluginBase) PluginVersion() string
PluginVersion returns the gRPc text.
type GRPCSystem ¶
type GRPCSystem interface {
// Monitor starts monitoring the gRPC plugins.
Monitor(securesite SecureSite)
// ConnectAll will connect to all initial gRPC plugins in the plugin system.
ConnectAll()
// Connect will connect to a new gRPC plugin, these don't have to be in the
// initial plugin loader.
Connect(p Plugin, middleware bool)
// Disconnect stops the gRPC clients.
Disconnect()
}
GRPCSystem manages connecting, loading, monitoring, and disconnecting gRPC plugins..
type Grant ¶
type Grant string
Grant is a type of permission.
const ( // GrantSiteTitleRead allows read access to the site title. GrantSiteTitleRead Grant = "site.title:read" // GrantSiteTitleWrite allows write access to the site title. GrantSiteTitleWrite Grant = "site.title:write" // GrantSiteContentRead allows read access to the site content. GrantSiteContentRead Grant = "site.content:read" // GrantSiteContentWrite allows write access to the site content. GrantSiteContentWrite Grant = "site.content:write" // GrantSiteSchemeRead allows read access to the site scheme. GrantSiteSchemeRead Grant = "site.scheme:read" // GrantSiteSchemeWrite allows write access to the site scheme. GrantSiteSchemeWrite Grant = "site.scheme:write" // GrantSiteURLRead allows read access to the site URL. GrantSiteURLRead Grant = "site.url:read" // GrantSiteURLWrite allows write access to the site URL. GrantSiteURLWrite Grant = "site.url:write" // GrantSiteUpdatedRead allows read access to the site updated time. GrantSiteUpdatedRead Grant = "site.updated:read" // GrantSiteLoadTrigger allows trigger access to the site load from data storage. GrantSiteLoadTrigger Grant = "site.load:trigger" // GrantSitePostRead allows read access to the site posts. // Allows access to calls like: postsandpages, publishedpages, postbyslug, tags. GrantSitePostRead Grant = "site.post:read" // GrantSitePostWrite allows write access to the site posts. GrantSitePostWrite Grant = "site.post:write" // GrantSitePostDelete allows delete access to the site posts. GrantSitePostDelete Grant = "site.post:delete" // GrantSitePluginRead allows read access to the site plugins. GrantSitePluginRead Grant = "site.plugin:read" // GrantSitePluginEnable allows enable access to the site plugins. GrantSitePluginEnable Grant = "site.plugin:enable" // GrantSitePluginDisable allows disable access to the site plugins. GrantSitePluginDisable Grant = "site.plugin:disable" // GrantSitePluginDelete allows delete access to the site plugins. GrantSitePluginDelete Grant = "site.plugin:delete" // GrantRouterRouteWrite allows write access to routes. GrantRouterRouteWrite Grant = "router.route:write" // GrantRouterMiddlewareWrite allows adding middleware to routes. GrantRouterMiddlewareWrite Grant = "router.middleware:write" // GrantPluginSettingRead allows read access to the plugin setting. GrantPluginSettingRead Grant = "plugin.setting:read" // GrantPluginSettingWrite allows write access to the plugin setting. GrantPluginSettingWrite Grant = "plugin.setting:write" // GrantPluginNeighborSettingRead allows read access to a setting in another plugin. GrantPluginNeighborSettingRead Grant = "plugin.neighborsetting:read" // GrantPluginNeighborSettingWrite allows write access to a setting in another plugin. GrantPluginNeighborSettingWrite Grant = "plugin.neighborsetting:write" // GrantPluginNeighborGrantRead allows read access to a grant in another plugin. GrantPluginNeighborGrantRead Grant = "plugin.neighborgrant:read" // GrantPluginNeighborGrantWrite allows write access to a grant in another plugin. GrantPluginNeighborGrantWrite Grant = "plugin.neighborgrant:write" // GrantPluginTrustedRead allows read access to whether a plugin is trusted or not. GrantPluginTrustedRead Grant = "plugin.trusted:read" // GrantPluginNeighborRouteRead allows read access to routes in another plugin. GrantPluginNeighborRouteRead Grant = "plugin.neighborroute:read" // GrantUserAuthenticatedRead allows read access whether the current user is logged in or not. GrantUserAuthenticatedRead Grant = "user.authenticated:read" // GrantUserAuthenticatedWrite allows write access to login or logout a user. GrantUserAuthenticatedWrite Grant = "user.authenticated:write" // GrantUserPersistWrite allows write access to login or logout a user. GrantUserPersistWrite Grant = "user.persist:write" // GrantAllUserAuthenticatedWrite allows write access to login or logout any user. GrantAllUserAuthenticatedWrite Grant = "alluser.authenticated:write" // GrantSiteAssetWrite allows write access to site assets. GrantSiteAssetWrite Grant = "site.asset:write" // GrantSiteFuncMapWrite allows write access to site FuncMap for templates. GrantSiteFuncMapWrite Grant = "site.funcmap:write" )
type GrantRequest ¶
GrantRequest represents a plugin grant request.
type LayoutInjector ¶
type LayoutInjector interface {
Head(t *template.Template, content string, fm template.FuncMap, data map[string]interface{}) (*template.Template, error)
Header(t *template.Template, content string, fm template.FuncMap, data map[string]interface{}) (*template.Template, error)
Main(t *template.Template, content string, fm template.FuncMap, data map[string]interface{}) (*template.Template, error)
Body(t *template.Template, content string, fm template.FuncMap, data map[string]interface{}) (*template.Template, error)
}
LayoutInjector represents an injector that the AssetInjector will call to inject assets in the correct place.
type LogLevel ¶
type LogLevel int
LogLevel is a log level.
const ( // LogLevelDebug is for debugging output. It's very verbose. LogLevelDebug LogLevel = iota // LogLevelInfo is for informational messages. It shows messages on services // starting, stopping, and users logging in. LogLevelInfo // LogLevelWarn is for behavior that may need to be fixed. It shows // permission warnings for plugins. LogLevelWarn // LogLevelError is for messages when something is wrong with the // app and it needs to be corrected. LogLevelError // LogLevelFatal is for messages when the app cannot continue and // will halt. LogLevelFatal )
func EnvLogLevel ¶
func EnvLogLevel() LogLevel
EnvLogLevel returns the log level from the AMB_LOGLEVEL environment variable.
type Logger ¶
type Logger interface {
Log(level LogLevel, format string, v ...interface{})
Debug(format string, v ...interface{})
Info(format string, v ...interface{})
Warn(format string, v ...interface{})
Error(format string, v ...interface{})
}
Logger represents the log service for the plugins.
type LoggingPlugin ¶
type LoggingPlugin interface {
PluginCore
Logger(appName string, appVersion string, writer io.Writer) (AppLogger, error)
}
LoggingPlugin represents a logging plugin.
type MiddlewarePlugin ¶
type MiddlewarePlugin interface {
Plugin
Middleware() []func(next http.Handler) http.Handler // optional, called during enable
}
MiddlewarePlugin represents a middleware plugin.
type Plugin ¶
type Plugin interface {
PluginCore
// These should all have access to the toolkit.
Enable(*Toolkit) error // optional, called during enable
Disable() error // optional, called during disable
Routes() // optional, called during enable
Assets() ([]Asset, FileSystemReader) // optional, called during enable
Settings() []Setting // optional, called during special operations
GrantRequests() []GrantRequest // optional, called during every plugin operation against data provider
FuncMap() func(r *http.Request) template.FuncMap // optional, called on every render
}
Plugin represents a plugin.
type PluginBase ¶
type PluginBase struct {
*Toolkit
}
PluginBase represents a base plugin that works with Ambient.
func (*PluginBase) Assets ¶
func (p *PluginBase) Assets() ([]Asset, FileSystemReader)
Assets returns a list of assets and an embedded filesystem.
func (*PluginBase) Enable ¶
func (p *PluginBase) Enable(toolkit *Toolkit) error
Enable is to enable the plugin. Toolkit should be saved.
func (*PluginBase) FuncMap ¶
func (p *PluginBase) FuncMap() func(r *http.Request) template.FuncMap
FuncMap returns a callable function that accepts a request.
func (*PluginBase) GrantRequests ¶
func (p *PluginBase) GrantRequests() []GrantRequest
GrantRequests returns a list of grants requested by the plugin.
func (*PluginBase) Middleware ¶
func (p *PluginBase) Middleware() []func(next http.Handler) http.Handler
Middleware returns a list of middleware.
func (*PluginBase) Settings ¶
func (p *PluginBase) Settings() []Setting
Settings returns a list of user settable fields.
type PluginCore ¶
type PluginCore interface {
// PluginName should be globally unique. It must start with a lowercase
// letter and then contain only lowercase letters and numbers.
PluginName() string
// PluginVersion must follow https://semver.org/.
PluginVersion() string
}
PluginCore represents the core of any plugin.
type PluginData ¶
type PluginData struct {
Enabled bool `json:"enabled"`
Version string `json:"version"`
Grants PluginGrants `json:"grants"`
Settings PluginSettings `json:"settings"`
}
PluginData represents the plugin storage information.
type PluginGrants ¶
PluginGrants represents an unordered map of grants.
type PluginLoader ¶
type PluginLoader struct {
Router RouterPlugin
TemplateEngine TemplateEnginePlugin
SessionManager SessionManagerPlugin
TrustedPlugins map[string]bool
Plugins []Plugin
Middleware []MiddlewarePlugin
}
PluginLoader contains the plugins for the Ambient app.
type PluginSettings ¶
type PluginSettings map[string]interface{}
PluginSettings represents an unordered map of settings.
type PluginSystem ¶
type PluginSystem interface {
// LoaderPlugins returns the loader plugins, these include initial gRPC plugins
// as well.
LoaderPlugins() []Plugin
// LoaderMiddleware returns the loader middleware, these include initial gRPC plugins
// as well.
LoaderMiddleware() []MiddlewarePlugin
// Plugins returns the map of plugins. This returns a map that is passed by
// reference and all the values are pointers so any changes to it will
// be reflected in the plugin system.
Plugins() map[string]Plugin
// SessionManager returns the session manager.
SessionManager() SessionManagerPlugin
// TemplateEngine returns the template engine.
TemplateEngine() TemplateEnginePlugin
// Router returns the router.
Router() RouterPlugin
// StorageManager returns the storage manager.
StorageManager() Storage
// LoadPlugin loads a single plugin into the plugin system and saves the config.
LoadPlugin(plugin Plugin, middleware bool, grpcPlugin bool) (err error)
// Load will load the storage and return an error if one occurs.
Load() error
// Save will save the storage and return an error if one occurs.
Save() error
// InitializePlugin will initialize the plugin in the storage and will return
// an error if one occurs.
InitializePlugin(pluginName string, pluginVersion string) error
// RemovePlugin will delete the plugin from the storage and will return
// an error if one occurs.
RemovePlugin(pluginName string) error
// Names returns a list of plugin names.
Names() []string
// MiddlewareNames returns a list of middleware plugin names.
MiddlewareNames() []string
// IsMiddleware returns if the plugin is middleware.
IsMiddleware(name string) bool
// TrustedPluginNames returns a list of sorted trusted names.
TrustedPluginNames() []string
// Trusted returns if a plugin is trusted.
Trusted(pluginName string) bool
// Routes returns a list of plugin routes.
Routes(pluginName string) []Route
// PluginsData returns the plugin data map.
PluginsData() map[string]PluginData
// Plugin returns a plugin by name.
Plugin(name string) (Plugin, error)
// PluginData returns a plugin data by name.
PluginData(name string) (PluginData, error)
// Enabled returns if the plugin is enabled or not. If it cannot be found, it
// will still return false.
Enabled(name string) bool
// SetEnabled sets a plugin as enabled or not.
SetEnabled(pluginName string, enabled bool) error
// GrantRequests returns a list of grant requests.
GrantRequests(pluginName string, grant Grant) ([]GrantRequest, error)
// Authorized returns whether a plugin is inherited granted for a plugin.
Authorized(pluginName string, grant Grant) bool
// Granted returns whether a plugin is explicitly granted for a plugin.
Granted(pluginName string, grant Grant) bool
// SetGrant sets a plugin grant.
SetGrant(pluginName string, grant Grant) error
// RemoveGrant removes a plugin grant.
RemoveGrant(pluginName string, grant Grant) error
// SetSetting sets a plugin setting.
SetSetting(pluginName string, settingName string, value interface{}) error
// Setting returns a setting value.
Setting(pluginName string, settingName string) (interface{}, error)
// SettingDefault returns a setting default for a setting.
SettingDefault(pluginName string, settingName string) (interface{}, error)
// SetRoute saves a route.
SetRoute(pluginName string, route []Route)
// SetTitle sets the title.
SetTitle(title string) error
// Title returns the title.
Title() string
// SetScheme sets the site scheme.
SetScheme(scheme string) error
// Scheme returns the site scheme.
Scheme() string
// SetURL sets the site URL.
SetURL(URL string) error
// URL returns the URL without the scheme at the beginning.
URL() string
// FullURL returns the URL with the scheme at the beginning.
FullURL() string
// Updated returns the home last updated timestamp.
Updated() time.Time
// Tags returns the list of tags.
Tags(onlyPublished bool) TagList
// SetContent sets the home page content.
SetContent(content string) error
// Content returns the site home page content.
Content() string
// SavePost saves a post.
SavePost(ID string, post Post) error
// PostsAndPages returns the list of posts and pages.
PostsAndPages(onlyPublished bool) PostWithIDList
// PublishedPosts returns the list of published posts.
PublishedPosts() []Post
// PublishedPages returns the list of published pages.
PublishedPages() []Post
// PostBySlug returns the post by slug.
PostBySlug(slug string) PostWithID
// PostByID returns the post by ID.
PostByID(ID string) (Post, error)
// DeletePostByID deletes a post.
DeletePostByID(ID string) error
}
PluginSystem provides config functions.
type Post ¶
type Post struct {
Title string `json:"title"`
URL string `json:"url"`
Canonical string `json:"canonical"`
Created time.Time `json:"created"`
Updated time.Time `json:"updated"`
Timestamp time.Time `json:"timestamp"`
Content string `json:"content"`
Published bool `json:"published"`
Page bool `json:"page"`
Tags TagList `json:"tags"`
}
Post -
type PostWithIDList ¶
type PostWithIDList []PostWithID
PostWithIDList -
func (PostWithIDList) Len ¶
func (t PostWithIDList) Len() int
func (PostWithIDList) Less ¶
func (t PostWithIDList) Less(i, j int) bool
func (PostWithIDList) Swap ¶
func (t PostWithIDList) Swap(i, j int)
type Renderer ¶
type Renderer interface {
Page(w http.ResponseWriter, r *http.Request, assets FileSystemReader, templateName string,
fm func(r *http.Request) template.FuncMap, vars map[string]interface{}) (err error)
PageContent(w http.ResponseWriter, r *http.Request, content string,
fm func(r *http.Request) template.FuncMap, vars map[string]interface{}) (err error)
Post(w http.ResponseWriter, r *http.Request, assets FileSystemReader, templateName string,
fm func(r *http.Request) template.FuncMap, vars map[string]interface{}) (err error)
PostContent(w http.ResponseWriter, r *http.Request, content string,
fm func(r *http.Request) template.FuncMap, vars map[string]interface{}) (err error)
Error(w http.ResponseWriter, r *http.Request, content string, statusCode int,
fm func(r *http.Request) template.FuncMap, vars map[string]interface{}) (err error)
}
Renderer represents a template renderer.
type Router ¶
type Router interface {
Handle(method string, path string, fn func(http.ResponseWriter, *http.Request) error)
Get(path string, fn func(http.ResponseWriter, *http.Request) error)
Post(path string, fn func(http.ResponseWriter, *http.Request) error)
Patch(path string, fn func(http.ResponseWriter, *http.Request) error)
Put(path string, fn func(http.ResponseWriter, *http.Request) error)
Delete(path string, fn func(http.ResponseWriter, *http.Request) error)
Head(path string, fn func(http.ResponseWriter, *http.Request) error)
Options(path string, fn func(http.ResponseWriter, *http.Request) error)
StatusError(status int, err error) error
Error(status int, w http.ResponseWriter, r *http.Request)
Param(r *http.Request, name string) string
Wrap(handler http.HandlerFunc) func(w http.ResponseWriter, r *http.Request) (err error)
}
Router represents a router.
type RouterPlugin ¶
type RouterPlugin interface {
PluginCore
Router(logger Logger, render Renderer) (AppRouter, error)
}
RouterPlugin represents a router engine plugin.
type SecureSite ¶
type SecureSite interface {
// Error handles returning the proper error.
Error(siteError error) (err error)
// Load forces a reload of the data.
Load() error
// Authorized determines if the current context has access.
Authorized(grant Grant) bool
// NeighborPluginGrantList gets the grants requests for a neighbor plugin.
NeighborPluginGrantList(pluginName string) ([]GrantRequest, error)
// NeighborPluginGrants gets the map of granted permissions.
NeighborPluginGrants(pluginName string) (map[Grant]bool, error)
// NeighborPluginGranted returns true if the plugin has the grant.
NeighborPluginGranted(pluginName string, grantName Grant) (bool, error)
// NeighborPluginRequestedGrant returns true if the plugin requests the grant.
// This shouldn't be used to determine if a plugin has been approved the grant.
NeighborPluginRequestedGrant(pluginName string, grantName Grant) (bool, error)
// SetNeighborPluginGrant sets a grant for a neighbor plugin.
SetNeighborPluginGrant(pluginName string, grantName Grant, granted bool) error
// Plugins returns the plugin list.
Plugins() (map[string]PluginData, error)
// PluginNames returns the list of plugin name.
PluginNames() ([]string, error)
// DeletePlugin deletes a plugin.
DeletePlugin(name string) error
// EnablePlugin enables a plugin.
EnablePlugin(pluginName string, loadPlugin bool) error
// LoadSinglePluginPages loads the plugin.
LoadSinglePluginPages(name string)
// DisablePlugin disables a plugin.
DisablePlugin(pluginName string, unloadPlugin bool) error
// SavePost saves a post.
SavePost(ID string, post Post) error
// PostsAndPages returns the list of posts and pages.
PostsAndPages(onlyPublished bool) (PostWithIDList, error)
// PublishedPosts returns the list of published posts.
PublishedPosts() ([]Post, error)
// PublishedPages returns the list of published pages.
PublishedPages() ([]Post, error)
// PostBySlug returns the post by slug.
PostBySlug(slug string) (PostWithID, error)
// PostByID returns the post by ID.
PostByID(ID string) (Post, error)
// DeletePostByID deletes a post.
DeletePostByID(ID string) error
// PluginNeighborRoutesList gets the routes for a neighbor plugin.
PluginNeighborRoutesList(pluginName string) ([]Route, error)
// AuthenticatedUser returns if the current user is authenticated.
AuthenticatedUser(r *http.Request) (string, error)
// UserLogin sets the current user as authenticated.
UserLogin(r *http.Request, username string) error
// UserPersist sets the user session to retain after browser close.
UserPersist(r *http.Request, persist bool) error
// UserLogout logs out the current user.
UserLogout(r *http.Request) error
// LogoutAllUsers logs out all users.
LogoutAllUsers(r *http.Request) error
// SetCSRF sets the session with a token and returns the token for use in a form
// or header.
SetCSRF(r *http.Request) string
// CSRF returns true if the CSRF token is valid.
CSRF(r *http.Request, token string) bool
// SessionValue returns session value by name.
SessionValue(r *http.Request, name string) string
// SetSessionValue sets a value on the current session.
SetSessionValue(r *http.Request, name string, value string) error
// DeleteSessionValue deletes a session value on the current session.
DeleteSessionValue(r *http.Request, name string)
// PluginNeighborSettingsList gets the grants requests for a neighbor plugin.
PluginNeighborSettingsList(pluginName string) ([]Setting, error)
// SetPluginSetting sets a variable for the plugin.
SetPluginSetting(settingName string, value string) error
// PluginSettingBool returns a plugin setting as a bool.
PluginSettingBool(name string) (bool, error)
// PluginSettingString returns a setting for the plugin as a string.
PluginSettingString(fieldName string) (string, error)
// PluginSetting returns a setting for the plugin as an interface{}.
PluginSetting(fieldName string) (interface{}, error)
// SetNeighborPluginSetting sets a setting for a neighbor plugin.
SetNeighborPluginSetting(pluginName string, settingName string, value string) error
// NeighborPluginSettingString returns a setting for a neighbor plugin as a string.
NeighborPluginSettingString(pluginName string, fieldName string) (string, error)
// NeighborPluginSetting returns a setting for a neighbor plugin as an interface{}.
NeighborPluginSetting(pluginName string, fieldName string) (interface{}, error)
// PluginTrusted returns whether a plugin is trusted or not.
PluginTrusted(pluginName string) (bool, error)
// SetTitle sets the title.
SetTitle(title string) error
// Title returns the title.
Title() (string, error)
// SetScheme sets the site scheme.
SetScheme(scheme string) error
// Scheme returns the site scheme.
Scheme() (string, error)
// SetURL sets the site URL.
SetURL(URL string) error
// URL returns the URL without the scheme at the beginning.
URL() (string, error)
// FullURL returns the URL with the scheme at the beginning.
FullURL() (string, error)
// Updated returns the home last updated timestamp.
Updated() (time.Time, error)
// SetContent sets the home page content.
SetContent(content string) error
// Content returns the site home page content.
Content() (string, error)
// Tags returns the list of tags.
Tags(onlyPublished bool) (TagList, error)
}
SecureSite provides plugin functions.
type SessionManagerPlugin ¶
type SessionManagerPlugin interface {
PluginCore
// Session manager should have middleware with it.
SessionManager(logger Logger, sessionStorer SessionStorer) (AppSession, error)
Middleware() []func(next http.Handler) http.Handler
}
SessionManagerPlugin represents a session manager plugin.
type SessionStorer ¶
SessionStorer reads and writes data to an object.
type Setting ¶
type Setting struct {
Name string `json:"name"`
Type SettingType `json:"type"`
Description SettingDescription `json:"description"`
Hide bool `json:"hide"`
Default interface{} `json:"default"`
}
Setting is a plugin settable field.
type SettingDescription ¶
SettingDescription is a type of description.
type SettingType ¶
type SettingType string
SettingType is an HTML type of setting.
const ( // Input is a standard text field. Input SettingType = "input" // InputPassword is a standard password field. InputPassword SettingType = "password" // Textarea is a textarea field. Textarea SettingType = "textarea" // Checkbox is a checkbox field. Checkbox SettingType = "checkbox" )
type Site ¶
type Site struct {
Title string `json:"title"` // Title of the site.
Content string `json:"content"` // Home or default content.
Scheme string `json:"scheme"` // http or https
URL string `json:"url"` // URL without scheme and without trailing slash.
Updated time.Time `json:"updated"` // Save time the data was saved (not only changed).
Posts map[string]Post `json:"posts"` // List of posts.
PluginStorage map[string]PluginData `json:"plugins"` // List of plugins, whether they are found, enabled, and what fields they support.
}
Site represents the site information that is in storage.
func (Site) PostBySlug ¶
func (s Site) PostBySlug(slug string) PostWithID
PostBySlug returns a post by slug/URL.
func (Site) PostsAndPages ¶
func (s Site) PostsAndPages(onlyPublished bool) PostWithIDList
PostsAndPages returns list of posts and pages with IDs.
func (Site) PublishedPages ¶
PublishedPages returns published pages (no posts).
func (Site) PublishedPosts ¶
PublishedPosts returns published posts (no pages).
type StatusError ¶
StatusError represents an error with an associated HTTP status code.
func (StatusError) Message ¶
func (se StatusError) Message() string
Message returns a optional user friendly error message.
type Storage ¶
type Storage interface {
// Save writes the site object to the data storage and returns an error if it
// cannot be written.
Save() error
// SaveDecrypted writes the site object to the data storage always decrypted and
// returns an error if it cannot be written.
SaveDecrypted() error
// Load reads the site object from the data storage and returns an error if
// it cannot be read.
Load() error
// LoadDecrypted reads the site object from the data storage always decrypted
// and returns an error if it cannot be read.
LoadDecrypted() error
}
Storage provides app config functions.
type StorageEncryption ¶
type StorageEncryption interface {
Encrypt(data []byte) ([]byte, error)
Decrypt(enc []byte) ([]byte, error)
}
StorageEncryption represents a encryption/decryption for a storage plugin.
type StoragePlugin ¶
type StoragePlugin interface {
PluginCore
Storage(logger Logger) (DataStorer, SessionStorer, error)
}
StoragePlugin represents a storage plugin.
type StoragePluginGroup ¶
type StoragePluginGroup struct {
Storage StoragePlugin
Encryption StorageEncryption
}
StoragePluginGroup represents a storage plugin and an optional encryption package.
type TagList ¶
type TagList []Tag
TagList represents a list of sortable tags.
type TemplateEnginePlugin ¶
type TemplateEnginePlugin interface {
PluginCore
TemplateEngine(logger Logger, injector AssetInjector) (Renderer, error)
}
TemplateEnginePlugin represents a template engine plugin.
type Toolkit ¶
type Toolkit struct {
Log Logger
Mux Router
Render Renderer
Site SecureSite
}
Toolkit provides utilities to plugins.
func (*Toolkit) JSON ¶
func (t *Toolkit) JSON(w http.ResponseWriter, status int, response interface{}) error
JSON sends a JSON response that is marshalable.
func (*Toolkit) JSONPretty ¶
func (t *Toolkit) JSONPretty(w http.ResponseWriter, status int, response interface{}) error
JSONPretty sends an indented JSON response that is marshalable.
Source Files
¶
- ambient.go
- ambient_datastorer.go
- ambient_filesystemreader.go
- ambient_injector.go
- ambient_loader.go
- ambient_logger.go
- ambient_renderer.go
- ambient_router.go
- ambient_session.go
- ambient_sessionstorer.go
- asset.go
- base.go
- base_grpc.go
- funcmap.go
- gen_grpcsystem.go
- gen_pluginsystem.go
- gen_securesite.go
- gen_storage.go
- grant.go
- model_post.go
- model_setting.go
- model_site.go
- model_tag.go
- toolkit.go
- validate.go
Directories
¶
| Path | Synopsis |
|---|---|
|
internal
|
|
|
grpcsystem
Package grpcsystem manages connecting, loading, monitoring, and disconnecting of gRPC plugins.
|
Package grpcsystem manages connecting, loading, monitoring, and disconnecting of gRPC plugins. |
|
secureconfig
Package secureconfig provides the plugin with a secure API to interact with Ambient.
|
Package secureconfig provides the plugin with a secure API to interact with Ambient. |
|
pkg
|
|
|
amberror
Package amberror has shared errors across the application.
|
Package amberror has shared errors across the application. |
|
envdetect
Package envdetect detects in which cloud an app is running based on environment variables.
|
Package envdetect detects in which cloud an app is running based on environment variables. |
|
grpcp
Package grpcp contains shared data between the host and plugins.
|
Package grpcp contains shared data between the host and plugins. |
|
requestclient
Package requestclient provides HTTP request sending using JSON structs.
|
Package requestclient provides HTTP request sending using JSON structs. |