install

package
v2.1.1+incompatible Latest Latest
Warning

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

Go to latest
Published: Jul 1, 2020 License: AGPL-3.0 Imports: 9 Imported by: 0

Documentation

Overview

Package install is a generated protocol buffer package.

It is generated from these files:

install.proto

It has these top-level messages:

InstallConfig
ProxyConfig
TLSSelfSigned
TLSLetsEncrypt
TLSCertificate
CheckResult
PerformCheckRequest
PerformCheckResponse
GetDefaultsRequest
GetDefaultsResponse
GetAgreementRequest
GetAgreementResponse
InstallRequest
InstallResponse

Package install is a generated protocol buffer package.

It is generated from these files:

install.proto

It has these top-level messages:

InstallConfig
ProxyConfig
TLSSelfSigned
TLSLetsEncrypt
TLSCertificate
CheckResult
PerformCheckRequest
PerformCheckResponse
GetDefaultsRequest
GetDefaultsResponse
GetAgreementRequest
GetAgreementResponse
InstallRequest
InstallResponse

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func RegisterInstallHandler

func RegisterInstallHandler(s server.Server, hdlr InstallHandler, opts ...server.HandlerOption)

Types

type CheckResult

type CheckResult struct {
	Name       string `protobuf:"bytes,1,opt,name=Name" json:"Name,omitempty"`
	Success    bool   `protobuf:"varint,2,opt,name=Success" json:"Success,omitempty"`
	JsonResult string `protobuf:"bytes,3,opt,name=JsonResult" json:"JsonResult,omitempty"`
}

func (*CheckResult) Descriptor

func (*CheckResult) Descriptor() ([]byte, []int)

func (*CheckResult) GetJsonResult

func (m *CheckResult) GetJsonResult() string

func (*CheckResult) GetName

func (m *CheckResult) GetName() string

func (*CheckResult) GetSuccess

func (m *CheckResult) GetSuccess() bool

func (*CheckResult) ProtoMessage

func (*CheckResult) ProtoMessage()

func (*CheckResult) Reset

func (m *CheckResult) Reset()

func (*CheckResult) String

func (m *CheckResult) String() string

func (*CheckResult) Validate

func (this *CheckResult) Validate() error

type GetAgreementRequest

type GetAgreementRequest struct {
}

func (*GetAgreementRequest) Descriptor

func (*GetAgreementRequest) Descriptor() ([]byte, []int)

func (*GetAgreementRequest) ProtoMessage

func (*GetAgreementRequest) ProtoMessage()

func (*GetAgreementRequest) Reset

func (m *GetAgreementRequest) Reset()

func (*GetAgreementRequest) String

func (m *GetAgreementRequest) String() string

func (*GetAgreementRequest) Validate

func (this *GetAgreementRequest) Validate() error

type GetAgreementResponse

type GetAgreementResponse struct {
	Text string `protobuf:"bytes,1,opt,name=Text" json:"Text,omitempty"`
}

func (*GetAgreementResponse) Descriptor

func (*GetAgreementResponse) Descriptor() ([]byte, []int)

func (*GetAgreementResponse) GetText

func (m *GetAgreementResponse) GetText() string

func (*GetAgreementResponse) ProtoMessage

func (*GetAgreementResponse) ProtoMessage()

func (*GetAgreementResponse) Reset

func (m *GetAgreementResponse) Reset()

func (*GetAgreementResponse) String

func (m *GetAgreementResponse) String() string

func (*GetAgreementResponse) Validate

func (this *GetAgreementResponse) Validate() error

type GetDefaultsRequest

type GetDefaultsRequest struct {
}

func (*GetDefaultsRequest) Descriptor

func (*GetDefaultsRequest) Descriptor() ([]byte, []int)

func (*GetDefaultsRequest) ProtoMessage

func (*GetDefaultsRequest) ProtoMessage()

func (*GetDefaultsRequest) Reset

func (m *GetDefaultsRequest) Reset()

func (*GetDefaultsRequest) String

func (m *GetDefaultsRequest) String() string

func (*GetDefaultsRequest) Validate

func (this *GetDefaultsRequest) Validate() error

type GetDefaultsResponse

type GetDefaultsResponse struct {
	Config *InstallConfig `protobuf:"bytes,1,opt,name=config" json:"config,omitempty"`
}

