pb

package
v0.0.0-...-a6521f5 Latest Latest
Warning

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

Go to latest
Published: Oct 25, 2024 License: Apache-2.0 Imports: 10 Imported by: 0

Documentation

Index

Constants

View Source
const (
	Passport_BindThirdPartyAccount_FullMethodName  = "/auth.Passport/BindThirdPartyAccount"
	Passport_ConfirmCode_FullMethodName            = "/auth.Passport/ConfirmCode"
	Passport_CreateVerificationCode_FullMethodName = "/auth.Passport/CreateVerificationCode"
	Passport_Register_FullMethodName               = "/auth.Passport/Register"
	Passport_Auth_FullMethodName                   = "/auth.Passport/Auth"
	Passport_RenewToken_FullMethodName             = "/auth.Passport/RenewToken"
	Passport_VerifyToken_FullMethodName            = "/auth.Passport/VerifyToken"
	Passport_RevokeToken_FullMethodName            = "/auth.Passport/RevokeToken"
	Passport_Exist_FullMethodName                  = "/auth.Passport/Exist"
	Passport_Lock_FullMethodName                   = "/auth.Passport/Lock"
	Passport_Unlock_FullMethodName                 = "/auth.Passport/Unlock"
	Passport_List_FullMethodName                   = "/auth.Passport/List"
	Passport_Get_FullMethodName                    = "/auth.Passport/Get"
	Passport_Remove_FullMethodName                 = "/auth.Passport/Remove"
	Passport_ModifyPassword_FullMethodName         = "/auth.Passport/ModifyPassword"
)

Variables

View Source
var (
	BindThirdPartyAccountReq_Type_name = map[int32]string{
		0: "EMAIL",
		1: "PHONE",
	}
	BindThirdPartyAccountReq_Type_value = map[string]int32{
		"EMAIL": 0,
		"PHONE": 1,
	}
)

Enum value maps for BindThirdPartyAccountReq_Type.

View Source
var (
	AuthReq_Method_name = map[int32]string{
		0: "PASSWORD",
		1: "SMS",
	}
	AuthReq_Method_value = map[string]int32{
		"PASSWORD": 0,
		"SMS":      1,
	}
)

Enum value maps for AuthReq_Method.

View Source
var (
	CreateVerificationCodeReq_Type_name = map[int32]string{
		0: "EMAIL",
		1: "PHONE",
	}
	CreateVerificationCodeReq_Type_value = map[string]int32{
		"EMAIL": 0,
		"PHONE": 1,
	}
)

Enum value maps for CreateVerificationCodeReq_Type.

View Source
var File_passport_proto protoreflect.FileDescriptor
View Source
var Passport_ServiceDesc = grpc.ServiceDesc{
	ServiceName: "auth.Passport",
	HandlerType: (*PassportServer)(nil),
	Methods: []grpc.MethodDesc{
		{
			MethodName: "BindThirdPartyAccount",
			Handler:    _Passport_BindThirdPartyAccount_Handler,
		},
		{
			MethodName: "ConfirmCode",
			Handler:    _Passport_ConfirmCode_Handler,
		},
		{
			MethodName: "CreateVerificationCode",
			Handler:    _Passport_CreateVerificationCode_Handler,
		},
		{
			MethodName: "Register",
			Handler:    _Passport_Register_Handler,
		},
		{
			MethodName: "Auth",
			Handler:    _Passport_Auth_Handler,
		},
		{
			MethodName: "RenewToken",
			Handler:    _Passport_RenewToken_Handler,
		},
		{
			MethodName: "VerifyToken",
			Handler:    _Passport_VerifyToken_Handler,
		},
		{
			MethodName: "RevokeToken",
			Handler:    _Passport_RevokeToken_Handler,
		},
		{
			MethodName: "Exist",
			Handler:    _Passport_Exist_Handler,
		},
		{
			MethodName: "Lock",
			Handler:    _Passport_Lock_Handler,
		},
		{
			MethodName: "Unlock",
			Handler:    _Passport_Unlock_Handler,
		},
		{
			MethodName: "List",
			Handler:    _Passport_List_Handler,
		},
		{
			MethodName: "Get",
			Handler:    _Passport_Get_Handler,
		},
		{
			MethodName: "Remove",
			Handler:    _Passport_Remove_Handler,
		},
		{
			MethodName: "ModifyPassword",
			Handler:    _Passport_ModifyPassword_Handler,
		},
	},
	Streams:  []grpc.StreamDesc{},
	Metadata: "passport.proto",
}

