inspec

package
v0.0.0-...-0490640 Latest Latest
Warning

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

Go to latest
Published: May 16, 2019 License: Apache-2.0 Imports: 4 Imported by: 0

Documentation

Index

Constants

View Source
const (
	ResultStatusPassed    string = "passed"
	ResultStatusSkipped   string = "skipped"
	ResultStatusFailed    string = "failed"
	ResultStatusLoaded    string = "loaded"
	ControlImpactMinor    string = "minor"
	ControlImpactMajor    string = "major"
	ControlImpactCritical string = "critical"
)

Variables

This section is empty.

Functions

This section is empty.

Types

type Attribute

type Attribute struct {
	Name                 string          `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	Options              *_struct.Struct `protobuf:"bytes,20,opt,name=options,proto3" json:"options,omitempty"`
	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
	XXX_unrecognized     []byte          `json:"-"`
	XXX_sizecache        int32           `json:"-"`
}

We can't have options as another message because the default field inside can take any json value(int, string, bool, hash, array) We get options as a struct and handle the unmarshalling and marshaling in the code

func (*Attribute) Descriptor

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

func (*Attribute) GetName

func (m *Attribute) GetName() string

func (*Attribute) GetOptions

func (m *Attribute) GetOptions() *_struct.Struct

func (*Attribute) ProtoMessage

func (*Attribute) ProtoMessage()

func (*Attribute) Reset

func (m *Attribute) Reset()

func (*Attribute) String

func (m *Attribute) String() string

func (*Attribute) XXX_DiscardUnknown

func (m *Attribute) XXX_DiscardUnknown()

func (*Attribute) XXX_Marshal

func (m *Attribute) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*Attribute) XXX_Merge

func (dst *Attribute) XXX_Merge(src proto.Message)

func (*Attribute) XXX_Size

func (m *Attribute) XXX_Size() int

func (*Attribute) XXX_Unmarshal

func (m *Attribute) XXX_Unmarshal(b []byte) error

type Control

type Control struct {
	Id             string          `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
	Impact         float32         `protobuf:"fixed32,2,opt,name=impact,proto3" json:"impact,omitempty"`
	Title          string          `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"`
	Code           string          `protobuf:"bytes,20,opt,name=code,proto3" json:"code,omitempty"`
	Desc           string          `protobuf:"bytes,21,opt,name=desc,proto3" json:"desc,omitempty"`
	SourceLocation *SourceLocation `protobuf:"bytes,22,opt,name=source_location,json=sourceLocation,proto3" json:"source_location,omitempty"`
	// TODO handle raw refs and tags
	Refs                 []*_struct.Struct `protobuf:"bytes,23,rep,name=refs,proto3" json:"refs,omitempty"`
	Tags                 *_struct.Struct   `protobuf:"bytes,24,opt,name=tags,proto3" json:"tags,omitempty"`
	Results              []*Result         `protobuf:"bytes,25,rep,name=results,proto3" json:"results,omitempty"`
	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
	XXX_unrecognized     []byte            `json:"-"`
	XXX_sizecache        int32             `json:"-"`
}

func (*Control) Descriptor

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

func (*Control) GetCode

func (m *Control) GetCode() string

func (*Control) GetDesc

func (m *Control) GetDesc() string

func (*Control) GetId

func (m *Control) GetId() string

func (*Control) GetImpact

func (m *Control) GetImpact() float32

func (*Control) GetRefs

func (m *Control) GetRefs() []*_struct.Struct

func (*Control) GetResults

func (m *Control) GetResults() []*Result

func (*Control) GetSourceLocation

func (m *Control) GetSourceLocation() *SourceLocation

func (*Control) GetTags

func (m *Control) GetTags() *_struct.Struct

func (*Control) GetTitle

func (m *Control) GetTitle() string

func (*Control) ImpactName

func (control *Control) ImpactName() (impact string)

ImpactName returns a human readable name for the impact

func (*Control) ProtoMessage

func (*Control) ProtoMessage()

func (*Control) Reset

func (m *Control) Reset()

func (*Control) Status

func (control *Control) Status() (status string)

Status calculates the overall status of all controls based on all results

func (*Control) String

func (m *Control) String() string

func (*Control) XXX_DiscardUnknown

func (m *Control) XXX_DiscardUnknown()

func (*Control) XXX_Marshal

func (m *Control) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*Control) XXX_Merge