func (*GetDefaultsResponse) Descriptor

func (*GetDefaultsResponse) Descriptor() ([]byte, []int)

func (*GetDefaultsResponse) GetConfig

func (m *GetDefaultsResponse) GetConfig() *InstallConfig

func (*GetDefaultsResponse) ProtoMessage

func (*GetDefaultsResponse) ProtoMessage()

func (*GetDefaultsResponse) Reset

func (m *GetDefaultsResponse) Reset()

func (*GetDefaultsResponse) String

func (m *GetDefaultsResponse) String() string

func (*GetDefaultsResponse) Validate

func (this *GetDefaultsResponse) Validate() error

type Install

type Install struct {
	InstallHandler
}

func (*Install) GetDefaults

func (h *Install) GetDefaults(ctx context.Context, in *GetDefaultsRequest, out *GetDefaultsResponse) error

func (*Install) Install

func (h *Install) Install(ctx context.Context, in *InstallRequest, out *InstallResponse) error

func (*Install) PerformCheck

func (h *Install) PerformCheck(ctx context.Context, in *PerformCheckRequest, out *PerformCheckResponse) error

type InstallClient

type InstallClient interface {
	GetDefaults(ctx context.Context, in *GetDefaultsRequest, opts ...client.CallOption) (*GetDefaultsResponse, error)
	Install(ctx context.Context, in *InstallRequest, opts ...client.CallOption) (*InstallResponse, error)
	PerformCheck(ctx context.Context, in *PerformCheckRequest, opts ...client.CallOption) (*PerformCheckResponse, error)
}

func NewInstallClient

func NewInstallClient(serviceName string, c client.Client) InstallClient

type InstallConfig

