Documentation ¶
Overview ¶
Package joinserver provides a LoRaWAN-compliant Join Server implementation.
Index ¶
- Variables
- func DeleteApplicationActivationSettings(ctx context.Context, r ApplicationActivationSettingRegistry, ...) error
- func DeleteDevice(ctx context.Context, r DeviceRegistry, appID ttnpb.ApplicationIdentifiers, ...) error
- func DeleteKeys(ctx context.Context, r KeyRegistry, joinEUI, devEUI types.EUI64, id []byte) error
- type ApplicationAccessAuthorizer
- type ApplicationActivationSettingRegistry
- type Authorizer
- type Config
- type DeviceRegistry
- type EndDeviceHomeNetwork
- type ExternalAuthorizer
- type JoinServer
- func (js *JoinServer) Context() context.Context
- func (js *JoinServer) GetAppSKey(ctx context.Context, req *ttnpb.SessionKeyRequest, authorizer Authorizer) (*ttnpb.AppSKeyResponse, error)
- func (js *JoinServer) GetHomeNetwork(ctx context.Context, joinEUI, devEUI types.EUI64, authorizer Authorizer) (*EndDeviceHomeNetwork, error)
- func (js *JoinServer) GetNwkSKeys(ctx context.Context, req *ttnpb.SessionKeyRequest, authorizer Authorizer) (*ttnpb.NwkSKeysResponse, error)
- func (js *JoinServer) HandleJoin(ctx context.Context, req *ttnpb.JoinRequest, authorizer Authorizer) (res *ttnpb.JoinResponse, err error)
- func (js *JoinServer) RegisterHandlers(s *runtime.ServeMux, conn *grpc.ClientConn)
- func (js *JoinServer) RegisterInterop(srv *interop.Server)
- func (js *JoinServer) RegisterServices(s *grpc.Server)
- func (js *JoinServer) Roles() []ttnpb.ClusterRole
- type KeyRegistry
Constants ¶
This section is empty.
Variables ¶
var ( // InteropAuthorizer authorizes the caller by proof of identity used with LoRaWAN Backend Interfaces. InteropAuthorizer ExternalAuthorizer = new(interop.Authorizer) // ClusterAuthorizes authorizes clusters. ClusterAuthorizer Authorizer = new(clusterAuthorizer) // ApplicationRightsAuthorizes authorizes the caller by application rights. ApplicationRightsAuthorizer ApplicationAccessAuthorizer = new(applicationRightsAuthorizer) )
Functions ¶
func DeleteApplicationActivationSettings ¶ added in v3.10.0
func DeleteApplicationActivationSettings(ctx context.Context, r ApplicationActivationSettingRegistry, appID ttnpb.ApplicationIdentifiers) error
DeleteApplicationActivationSettings deletes application activation settings from r.
func DeleteDevice ¶
func DeleteDevice(ctx context.Context, r DeviceRegistry, appID ttnpb.ApplicationIdentifiers, devID string) error
DeleteDevice deletes device identified by joinEUI, devEUI from r.
func DeleteKeys ¶
DeleteKeys deletes session keys identified by devEUI, id pair from r.
Types ¶
type ApplicationAccessAuthorizer ¶ added in v3.14.0
type ApplicationAccessAuthorizer interface { Authorizer RequireApplication(ctx context.Context, id ttnpb.ApplicationIdentifiers, required ...ttnpb.Right) error }
ApplicationAccessAuthorizer authorizes the request context for application access.
type ApplicationActivationSettingRegistry ¶ added in v3.10.0
type ApplicationActivationSettingRegistry interface { GetByID(ctx context.Context, appID ttnpb.ApplicationIdentifiers, paths []string) (*ttnpb.ApplicationActivationSettings, error) SetByID(ctx context.Context, appID ttnpb.ApplicationIdentifiers, paths []string, f func(*ttnpb.ApplicationActivationSettings) (*ttnpb.ApplicationActivationSettings, []string, error)) (*ttnpb.ApplicationActivationSettings, error) }
ApplicationActivationSettingRegistry is a registry, containing application activation settings.
type Authorizer ¶ added in v3.14.0
type Authorizer interface { // RequireAuthorized returns an error if the given context is not authorized. RequireAuthorized(ctx context.Context) error }
Authorizer checks whether the request context is authorized.
type Config ¶
type Config struct { Devices DeviceRegistry `name:"-"` Keys KeyRegistry `name:"-"` ApplicationActivationSettings ApplicationActivationSettingRegistry `name:"-"` JoinEUIPrefixes []types.EUI64Prefix `name:"join-eui-prefix" description:"JoinEUI prefixes handled by this JS"` DeviceKEKLabel string `name:"device-kek-label" description:"Label of KEK used to encrypt device keys at rest"` }
Config represents the JoinServer configuration.
type DeviceRegistry ¶
type DeviceRegistry interface { GetByEUI(ctx context.Context, joinEUI types.EUI64, devEUI types.EUI64, paths []string) (*ttnpb.ContextualEndDevice, error) GetByID(ctx context.Context, appID ttnpb.ApplicationIdentifiers, devID string, paths []string) (*ttnpb.EndDevice, error) SetByEUI(ctx context.Context, joinEUI types.EUI64, devEUI types.EUI64, paths []string, f func(context.Context, *ttnpb.EndDevice) (*ttnpb.EndDevice, []string, error)) (*ttnpb.ContextualEndDevice, error) SetByID(ctx context.Context, appID ttnpb.ApplicationIdentifiers, devID string, paths []string, f func(*ttnpb.EndDevice) (*ttnpb.EndDevice, []string, error)) (*ttnpb.EndDevice, error) }
DeviceRegistry is a registry, containing devices.
type EndDeviceHomeNetwork ¶ added in v3.15.2
type EndDeviceHomeNetwork struct { NetID *types.NetID TenantID string NSID *types.EUI64 NetworkServerAddress string }
EndDeviceHomeNetwork contains information about the end device's home network.
type ExternalAuthorizer ¶ added in v3.15.2
type ExternalAuthorizer interface { Authorizer // RequireAddress returns an error if the given address is not authorized in the context. RequireAddress(ctx context.Context, addr string) error // RequireNetID returns an error if the given NetID is not authorized in the context. RequireNetID(ctx context.Context, netID types.NetID) error // RequireASID returns an error if the given AS-ID is not authorized in the context. RequireASID(ctx context.Context, id string) error }
ExternalAuthorizer authorizes the request context by the identity that the origin presents.
type JoinServer ¶
JoinServer implements the Join Server component.
The Join Server exposes the NsJs, AsJs, AppJs and DeviceRegistry services.
func New ¶
func New(c *component.Component, conf *Config) (*JoinServer, error)
New returns new *JoinServer.
func (*JoinServer) Context ¶
func (js *JoinServer) Context() context.Context
Context returns the context of the Join Server.
func (*JoinServer) GetAppSKey ¶
func (js *JoinServer) GetAppSKey(ctx context.Context, req *ttnpb.SessionKeyRequest, authorizer Authorizer) (*ttnpb.AppSKeyResponse, error)
GetAppSKey returns the requested application session key.
func (*JoinServer) GetHomeNetwork ¶ added in v3.15.2
func (js *JoinServer) GetHomeNetwork(ctx context.Context, joinEUI, devEUI types.EUI64, authorizer Authorizer) (*EndDeviceHomeNetwork, error)
GetHomeNetwork returns the home network of an end device.
func (*JoinServer) GetNwkSKeys ¶
func (js *JoinServer) GetNwkSKeys(ctx context.Context, req *ttnpb.SessionKeyRequest, authorizer Authorizer) (*ttnpb.NwkSKeysResponse, error)
GetNwkSKeys returns the requested network session keys.
func (*JoinServer) HandleJoin ¶
func (js *JoinServer) HandleJoin(ctx context.Context, req *ttnpb.JoinRequest, authorizer Authorizer) (res *ttnpb.JoinResponse, err error)
HandleJoin handles the given join-request.
func (*JoinServer) RegisterHandlers ¶
func (js *JoinServer) RegisterHandlers(s *runtime.ServeMux, conn *grpc.ClientConn)
RegisterHandlers registers gRPC handlers.
func (*JoinServer) RegisterInterop ¶
func (js *JoinServer) RegisterInterop(srv *interop.Server)
RegisterInterop registers the NS-JS and AS-JS interop services.
func (*JoinServer) RegisterServices ¶
func (js *JoinServer) RegisterServices(s *grpc.Server)
RegisterServices registers services provided by js at s.
func (*JoinServer) Roles ¶
func (js *JoinServer) Roles() []ttnpb.ClusterRole
Roles of the gRPC service.
type KeyRegistry ¶
type KeyRegistry interface { GetByID(ctx context.Context, joinEUI, devEUI types.EUI64, id []byte, paths []string) (*ttnpb.SessionKeys, error) SetByID(ctx context.Context, joinEUI, devEUI types.EUI64, id []byte, paths []string, f func(*ttnpb.SessionKeys) (*ttnpb.SessionKeys, []string, error)) (*ttnpb.SessionKeys, error) }
KeyRegistry is a registry, containing session keys.