Passport_ServiceDesc is the grpc.ServiceDesc for Passport service. It's only intended for direct use with grpc.RegisterService, and not to be introspected or modified (even as a copy)

Functions

func RegisterPassportServer

func RegisterPassportServer(s grpc.ServiceRegistrar, srv PassportServer)

Types

type AuthReq

type AuthReq struct {
	Method     AuthReq_Method      `protobuf:"varint,1,opt,name=method,proto3,enum=auth.AuthReq_Method" json:"method,omitempty"`
	Credential *AuthReq_Credential `protobuf:"bytes,2,opt,name=credential,proto3" json:"credential,omitempty"`
	// contains filtered or unexported fields
}

func (*AuthReq) Descriptor deprecated

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

Deprecated: Use AuthReq.ProtoReflect.Descriptor instead.

func (*AuthReq) GetCredential

func (x *AuthReq) GetCredential() *AuthReq_Credential

func (*AuthReq) GetMethod

func (x *AuthReq) GetMethod() AuthReq_Method

func (*AuthReq) ProtoMessage

func (*AuthReq) ProtoMessage()

func (*AuthReq) ProtoReflect

func (x *AuthReq) ProtoReflect() protoreflect.Message

func (*AuthReq) Reset

func (x *AuthReq) Reset()

func (*AuthReq) String

func (x *AuthReq) String() string

type AuthReq_Credential

type AuthReq_Credential struct {
	Account string `protobuf:"bytes,1,opt,name=account,proto3" json:"account,omitempty"`
	Key     string `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"`
	// contains filtered or unexported fields
}

func (*AuthReq_Credential) Descriptor deprecated

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

Deprecated: Use AuthReq_Credential.ProtoReflect.Descriptor instead.

func (*AuthReq_Credential) GetAccount

func (x *AuthReq_Credential) GetAccount() string

func (*AuthReq_Credential) GetKey

func (x *AuthReq_Credential) GetKey() string

func (*AuthReq_Credential) ProtoMessage

func (*AuthReq_Credential) ProtoMessage()

func (*AuthReq_Credential) ProtoReflect

func (x *AuthReq_Credential) ProtoReflect() protoreflect.Message

func (*AuthReq_Credential) Reset

func (x *AuthReq_Credential) Reset()

func (*AuthReq_Credential) String

func (x *AuthReq_Credential) String() string

type AuthReq_Method

type AuthReq_Method int32
const (
	AuthReq_PASSWORD AuthReq_Method = 0
	AuthReq_SMS      AuthReq_Method = 1
)

func (AuthReq_Method) Descriptor

func (AuthReq_Method) Enum

func (x AuthReq_Method) Enum() *AuthReq_Method

func (AuthReq_Method) EnumDescriptor deprecated

func (AuthReq_Method) EnumDescriptor() ([]byte, []int)

Deprecated: Use AuthReq_Method.Descriptor instead.

func (AuthReq_Method) Number

func (AuthReq_Method) String

func (x AuthReq_Method) String() string

func (AuthReq_Method) Type

type BindThirdPartyAccountReq