type InstallConfig struct {
	InternalUrl              string         `protobuf:"bytes,32,opt,name=internalUrl" json:"internalUrl,omitempty"`
	DbConnectionType         string         `protobuf:"bytes,1,opt,name=dbConnectionType" json:"dbConnectionType,omitempty"`
	DbTCPHostname            string         `protobuf:"bytes,2,opt,name=dbTCPHostname" json:"dbTCPHostname,omitempty"`
	DbTCPPort                string         `protobuf:"bytes,3,opt,name=dbTCPPort" json:"dbTCPPort,omitempty"`
	DbTCPName                string         `protobuf:"bytes,4,opt,name=dbTCPName" json:"dbTCPName,omitempty"`
	DbTCPUser                string         `protobuf:"bytes,5,opt,name=dbTCPUser" json:"dbTCPUser,omitempty"`
	DbTCPPassword            string         `protobuf:"bytes,6,opt,name=dbTCPPassword" json:"dbTCPPassword,omitempty"`
	DbSocketFile             string         `protobuf:"bytes,7,opt,name=dbSocketFile" json:"dbSocketFile,omitempty"`
	DbSocketName             string         `protobuf:"bytes,8,opt,name=dbSocketName" json:"dbSocketName,omitempty"`
	DbSocketUser             string         `protobuf:"bytes,9,opt,name=dbSocketUser" json:"dbSocketUser,omitempty"`
	DbSocketPassword         string         `protobuf:"bytes,10,opt,name=dbSocketPassword" json:"dbSocketPassword,omitempty"`
	DbManualDSN              string         `protobuf:"bytes,11,opt,name=dbManualDSN" json:"dbManualDSN,omitempty"`
	DsName                   string         `protobuf:"bytes,12,opt,name=dsName" json:"dsName,omitempty"`
	DsPort                   string         `protobuf:"bytes,13,opt,name=dsPort" json:"dsPort,omitempty"`
	DsType                   string         `protobuf:"bytes,15,opt,name=dsType" json:"dsType,omitempty"`
	DsS3Custom               string         `protobuf:"bytes,16,opt,name=dsS3Custom" json:"dsS3Custom,omitempty"`
	DsS3CustomRegion         string         `protobuf:"bytes,17,opt,name=dsS3CustomRegion" json:"dsS3CustomRegion,omitempty"`
	DsS3ApiKey               string         `protobuf:"bytes,18,opt,name=dsS3ApiKey" json:"dsS3ApiKey,omitempty"`
	DsS3ApiSecret            string         `protobuf:"bytes,19,opt,name=dsS3ApiSecret" json:"dsS3ApiSecret,omitempty"`
	DsS3BucketDefault        string         `protobuf:"bytes,20,opt,name=dsS3BucketDefault" json:"dsS3BucketDefault,omitempty"`
	DsS3BucketPersonal       string         `protobuf:"bytes,21,opt,name=dsS3BucketPersonal" json:"dsS3BucketPersonal,omitempty"`
	DsS3BucketCells          string         `protobuf:"bytes,22,opt,name=dsS3BucketCells" json:"dsS3BucketCells,omitempty"`
	DsS3BucketBinaries       string         `protobuf:"bytes,23,opt,name=dsS3BucketBinaries" json:"dsS3BucketBinaries,omitempty"`
	DsS3BucketThumbs         string         `protobuf:"bytes,35,opt,name=dsS3BucketThumbs" json:"dsS3BucketThumbs,omitempty"`
	DsS3BucketVersions       string         `protobuf:"bytes,36,opt,name=dsS3BucketVersions" json:"dsS3BucketVersions,omitempty"`
	DsFolder                 string         `protobuf:"bytes,14,opt,name=dsFolder" json:"dsFolder,omitempty"`
	FrontendHosts            string         `protobuf:"bytes,24,opt,name=frontendHosts" json:"frontendHosts,omitempty"`
	FrontendLogin            string         `protobuf:"bytes,25,opt,name=frontendLogin" json:"frontendLogin,omitempty"`
	FrontendPassword         string         `protobuf:"bytes,26,opt,name=frontendPassword" json:"frontendPassword,omitempty"`
	FrontendRepeatPassword   string         `protobuf:"bytes,27,opt,name=frontendRepeatPassword" json:"frontendRepeatPassword,omitempty"`
	FrontendApplicationTitle string         `protobuf:"bytes,28,opt,name=frontendApplicationTitle" json:"frontendApplicationTitle,omitempty"`
	FrontendDefaultLanguage  string         `protobuf:"bytes,33,opt,name=frontendDefaultLanguage" json:"frontendDefaultLanguage,omitempty"`
	LicenseRequired          bool           `protobuf:"varint,29,opt,name=licenseRequired" json:"licenseRequired,omitempty"`
	LicenseString            string         `protobuf:"bytes,30,opt,name=licenseString" json:"licenseString,omitempty"`
	CheckResults             []*CheckResult `protobuf:"bytes,31,rep,name=CheckResults" json:"CheckResults,omitempty"`
	// Additional proxy config (optional)
	ProxyConfig *ProxyConfig `protobuf:"bytes,34,opt,name=ProxyConfig" json:"ProxyConfig,omitempty"`
}

func (*InstallConfig) Descriptor

func (*InstallConfig) Descriptor() ([]byte, []int)

func (*InstallConfig) GetCheckResults

func (m *InstallConfig) GetCheckResults() []*CheckResult

func (*InstallConfig) GetDbConnectionType

func (m *InstallConfig) GetDbConnectionType() string

func (*InstallConfig) GetDbManualDSN

func (m *InstallConfig) GetDbManualDSN() string

func (*InstallConfig) GetDbSocketFile

func (m *InstallConfig) GetDbSocketFile() string

func (*InstallConfig) GetDbSocketName

func (m *InstallConfig) GetDbSocketName() string

func (*InstallConfig) GetDbSocketPassword

func (m *InstallConfig) GetDbSocketPassword() string

func (*InstallConfig) GetDbSocketUser

func (m *InstallConfig) GetDbSocketUser() string

func (*InstallConfig) GetDbTCPHostname

func (m *InstallConfig) GetDbTCPHostname() string

func (*InstallConfig) GetDbTCPName

func (m *InstallConfig) GetDbTCPName() string

func (*InstallConfig) GetDbTCPPassword

func (m *InstallConfig) GetDbTCPPassword() string

func (*InstallConfig) GetDbTCPPort

func (m *InstallConfig) GetDbTCPPort() string

func (*InstallConfig) GetDbTCPUser

func (m *InstallConfig) GetDbTCPUser() string

func (*InstallConfig) GetDsFolder

func (m *InstallConfig) GetDsFolder() string

func (*InstallConfig) GetDsName

