diff --git a/cmd/bbctl/delete.go b/cmd/bbctl/delete.go index dcedcda..8abd8b4 100644 --- a/cmd/bbctl/delete.go +++ b/cmd/bbctl/delete.go @@ -50,7 +50,6 @@ func deleteBridge(ctx *cli.Context) error { if err != nil { return fmt.Errorf("failed to get whoami: %w", err) } - SaveHungryURL(ctx, whoami.UserInfo.HungryURL) bridgeInfo, ok := whoami.User.Bridges[bridge] if !ok { return UserError{fmt.Sprintf("You don't have a %s bridge.", color.CyanString(bridge))} diff --git a/cmd/bbctl/login-email.go b/cmd/bbctl/login-email.go index 2fabeaa..865802b 100644 --- a/cmd/bbctl/login-email.go +++ b/cmd/bbctl/login-email.go @@ -86,7 +86,6 @@ func doMatrixLogin(ctx *cli.Context, req *mautrix.ReqLogin, whoami *beeperapi.Re return fmt.Errorf("failed to get user details: %w", err) } } - fmt.Printf("Found own bridge cluster ID: %s\n", whoami.UserInfo.BridgeClusterID) envCfg := GetEnvConfig(ctx) envCfg.ClusterID = whoami.UserInfo.BridgeClusterID envCfg.Username = whoami.UserInfo.Username diff --git a/cmd/bbctl/main.go b/cmd/bbctl/main.go index 31ae790..96a9dc2 100644 --- a/cmd/bbctl/main.go +++ b/cmd/bbctl/main.go @@ -84,17 +84,10 @@ func prepareApp(ctx *cli.Context) error { if envConfig.HasCredentials() { if envConfig.HungryAddress == "" || envConfig.ClusterID == "" || envConfig.Username == "" { log.Printf("Fetching whoami to fill missing env config details") - whoami, err := getCachedWhoami(ctx) + _, err = getCachedWhoami(ctx) if err != nil { return fmt.Errorf("failed to get whoami: %w", err) } - envConfig.Username = whoami.UserInfo.Username - envConfig.ClusterID = whoami.UserInfo.BridgeClusterID - envConfig.HungryAddress = whoami.UserInfo.HungryURL - err = cfg.Save() - if err != nil { - _, _ = fmt.Fprintln(os.Stderr, color.RedString("Failed to save config: "+err.Error())) - } } homeserver := ctx.String("homeserver") ctx.Context = context.WithValue(ctx.Context, contextKeyMatrixClient, NewMatrixAPI(homeserver, envConfig.Username, envConfig.AccessToken)) diff --git a/cmd/bbctl/register.go b/cmd/bbctl/register.go index e5d5e5c..a4019ba 100644 --- a/cmd/bbctl/register.go +++ b/cmd/bbctl/register.go @@ -70,13 +70,10 @@ type RegisterJSON struct { } func doRegisterBridge(ctx *cli.Context, bridge, bridgeType string, onlyGet bool) (*RegisterJSON, error) { - homeserver := ctx.String("homeserver") - envConfig := GetEnvConfig(ctx) - whoami, err := beeperapi.Whoami(homeserver, envConfig.AccessToken) + whoami, err := getCachedWhoami(ctx) if err != nil { return nil, fmt.Errorf("failed to get whoami: %w", err) } - SaveHungryURL(ctx, whoami.UserInfo.HungryURL) bridgeInfo, ok := whoami.User.Bridges[bridge] if ok && !bridgeInfo.BridgeState.IsSelfHosted && !ctx.Bool("force") { return nil, UserError{fmt.Sprintf("Your %s bridge is not self-hosted.", color.CyanString(bridge))} diff --git a/cmd/bbctl/whoami.go b/cmd/bbctl/whoami.go index 0bf84e4..f5767b9 100644 --- a/cmd/bbctl/whoami.go +++ b/cmd/bbctl/whoami.go @@ -14,6 +14,7 @@ import ( "github.com/beeper/bridge-manager/api/beeperapi" "github.com/beeper/bridge-manager/cli/hyper" + "github.com/beeper/bridge-manager/log" ) var whoamiCommand = &cli.Command{ @@ -154,10 +155,30 @@ func getCachedWhoami(ctx *cli.Context) (*beeperapi.RespWhoami, error) { if cachedWhoami != nil { return cachedWhoami, nil } - resp, err := beeperapi.Whoami(ctx.String("homeserver"), GetEnvConfig(ctx).AccessToken) + ec := GetEnvConfig(ctx) + resp, err := beeperapi.Whoami(ctx.String("homeserver"), ec.AccessToken) if err != nil { return nil, err } + changed := false + if ec.Username != resp.UserInfo.Username { + ec.Username = resp.UserInfo.Username + changed = true + } + if ec.ClusterID != resp.UserInfo.BridgeClusterID { + ec.ClusterID = resp.UserInfo.BridgeClusterID + changed = true + } + if ec.HungryAddress != resp.UserInfo.HungryURL { + ec.HungryAddress = resp.UserInfo.HungryURL + changed = true + } + if changed { + err = GetConfig(ctx).Save() + if err != nil { + log.Printf("Failed to save config after updating: %v", err) + } + } cachedWhoami = resp return resp, nil } @@ -167,7 +188,6 @@ func whoamiFunction(ctx *cli.Context) error { if err != nil { return fmt.Errorf("failed to get whoami: %w", err) } - SaveHungryURL(ctx, whoami.UserInfo.HungryURL) if ctx.Bool("raw") { data, err := json.MarshalIndent(whoami, "", " ") if err != nil {