mirror of
https://github.com/netbirdio/netbird.git
synced 2026-07-16 19:49:56 +00:00
Route services.Session errors through the same classifier Connection uses so RequestExtend/WaitExtend return a structured ClientError with a clean localized short message instead of the raw daemon error. Extract the shared errorClassifier into errors.go, and fall back to the gRPC status code when no message substring matches, since the daemon now forwards a clean desc without the English marker text.
49 lines
1.7 KiB
Go
49 lines
1.7 KiB
Go
//go:build !android && !ios && !freebsd && !js
|
|
|
|
package services
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/netbirdio/netbird/client/ui/authsession"
|
|
)
|
|
|
|
// Re-exports so generated bindings reference services.* without importing authsession.
|
|
type (
|
|
ExtendStartParams = authsession.ExtendStartParams
|
|
ExtendStartResult = authsession.ExtendStartResult
|
|
ExtendWaitParams = authsession.ExtendWaitParams
|
|
ExtendResult = authsession.ExtendResult
|
|
)
|
|
|
|
// Session wraps authsession.Session, exposing only the subset the React frontend
|
|
// calls; the tray uses authsession.Session directly, keeping the generated TS surface minimal.
|
|
type Session struct {
|
|
inner *authsession.Session
|
|
classifier errorClassifier
|
|
}
|
|
|
|
// NewSession wraps inner; the caller retains ownership and may use it directly.
|
|
// translator or prefs may be nil, in which case errors fall back to the bare code key.
|
|
func NewSession(inner *authsession.Session, translator ErrorTranslator, prefs LanguagePreference) *Session {
|
|
return &Session{inner: inner, classifier: errorClassifier{translator: translator, prefs: prefs}}
|
|
}
|
|
|
|
// RequestExtend starts the SSO session-extension flow; the result carries the verification URI to open.
|
|
func (s *Session) RequestExtend(ctx context.Context, p ExtendStartParams) (ExtendStartResult, error) {
|
|
res, err := s.inner.RequestExtend(ctx, p)
|
|
if err != nil {
|
|
return ExtendStartResult{}, s.classifier.classify(err)
|
|
}
|
|
return res, nil
|
|
}
|
|
|
|
// WaitExtend blocks until the RequestExtend flow completes; the deadline is nil when the peer is ineligible.
|
|
func (s *Session) WaitExtend(ctx context.Context, p ExtendWaitParams) (ExtendResult, error) {
|
|
res, err := s.inner.WaitExtend(ctx, p)
|
|
if err != nil {
|
|
return ExtendResult{}, s.classifier.classify(err)
|
|
}
|
|
return res, nil
|
|
}
|