admin

package
v0.0.0-...-8c2001a Latest Latest
Warning

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

Go to latest
Published: Feb 17, 2024 License: MIT Imports: 26 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrNoTargetScope = easyerr.Error("scope not found [target]")
)

Functions

This section is empty.

Types

type Controller

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

func New

func New(
	pacman repox.Hub,
	cplane xplane.ControlPlane,
	coredb store.CoreHub,
	signer service.Signer,
	dynHub dyndb.DataHub,
	cabHub store.CabinetHub,
	plugState store.PlugStateKV,
	log logx.Proxy) *Controller

func (*Controller) AdapterDeleteApp

func (c *Controller) AdapterDeleteApp(aclaim *claim.AdapterEditor, id int64) error

func (*Controller) AdapterDeleteHook

func (c *Controller) AdapterDeleteHook(aclaim *claim.AdapterEditor, id int64) error

func (*Controller) AdapterGetApp

func (c *Controller) AdapterGetApp(aclaim *claim.AdapterEditor, id int64) (*entities.TargetApp, error)

func (*Controller) AdapterGetHook

func (c *Controller) AdapterGetHook(aclaim *claim.AdapterEditor, id int64) (*entities.TargetHook, error)

func (*Controller) AdapterListApps

func (c *Controller) AdapterListApps(aclaim *claim.AdapterEditor) ([]*entities.TargetApp, error)

func (*Controller) AdapterListHooks

func (c *Controller) AdapterListHooks(aclaim *claim.AdapterEditor) ([]*entities.TargetHook, error)

func (*Controller) AdapterNewApp

func (c *Controller) AdapterNewApp(aclaim *claim.AdapterEditor, data *entities.TargetApp) error

func (*Controller) AdapterNewHook

func (c *Controller) AdapterNewHook(aclaim *claim.AdapterEditor, data *entities.TargetHook) error

func (*Controller) AdapterSelfUpdate

func (c *Controller) AdapterSelfUpdate(aclaim *claim.AdapterEditor, data map[string]any) error

func (*Controller) AdapterUpdateApp

func (c *Controller) AdapterUpdateApp(aclaim *claim.AdapterEditor, id int64, data map[string]any) error

func (*Controller) AdapterUpdateHook

func (c *Controller) AdapterUpdateHook(aclaim *claim.AdapterEditor, id int64, data map[string]any) error

func (*Controller) AddDomain

func (c *Controller) AddDomain(uclaim *claim.Session, domain *entities.TenantDomain) error

func (*Controller) AddTargetApp

func (c *Controller) AddTargetApp(uclaim *claim.Session, data *entities.TargetApp) error

func (*Controller) AddTargetHook

func (c *Controller) AddTargetHook(uclaim *claim.Session, data *entities.TargetHook) error

func (*Controller) AddUser

func (c *Controller) AddUser(uclaim *claim.Session, user *entities.User) error

func (*Controller) AddUserDevice

func (c *Controller) AddUserDevice(uclaim *claim.Session, user string, data *NewUserDevice) error

func (*Controller) AddUserGroup

func (c *Controller) AddUserGroup(uclaim *claim.Session, ugroup *entities.UserGroup) error

func (*Controller) AddUserGroupAuth

func (c *Controller) AddUserGroupAuth(uclaim *claim.Session, gslug string, data *entities.UserGroupAuth) error

func (*Controller) AddUserGroupData

func (c *Controller) AddUserGroupData(uclaim *claim.Session, gslug string, data *entities.UserGroupData) error

func (*Controller) AgentDel

func (c *Controller) AgentDel(uclaim *claim.Session, pid, agentId string) error

func (*Controller) AgentExtensionDel

func (c *Controller) AgentExtensionDel(uclaim *claim.Session, pid, aid string, id int64) error

func (*Controller) AgentExtensionGet

func (c *Controller) AgentExtensionGet(uclaim *claim.Session, pid, aid string, id int64) (*entities.AgentExtension, error)

func (*Controller) AgentExtensionList

func (c *Controller) AgentExtensionList(uclaim *claim.Session, pid, aid string) ([]*entities.AgentExtension, error)

func (*Controller) AgentExtensionNew

func (c *Controller) AgentExtensionNew(uclaim *claim.Session, data *entities.AgentExtension) error