func (dst *Control) XXX_Merge(src proto.Message)

func (*Control) XXX_Size

func (m *Control) XXX_Size() int

func (*Control) XXX_Unmarshal

func (m *Control) XXX_Unmarshal(b []byte) error

type Dependency

type Dependency struct {
	Name                 string   `protobuf:"bytes,21,opt,name=name,proto3" json:"name,omitempty"`
	Url                  string   `protobuf:"bytes,22,opt,name=url,proto3" json:"url,omitempty"`
	Path                 string   `protobuf:"bytes,23,opt,name=path,proto3" json:"path,omitempty"`
	Git                  string   `protobuf:"bytes,24,opt,name=git,proto3" json:"git,omitempty"`
	Branch               string   `protobuf:"bytes,25,opt,name=branch,proto3" json:"branch,omitempty"`
	Tag                  string   `protobuf:"bytes,26,opt,name=tag,proto3" json:"tag,omitempty"`
	Commit               string   `protobuf:"bytes,27,opt,name=commit,proto3" json:"commit,omitempty"`
	Version              string   `protobuf:"bytes,28,opt,name=version,proto3" json:"version,omitempty"`
	Supermarket          string   `protobuf:"bytes,29,opt,name=supermarket,proto3" json:"supermarket,omitempty"`
	Compliance           string   `protobuf:"bytes,30,opt,name=compliance,proto3" json:"compliance,omitempty"`
	Status               string   `protobuf:"bytes,31,opt,name=status,proto3" json:"status,omitempty"`
	SkipMessage          string   `protobuf:"bytes,32,opt,name=skip_message,json=skipMessage,proto3" json:"skip_message,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (*Dependency) Descriptor

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

func (*Dependency) GetBranch

func (m *Dependency) GetBranch() string

func (*Dependency) GetCommit

func (m *Dependency) GetCommit() string

func (*Dependency) GetCompliance

func (m *Dependency) GetCompliance() string

func (*Dependency) GetGit

func (m *Dependency) GetGit() string

func (*Dependency) GetName

func (m *Dependency) GetName() string

func (*Dependency) GetPath

func (m *Dependency) GetPath() string

func (*Dependency) GetSkipMessage

func (m *Dependency) GetSkipMessage() string

func (*Dependency) GetStatus

func (m *Dependency) GetStatus() string

func (*Dependency) GetSupermarket

func (m *Dependency) GetSupermarket() string

func (*Dependency) GetTag

func (m *Dependency) GetTag() string

func (*Dependency) GetUrl

func (m *Dependency) GetUrl() string

func (*Dependency) GetVersion

func (m *Dependency) GetVersion() string

func (*Dependency) ProtoMessage

func (*Dependency) ProtoMessage()

func (*Dependency) Reset

func (m *Dependency) Reset()

func (*Dependency) String

func (m *Dependency) String() string

func (*Dependency) XXX_DiscardUnknown

func (m *Dependency) XXX_DiscardUnknown()

func (*Dependency) XXX_Marshal

func (m *Dependency) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*Dependency) XXX_Merge

func (dst *Dependency) XXX_Merge(src proto.Message)

func (*Dependency) XXX_Size

func (m *Dependency) XXX_Size() int

func (*Dependency) XXX_Unmarshal

func (m *Dependency) XXX_Unmarshal(b []byte) error

type Group

type Group struct {
	Id                   string   `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
	Title                string   `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"`
	Controls             []string `protobuf:"bytes,21,rep,name=controls,proto3" json:"controls,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (*Group) Descriptor

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

func (*Group) GetControls

func (m *Group) GetControls() []string

func (*Group) GetId

func (m *Group) GetId() string

func (*Group) GetTitle

func (m *Group) GetTitle() string

func (*Group) ProtoMessage

func (*Group) ProtoMessage()

func (*Group) Reset

func (m *Group) Reset()

func (*Group) String

func (m *Group) String() string

func (*Group) XXX_DiscardUnknown

func (m *Group) XXX_DiscardUnknown()

func (*Group) XXX_Marshal

func (m *Group) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*Group) XXX_Merge

func (dst *Group) XXX_Merge(src proto.Message)

func (*Group) XXX_Size

func (m *Group) XXX_Size() int

func (*Group) XXX_Unmarshal

func (m *Group) XXX_Unmarshal(b []byte) error

type Platform

type Platform struct {
	Name                 string   `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	Release              string   `protobuf:"bytes,2,opt,name=release,proto3" json:"release,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (*Platform) Descriptor

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

func (*Platform) GetName

func (m *Platform) GetName() string

func (*Platform) GetRelease

func (m *Platform) GetRelease() string

func (*Platform) ProtoMessage

func (*Platform) ProtoMessage()

func (*Platform) Reset

func (m *Platform) Reset()

func (*Platform) String

func (m *Platform) String() string

func (*Platform) XXX_DiscardUnknown

func (m *Platform) XXX_DiscardUnknown()

func (*Platform) XXX_Marshal

func (m *Platform) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*Platform) XXX_Merge

func (dst *Platform) XXX_Merge(src proto.Message)

func (*Platform) XXX_Size

func (m *Platform) XXX_Size() int

func (*Platform) XXX_Unmarshal

func (m *Platform) XXX_Unmarshal(b []byte) error

type Profile

type Profile struct {
	Name                 string        `protobuf:"bytes,20,opt,name=name,proto3" json:"name,omitempty"`
	Title                string        `protobuf:"bytes,21,opt,name=title,proto3" json:"title,omitempty"`
	Version              string        `protobuf:"bytes,22,opt,name=version,proto3" json:"version,omitempty"`
	Summary              string        `protobuf:"bytes,23,opt,name=summary,proto3" json:"summary,omitempty"`
	Maintainer           string        `protobuf:"bytes,24,opt,name=maintainer,proto3" json:"maintainer,omitempty"`
	License              string        `protobuf:"bytes,25,opt,name=license,proto3" json:"license,omitempty"`
	Copyright            string        `protobuf:"bytes,26,opt,name=copyright,proto3" json:"copyright,omitempty"`
	CopyrightEmail       string        `protobuf:"bytes,27,opt,name=copyright_email,json=copyrightEmail,proto3" json:"copyright_email,omitempty"`
	Sha256               string        `protobuf:"bytes,28,opt,name=sha256,proto3" json:"sha256,omitempty"`
	Controls             []*Control    `protobuf:"bytes,29,rep,name=controls,proto3" json:"controls,omitempty"`
	Supports             []*Support    `protobuf:"bytes,30,rep,name=supports,proto3" json:"supports,omitempty"`
	Attributes           []*Attribute  `protobuf:"bytes,31,rep,name=attributes,proto3" json:"attributes,omitempty"`
	Depends              []*Dependency `protobuf:"bytes,32,rep,name=depends,proto3" json:"depends,omitempty"`
	Groups               []*Group      `protobuf:"bytes,33,rep,name=groups,proto3" json:"groups,omitempty"`
	ParentProfile        string        `protobuf:"bytes,34,opt,name=parent_profile,json=parentProfile,proto3" json:"parent_profile,omitempty"`
	Status               string        `protobuf:"bytes,35,opt,name=status,proto3" json:"status,omitempty"`
	SkipMessage          string        `protobuf:"bytes,36,opt,name=skip_message,json=skipMessage,proto3" json:"skip_message,omitempty"`
	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
	XXX_unrecognized     []byte        `json:"-"`
	XXX_sizecache        int32         `json:"-"`
}

func (*Profile) Descriptor

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

func (*Profile) GetAttributes

func (m *Profile) GetAttributes() []*Attribute

func (*Profile) GetControls

func (m *Profile) GetControls() []*Control

func (*Profile) GetCopyright

func (m *Profile) GetCopyright() string

func (*Profile) GetCopyrightEmail

func (m *Profile) GetCopyrightEmail() string

func (*Profile) GetDepends

func (m *Profile) GetDepends() []*Dependency

func (*Profile) GetGroups

func (m *Profile) GetGroups() []*Group

func (*Profile) GetLicense

func (m *Profile) GetLicense() string

func (*Profile) GetMaintainer

func (m *Profile) GetMaintainer() string

func (*Profile) GetName

func (m *Profile) GetName() string

func (*Profile) GetParentProfile

func (m *Profile) GetParentProfile() string

func (*Profile) GetSha256

func (m *Profile) GetSha256() string

func (*Profile) GetSkipMessage

func (m *Profile) GetSkipMessage() string

func (*Profile) GetStatus

func (m *Profile) GetStatus() string

func (*Profile) GetSummary

func (m *Profile) GetSummary() string

func (*Profile) GetSupports

func (m *Profile) GetSupports() []*Support

func (*Profile) GetTitle

func (m *Profile) GetTitle() string

func (*Profile) GetVersion

func (m *Profile) GetVersion() string

func (*Profile) ProtoMessage

func (*Profile) ProtoMessage()

func (*Profile) Reset

func (m *Profile) Reset()

func (*Profile) String

func (m *Profile) String() string

func (*Profile) XXX_DiscardUnknown

func (m *Profile) XXX_DiscardUnknown()

func (*Profile) XXX_Marshal

func (m *Profile) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*Profile) XXX_Merge

func (dst *Profile) XXX_Merge(src proto.Message)

func (*Profile) XXX_Size

func (m *Profile) XXX_Size() int

func (*Profile) XXX_Unmarshal

func (m *Profile) XXX_Unmarshal(b []byte) error

type Report

type Report struct {
	Version              string      `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"`
	Platform             *Platform   `protobuf:"bytes,2,opt,name=platform,proto3" json:"platform,omitempty"`
	Statistics           *Statistics `protobuf:"bytes,3,opt,name=statistics,proto3" json:"statistics,omitempty"`
	OtherChecks          []string    `protobuf:"bytes,4,rep,name=other_checks,json=otherChecks,proto3" json:"other_checks,omitempty"`
	Profiles             []*Profile  `protobuf:"bytes,20,rep,name=profiles,proto3" json:"profiles,omitempty"`
	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
	XXX_unrecognized     []byte      `json:"-"`
	XXX_sizecache        int32       `json:"-"`
}

