Skip to content

Commit cb8b6ca

Browse files
authored
[client] Feat: Support Multiple Profiles (#3980)
[client] Feat: Support Multiple Profiles (#3980)
1 parent e0d9306 commit cb8b6ca

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+4733
-850
lines changed

client/android/client.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"github.com/netbirdio/netbird/client/internal/dns"
1414
"github.com/netbirdio/netbird/client/internal/listener"
1515
"github.com/netbirdio/netbird/client/internal/peer"
16+
"github.com/netbirdio/netbird/client/internal/profilemanager"
1617
"github.com/netbirdio/netbird/client/internal/stdnet"
1718
"github.com/netbirdio/netbird/client/system"
1819
"github.com/netbirdio/netbird/formatter"
@@ -82,7 +83,7 @@ func NewClient(cfgFile string, androidSDKVersion int, deviceName string, uiVersi
8283

8384
// Run start the internal client. It is a blocker function
8485
func (c *Client) Run(urlOpener URLOpener, dns *DNSList, dnsReadyListener DnsReadyListener) error {
85-
cfg, err := internal.UpdateOrCreateConfig(internal.ConfigInput{
86+
cfg, err := profilemanager.UpdateOrCreateConfig(profilemanager.ConfigInput{
8687
ConfigPath: c.cfgFile,
8788
})
8889
if err != nil {
@@ -117,7 +118,7 @@ func (c *Client) Run(urlOpener URLOpener, dns *DNSList, dnsReadyListener DnsRead
117118
// RunWithoutLogin we apply this type of run function when the backed has been started without UI (i.e. after reboot).
118119
// In this case make no sense handle registration steps.
119120
func (c *Client) RunWithoutLogin(dns *DNSList, dnsReadyListener DnsReadyListener) error {
120-
cfg, err := internal.UpdateOrCreateConfig(internal.ConfigInput{
121+
cfg, err := profilemanager.UpdateOrCreateConfig(profilemanager.ConfigInput{
121122
ConfigPath: c.cfgFile,
122123
})
123124
if err != nil {

client/android/login.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"github.com/netbirdio/netbird/client/cmd"
1414
"github.com/netbirdio/netbird/client/internal"
1515
"github.com/netbirdio/netbird/client/internal/auth"
16+
"github.com/netbirdio/netbird/client/internal/profilemanager"
1617
"github.com/netbirdio/netbird/client/system"
1718
)
1819

@@ -37,17 +38,17 @@ type URLOpener interface {
3738
// Auth can register or login new client
3839
type Auth struct {
3940
ctx context.Context
40-
config *internal.Config
41+
config *profilemanager.Config
4142
cfgPath string
4243
}
4344

4445
// NewAuth instantiate Auth struct and validate the management URL
4546
func NewAuth(cfgPath string, mgmURL string) (*Auth, error) {
46-
inputCfg := internal.ConfigInput{
47+
inputCfg := profilemanager.ConfigInput{
4748
ManagementURL: mgmURL,
4849
}
4950

50-
cfg, err := internal.CreateInMemoryConfig(inputCfg)
51+
cfg, err := profilemanager.CreateInMemoryConfig(inputCfg)
5152
if err != nil {
5253
return nil, err
5354
}
@@ -60,7 +61,7 @@ func NewAuth(cfgPath string, mgmURL string) (*Auth, error) {
6061
}
6162

6263
// NewAuthWithConfig instantiate Auth based on existing config
63-
func NewAuthWithConfig(ctx context.Context, config *internal.Config) *Auth {
64+
func NewAuthWithConfig(ctx context.Context, config *profilemanager.Config) *Auth {
6465
return &Auth{
6566
ctx: ctx,
6667
config: config,
@@ -110,7 +111,7 @@ func (a *Auth) saveConfigIfSSOSupported() (bool, error) {
110111
return false, fmt.Errorf("backoff cycle failed: %v", err)
111112
}
112113

113-
err = internal.WriteOutConfig(a.cfgPath, a.config)
114+
err = profilemanager.WriteOutConfig(a.cfgPath, a.config)
114115
return true, err
115116
}
116117

@@ -142,7 +143,7 @@ func (a *Auth) loginWithSetupKeyAndSaveConfig(setupKey string, deviceName string
142143
return fmt.Errorf("backoff cycle failed: %v", err)
143144
}
144145

145-
return internal.WriteOutConfig(a.cfgPath, a.config)
146+
return profilemanager.WriteOutConfig(a.cfgPath, a.config)
146147
}
147148

148149
// Login try register the client on the server

client/android/preferences.go

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
package android
22

33
import (
4-
"github.com/netbirdio/netbird/client/internal"
4+
"github.com/netbirdio/netbird/client/internal/profilemanager"
55
)
66

77
// Preferences exports a subset of the internal config for gomobile
88
type Preferences struct {
9-
configInput internal.ConfigInput
9+
configInput profilemanager.ConfigInput
1010
}
1111

1212
// NewPreferences creates a new Preferences instance
1313
func NewPreferences(configPath string) *Preferences {
14-
ci := internal.ConfigInput{
14+
ci := profilemanager.ConfigInput{
1515
ConfigPath: configPath,
1616
}
1717
return &Preferences{ci}
@@ -23,7 +23,7 @@ func (p *Preferences) GetManagementURL() (string, error) {
2323
return p.configInput.ManagementURL, nil
2424
}
2525

26-
cfg, err := internal.ReadConfig(p.configInput.ConfigPath)
26+
cfg, err := profilemanager.ReadConfig(p.configInput.ConfigPath)
2727
if err != nil {
2828
return "", err
2929
}
@@ -41,7 +41,7 @@ func (p *Preferences) GetAdminURL() (string, error) {
4141
return p.configInput.AdminURL, nil
4242
}
4343

44-
cfg, err := internal.ReadConfig(p.configInput.ConfigPath)
44+
cfg, err := profilemanager.ReadConfig(p.configInput.ConfigPath)
4545
if err != nil {
4646
return "", err
4747
}
@@ -59,7 +59,7 @@ func (p *Preferences) GetPreSharedKey() (string, error) {
5959
return *p.configInput.PreSharedKey, nil
6060
}
6161

62-
cfg, err := internal.ReadConfig(p.configInput.ConfigPath)
62+
cfg, err := profilemanager.ReadConfig(p.configInput.ConfigPath)
6363
if err != nil {
6464
return "", err
6565
}
@@ -82,7 +82,7 @@ func (p *Preferences) GetRosenpassEnabled() (bool, error) {
8282
return *p.configInput.RosenpassEnabled, nil
8383
}
8484

85-
cfg, err := internal.ReadConfig(p.configInput.ConfigPath)
85+
cfg, err := profilemanager.ReadConfig(p.configInput.ConfigPath)
8686
if err != nil {
8787
return false, err
8888
}
@@ -100,7 +100,7 @@ func (p *Preferences) GetRosenpassPermissive() (bool, error) {
100100
return *p.configInput.RosenpassPermissive, nil
101101
}
102102

103-
cfg, err := internal.ReadConfig(p.configInput.ConfigPath)
103+
cfg, err := profilemanager.ReadConfig(p.configInput.ConfigPath)
104104
if err != nil {
105105
return false, err
106106
}
@@ -113,7 +113,7 @@ func (p *Preferences) GetDisableClientRoutes() (bool, error) {
113113
return *p.configInput.DisableClientRoutes, nil
114114
}
115115

116-
cfg, err := internal.ReadConfig(p.configInput.ConfigPath)
116+
cfg, err := profilemanager.ReadConfig(p.configInput.ConfigPath)
117117
if err != nil {
118118
return false, err
119119
}
@@ -131,7 +131,7 @@ func (p *Preferences) GetDisableServerRoutes() (bool, error) {
131131
return *p.configInput.DisableServerRoutes, nil
132132
}
133133

134-
cfg, err := internal.ReadConfig(p.configInput.ConfigPath)
134+
cfg, err := profilemanager.ReadConfig(p.configInput.ConfigPath)
135135
if err != nil {
136136
return false, err
137137
}
@@ -149,7 +149,7 @@ func (p *Preferences) GetDisableDNS() (bool, error) {
149149
return *p.configInput.DisableDNS, nil
150150
}
151151

152-
cfg, err := internal.ReadConfig(p.configInput.ConfigPath)
152+
cfg, err := profilemanager.ReadConfig(p.configInput.ConfigPath)
153153
if err != nil {
154154
return false, err
155155
}
@@ -167,7 +167,7 @@ func (p *Preferences) GetDisableFirewall() (bool, error) {
167167
return *p.configInput.DisableFirewall, nil
168168
}
169169

170-
cfg, err := internal.ReadConfig(p.configInput.ConfigPath)
170+
cfg, err := profilemanager.ReadConfig(p.configInput.ConfigPath)
171171
if err != nil {
172172
return false, err
173173
}
@@ -185,7 +185,7 @@ func (p *Preferences) GetServerSSHAllowed() (bool, error) {
185185
return *p.configInput.ServerSSHAllowed, nil
186186
}
187187

188-
cfg, err := internal.ReadConfig(p.configInput.ConfigPath)
188+
cfg, err := profilemanager.ReadConfig(p.configInput.ConfigPath)
189189
if err != nil {
190190
return false, err
191191
}
@@ -207,7 +207,7 @@ func (p *Preferences) GetBlockInbound() (bool, error) {
207207
return *p.configInput.BlockInbound, nil
208208
}
209209

210-
cfg, err := internal.ReadConfig(p.configInput.ConfigPath)
210+
cfg, err := profilemanager.ReadConfig(p.configInput.ConfigPath)
211211
if err != nil {
212212
return false, err
213213
}
@@ -221,6 +221,6 @@ func (p *Preferences) SetBlockInbound(block bool) {
221221

222222
// Commit writes out the changes to the config file
223223
func (p *Preferences) Commit() error {
224-
_, err := internal.UpdateOrCreateConfig(p.configInput)
224+
_, err := profilemanager.UpdateOrCreateConfig(p.configInput)
225225
return err
226226
}

client/android/preferences_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import (
44
"path/filepath"
55
"testing"
66

7-
"github.com/netbirdio/netbird/client/internal"
7+
"github.com/netbirdio/netbird/client/internal/profilemanager"
88
)
99

1010
func TestPreferences_DefaultValues(t *testing.T) {
@@ -15,7 +15,7 @@ func TestPreferences_DefaultValues(t *testing.T) {
1515
t.Fatalf("failed to read default value: %s", err)
1616
}
1717

18-
if defaultVar != internal.DefaultAdminURL {
18+
if defaultVar != profilemanager.DefaultAdminURL {
1919
t.Errorf("invalid default admin url: %s", defaultVar)
2020
}
2121

@@ -24,7 +24,7 @@ func TestPreferences_DefaultValues(t *testing.T) {
2424
t.Fatalf("failed to read default management URL: %s", err)
2525
}
2626

27-
if defaultVar != internal.DefaultManagementURL {
27+
if defaultVar != profilemanager.DefaultManagementURL {
2828
t.Errorf("invalid default management url: %s", defaultVar)
2929
}
3030

client/cmd/debug.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"github.com/netbirdio/netbird/client/internal"
1414
"github.com/netbirdio/netbird/client/internal/debug"
1515
"github.com/netbirdio/netbird/client/internal/peer"
16+
"github.com/netbirdio/netbird/client/internal/profilemanager"
1617
"github.com/netbirdio/netbird/client/proto"
1718
"github.com/netbirdio/netbird/client/server"
1819
nbstatus "github.com/netbirdio/netbird/client/status"
@@ -307,7 +308,7 @@ func getStatusOutput(cmd *cobra.Command, anon bool) string {
307308
cmd.PrintErrf("Failed to get status: %v\n", err)
308309
} else {
309310
statusOutputString = nbstatus.ParseToFullDetailSummary(
310-
nbstatus.ConvertToStatusOutputOverview(statusResp, anon, "", nil, nil, nil, ""),
311+
nbstatus.ConvertToStatusOutputOverview(statusResp, anon, "", nil, nil, nil, "", ""),
311312
)
312313
}
313314
return statusOutputString
@@ -355,7 +356,7 @@ func formatDuration(d time.Duration) string {
355356
return fmt.Sprintf("%02d:%02d:%02d", h, m, s)
356357
}
357358

358-
func generateDebugBundle(config *internal.Config, recorder *peer.Status, connectClient *internal.ConnectClient, logFilePath string) {
359+
func generateDebugBundle(config *profilemanager.Config, recorder *peer.Status, connectClient *internal.ConnectClient, logFilePath string) {
359360
var networkMap *mgmProto.NetworkMap
360361
var err error
361362

client/cmd/debug_unix.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,12 @@ import (
1212

1313
"github.com/netbirdio/netbird/client/internal"
1414
"github.com/netbirdio/netbird/client/internal/peer"
15+
"github.com/netbirdio/netbird/client/internal/profilemanager"
1516
)
1617

1718
func SetupDebugHandler(
1819
ctx context.Context,
19-
config *internal.Config,
20+
config *profilemanager.Config,
2021
recorder *peer.Status,
2122
connectClient *internal.ConnectClient,
2223
logFilePath string,

client/cmd/debug_windows.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212

1313
"github.com/netbirdio/netbird/client/internal"
1414
"github.com/netbirdio/netbird/client/internal/peer"
15+
"github.com/netbirdio/netbird/client/internal/profilemanager"
1516
)
1617

1718
const (
@@ -28,7 +29,7 @@ const (
2829
// $evt.Close()
2930
func SetupDebugHandler(
3031
ctx context.Context,
31-
config *internal.Config,
32+
config *profilemanager.Config,
3233
recorder *peer.Status,
3334
connectClient *internal.ConnectClient,
3435
logFilePath string,
@@ -83,7 +84,7 @@ func SetupDebugHandler(
8384

8485
func waitForEvent(
8586
ctx context.Context,
86-
config *internal.Config,
87+
config *profilemanager.Config,
8788
recorder *peer.Status,
8889
connectClient *internal.ConnectClient,
8990
logFilePath string,

0 commit comments

Comments
 (0)