func (*Controller) AgentExtensionUpdate

func (c *Controller) AgentExtensionUpdate(uclaim *claim.Session, pid, aid string, id int64, data map[string]any) error

func (*Controller) AgentGet

func (c *Controller) AgentGet(uclaim *claim.Session, pid, agentId string) (*entities.Agent, error)

func (*Controller) AgentLinkDel

func (c *Controller) AgentLinkDel(uclaim *claim.Session, pid, aid string, id int64) error

func (*Controller) AgentLinkGet

func (c *Controller) AgentLinkGet(uclaim *claim.Session, pid, aid string, id int64) (*entities.AgentLink, error)
func (c *Controller) AgentLinkList(uclaim *claim.Session, pid, aid string) ([]*entities.AgentLink, error)

func (*Controller) AgentLinkNew

func (c *Controller) AgentLinkNew(uclaim *claim.Session, data *entities.AgentLink) error

func (*Controller) AgentLinkUpdate

func (c *Controller) AgentLinkUpdate(uclaim *claim.Session, pid, aid string, id int64, data map[string]any) error

func (*Controller) AgentList

func (c *Controller) AgentList(uclaim *claim.Session, pid string) ([]*entities.Agent, error)

func (*Controller) AgentNew

func (c *Controller) AgentNew(uclaim *claim.Session, data *entities.Agent) error

func (*Controller) AgentResourceDel

func (c *Controller) AgentResourceDel(uclaim *claim.Session, pid, aid, slug string) error

func (*Controller) AgentResourceGet

func (c *Controller) AgentResourceGet(uclaim *claim.Session, pid, aid, slug string) (*entities.AgentResource, error)

func (*Controller) AgentResourceList

func (c *Controller) AgentResourceList(uclaim *claim.Session, pid, aid string) ([]*entities.AgentResource, error)

func (*Controller) AgentResourceNew

func (c *Controller) AgentResourceNew(uclaim *claim.Session, data *entities.AgentResource) error

func (*Controller) AgentResourceUpdate

func (c *Controller) AgentResourceUpdate(uclaim *claim.Session, pid, aid, slug string, data map[string]any) error

func (*Controller) AgentUpdate

func (c *Controller) AgentUpdate(uclaim *claim.Session, pid string, aid string, data map[string]any) error

func (*Controller) BprintCreate

func (c *Controller) BprintCreate(uclaim *claim.Session, bp *entities.BPrint) (string, error)

func (*Controller) BprintCreateFromZip

func (c *Controller) BprintCreateFromZip(uclaim *claim.Session, form *multipart.Form) error

func (*Controller) BprintDeleteBlob

func (c *Controller) BprintDeleteBlob(uclaim *claim.Session, bid, file string) error

func (*Controller) BprintGet

func (c *Controller) BprintGet(uclaim *claim.Session, bid string) (*entities.BPrint, error)

func (*Controller) BprintGetBlob

func (c *Controller) BprintGetBlob(uclaim *claim.Session, bid, file string) ([]byte, error)

func (*Controller) BprintImport

func (c *Controller) BprintImport(uclaim *claim.Session, opts *repox.RepoImportOpts) (string, error)

func (*Controller) BprintInstance

func (c *Controller) BprintInstance(uclaim *claim.Session, bid string, opts *InstanceOptions) (any, error)

func (*Controller) BprintList

func (c *Controller) BprintList(uclaim *claim.Session, group string) ([]*entities.BPrint, error)

func (*Controller) BprintListBlobs

func (c *Controller) BprintListBlobs(uclaim *claim.Session, bid string) (any, error)

func (*Controller) BprintNewBlob

func (c *Controller) BprintNewBlob(uclaim *claim.Session, bid, file string, payload []byte) error

func (*Controller) BprintRemove

func (c *Controller) BprintRemove(uclaim *claim.Session, bid string) error

func (*Controller) BprintUpdate

func (c *Controller) BprintUpdate(uclaim *claim.Session, bp *entities.BPrint) error

func (*Controller) BprintUpdateBlob

func (c *Controller) BprintUpdateBlob(uclaim *claim.Session, bid, file string, payload []byte) error

func (*Controller) CheckBprint

func (c *Controller) CheckBprint(uclaim *claim.Session, bid string) error

func (*Controller) CheckDataGroup