type BindThirdPartyAccountReq struct {
	Type    BindThirdPartyAccountReq_Type `protobuf:"varint,1,opt,name=type,proto3,enum=auth.BindThirdPartyAccountReq_Type" json:"type,omitempty"`
	Id      string                        `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
	Account string                        `protobuf:"bytes,3,opt,name=account,proto3" json:"account,omitempty"`
	// contains filtered or unexported fields
}

func (*BindThirdPartyAccountReq) Descriptor deprecated

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

Deprecated: Use BindThirdPartyAccountReq.ProtoReflect.Descriptor instead.

func (*BindThirdPartyAccountReq) GetAccount

func (x *BindThirdPartyAccountReq) GetAccount() string

func (*BindThirdPartyAccountReq) GetId

func (x *BindThirdPartyAccountReq) GetId() string

func (*BindThirdPartyAccountReq) GetType

func (*BindThirdPartyAccountReq) ProtoMessage

func (*BindThirdPartyAccountReq) ProtoMessage()

func (*BindThirdPartyAccountReq) ProtoReflect

func (x *BindThirdPartyAccountReq) ProtoReflect() protoreflect.Message

func (*BindThirdPartyAccountReq) Reset

func (x *BindThirdPartyAccountReq) Reset()

func (*BindThirdPartyAccountReq) String

func (x *BindThirdPartyAccountReq) String() string

type BindThirdPartyAccountReq_Type

type BindThirdPartyAccountReq_Type int32
const (
	BindThirdPartyAccountReq_EMAIL BindThirdPartyAccountReq_Type = 0
	BindThirdPartyAccountReq_PHONE BindThirdPartyAccountReq_Type = 1
)

func (BindThirdPartyAccountReq_Type) Descriptor

func (BindThirdPartyAccountReq_Type) Enum

func (BindThirdPartyAccountReq_Type) EnumDescriptor deprecated

func (BindThirdPartyAccountReq_Type) EnumDescriptor() ([]byte, []int)

Deprecated: Use BindThirdPartyAccountReq_Type.Descriptor instead.

func (BindThirdPartyAccountReq_Type) Number

func (BindThirdPartyAccountReq_Type) String

func (BindThirdPartyAccountReq_Type) Type

type ConfirmCodeReq

type ConfirmCodeReq struct {
	BindRequestId string `protobuf:"bytes,1,opt,name=bind_request_id,json=bindRequestId,proto3" json:"bind_request_id,omitempty"`
	Code          string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"`
	// contains filtered or unexported fields
}

func (*ConfirmCodeReq) Descriptor deprecated

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

Deprecated: Use ConfirmCodeReq.ProtoReflect.Descriptor instead.

func (*ConfirmCodeReq) GetBindRequestId

func (x *ConfirmCodeReq) GetBindRequestId() string

func (*ConfirmCodeReq) GetCode

func (x *ConfirmCodeReq) GetCode() string

func (*ConfirmCodeReq) ProtoMessage

func (*ConfirmCodeReq) ProtoMessage()

func (*ConfirmCodeReq) ProtoReflect

func (x *ConfirmCodeReq) ProtoReflect() protoreflect.Message

func (*ConfirmCodeReq) Reset

func (x *ConfirmCodeReq) Reset()

func (*ConfirmCodeReq) String

func (x *ConfirmCodeReq) String() string

type CreateVerificationCodeReq

type CreateVerificationCodeReq struct {
	Type    CreateVerificationCodeReq_Type `protobuf:"varint,1,opt,name=type,proto3,enum=auth.CreateVerificationCodeReq_Type" json:"type,omitempty"`
	Account string                         `protobuf:"bytes,2,opt,name=account,proto3" json:"account,omitempty"`
	// contains filtered or unexported fields
}

func (*CreateVerificationCodeReq) Descriptor deprecated

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

Deprecated: Use CreateVerificationCodeReq.ProtoReflect.Descriptor instead.

func (*CreateVerificationCodeReq) GetAccount

func (x *CreateVerificationCodeReq) GetAccount() string

func (*CreateVerificationCodeReq) GetType

func (*CreateVerificationCodeReq) ProtoMessage

func (*CreateVerificationCodeReq) ProtoMessage()

func (*CreateVerificationCodeReq) ProtoReflect

func (*CreateVerificationCodeReq) Reset

func (x *CreateVerificationCodeReq) Reset()

func (*CreateVerificationCodeReq) String

func (x *CreateVerificationCodeReq) String() string

