Documentation
¶
Index ¶
- Constants
- Variables
- func AudioTestFile(name string) string
- func Bootstrap(ctx context.Context, conf Config, envConf EnvConfig)
- func CacheDumpBridges(f io.Writer) error
- func ConfigLoad(r io.Reader, c *Config) error
- func ConfigLoadYamlFile(filename string, c *Config) error
- func EnvConfigLoad(c *EnvConfig) error
- func NodeID() string
- func ParseSIPTrace(trace *SIPTrace, transport string, laddr string, raddr string, sipmsg []byte)
- func SIPResponseReason(code int) string
- func SIPTraceDebug(transport string, laddr string, raddr string, sipmsg []byte, rw int)
- func SetNodeID(id string)
- type AudioMediaStack
- type AuthorizerDigest
- type BridgeData
- type CDR
- type CDRMemoryStorage
- type CDRPiper
- type CDRReadOptions
- type CDRStorage
- type CallContext
- func (cx *CallContext) AnswerWebrtc(inDialog *diago.DialogServerSession)
- func (cx *CallContext) BridgeCall(inDialog *diago.DialogServerSession)
- func (cx *CallContext) ListenRTPSession(rtpSess *media.RTPSession, stats *DialogMediaStats)
- func (cx *CallContext) OnInboundRTPSession(rtpSess *media.RTPSession)
- func (cx *CallContext) OnOutboundRTPSession(rtpSess *media.RTPSession)
- func (cx *CallContext) Playback(inDialog *diago.DialogServerSession)
- func (cx *CallContext) PlaybackWebrtc(inDialog *diago.DialogServerSession)
- type Config
- type ConfigAOR
- type ConfigAuth
- type ConfigEndpoint
- type ConfigEndpointMedia
- type ConfigMatch
- type ConfigRecordings
- type ConfigRoute
- type ConfigRouteFallback
- type ConfigRouteHangup
- type ConfigTransport
- type DialogCacheFile
- func (c *DialogCacheFile) Close()
- func (c *DialogCacheFile) DeleteDialog(ctx context.Context, id string) error
- func (c *DialogCacheFile) DeleteDialogNode(ctx context.Context, id string, nodeID string) error
- func (c *DialogCacheFile) Init() error
- func (c *DialogCacheFile) LoadDialog(ctx context.Context, id string) (DialogData, error)
- func (c *DialogCacheFile) LoadDialogs(ctx context.Context, nodeID string) ([]DialogData, error)
- func (c *DialogCacheFile) StoreDialog(ctx context.Context, data DialogData) error
- type DialogData
- type DialogExternalCache
- type DialogMediaStats
- type DialogRateLimiterIncoming
- type DialogRateLimiterOutgoing
- type EnvConfig
- type FlowConnection
- type FlowDialogChan
- type FlowRPC
- type FlowRequest
- type FlowResponse
- type Handler
- type MysqlConfig
- type PBX
- func (p *PBX) ApplyProviders(providers Providers)
- func (p *PBX) DialogCache() DialogExternalCache
- func (pbx *PBX) ExternalMedia(inDialog *diago.DialogServerSession)
- func (pbx *PBX) Init(ctx context.Context, conf Config) error
- func (pbx *PBX) ReInviteDialogs(ctx context.Context, dialogs []DialogData, bridges []BridgeData) error
- func (pbx *PBX) Run(ctx context.Context) error
- func (p *PBX) SIPTracer() SIPTracer
- func (pbx *PBX) Serve(ctx context.Context) error
- func (pbx *PBX) ServeBackground(ctx context.Context) error
- func (pbx *PBX) WebrtcBridge(inDialog *diago.DialogServerSession) error
- type PostgresConfig
- type Providers
- type RateLimiterAtomic
- type RateLimiterIn
- type RateLimiterIncomingConfig
- type RateLimiterOut
- type RateLimiterOutgoingConfig
- type RedisConfig
- type RegisterBinding
- type Registrar
- type RegistryMemory
- func (r *RegistryMemory) RegisterBindingContactDelete(id string, contact sip.Uri) error
- func (r *RegistryMemory) RegisterBindingDelete(id string) error
- func (r *RegistryMemory) RegisterBindingGet(id string) (RegisterBinding, error)
- func (r *RegistryMemory) RegisterBindingSet(id string, rec RegisterBinding) error
- type RegistryStore
- type Router
- func (r *Router) MatchEndpoint(req *sip.Request, end *ConfigEndpoint) bool
- func (r *Router) MatchIncomingRoute(req *sip.Request, routeID string, route *ConfigRoute) bool
- func (r *Router) MatchOutgoingRouteEndpoint(req *sip.Request, route *ConfigRoute, end *ConfigEndpoint) bool
- func (r *Router) Route(fromUser string, uri *sip.Uri, auth *diago.DigestAuth) error
- func (r *Router) RouteDialog(dialog *diago.DialogServerSession, uri *sip.Uri, auth *diago.DigestAuth) error
- type SIPRegisterBearerAuthConfig
- type SIPTrace
- type SIPTracer
- type SipTracerMemoryStorage
- type UserAuthStoreBearerHTTP
- type UserAuthStoreMemory
- type UserBearerAuth
- type UserBearerAuthStore
- type UserDigestAuthStore
- type WebrtcSTUNConfig
Constants ¶
View Source
const ( ConfigAuthTypeDigest = "digest" ConfigAuthTypeBearer = "bearer" )
Variables ¶
View Source
var ( ErrBearerAuthInvalid = errors.New("bearer auth invalid") )
View Source
var ( DirectionIn = "IN" DirectionOut = "OUT" )
View Source
var (
BridgeCache = sync.Map{}
)
View Source
var (
ErrRegistryDoesNotExist = errors.New("registry does not exist")
)
Functions ¶
func AudioTestFile ¶
func CacheDumpBridges ¶
func ConfigLoadYamlFile ¶
func EnvConfigLoad ¶
func ParseSIPTrace ¶
func SIPResponseReason ¶
SIPResponseReason returns the reason phrase associated with the SIP response code.
func SIPTraceDebug ¶
Types ¶
type AudioMediaStack ¶
type AuthorizerDigest ¶
type AuthorizerDigest struct {
// contains filtered or unexported fields
}
func NewAuthorizerDigest ¶
func NewAuthorizerDigest(userpass map[string]string) *AuthorizerDigest
func (*AuthorizerDigest) Authorize ¶
func (a *AuthorizerDigest) Authorize(inDialog *diago.DialogServerSession) (authorized bool)
type BridgeData ¶
type CDR ¶
type CDR struct {
Direction string `json:"direction"`
CallID string `json:"callId"`
OriginatorCallID string `json:"originatorCallId"`
StartTime time.Time `json:"startTime"`
Duration time.Duration `json:"duration"`
CallerID string `json:"callerId"`
CalleeID string `json:"calleeId"`
Bill float64 `json:"bill"`
Disposition string `json:"disposition"`
MediaStats DialogMediaStats `json:"mediaStats"`
MES float64 `json:"mes"` // Media Experience Score
RecordingID string `json:"recordingId"`
Bridged bool `json:"bridged"`
StartTimeFormated string `json:"startTimeFormatted"`
}
type CDRMemoryStorage ¶
type CDRMemoryStorage struct {
// contains filtered or unexported fields
}
func NewCDRMemoryStorage ¶
func NewCDRMemoryStorage() *CDRMemoryStorage
func (*CDRMemoryStorage) CDRRead ¶
func (s *CDRMemoryStorage) CDRRead(ctx context.Context, buf []CDR, opts CDRReadOptions) (n int, err error)
type CDRPiper ¶
type CDRPiper struct {
CDRStorage
Pipe chan CDR
}
func NewCDRPiper ¶
func NewCDRPiper() *CDRPiper
type CDRReadOptions ¶
type CDRStorage ¶
type CallContext ¶
type CallContext struct {
*PBX
// contains filtered or unexported fields
}
func (*CallContext) AnswerWebrtc ¶
func (cx *CallContext) AnswerWebrtc(inDialog *diago.DialogServerSession)
func (*CallContext) BridgeCall ¶
func (cx *CallContext) BridgeCall(inDialog *diago.DialogServerSession)
func (*CallContext) ListenRTPSession ¶
func (cx *CallContext) ListenRTPSession(rtpSess *media.RTPSession, stats *DialogMediaStats)
func (*CallContext) OnInboundRTPSession ¶
func (cx *CallContext) OnInboundRTPSession(rtpSess *media.RTPSession)
func (*CallContext) OnOutboundRTPSession ¶
func (cx *CallContext) OnOutboundRTPSession(rtpSess *media.RTPSession)
func (*CallContext) Playback ¶
func (cx *CallContext) Playback(inDialog *diago.DialogServerSession)
func (*CallContext) PlaybackWebrtc ¶
func (cx *CallContext) PlaybackWebrtc(inDialog *diago.DialogServerSession)
type Config ¶
type Config struct {
Version string `yaml:"version"`
Transports map[string]ConfigTransport `yaml:"transports"`
Endpoints map[string]ConfigEndpoint `yaml:"endpoints"`
Routes map[string][]ConfigRoute `yaml:"routes"`
// contains filtered or unexported fields
}
Struct for the full YAML file
type ConfigAOR ¶
type ConfigAOR struct {
URI string `yaml:"uri"`
Protocol string `yaml:"protocol"`
Auth ConfigAuth `yaml:"auth"`
}
Struct for AOR (Address of Record)
type ConfigAuth ¶
type ConfigAuth struct {
Type string `yaml:"type"`
Username string `yaml:"username"`
Password string `yaml:"password"`
}
Struct for Auth details
func (ConfigAuth) AuthType ¶
func (a ConfigAuth) AuthType() string
type ConfigEndpoint ¶
type ConfigEndpoint struct {
Name string `yaml:"name"`
Match ConfigMatch `yaml:"match"`
Auth ConfigAuth `yaml:"auth,omitempty"`
URI string `yaml:"uri"`
Route string `yaml:"route"`
// AOR ConfigAOR `yaml:"aor,omitempty"`
// MatchNext string `yaml:"match_next,omitempty"`
TransportID string `yaml:"transport,omitempty"`
Media ConfigEndpointMedia `yaml:"media"`
ContactHDR string `yaml:"contact_header"`
// contains filtered or unexported fields
}
Struct for each Endpoint
type ConfigEndpointMedia ¶
type ConfigEndpointMedia struct {
Type string `yaml:"type"`
}
type ConfigMatch ¶
type ConfigMatch struct {
Type string `yaml:"type"`
Values []string `yaml:"values,omitempty"`
Transport string `yaml:"transport,omitempty"`
}
Struct for Match section in each endpoint
type ConfigRecordings ¶
type ConfigRecordings struct {
Path string `yaml:"path,omitempty"`
}
type ConfigRoute ¶
type ConfigRoute struct {
ID string `yaml:"id"`
EndpointName string `yaml:"endpoint"`
Fallback ConfigRouteFallback `yaml:"fallback"`
Match string `yaml:"match"`
StripPrefix string `yaml:"strip_prefix"`
UseRegistry bool `yaml:"use_registry"`
Recording bool `yaml:"recording"`
Hangup ConfigRouteHangup `yaml:"hangup"`
SipHeaders map[string]string `yaml:"sip_headers"`
SipHeadersPass []string `yaml:"sip_headers_pass"`
}
type ConfigRouteFallback ¶
type ConfigRouteHangup ¶
type ConfigTransport ¶
type ConfigTransport struct {
Transport string `yaml:"transport"`
Bind string `yaml:"bind"`
Port int `yaml:"port"`
ExternalHost string `yaml:"external_host"`
ExternalPort int `yaml:"external_port"`
ExternalMediaIP string `yaml:"external_media_ip"`
RewriteContact bool `yaml:"rewrite_contact"`
}
Struct for Transports
type DialogCacheFile ¶
type DialogCacheFile struct {
NodeID string
// contains filtered or unexported fields
}
func NewDialogCacheFile ¶
func NewDialogCacheFile(nodeID string) *DialogCacheFile
func (*DialogCacheFile) Close ¶
func (c *DialogCacheFile) Close()
func (*DialogCacheFile) DeleteDialog ¶
func (c *DialogCacheFile) DeleteDialog(ctx context.Context, id string) error
func (*DialogCacheFile) DeleteDialogNode ¶
TODO
func (*DialogCacheFile) Init ¶
func (c *DialogCacheFile) Init() error
func (*DialogCacheFile) LoadDialog ¶
func (c *DialogCacheFile) LoadDialog(ctx context.Context, id string) (DialogData, error)
func (*DialogCacheFile) LoadDialogs ¶
func (c *DialogCacheFile) LoadDialogs(ctx context.Context, nodeID string) ([]DialogData, error)
func (*DialogCacheFile) StoreDialog ¶
func (c *DialogCacheFile) StoreDialog(ctx context.Context, data DialogData) error
type DialogData ¶
type DialogData struct {
ID string
NodeID string
Direction uint8 // 0: Server, 1:Client
InviteRequestData string
Dialplan string
}
func NewDialogData ¶
func NewDialogData(v *sipgo.Dialog, direction uint8) DialogData
type DialogExternalCache ¶
type DialogExternalCache interface {
StoreDialog(ctx context.Context, data DialogData) error
LoadDialog(ctx context.Context, id string) (DialogData, error)
DeleteDialog(ctx context.Context, id string) error
DeleteDialogNode(ctx context.Context, id string, nodeId string) error
LoadDialogs(ctx context.Context, nodeID string) ([]DialogData, error)
}
type DialogMediaStats ¶
type DialogMediaStats struct {
RTTMax time.Duration `json:"rttMax"`
RTTMin time.Duration `json:"rttMin"`
PacketsReadCount uint64 `json:"packetsReadCount"`
PacketsWriteCount uint64 `json:"packetsWriteCount"`
PacketsReadLost uint32 `json:"packetsReadLost"`
PacketsWriteLost uint32 `json:"packetsWriteLost"`
MaxJitter time.Duration `json:"maxJitter"`
}
type DialogRateLimiterIncoming ¶
type DialogRateLimiterIncoming struct {
DialogMax int64
DialogRPS int64
RateLimiterIn
}
func NewDialogRateLimiterIncoming ¶
func NewDialogRateLimiterIncoming(conf RateLimiterIncomingConfig) *DialogRateLimiterIncoming
type DialogRateLimiterOutgoing ¶
type DialogRateLimiterOutgoing struct {
DialogRPS int64
RateLimiterOut
}
func NewDialogRateLimiterOutgoing ¶
func NewDialogRateLimiterOutgoing(conf RateLimiterOutgoingConfig) *DialogRateLimiterOutgoing
type EnvConfig ¶
type EnvConfig struct {
// Internal
Cluster bool `env:"GOPBX_CLUSTER"`
TestMode bool `env:"TEST_MODE"`
SIPDebug bool `env:"SIP_DEBUG" envDefault:"false"`
SIPCDRTrace bool `env:"SIP_CDR_TRACE" envDefault:"true"`
RTPDebug bool `env:"RTP_DEBUG" envDefault:"false"`
RTCPDebug bool `env:"RTCP_DEBUG" envDefault:"false"`
OutboundDialUri string `env:"OUTBOUND_DIAL_URI" envDefault:""`
ConfFile string `env:"CONF_FILE" envDefault:"diagox.yaml"`
CDREnable bool `env:"CDR_ENABLE" envDefault:"true"`
RecordingsPath string `env:"RECORDINGS_PATH" envDefault:"recordings"`
FrontendEnable bool `env:"FRONTEND_ENABLE" envDefault:"false"`
FrontendDevMode bool `env:"FRONTEND_DEV_MODE" envDefault:"false"`
HTTPAddr string `env:"HTTP_ADDR" envDefault:":6060"`
HTTPDebug bool `env:"HTTP_DEBUG" envDefault:"false"`
MediaCodecs string `env:"MEDIA_CODECS" envDefault:""`
WebrtcICEServers string `env:"WEBRTC_ICE_SERVERS" envDefault:""`
WebrtcSTUN WebrtcSTUNConfig
Redis RedisConfig
Mysql MysqlConfig
Postgres PostgresConfig
// SIP global transport overrides
// if you have dedicated interface like POD ip, set SIP_BIND_IP
SIPBindIP string `env:"SIP_BIND_IP" envDefault:""`
SIPExternalHost string `env:"SIP_EXTERNAL_HOST" envDefault:""`
SIPExternalMediaIP string `env:"SIP_EXTERNAL_MEDIA_IP" envDefault:""`
// SIP_HOSTNAME identifies that message are matching this hostname like REGISTER
SIPHostname string `env:"SIP_HOSTNAME" envDefault:""`
RateLimiterIn RateLimiterIncomingConfig
RateLimiterOut RateLimiterOutgoingConfig
SIPRegisterBearerAuth SIPRegisterBearerAuthConfig
// TLS
ServerTLSKeyPath string `env:"SERVER_TLS_KEY_PATH" envDefault:""`
ServerTLSCrtPath string `env:"SERVER_TLS_CRT_PATH" envDefault:""`
ServerTLSKey string `env:"SERVER_TLS_KEY" envDefault:""` // Base64 encoded key
ServerTLSCrt string `env:"SERVER_TLS_CRT" envDefault:""` // Base64 encoded CRT
// Flow RPC
FlowRPCAddr string `env:"FLOW_RPC_HTTP_ADDR" envDefault:":6000"`
}
type FlowConnection ¶
type FlowConnection struct {
// contains filtered or unexported fields
}
type FlowDialogChan ¶
type FlowDialogChan struct {
// contains filtered or unexported fields
}
type FlowRPC ¶
type FlowRPC struct {
Config Config
// contains filtered or unexported fields
}
func NewFlowRPC ¶
func (*FlowRPC) NewServerDialog ¶
func (rpc *FlowRPC) NewServerDialog(ctx context.Context, toEndpointId string, d *diago.DialogServerSession, next *ConfigEndpoint) error
func (*FlowRPC) ServeBackground ¶
type FlowRequest ¶
type FlowRequest struct {
ID string `json:"id"`
DID string `json:"did"`
OP string `json:"op"`
Data json.RawMessage `json:"data"`
// contains filtered or unexported fields
}
type FlowResponse ¶
type Handler ¶
type Handler struct {
CdrStore CDRStorage
D *diago.Diago
SIPtracer SIPTracer
// contains filtered or unexported fields
}
type MysqlConfig ¶
type PBX ¶
type PBX struct {
// contains filtered or unexported fields
}
func NewPBXMemory ¶
func (*PBX) ApplyProviders ¶
func (*PBX) DialogCache ¶
func (p *PBX) DialogCache() DialogExternalCache
func (*PBX) ExternalMedia ¶
func (pbx *PBX) ExternalMedia(inDialog *diago.DialogServerSession)
func (*PBX) ReInviteDialogs ¶
func (pbx *PBX) ReInviteDialogs(ctx context.Context, dialogs []DialogData, bridges []BridgeData) error
func (*PBX) WebrtcBridge ¶
func (pbx *PBX) WebrtcBridge(inDialog *diago.DialogServerSession) error
type PostgresConfig ¶
type Providers ¶
type Providers struct {
CDRStore CDRStorage
Registry RegistryStore
SIPTracer SIPTracer
Cache DialogExternalCache
RateIn *DialogRateLimiterIncoming
RateOut *DialogRateLimiterOutgoing
Cleanup []func()
}
func NewDefaultProviders ¶
type RateLimiterAtomic ¶
func (*RateLimiterAtomic) Block ¶
Block based on current RPS limit It absorbs (blocks) until RPS drops down
func (*RateLimiterAtomic) DialogActiveDec ¶
func (r *RateLimiterAtomic) DialogActiveDec()
func (*RateLimiterAtomic) DialogActiveLimit ¶
func (r *RateLimiterAtomic) DialogActiveLimit() bool
Checks Dialog RPS
func (*RateLimiterAtomic) DialogRPSLimit ¶
func (r *RateLimiterAtomic) DialogRPSLimit() bool
Checks Dialog RPS
type RateLimiterIn ¶
type RateLimiterOut ¶
type RedisConfig ¶
type RedisConfig struct {
Addr string `env:"REDIS_ADDR" envDefault:""` // Addr holds the address to connect with Redis. If multiple addresses are provided seperated by comma, then redis cluster is being used
Username string `env:"REDIS_USERNAME" envDefault:""`
Password string `env:"REDIS_PASSWORD" envDefault:""`
CacheEnabled bool `env:"REDIS_CACHE" envDefault:"true"`
SentinelMasterSet string `env:"REDIS_SENTINEL_MASTER_SET" envDefault:""`
CacheConnSizeMB int `env:"REDIS_CACHE_CONN_SIZE_MB" envDefault:"32"`
}
type RegisterBinding ¶
type Registrar ¶
type Registrar struct {
Hostname string
Registry RegistryStore
DigestStore UserDigestAuthStore
BearerStore UserBearerAuthStore
// contains filtered or unexported fields
}
func NewRegistrar ¶
func NewRegistrar(hostname string, registry RegistryStore, digestStore UserDigestAuthStore, bearerStore UserBearerAuthStore) *Registrar
func (*Registrar) RegisterHandler ¶
func (p *Registrar) RegisterHandler(req *sip.Request, tx sip.ServerTransaction)
type RegistryMemory ¶
func NewRegistryMemory ¶
func NewRegistryMemory() *RegistryMemory
func (*RegistryMemory) RegisterBindingContactDelete ¶
func (r *RegistryMemory) RegisterBindingContactDelete(id string, contact sip.Uri) error
func (*RegistryMemory) RegisterBindingDelete ¶
func (r *RegistryMemory) RegisterBindingDelete(id string) error
func (*RegistryMemory) RegisterBindingGet ¶
func (r *RegistryMemory) RegisterBindingGet(id string) (RegisterBinding, error)
func (*RegistryMemory) RegisterBindingSet ¶
func (r *RegistryMemory) RegisterBindingSet(id string, rec RegisterBinding) error
type RegistryStore ¶
type Router ¶
type Router struct {
// contains filtered or unexported fields
}
func (*Router) MatchEndpoint ¶
func (r *Router) MatchEndpoint(req *sip.Request, end *ConfigEndpoint) bool
func (*Router) MatchIncomingRoute ¶
func (*Router) MatchOutgoingRouteEndpoint ¶
func (r *Router) MatchOutgoingRouteEndpoint(req *sip.Request, route *ConfigRoute, end *ConfigEndpoint) bool
func (*Router) RouteDialog ¶
func (r *Router) RouteDialog(dialog *diago.DialogServerSession, uri *sip.Uri, auth *diago.DigestAuth) error
Routes call and fils URI
type SIPRegisterBearerAuthConfig ¶
type SIPRegisterBearerAuthConfig struct {
URL string `env:"SIP_REGISTER_BEARER_AUTH_URL" envDefault:""`
Timeout time.Duration `env:"SIP_REGISTER_BEARER_AUTH_TIMEOUT"`
IdentityField string `env:"SIP_REGISTER_BEARER_AUTH_IDENTITY_FIELD"`
ActiveField string `env:"SIP_REGISTER_BEARER_AUTH_ACTIVE_FIELD"`
Header string `env:"SIP_REGISTER_BEARER_AUTH_HEADER" envDefault:""`
}
type SipTracerMemoryStorage ¶
type SipTracerMemoryStorage struct {
// contains filtered or unexported fields
}
func NewSipTracerMemoryStorage ¶
func NewSipTracerMemoryStorage() *SipTracerMemoryStorage
func (*SipTracerMemoryStorage) SIPTraceFind ¶
func (s *SipTracerMemoryStorage) SIPTraceFind(callID string, f func(m SIPTrace))
func (*SipTracerMemoryStorage) SIPTraceRead ¶
func (s *SipTracerMemoryStorage) SIPTraceRead(transport string, laddr string, raddr string, sipmsg []byte)
func (*SipTracerMemoryStorage) SIPTraceWrite ¶
func (s *SipTracerMemoryStorage) SIPTraceWrite(transport string, laddr string, raddr string, sipmsg []byte)
type UserAuthStoreBearerHTTP ¶
type UserAuthStoreBearerHTTP struct {
HTTPClient *http.Client
Config SIPRegisterBearerAuthConfig
}
func NewUserAuthStoreBearerHTTP ¶
func NewUserAuthStoreBearerHTTP(conf SIPRegisterBearerAuthConfig) *UserAuthStoreBearerHTTP
func (*UserAuthStoreBearerHTTP) UserAuthenticateBearer ¶
func (s *UserAuthStoreBearerHTTP) UserAuthenticateBearer(ctx context.Context, auth UserBearerAuth) error
type UserAuthStoreMemory ¶
type UserAuthStoreMemory struct {
// contains filtered or unexported fields
}
func NewUserAuthStoreMemory ¶
func NewUserAuthStoreMemory() *UserAuthStoreMemory
func (*UserAuthStoreMemory) UserAuthAdd ¶
func (s *UserAuthStoreMemory) UserAuthAdd(user string, auth diago.DigestAuth) error
func (*UserAuthStoreMemory) UserReadDigestAuth ¶
func (s *UserAuthStoreMemory) UserReadDigestAuth(user string, auth *diago.DigestAuth) error
type UserBearerAuth ¶
type UserBearerAuthStore ¶
type UserBearerAuthStore interface {
UserAuthenticateBearer(ctx context.Context, auth UserBearerAuth) error
}
type UserDigestAuthStore ¶
type UserDigestAuthStore interface {
// TODO extend with tenant domain
UserReadDigestAuth(user string, auth *diago.DigestAuth) error
}
type WebrtcSTUNConfig ¶
type WebrtcSTUNConfig struct {
Enabled bool `env:"WEBRTC_STUN_ENABLED" envDefault:"false"`
BindIP string `env:"WEBRTC_STUN_BIND_IP" envDefault:"0.0.0.0"`
Port int `env:"WEBRTC_STUN_PORT" envDefault:"3478"`
PublicIP string `env:"WEBRTC_STUN_PUBLIC_IP" envDefault:""`
Realm string `env:"WEBRTC_STUN_REALM" envDefault:"diagox"`
Username string `env:"WEBRTC_STUN_USERNAME" envDefault:""`
Password string `env:"WEBRTC_STUN_PASSWORD" envDefault:""`
}
Source Files
¶
Click to show internal directories.
Click to hide internal directories.