func (c *Controller) CheckDataGroup(uclaim *claim.Session, source, gid string) error

func (*Controller) CheckDataTable

func (c *Controller) CheckDataTable(uclaim *claim.Session, source, gid, tid string) error

func (*Controller) CheckPlug

func (c *Controller) CheckPlug(uclaim *claim.Session, pid string) error

func (*Controller) DataActivityQuery

func (c *Controller) DataActivityQuery(uclaim *claim.Session, source, group, tslug string, offset int64) ([]*entities.DynActivity, error)

func (*Controller) DelView

func (c *Controller) DelView(uclaim *claim.Session, source, group, tslug string, id int64) error

func (*Controller) DeleteColumn

func (c *Controller) DeleteColumn(uclaim *claim.Session, source, group, tslug string, cslug string) error

func (*Controller) DeleteGroup

func (c *Controller) DeleteGroup(uclaim *claim.Session, source, gslug string) error

func (*Controller) DeleteTable

func (c *Controller) DeleteTable(uclaim *claim.Session, source, group, tslug string) error

func (*Controller) DevIssueTkt

func (c *Controller) DevIssueTkt(uclaim *claim.Session, host string, req DevIssueReq) (*devtoken.Plug, error)

func (*Controller) DevIssueTktEncoded

func (c *Controller) DevIssueTktEncoded(uclaim *claim.Session, host string, req DevIssueReq) (string, error)

func (*Controller) DomainAdapterEditorIssue

func (c *Controller) DomainAdapterEditorIssue(uclaim *claim.Session, did int64) (*DomainAdapterEditorIssueResp, error)

func (*Controller) EditColumn

func (c *Controller) EditColumn(uclaim *claim.Session, source, group, tslug string, cslug string, model *entities.ColumnPartial) error

func (*Controller) EditGroup

func (c *Controller) EditGroup(uclaim *claim.Session, source, gslug string, model *entities.TableGroupPartial) error

func (*Controller) EditTable

func (c *Controller) EditTable(uclaim *claim.Session, source, group, tslug string, model *entities.TablePartial) error

func (*Controller) GetColumn

func (c *Controller) GetColumn(uclaim *claim.Session, source, group, tslug string, cslug string) (*entities.Column, error)

func (*Controller) GetDomain

func (c *Controller) GetDomain(uclaim *claim.Session, id int64) (*entities.TenantDomain, error)

func (*Controller) GetGroup

func (c *Controller) GetGroup(uclaim *claim.Session, source, gslug string) (*entities.TableGroup, error)

func (*Controller) GetGroupSheets

func (c *Controller) GetGroupSheets(uclaim *claim.Session, source, gslug string) (any, error)

func (*Controller) GetTable

func (c *Controller) GetTable(uclaim *claim.Session, source, group, tslug string) (*entities.Table, error)

func (*Controller) GetTargetApp

func (c *Controller) GetTargetApp(uclaim *claim.Session, ttype string, id int64) (*entities.TargetApp, error)

func (*Controller) GetTargetHook

func (c *Controller) GetTargetHook(uclaim *claim.Session, ttype string, id int64) (*entities.TargetHook, error)

func (*Controller) GetTenant

func (c *Controller) GetTenant(uclaim *claim.Session) (*entities.Tenant, error)

func (*Controller) GetUserByEmail

func (c *Controller) GetUserByEmail(uclaim *claim.Session, email string) (*entities.User, error)

func (*Controller) GetUserByID

func (c *Controller) GetUserByID(uclaim *claim.Session, username string) (*entities.User, error)

func (*Controller) GetUserDevice

func (c *Controller) GetUserDevice(uclaim *claim.Session, user string, id int64) (*entities.UserDevice, error)

func (*Controller) GetUserGroup

func (c *Controller) GetUserGroup(uclaim *claim.Session, ugroup string) (*entities.UserGroup, error)

func (*Controller) GetUserGroupAuth

func (c *Controller) GetUserGroupAuth(uclaim *claim.Session, gslug string, id int64) (*entities.UserGroupAuth, error)

func (*Controller) GetUserGroupData

func (c *Controller) GetUserGroupData(uclaim *claim.Session, gslug string, id int64) (*entities.UserGroupData, error)

func (*Controller) GetView