func (*Report) Descriptor

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

func (*Report) GetOtherChecks

func (m *Report) GetOtherChecks() []string

func (*Report) GetPlatform

func (m *Report) GetPlatform() *Platform

func (*Report) GetProfiles

func (m *Report) GetProfiles() []*Profile

func (*Report) GetStatistics

func (m *Report) GetStatistics() *Statistics

func (*Report) GetVersion

func (m *Report) GetVersion() string

func (*Report) ProtoMessage

func (*Report) ProtoMessage()

func (*Report) Reset

func (m *Report) Reset()

func (*Report) String

func (m *Report) String() string

func (*Report) XXX_DiscardUnknown

func (m *Report) XXX_DiscardUnknown()

func (*Report) XXX_Marshal

func (m *Report) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*Report) XXX_Merge

func (dst *Report) XXX_Merge(src proto.Message)

func (*Report) XXX_Size

func (m *Report) XXX_Size() int

func (*Report) XXX_Unmarshal

func (m *Report) XXX_Unmarshal(b []byte) error

type Result

type Result struct {
	Status               string   `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"`
	CodeDesc             string   `protobuf:"bytes,2,opt,name=code_desc,json=codeDesc,proto3" json:"code_desc,omitempty"`
	RunTime              float32  `protobuf:"fixed32,3,opt,name=run_time,json=runTime,proto3" json:"run_time,omitempty"`
	StartTime            string   `protobuf:"bytes,4,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"`
	Resource             string   `protobuf:"bytes,5,opt,name=resource,proto3" json:"resource,omitempty"`
	Message              string   `protobuf:"bytes,20,opt,name=message,proto3" json:"message,omitempty"`
	SkipMessage          string   `protobuf:"bytes,21,opt,name=skip_message,json=skipMessage,proto3" json:"skip_message,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (*Result) Descriptor

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

func (*Result) GetCodeDesc

func (m *Result) GetCodeDesc() string

func (*Result) GetMessage

func (m *Result) GetMessage() string

func (*Result) GetResource

func (m *Result) GetResource() string

func (*Result) GetRunTime

func (m *Result) GetRunTime() float32

func (*Result) GetSkipMessage

func (m *Result) GetSkipMessage() string

func (*Result) GetStartTime

func (m *Result) GetStartTime() string

func (*Result) GetStatus

func (m *Result) GetStatus() string

func (*Result) ProtoMessage

func (*Result) ProtoMessage()

func (*Result) Reset

func (m *Result) Reset()

func (*Result) String

func (m *Result) String() string

func (*Result) XXX_DiscardUnknown

func (m *Result) XXX_DiscardUnknown()

func (*Result) XXX_Marshal

func (m *Result) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*Result) XXX_Merge

func (dst *Result) XXX_Merge(src proto.Message)

func (*Result) XXX_Size

func (m *Result) XXX_Size() int

func (*Result) XXX_Unmarshal

func (m *Result) XXX_Unmarshal(b []byte) error

type SourceLocation

type SourceLocation struct {
	Ref                  string   `protobuf:"bytes,1,opt,name=ref,proto3" json:"ref,omitempty"`
	Line                 int32    `protobuf:"varint,2,opt,name=line,proto3" json:"line,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (*SourceLocation) Descriptor

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

func (*SourceLocation) GetLine

func (m *SourceLocation) GetLine() int32

func (*SourceLocation) GetRef

func (m *SourceLocation) GetRef() string

func (*SourceLocation) ProtoMessage

func (*SourceLocation) ProtoMessage()

func (*SourceLocation) Reset

func (m *SourceLocation) Reset()

func (*SourceLocation) String

func (m *SourceLocation) String() string

func (*SourceLocation) XXX_DiscardUnknown

func (m *SourceLocation) XXX_DiscardUnknown()

func (*SourceLocation) XXX_Marshal

func (m *SourceLocation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*SourceLocation) XXX_Merge

func (dst *SourceLocation) XXX_Merge(src proto.Message)

func (*SourceLocation) XXX_Size

func (m *SourceLocation) XXX_Size() int

func (*SourceLocation) XXX_Unmarshal

func (m *SourceLocation) XXX_Unmarshal(b []byte) error

type Statistics

type Statistics struct {
	Duration             float32  `protobuf:"fixed32,1,opt,name=duration,proto3" json:"duration,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (*Statistics) Descriptor

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

func (*Statistics) GetDuration

func (m *Statistics) GetDuration() float32

func (*Statistics) ProtoMessage

func (*Statistics) ProtoMessage()

func (*Statistics) Reset

func (m *Statistics) Reset()

func (*Statistics) String

func (m *Statistics) String() string

func (*Statistics) XXX_DiscardUnknown

func (m *Statistics) XXX_DiscardUnknown()

func (*Statistics) XXX_Marshal

func (m *Statistics) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*Statistics) XXX_Merge

func (dst *Statistics) XXX_Merge(src proto.Message)

func (*Statistics) XXX_Size

func (m *Statistics) XXX_Size() int

func (*Statistics) XXX_Unmarshal

func (m *Statistics) XXX_Unmarshal(b []byte) error

type Support

type Support struct {
	Inspec               string   `protobuf:"bytes,1,opt,name=inspec,proto3" json:"inspec,omitempty"`
	OsName               string   `protobuf:"bytes,2,opt,name=os_name,json=os-name,proto3" json:"os_name,omitempty"`
	OsFamily             string   `protobuf:"bytes,3,opt,name=os_family,json=os-family,proto3" json:"os_family,omitempty"`
	Release              string   `protobuf:"bytes,4,opt,name=release,proto3" json:"release,omitempty"`
	PlatformName         string   `protobuf:"bytes,5,opt,name=platform_name,json=platform-name,proto3" json:"platform_name,omitempty"`
	PlatformFamily       string   `protobuf:"bytes,6,opt,name=platform_family,json=platform-family,proto3" json:"platform_family,omitempty"`
	Platform             string   `protobuf:"bytes,7,opt,name=platform,proto3" json:"platform,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (*Support) Descriptor

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

func (*Support) GetInspec

func (m *Support) GetInspec() string

func (*Support) GetOsFamily

func (m *Support) GetOsFamily() string

func (*Support) GetOsName

func (m *Support) GetOsName() string

func (*Support) GetPlatform

func (m *Support) GetPlatform() string

func (*Support) GetPlatformFamily

func (m *Support) GetPlatformFamily() string

func (*Support) GetPlatformName

func (m *Support) GetPlatformName() string

func (*Support) GetRelease

func (m *Support) GetRelease() string

func (*Support) ProtoMessage

func (*Support) ProtoMessage()

func (*Support) Reset

func (m *Support) Reset()

func (*Support) String

func (m *Support) String() string

func (*Support) XXX_DiscardUnknown

func (m *Support) XXX_DiscardUnknown()

func (*Support) XXX_Marshal

func (m *Support) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*Support) XXX_Merge

func (dst *Support) XXX_Merge(src proto.Message)

func (*Support) XXX_Size

func (m *Support) XXX_Size() int

func (*Support) XXX_Unmarshal

func (m *Support) XXX_Unmarshal(b []byte) error

Jump to

Keyboard shortcuts

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