[cli] Add command to get-token

This commit is contained in:
Neeraj Gupta 2024-03-08 17:35:16 +05:30 committed by Neeraj Gupta
parent d7d42b6854
commit 063e980280
3 changed files with 70 additions and 6 deletions

View file

@ -62,7 +62,7 @@ var updateAccCmd = &cobra.Command{
fmt.Printf("invalid app. Accepted values are 'photos', 'locker', 'auth'") fmt.Printf("invalid app. Accepted values are 'photos', 'locker', 'auth'")
} }
err := ctrl.UpdateAccount(context.Background(), model.UpdateAccountParams{ err := ctrl.UpdateAccount(context.Background(), model.AccountCommandParams{
Email: email, Email: email,
App: api.StringToApp(app), App: api.StringToApp(app),
ExportDir: &exportDir, ExportDir: &exportDir,
@ -73,12 +73,49 @@ var updateAccCmd = &cobra.Command{
}, },
} }
// Subcommand for 'account update'
var getTokenCmd = &cobra.Command{
Use: "get-token",
Short: "Get token for an account for a specific app",
Run: func(cmd *cobra.Command, args []string) {
recoverWithLog()
app, _ := cmd.Flags().GetString("app")
email, _ := cmd.Flags().GetString("email")
if email == "" {
fmt.Println("email must be specified, use --help for more information")
// print help
return
}
validApps := map[string]bool{
"photos": true,
"locker": true,
"auth": true,
}
if !validApps[app] {
fmt.Printf("invalid app. Accepted values are 'photos', 'locker', 'auth'")
}
err := ctrl.GetToken(context.Background(), model.AccountCommandParams{
Email: email,
App: api.StringToApp(app),
})
if err != nil {
fmt.Printf("Error updating account: %v\n", err)
}
},
}
func init() { func init() {
// Add 'config' subcommands to the root command // Add 'config' subcommands to the root command
rootCmd.AddCommand(accountCmd) rootCmd.AddCommand(accountCmd)
// Add 'config' subcommands to the 'config' command // Add 'config' subcommands to the 'config' command
updateAccCmd.Flags().String("dir", "", "update export directory") updateAccCmd.Flags().String("dir", "", "update export directory")
updateAccCmd.Flags().String("email", "", "email address of the account to update") updateAccCmd.Flags().String("email", "", "email address of the account")
updateAccCmd.Flags().String("app", "photos", "Specify the app, default is 'photos'") updateAccCmd.Flags().String("app", "photos", "Specify the app, default is 'photos'")
accountCmd.AddCommand(listAccCmd, addAccCmd, updateAccCmd) getTokenCmd.Flags().String("email", "", "email address of the account")
getTokenCmd.Flags().String("app", "photos", "Specify the app, default is 'photos'")
accountCmd.AddCommand(listAccCmd, addAccCmd, updateAccCmd, getTokenCmd)
} }

View file

@ -142,7 +142,7 @@ func (c *ClICtrl) ListAccounts(cxt context.Context) error {
return nil return nil
} }
func (c *ClICtrl) UpdateAccount(ctx context.Context, params model.UpdateAccountParams) error { func (c *ClICtrl) UpdateAccount(ctx context.Context, params model.AccountCommandParams) error {
accounts, err := c.GetAccounts(ctx) accounts, err := c.GetAccounts(ctx)
if err != nil { if err != nil {
return err return err
@ -177,5 +177,27 @@ func (c *ClICtrl) UpdateAccount(ctx context.Context, params model.UpdateAccountP
return b.Put([]byte(accountKey), accInfoBytes) return b.Put([]byte(accountKey), accInfoBytes)
}) })
return err return err
}
func (c *ClICtrl) GetToken(ctx context.Context, params model.AccountCommandParams) error {
accounts, err := c.GetAccounts(ctx)
if err != nil {
return err
}
var acc *model.Account
for _, a := range accounts {
if a.Email == params.Email && a.App == params.App {
acc = &a
break
}
}
if acc == nil {
return fmt.Errorf("account not found, use `account list` to list accounts")
}
secretInfo, err := c.KeyHolder.LoadSecrets(*acc)
if err != nil {
return err
}
fmt.Println(secretInfo.TokenStr())
return nil
} }

View file

@ -1,6 +1,7 @@
package model package model
import ( import (
"encoding/base64"
"fmt" "fmt"
"github.com/ente-io/cli/internal/api" "github.com/ente-io/cli/internal/api"
) )
@ -17,7 +18,7 @@ type Account struct {
ExportDir string `json:"exportDir"` ExportDir string `json:"exportDir"`
} }
type UpdateAccountParams struct { type AccountCommandParams struct {
Email string Email string
App api.App App api.App
ExportDir *string ExportDir *string
@ -37,3 +38,7 @@ type AccSecretInfo struct {
Token []byte Token []byte
PublicKey []byte PublicKey []byte
} }
func (a *AccSecretInfo) TokenStr() string {
return base64.URLEncoding.EncodeToString(a.Token)
}