func (m *InstallConfig) GetDsName() string

func (*InstallConfig) GetDsPort

func (m *InstallConfig) GetDsPort() string

func (*InstallConfig) GetDsS3ApiKey

func (m *InstallConfig) GetDsS3ApiKey() string

func (*InstallConfig) GetDsS3ApiSecret

func (m *InstallConfig) GetDsS3ApiSecret() string

func (*InstallConfig) GetDsS3BucketBinaries

func (m *InstallConfig) GetDsS3BucketBinaries() string

func (*InstallConfig) GetDsS3BucketCells

func (m *InstallConfig) GetDsS3BucketCells() string

func (*InstallConfig) GetDsS3BucketDefault

func (m *InstallConfig) GetDsS3BucketDefault() string

func (*InstallConfig) GetDsS3BucketPersonal

func (m *InstallConfig) GetDsS3BucketPersonal() string

func (*InstallConfig) GetDsS3BucketThumbs

func (m *InstallConfig) GetDsS3BucketThumbs() string

func (*InstallConfig) GetDsS3BucketVersions

func (m *InstallConfig) GetDsS3BucketVersions() string

func (*InstallConfig) GetDsS3Custom

func (m *InstallConfig) GetDsS3Custom() string

func (*InstallConfig) GetDsS3CustomRegion

func (m *InstallConfig) GetDsS3CustomRegion() string

func (*InstallConfig) GetDsType

func (m *InstallConfig) GetDsType() string

func (*InstallConfig) GetFrontendApplicationTitle added in v1.2.0

func (m *InstallConfig) GetFrontendApplicationTitle() string

func (*InstallConfig) GetFrontendDefaultLanguage added in v1.2.0

func (m *InstallConfig) GetFrontendDefaultLanguage() string

func (*InstallConfig) GetFrontendHosts

func (m *InstallConfig) GetFrontendHosts() string

func (*InstallConfig) GetFrontendLogin

func (m *InstallConfig) GetFrontendLogin() string

func (*InstallConfig) GetFrontendPassword

func (m *InstallConfig) GetFrontendPassword() string

func (*InstallConfig) GetFrontendRepeatPassword

func (m *InstallConfig) GetFrontendRepeatPassword() string

func (*InstallConfig) GetInternalUrl

func (m *InstallConfig) GetInternalUrl() string

func (*InstallConfig) GetLicenseRequired

func (m *InstallConfig) GetLicenseRequired() bool

func (*InstallConfig) GetLicenseString

func (m *InstallConfig) GetLicenseString() string

func (*InstallConfig) GetProxyConfig

func (m *InstallConfig) GetProxyConfig() *ProxyConfig

func (*InstallConfig) ProtoMessage

func (*InstallConfig) ProtoMessage()

func (*InstallConfig) Reset

func (m *InstallConfig) Reset()

func (*InstallConfig) String

func (m *InstallConfig) String() string

func (*InstallConfig) Validate

func (this *InstallConfig) Validate() error

type InstallRequest

type InstallRequest struct {
	Config *InstallConfig `protobuf:"bytes,1,opt,name=config" json:"config,omitempty"`
}

func (*InstallRequest) Descriptor

func (*InstallRequest) Descriptor() ([]byte, []int)

func (*InstallRequest) GetConfig

func (m *InstallRequest) GetConfig() *InstallConfig

func (*InstallRequest) ProtoMessage

func (*InstallRequest) ProtoMessage()

func (*InstallRequest) Reset

func (m *InstallRequest) Reset()

func (*InstallRequest) String

func (m *InstallRequest) String() string

func (*InstallRequest) Validate

func (this *InstallRequest) Validate() error

type InstallResponse

type InstallResponse struct {
	Success bool `protobuf:"varint,1,opt,name=success" json:"success,omitempty"`
}

func (*InstallResponse) Descriptor

func (*InstallResponse) Descriptor() ([]byte, []int)

func (*InstallResponse) GetSuccess

func (m *InstallResponse) GetSuccess() bool

func (*InstallResponse) ProtoMessage

func (*InstallResponse) ProtoMessage()

func (*InstallResponse) Reset

func (m *InstallResponse) Reset()

func (*InstallResponse) String

func (m *InstallResponse) String() string

func (*InstallResponse) Validate