type CreateVerificationCodeReq_Type

type CreateVerificationCodeReq_Type int32
const (
	CreateVerificationCodeReq_EMAIL CreateVerificationCodeReq_Type = 0
	CreateVerificationCodeReq_PHONE CreateVerificationCodeReq_Type = 1
)

func (CreateVerificationCodeReq_Type) Descriptor

func (CreateVerificationCodeReq_Type) Enum

func (CreateVerificationCodeReq_Type) EnumDescriptor deprecated

func (CreateVerificationCodeReq_Type) EnumDescriptor() ([]byte, []int)

Deprecated: Use CreateVerificationCodeReq_Type.Descriptor instead.

func (CreateVerificationCodeReq_Type) Number

func (CreateVerificationCodeReq_Type) String

func (CreateVerificationCodeReq_Type) Type

type CreateVerificationCodeResp

type CreateVerificationCodeResp struct {
	Code      string `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"`
	ExpiresIn int64  `protobuf:"varint,2,opt,name=expires_in,json=expiresIn,proto3" json:"expires_in,omitempty"`
	// contains filtered or unexported fields
}

func (*CreateVerificationCodeResp) Descriptor deprecated

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

Deprecated: Use CreateVerificationCodeResp.ProtoReflect.Descriptor instead.

func (*CreateVerificationCodeResp) GetCode

func (x *CreateVerificationCodeResp) GetCode() string

func (*CreateVerificationCodeResp) GetExpiresIn

func (x *CreateVerificationCodeResp) GetExpiresIn() int64

func (*CreateVerificationCodeResp) ProtoMessage

func (*CreateVerificationCodeResp) ProtoMessage()

func (*CreateVerificationCodeResp) ProtoReflect

func (*CreateVerificationCodeResp) Reset

func (x *CreateVerificationCodeResp) Reset()

func (*CreateVerificationCodeResp) String

func (x *CreateVerificationCodeResp) String() string

type ModifyPasswordReq

type ModifyPasswordReq struct {
	Id       string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
	Password string `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"`
	// contains filtered or unexported fields
}

func (*ModifyPasswordReq) Descriptor deprecated

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

Deprecated: Use ModifyPasswordReq.ProtoReflect.Descriptor instead.

func (*ModifyPasswordReq) GetId

func (x *ModifyPasswordReq) GetId() string

func (*ModifyPasswordReq) GetPassword

func (x *ModifyPasswordReq) GetPassword() string

func (*ModifyPasswordReq) ProtoMessage

func (*ModifyPasswordReq) ProtoMessage()

func (*ModifyPasswordReq) ProtoReflect

func (x *ModifyPasswordReq) ProtoReflect() protoreflect.Message

func (*ModifyPasswordReq) Reset

func (x *ModifyPasswordReq) Reset()

func (*ModifyPasswordReq) String

func (x *ModifyPasswordReq) String() string

type PassportClient

type PassportClient interface {
	BindThirdPartyAccount(ctx context.Context, in *BindThirdPartyAccountReq, opts ...grpc.CallOption) (*wrapperspb.StringValue, error)
	ConfirmCode(ctx context.Context, in *ConfirmCodeReq, opts ...grpc.CallOption) (*emptypb.Empty, error)
	CreateVerificationCode(ctx context.Context, in *CreateVerificationCodeReq, opts ...grpc.CallOption) (*CreateVerificationCodeResp, error)
	Register(ctx context.Context, in *RegisterReq, opts ...grpc.CallOption) (*wrapperspb.StringValue, error)
	Auth(ctx context.Context, in *AuthReq, opts ...grpc.CallOption) (*Token, error)
	RenewToken(ctx context.Context, in *Token, opts ...grpc.CallOption) (*Token, error)
	VerifyToken(ctx context.Context, in *Token, opts ...grpc.CallOption) (*emptypb.Empty, error)
	RevokeToken(ctx context.Context, in *Token, opts ...grpc.CallOption) (*emptypb.Empty, error)
	Exist(ctx context.Context, in *wrapperspb.StringValue, opts ...grpc.CallOption) (*wrapperspb.BoolValue, error)
	Lock(ctx context.Context, in *wrapperspb.StringValue, opts ...grpc.CallOption) (*emptypb.Empty, error)
	Unlock(ctx context.Context, in *wrapperspb.StringValue, opts ...grpc.CallOption) (*emptypb.Empty, error)
	List(ctx context.Context, in *UserReq, opts ...grpc.CallOption) (*UserResp, error)
	Get(ctx context.Context, in *wrapperspb.StringValue, opts ...grpc.CallOption) (*User, error)
	Remove(ctx context.Context, in *wrapperspb.StringValue, opts ...grpc.CallOption) (*emptypb.Empty, error)
	ModifyPassword(ctx context.Context, in *ModifyPasswordReq, opts ...grpc.CallOption) (*emptypb.Empty, error)
}

