79 lines
1.8 KiB
Go
79 lines
1.8 KiB
Go
package main
|
|
|
|
import (
|
|
"github.com/pkg/browser"
|
|
log "github.com/sirupsen/logrus"
|
|
"github.com/urfave/cli/v2"
|
|
)
|
|
|
|
func setDebugLogging(cCtx *cli.Context) {
|
|
if cCtx.Bool("debug") {
|
|
log.SetLevel(log.DebugLevel)
|
|
log.Debug("Debug logging enabled")
|
|
} else {
|
|
log.SetLevel(log.InfoLevel)
|
|
}
|
|
}
|
|
|
|
func Configure(cCtx *cli.Context) error {
|
|
setDebugLogging(cCtx)
|
|
instanceUrl := ReadLine("Instance URL:")
|
|
config := Config{InstanceUrl: instanceUrl}
|
|
return SaveConfigFromContext(cCtx, config)
|
|
}
|
|
|
|
func Login(cCtx *cli.Context) error {
|
|
setDebugLogging(cCtx)
|
|
config, err := LoadConfigFromContext(cCtx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
scopes := cCtx.String("scopes")
|
|
clientApp := cCtx.Bool("client-app")
|
|
clientName := cCtx.String("client-name")
|
|
|
|
log.Info("Creating OAuth app")
|
|
oauthApp, err := CreateOAuthApp(config.InstanceUrl, clientName, scopes)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
config.OAuthApp = oauthApp
|
|
if !clientApp {
|
|
err = SaveConfigFromContext(cCtx, config)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
log.Info("OAuth app created")
|
|
|
|
log.Info("Opening browser")
|
|
authUrl, err := AuthorizeUrl(config.InstanceUrl, config.OAuthApp, cCtx.String("scopes"))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
log.Info("Auth URL: ", authUrl)
|
|
err = browser.OpenURL(authUrl)
|
|
if err != nil {
|
|
log.Infof("Could not open browser, please open the following URL in your browser: %s", authUrl)
|
|
}
|
|
authCode := ReadLine("Auth code:")
|
|
oauthToken, err := RequestToken(config.InstanceUrl, config.OAuthApp, scopes, authCode)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
config.OAuthToken = oauthToken
|
|
if !clientApp {
|
|
err = SaveConfigFromContext(cCtx, config)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
if clientApp {
|
|
log.Info("Client app token:")
|
|
log.Infof("%s %s", oauthToken.TokenType, oauthToken.AccessToken)
|
|
}
|
|
return nil
|
|
}
|