mirror of
https://github.com/netbirdio/netbird.git
synced 2024-11-27 02:24:30 +01:00
e5c52efb4c
UI and CLI Clients are now able to use SSO login by default we will check if the management has configured or supports SSO providers daemon will handle fetching and waiting for an access token Oauth package was moved to internal to avoid one extra package at this stage Secrets were removed from OAuth CLI clients have less and better output 2 new status were introduced, NeedsLogin and FailedLogin for better messaging With NeedsLogin we no longer have endless login attempts
70 lines
1.3 KiB
Go
70 lines
1.3 KiB
Go
package internal
|
|
|
|
import (
|
|
"context"
|
|
"sync"
|
|
)
|
|
|
|
type StatusType string
|
|
|
|
const (
|
|
StatusIdle StatusType = "Idle"
|
|
|
|
StatusConnecting StatusType = "Connecting"
|
|
StatusConnected StatusType = "Connected"
|
|
StatusNeedsLogin StatusType = "NeedsLogin"
|
|
StatusLoginFailed StatusType = "LoginFailed"
|
|
)
|
|
|
|
// CtxInitState setup context state into the context tree.
|
|
//
|
|
// This function should be used to initialize context before
|
|
// CtxGetState will be executed.
|
|
func CtxInitState(ctx context.Context) context.Context {
|
|
return context.WithValue(ctx, stateCtx, &contextState{
|
|
status: StatusIdle,
|
|
})
|
|
}
|
|
|
|
// CtxGetState object to get/update state/errors of process.
|
|
func CtxGetState(ctx context.Context) *contextState {
|
|
return ctx.Value(stateCtx).(*contextState)
|
|
}
|
|
|
|
type contextState struct {
|
|
err error
|
|
status StatusType
|
|
mutex sync.Mutex
|
|
}
|
|
|
|
func (c *contextState) Set(update StatusType) {
|
|
c.mutex.Lock()
|
|
defer c.mutex.Unlock()
|
|
|
|
c.status = update
|
|
c.err = nil
|
|
}
|
|
|
|
func (c *contextState) Status() (StatusType, error) {
|
|
c.mutex.Lock()
|
|
defer c.mutex.Unlock()
|
|
|
|
if c.err != nil {
|
|
return "", c.err
|
|
}
|
|
|
|
return c.status, nil
|
|
}
|
|
|
|
func (c *contextState) Wrap(err error) error {
|
|
c.mutex.Lock()
|
|
defer c.mutex.Unlock()
|
|
|
|
c.err = err
|
|
return err
|
|
}
|
|
|
|
type stateKey int
|
|
|
|
var stateCtx stateKey
|