func (this *InstallResponse) Validate() error

type PerformCheckRequest

type PerformCheckRequest struct {
	Name   string         `protobuf:"bytes,1,opt,name=Name" json:"Name,omitempty"`
	Config *InstallConfig `protobuf:"bytes,2,opt,name=Config" json:"Config,omitempty"`
}

func (*PerformCheckRequest) Descriptor

func (*PerformCheckRequest) Descriptor() ([]byte, []int)

func (*PerformCheckRequest) GetConfig

func (m *PerformCheckRequest) GetConfig() *InstallConfig

func (*PerformCheckRequest) GetName

func (m *PerformCheckRequest) GetName() string

func (*PerformCheckRequest) ProtoMessage

func (*PerformCheckRequest) ProtoMessage()

func (*PerformCheckRequest) Reset

func (m *PerformCheckRequest) Reset()

func (*PerformCheckRequest) String

func (m *PerformCheckRequest) String() string

func (*PerformCheckRequest) Validate

func (this *PerformCheckRequest) Validate() error

type PerformCheckResponse

type PerformCheckResponse struct {
	Result *CheckResult `protobuf:"bytes,1,opt,name=Result" json:"Result,omitempty"`
}

func (*PerformCheckResponse) Descriptor

func (*PerformCheckResponse) Descriptor() ([]byte, []int)

func (*PerformCheckResponse) GetResult

func (m *PerformCheckResponse) GetResult() *CheckResult

func (*PerformCheckResponse) ProtoMessage

func (*PerformCheckResponse) ProtoMessage()

func (*PerformCheckResponse) Reset

func (m *PerformCheckResponse) Reset()

func (*PerformCheckResponse) String

func (m *PerformCheckResponse) String() string

func (*PerformCheckResponse) Validate

func (this *PerformCheckResponse) Validate() error

type ProxyConfig

type ProxyConfig struct {
	BindURL      string   `protobuf:"bytes,1,opt,name=BindURL" json:"BindURL,omitempty"`
	ExternalURL  string   `protobuf:"bytes,2,opt,name=ExternalURL" json:"ExternalURL,omitempty"`
	RedirectURLs []string `protobuf:"bytes,3,rep,name=RedirectURLs" json:"RedirectURLs,omitempty"`
	// Types that are valid to be assigned to TLSConfig:
	//	*ProxyConfig_SelfSigned
	//	*ProxyConfig_LetsEncrypt
	//	*ProxyConfig_Certificate
	TLSConfig isProxyConfig_TLSConfig `protobuf_oneof:"TLSConfig"`
}

ProxyConfig gives necessary URL and TLS configurations to start proxy

func (*ProxyConfig) Descriptor

func (*ProxyConfig) Descriptor() ([]byte, []int)

func (*ProxyConfig) GetBindURL

func (m *ProxyConfig) GetBindURL() string

func (*ProxyConfig) GetCertificate

func (m *ProxyConfig) GetCertificate() *TLSCertificate

func (*ProxyConfig) GetExternalURL

func (m *ProxyConfig) GetExternalURL() string

func (*ProxyConfig) GetLetsEncrypt

func (m *ProxyConfig) GetLetsEncrypt() *TLSLetsEncrypt

func (*ProxyConfig) GetRedirectURLs

func (m *ProxyConfig) GetRedirectURLs() []string

func (*ProxyConfig) GetSelfSigned

func (m *ProxyConfig) GetSelfSigned() *TLSSelfSigned

func (*ProxyConfig) GetTLSConfig

func (m *ProxyConfig) GetTLSConfig() isProxyConfig_TLSConfig

func (*ProxyConfig) ProtoMessage

func (*ProxyConfig) ProtoMessage()

func (*ProxyConfig) Reset

func (m *ProxyConfig) Reset()

func (*ProxyConfig) String

func (m *ProxyConfig) String() string

func (*ProxyConfig) UnmarshalFromMap

func (m *ProxyConfig) UnmarshalFromMap(data map[string]interface{}, getKey func(string) string) error

func (*ProxyConfig) UnmarshalJSON

func (m *ProxyConfig) UnmarshalJSON(bb []byte) error

func (*ProxyConfig) UnmarshalYAML

func (m *ProxyConfig) UnmarshalYAML(unmarshal func(interface{}) error) error