func (c *Controller) GetView(uclaim *claim.Session, source, group, tslug string, id int64) (*entities.DataView, error)

func (*Controller) HasScope

func (c *Controller) HasScope(uclaim *claim.Session, sub string) bool

func (*Controller) LensQuery

func (c *Controller) LensQuery(uclaim *claim.Session, query LogQuery) ([]logx.Log, error)

func (*Controller) ListColumns

func (c *Controller) ListColumns(uclaim *claim.Session, source, group, tslug string) ([]*entities.Column, error)

func (*Controller) ListDomain

func (c *Controller) ListDomain(uclaim *claim.Session) ([]*entities.TenantDomain, error)

func (*Controller) ListGroup

func (c *Controller) ListGroup(uclaim *claim.Session, source string) ([]*entities.TableGroup, error)

func (*Controller) ListSources

func (c *Controller) ListSources(uclaim *claim.Session) ([]string, error)

func (*Controller) ListSystemEvent

func (c *Controller) ListSystemEvent(uclaim *claim.Session, etype string, last int64) ([]*entities.SystemEvent, error)

func (*Controller) ListSystemKV

func (c *Controller) ListSystemKV(uclaim *claim.Session, ktype, prefix string, last int64) ([]*entities.SystemKV, error)

func (*Controller) ListTables

func (c *Controller) ListTables(uclaim *claim.Session, source, group string) ([]*entities.Table, error)

func (*Controller) ListTargetApp

func (c *Controller) ListTargetApp(uclaim *claim.Session) ([]*entities.TargetApp, error)

func (*Controller) ListTargetAppByType

func (c *Controller) ListTargetAppByType(uclaim *claim.Session, ttype, target string) ([]*entities.TargetApp, error)

func (*Controller) ListTargetHook

func (c *Controller) ListTargetHook(uclaim *claim.Session) ([]*entities.TargetHook, error)

func (*Controller) ListTargetHookByType

func (c *Controller) ListTargetHookByType(uclaim *claim.Session, ttype, target string) ([]*entities.TargetHook, error)

func (*Controller) ListUserDevice

func (c *Controller) ListUserDevice(uclaim *claim.Session, user string) ([]*entities.UserDevice, error)

func (*Controller) ListUserGroup

func (c *Controller) ListUserGroup(uclaim *claim.Session) ([]*entities.UserGroup, error)

func (*Controller) ListUserGroupAuth

func (c *Controller) ListUserGroupAuth(uclaim *claim.Session, gslug string) ([]*entities.UserGroupAuth, error)

func (*Controller) ListUserGroupData

func (c *Controller) ListUserGroupData(uclaim *claim.Session, gslug string) ([]*entities.UserGroupData, error)

func (*Controller) ListUsers

func (c *Controller) ListUsers(uclaim *claim.Session) ([]*entities.User, error)

func (*Controller) ListUsersByGroup

func (c *Controller) ListUsersByGroup(uclaim *claim.Session, group string) ([]*entities.User, error)

func (*Controller) ListView

func (c *Controller) ListView(uclaim *claim.Session, source, group, tslug string) ([]*entities.DataView, error)

func (*Controller) LiveSeed

func (c *Controller) LiveSeed(uclaim *claim.Session, source, group, table string, max int) error

func (*Controller) ModifyView

func (c *Controller) ModifyView(uclaim *claim.Session, source, group, tslug string, id int64, data map[string]interface{}) error

func (*Controller) NewGroup

func (c *Controller) NewGroup(uclaim *claim.Session, source string, model *xbprint.NewTableGroup) error

dyn_table_group

func (*Controller) NewView

func (c *Controller) NewView(uclaim *claim.Session, source, group, tslug string, model *entities.DataView) error

func (*Controller) PlugDel

func (c *Controller) PlugDel(uclaim *claim.Session, pid string) error

func (*Controller) PlugFlowmap

func (c *Controller) PlugFlowmap(uclaim *claim.Session, plugId string) (*FlowmapData, error)

func (*Controller) PlugFlowmap2

func (c *Controller) PlugFlowmap2(uclaim *claim.Session, plugId string) (*flowmap.Data, error)

func (*Controller) PlugGet

func (c *Controller) PlugGet(uclaim *claim.Session, pid string) (*entities.Plug, error)

func (*Controller) PlugKvExport

