mirror of
https://github.com/netbirdio/netbird.git
synced 2024-11-26 10:03:47 +01:00
7794b744f8
Enhance the user experience by enabling authentication to Netbird using Single Sign-On (SSO) with any Identity Provider (IDP) provider. Current client offers this capability through the Device Authorization Flow, however, is not widely supported by many IDPs, and even some that do support it do not provide a complete verification URL. To address these challenges, this pull request enable Authorization Code Flow with Proof Key for Code Exchange (PKCE) for client logins, which is a more widely adopted and secure approach to facilitate SSO with various IDP providers.
72 lines
2.3 KiB
Go
72 lines
2.3 KiB
Go
package client
|
|
|
|
import (
|
|
"github.com/netbirdio/netbird/client/system"
|
|
"github.com/netbirdio/netbird/management/proto"
|
|
"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
|
|
)
|
|
|
|
type MockClient struct {
|
|
CloseFunc func() error
|
|
SyncFunc func(msgHandler func(msg *proto.SyncResponse) error) error
|
|
GetServerPublicKeyFunc func() (*wgtypes.Key, error)
|
|
RegisterFunc func(serverKey wgtypes.Key, setupKey string, jwtToken string, info *system.Info, sshKey []byte) (*proto.LoginResponse, error)
|
|
LoginFunc func(serverKey wgtypes.Key, info *system.Info, sshKey []byte) (*proto.LoginResponse, error)
|
|
GetDeviceAuthorizationFlowFunc func(serverKey wgtypes.Key) (*proto.DeviceAuthorizationFlow, error)
|
|
GetPKCEAuthorizationFlowFunc func(serverKey wgtypes.Key) (*proto.PKCEAuthorizationFlow, error)
|
|
}
|
|
|
|
func (m *MockClient) Close() error {
|
|
if m.CloseFunc == nil {
|
|
return nil
|
|
}
|
|
return m.CloseFunc()
|
|
}
|
|
|
|
func (m *MockClient) Sync(msgHandler func(msg *proto.SyncResponse) error) error {
|
|
if m.SyncFunc == nil {
|
|
return nil
|
|
}
|
|
return m.SyncFunc(msgHandler)
|
|
}
|
|
|
|
func (m *MockClient) GetServerPublicKey() (*wgtypes.Key, error) {
|
|
if m.GetServerPublicKeyFunc == nil {
|
|
return nil, nil
|
|
}
|
|
return m.GetServerPublicKeyFunc()
|
|
}
|
|
|
|
func (m *MockClient) Register(serverKey wgtypes.Key, setupKey string, jwtToken string, info *system.Info, sshKey []byte) (*proto.LoginResponse, error) {
|
|
if m.RegisterFunc == nil {
|
|
return nil, nil
|
|
}
|
|
return m.RegisterFunc(serverKey, setupKey, jwtToken, info, sshKey)
|
|
}
|
|
|
|
func (m *MockClient) Login(serverKey wgtypes.Key, info *system.Info, sshKey []byte) (*proto.LoginResponse, error) {
|
|
if m.LoginFunc == nil {
|
|
return nil, nil
|
|
}
|
|
return m.LoginFunc(serverKey, info, sshKey)
|
|
}
|
|
|
|
func (m *MockClient) GetDeviceAuthorizationFlow(serverKey wgtypes.Key) (*proto.DeviceAuthorizationFlow, error) {
|
|
if m.GetDeviceAuthorizationFlowFunc == nil {
|
|
return nil, nil
|
|
}
|
|
return m.GetDeviceAuthorizationFlowFunc(serverKey)
|
|
}
|
|
|
|
func (m *MockClient) GetPKCEAuthorizationFlow(serverKey wgtypes.Key) (*proto.PKCEAuthorizationFlow, error) {
|
|
if m.GetPKCEAuthorizationFlowFunc == nil {
|
|
return nil, nil
|
|
}
|
|
return m.GetPKCEAuthorizationFlow(serverKey)
|
|
}
|
|
|
|
// GetNetworkMap mock implementation of GetNetworkMap from mgm.Client interface
|
|
func (m *MockClient) GetNetworkMap() (*proto.NetworkMap, error) {
|
|
return nil, nil
|
|
}
|