func (*ProxyConfig) Validate

func (this *ProxyConfig) Validate() error

func (*ProxyConfig) XXX_OneofFuncs

func (*ProxyConfig) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{})

XXX_OneofFuncs is for the internal use of the proto package.

type ProxyConfig_Certificate

type ProxyConfig_Certificate struct {
	Certificate *TLSCertificate `protobuf:"bytes,6,opt,name=Certificate,oneof"`
}

type ProxyConfig_LetsEncrypt

type ProxyConfig_LetsEncrypt struct {
	LetsEncrypt *TLSLetsEncrypt `protobuf:"bytes,5,opt,name=LetsEncrypt,oneof"`
}

type ProxyConfig_SelfSigned

type ProxyConfig_SelfSigned struct {
	SelfSigned *TLSSelfSigned `protobuf:"bytes,4,opt,name=SelfSigned,oneof"`
}

type TLSCertificate

type TLSCertificate struct {
	CertFile string `protobuf:"bytes,1,opt,name=CertFile" json:"CertFile,omitempty"`
	KeyFile  string `protobuf:"bytes,2,opt,name=KeyFile" json:"KeyFile,omitempty"`
}

TLSCertificate is a TLSConfig where user passes

func (*TLSCertificate) Descriptor

func (*TLSCertificate) Descriptor() ([]byte, []int)

func (*TLSCertificate) GetCertFile

func (m *TLSCertificate) GetCertFile() string

func (*TLSCertificate) GetKeyFile

func (m *TLSCertificate) GetKeyFile() string

func (*TLSCertificate) ProtoMessage

func (*TLSCertificate) ProtoMessage()

func (*TLSCertificate) Reset

func (m *TLSCertificate) Reset()

func (*TLSCertificate) String

func (m *TLSCertificate) String() string

func (*TLSCertificate) Validate

func (this *TLSCertificate) Validate() error

type TLSLetsEncrypt

type TLSLetsEncrypt struct {
	Email      string `protobuf:"bytes,1,opt,name=Email" json:"Email,omitempty"`
	AcceptEULA bool   `protobuf:"varint,2,opt,name=AcceptEULA" json:"AcceptEULA,omitempty"`
	StagingCA  bool   `protobuf:"varint,3,opt,name=StagingCA" json:"StagingCA,omitempty"`
}

TLSLetsEncrypt set up proxy to automatically get a valid certificate from let's encrypt servers

func (*TLSLetsEncrypt) Descriptor

func (*TLSLetsEncrypt) Descriptor() ([]byte, []int)

func (*TLSLetsEncrypt) GetAcceptEULA

func (m *TLSLetsEncrypt) GetAcceptEULA() bool

func (*TLSLetsEncrypt) GetEmail

func (m *TLSLetsEncrypt) GetEmail() string

func (*TLSLetsEncrypt) GetStagingCA

func (m *TLSLetsEncrypt) GetStagingCA() bool

func (*TLSLetsEncrypt) ProtoMessage

func (*TLSLetsEncrypt) ProtoMessage()

func (*TLSLetsEncrypt) Reset

func (m *TLSLetsEncrypt) Reset()

func (*TLSLetsEncrypt) String

func (m *TLSLetsEncrypt) String() string

func (*TLSLetsEncrypt) Validate

func (this *TLSLetsEncrypt) Validate() error

type TLSSelfSigned

type TLSSelfSigned struct {
	Hostnames []string `protobuf:"bytes,1,rep,name=Hostnames" json:"Hostnames,omitempty"`
}

TLSSelfSigned generates a selfsigned certificate

func (*TLSSelfSigned) Descriptor

func (*TLSSelfSigned) Descriptor() ([]byte, []int)

func (*TLSSelfSigned) GetHostnames

func (m *TLSSelfSigned) GetHostnames() []string

func (*TLSSelfSigned) ProtoMessage

func (*TLSSelfSigned) ProtoMessage()

func (*TLSSelfSigned) Reset

func (m *TLSSelfSigned) Reset()

func (*TLSSelfSigned) String

func (m *TLSSelfSigned) String() string

func (*TLSSelfSigned) Validate

func (this *TLSSelfSigned) Validate() error

Jump to

Keyboard shortcuts

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