func (c *Controller) PlugKvExport(uclaim *claim.Session, pid string) (string, error)

func (*Controller) PlugKvImport

func (c *Controller) PlugKvImport(uclaim *claim.Session, pid string, clear bool, data io.Reader) error

func (*Controller) PlugList

func (c *Controller) PlugList(uclaim *claim.Session) ([]*entities.Plug, error)

func (*Controller) PlugListByBprint

func (c *Controller) PlugListByBprint(uclaim *claim.Session, bid string) ([]*entities.Plug, error)

func (*Controller) PlugNew

func (c *Controller) PlugNew(uclaim *claim.Session, pg *entities.Plug) error

plug

func (*Controller) PlugStateDel

func (c *Controller) PlugStateDel(uclaim *claim.Session, pid, key string) error

func (*Controller) PlugStateGet

func (c *Controller) PlugStateGet(uclaim *claim.Session, pid, key string) (*entities.PlugKV, error)

func (*Controller) PlugStateList

func (c *Controller) PlugStateList(uclaim *claim.Session, pid, key_cursor string, page uint) ([]*entities.PlugKV, error)

func (*Controller) PlugStateNew

func (c *Controller) PlugStateNew(uclaim *claim.Session, pid string, state PlugStateNew) error

func (*Controller) PlugStateUpdate

func (c *Controller) PlugStateUpdate(uclaim *claim.Session, pid, key string, state PlugStateUpdate) error

func (*Controller) PlugUpdate

func (c *Controller) PlugUpdate(uclaim *claim.Session, pid string, data map[string]any) error

func (*Controller) QueryDataGroup

func (c *Controller) QueryDataGroup(uclaim *claim.Session, source, group string, query DataGroupQuery) (any, error)

func (*Controller) RemoveDomain

func (c *Controller) RemoveDomain(uclaim *claim.Session, id int64) error

func (*Controller) RemoveTargetApp

func (c *Controller) RemoveTargetApp(uclaim *claim.Session, ttype string, id int64) error

func (*Controller) RemoveTargetHook

func (c *Controller) RemoveTargetHook(uclaim *claim.Session, ttype string, id int64) error

func (*Controller) RemoveUser

func (c *Controller) RemoveUser(uclaim *claim.Session, username string) error

func (*Controller) RemoveUserDevice

func (c *Controller) RemoveUserDevice(uclaim *claim.Session, user string, id int64) error

func (*Controller) RemoveUserGroup

func (c *Controller) RemoveUserGroup(uclaim *claim.Session, ugroup string) error

func (*Controller) RemoveUserGroupAuth

func (c *Controller) RemoveUserGroupAuth(uclaim *claim.Session, gslug string, id int64) error

func (*Controller) RemoveUserGroupData

func (c *Controller) RemoveUserGroupData(uclaim *claim.Session, gslug string, id int64) error

func (*Controller) RepoDel

func (c *Controller) RepoDel(uclaim *claim.Session, id int64) error

func (*Controller) RepoGet

func (c *Controller) RepoGet(uclaim *claim.Session, id int64) (*entities.Repo, error)

func (*Controller) RepoList

func (c *Controller) RepoList(uclaim *claim.Session) ([]*entities.Repo, error)

func (*Controller) RepoNew

func (c *Controller) RepoNew(uclaim *claim.Session, data *entities.Repo) error

func (*Controller) RepoSources

func (c *Controller) RepoSources(uclaim *claim.Session) (map[int64]string, error)

func (*Controller) RepoUpdate

func (c *Controller) RepoUpdate(uclaim *claim.Session, id int64, data map[string]any) error

func (*Controller) ResourceAgentList

func (c *Controller) ResourceAgentList(uclaim *claim.Session, req *vmodels.ResourceQuery) ([]*entities.Resource, error)

func (*Controller) ResourceDel

func (c *Controller) ResourceDel(uclaim *claim.Session, rid string) error

func (*Controller) ResourceGet

func (c *Controller) ResourceGet(uclaim *claim.Session, rid string) (*entities.Resource, error)

func (*Controller) ResourceList

func (c *Controller) ResourceList(uclaim *claim.Session) ([]*entities.Resource, error)

func (*Controller) ResourceNew

func (c *Controller) ResourceNew(uclaim *claim.Session, data *entities.Resource) error