PassportClient is the client API for Passport service.

For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.

func NewPassportClient

func NewPassportClient(cc grpc.ClientConnInterface) PassportClient

type PassportServer

PassportServer is the server API for Passport service. All implementations must embed UnimplementedPassportServer for forward compatibility.

type RegisterReq

type RegisterReq struct {
	Account  string `protobuf:"bytes,1,opt,name=account,proto3" json:"account,omitempty"`
	Password string `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"`
	// contains filtered or unexported fields
}

func (*RegisterReq) Descriptor deprecated

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

Deprecated: Use RegisterReq.ProtoReflect.Descriptor instead.

func (*RegisterReq) GetAccount

func (x *RegisterReq) GetAccount() string

func (*RegisterReq) GetPassword

func (x *RegisterReq) GetPassword() string

func (*RegisterReq) ProtoMessage

func (*RegisterReq) ProtoMessage()

func (*RegisterReq) ProtoReflect

func (x *RegisterReq) ProtoReflect() protoreflect.Message

func (*RegisterReq) Reset

func (x *RegisterReq) Reset()

func (*RegisterReq) String

func (x *RegisterReq) String() string

type Token

type Token struct {
	AccessToken  string `protobuf:"bytes,1,opt,name=access_token,json=accessToken,proto3" json:"access_token,omitempty"`
	TokenType    string `protobuf:"bytes,2,opt,name=token_type,json=tokenType,proto3" json:"token_type,omitempty"`
	RefreshToken string `protobuf:"bytes,3,opt,name=refresh_token,json=refreshToken,proto3" json:"refresh_token,omitempty"`
	ExpiresIn    int64  `protobuf:"varint,4,opt,name=expires_in,json=expiresIn,proto3" json:"expires_in,omitempty"`
	// contains filtered or unexported fields
}

func (*Token) Descriptor deprecated

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

Deprecated: Use Token.ProtoReflect.Descriptor instead.

func (*Token) GetAccessToken

func (x *Token) GetAccessToken() string

func (*Token) GetExpiresIn

func (x *Token) GetExpiresIn() int64

func (*Token) GetRefreshToken

func (x *Token) GetRefreshToken() string

func (*Token) GetTokenType

func (x *Token) GetTokenType() string

func (*Token) ProtoMessage

func (*Token) ProtoMessage()

func (*Token) ProtoReflect

func (x *Token) ProtoReflect() protoreflect.Message

func (*Token) Reset

func (x *Token) Reset()

func (*Token) String

func (x *Token) String() string

type UnimplementedPassportServer

type UnimplementedPassportServer struct{}

UnimplementedPassportServer must be embedded to have forward compatible implementations.

NOTE: this should be embedded by value instead of pointer to avoid a nil pointer dereference when methods are called.

func (UnimplementedPassportServer) Auth

func (UnimplementedPassportServer) BindThirdPartyAccount

func (UnimplementedPassportServer) ConfirmCode

func (UnimplementedPassportServer) CreateVerificationCode

func (UnimplementedPassportServer) Exist

func (UnimplementedPassportServer) Get

func (UnimplementedPassportServer) List

func (UnimplementedPassportServer) Lock