func (*Controller) ResourceUpdate

func (c *Controller) ResourceUpdate(uclaim *claim.Session, rid string, data map[string]any) error

func (*Controller) UpdateDomain

func (c *Controller) UpdateDomain(uclaim *claim.Session, id int64, data map[string]any) error

func (*Controller) UpdateTargetApp

func (c *Controller) UpdateTargetApp(uclaim *claim.Session, ttype string, id int64, data map[string]any) error

func (*Controller) UpdateTargetHook

func (c *Controller) UpdateTargetHook(uclaim *claim.Session, ttype string, id int64, data map[string]any) error

func (*Controller) UpdateTenant

func (c *Controller) UpdateTenant(uclaim *claim.Session, data map[string]any) error

func (*Controller) UpdateUser

func (c *Controller) UpdateUser(uclaim *claim.Session, user map[string]any) error

func (*Controller) UpdateUserDevice

func (c *Controller) UpdateUserDevice(uclaim *claim.Session, user string, id int64, data map[string]any) error

func (*Controller) UpdateUserGroup

func (c *Controller) UpdateUserGroup(uclaim *claim.Session, id string, data map[string]any) error

func (*Controller) UpdateUserGroupAuth

func (c *Controller) UpdateUserGroupAuth(uclaim *claim.Session, gslug string, id int64, data map[string]any) error

func (*Controller) UpdateUserGroupData

func (c *Controller) UpdateUserGroupData(uclaim *claim.Session, gslug string, id int64, data map[string]any) error

type DataGroupQuery

type DataGroupQuery struct {
	Raw         bool   `json:"raw,omitempty"`
	QueryString string `json:"query_string,omitempty"`
}

type DevIssueReq

type DevIssueReq struct {
	AllPlugs bool     `json:"all_plugs,omitempty"`
	PlugIds  []string `json:"plug_ids,omitempty"`
	BprintId string   `json:"bprint_id,omitempty"`
}

type DomainAdapterEditorIssueResp

type DomainAdapterEditorIssueResp struct {
	AdapterType string `json:"adapter_type,omitempty"`
	Token       string `json:"token,omitempty"`
	DomainName  string `json:"domain_name,omitempty"`
}

type FlowmapData

type FlowmapData struct {
	Plug       *entities.Plug                      `json:"plug,omitempty"`
	Agents     []*entities.Agent                   `json:"agents,omitempty"`
	AgentLinks map[string]*entities.AgentLink      `json:"agent_links,omitempty"`
	AgentExts  map[string]*entities.AgentExtension `json:"agent_exts,omitempty"`

	TargetApps     []*entities.TargetApp         `json:"target_apps,omitempty"`
	TargetHooks    []*entities.TargetHook        `json:"target_hooks,omitempty"`
	AgentResources map[string]*entities.Resource `json:"agent_resources,omitempty"`
}

type InstanceOptions

type InstanceOptions struct {
	InstancerType  string          `json:"instancer_type,omitempty"`
	File           string          `json:"file,omitempty"`
	UserConfigData json.RawMessage `json:"data,omitempty"`
	Auto           bool            `json:"auto,omitempty"`
}

type LogQuery

type LogQuery struct {
	From    string            `json:"from,omitempty"`
	To      string            `json:"to,omitempty"`
	Filters map[string]string `json:"filters,omitempty"`
	Cursor  string            `json:"cursor,omitempty"`
	Count   int               `json:"count,omitempty"`
}

type NewUserDevice

type NewUserDevice struct {
	Name       string            `json:"name,omitempty" db:"name,omitempty"`
	UserId     string            `json:"user_id,omitempty" db:"user_id,omitempty"`
	DeviceType string            `json:"device_type,omitempty" db:"device_type,omitempty"`
	Scopes     string            `json:"scopes,omitempty" db:"scopes,omitempty"`
	ExtraMeta  map[string]string `json:"extra_meta,omitempty"`
}

type PlugStateNew

type PlugStateNew struct {
	Key     string            `json:"key,omitempty"`
	Value   string            `json:"value,omitempty"`
	Options *store.SetOptions `json:"options,omitempty"`
}

type PlugStateUpdate

type PlugStateUpdate struct {
	Value   string
	Options *store.UpdateOptions
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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