func (UnimplementedPassportServer) ModifyPassword

func (UnimplementedPassportServer) Register

func (UnimplementedPassportServer) Remove

func (UnimplementedPassportServer) RenewToken

func (UnimplementedPassportServer) RevokeToken

func (UnimplementedPassportServer) Unlock

func (UnimplementedPassportServer) VerifyToken

type UnsafePassportServer

type UnsafePassportServer interface {
	// contains filtered or unexported methods
}

UnsafePassportServer may be embedded to opt out of forward compatibility for this service. Use of this interface is not recommended, as added methods to PassportServer will result in compilation errors.

type User

type User struct {
	Id               string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
	Account          string `protobuf:"bytes,2,opt,name=account,proto3" json:"account,omitempty"`
	Code             string `protobuf:"bytes,3,opt,name=code,proto3" json:"code,omitempty"`
	Email            string `protobuf:"bytes,4,opt,name=email,proto3" json:"email,omitempty"`
	Phone            string `protobuf:"bytes,5,opt,name=phone,proto3" json:"phone,omitempty"`
	Status           int32  `protobuf:"varint,6,opt,name=status,proto3" json:"status,omitempty"`
	RegisterDatetime int64  `protobuf:"varint,7,opt,name=register_datetime,json=registerDatetime,proto3" json:"register_datetime,omitempty"`
	// contains filtered or unexported fields
}

func (*User) Descriptor deprecated

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

Deprecated: Use User.ProtoReflect.Descriptor instead.

func (*User) GetAccount

func (x *User) GetAccount() string

func (*User) GetCode

func (x *User) GetCode() string

func (*User) GetEmail

func (x *User) GetEmail() string

func (*User) GetId

func (x *User) GetId() string

func (*User) GetPhone

func (x *User) GetPhone() string

func (*User) GetRegisterDatetime

func (x *User) GetRegisterDatetime() int64

func (*User) GetStatus

func (x *User) GetStatus() int32

func (*User) ProtoMessage

func (*User) ProtoMessage()

func (*User) ProtoReflect

func (x *User) ProtoReflect() protoreflect.Message

func (*User) Reset

func (x *User) Reset()

func (*User) String

func (x *User) String() string

type UserReq

type UserReq struct {
	PageNo   int64 `protobuf:"varint,1,opt,name=page_no,json=pageNo,proto3" json:"page_no,omitempty"`
	PageSize int64 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
	// contains filtered or unexported fields
}

func (*UserReq) Descriptor deprecated

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

Deprecated: Use UserReq.ProtoReflect.Descriptor instead.

func (*UserReq) GetPageNo

func (x *UserReq) GetPageNo() int64

func (*UserReq) GetPageSize

func (x *UserReq) GetPageSize() int64

func (*UserReq) ProtoMessage

func (*UserReq) ProtoMessage()

func (*UserReq) ProtoReflect

func (x *UserReq) ProtoReflect() protoreflect.Message

func (*UserReq) Reset

func (x *UserReq) Reset()

func (*UserReq) String

func (x *UserReq) String() string

type UserResp

type UserResp struct {
	Users      []*User `protobuf:"bytes,1,rep,name=users,proto3" json:"users,omitempty"`
	TotalCount int64   `protobuf:"varint,2,opt,name=total_count,json=totalCount,proto3" json:"total_count,omitempty"`
	// contains filtered or unexported fields
}

func (*UserResp) Descriptor deprecated

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

Deprecated: Use UserResp.ProtoReflect.Descriptor instead.

func (*UserResp) GetTotalCount

func (x *UserResp) GetTotalCount() int64

func (*UserResp) GetUsers

func (x *UserResp) GetUsers() []*User

func (*UserResp) ProtoMessage

func (*UserResp) ProtoMessage()

func (*UserResp) ProtoReflect

func (x *UserResp) ProtoReflect() protoreflect.Message

func (*UserResp) Reset

func (x *UserResp) Reset()

func (*UserResp) String

func (x *UserResp) String() string

Jump to

Keyboard shortcuts

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