github.com/jfrog/jfrog-cli-core/v2@v2.51.0/artifactory/utils/weblogin.go (about) 1 package utils 2 3 import ( 4 "errors" 5 "github.com/google/uuid" 6 "github.com/jfrog/jfrog-cli-core/v2/utils/config" 7 "github.com/jfrog/jfrog-client-go/auth" 8 clientUtils "github.com/jfrog/jfrog-client-go/utils" 9 "github.com/jfrog/jfrog-client-go/utils/errorutils" 10 "github.com/jfrog/jfrog-client-go/utils/log" 11 "github.com/pkg/browser" 12 "time" 13 ) 14 15 func DoWebLogin(serverDetails *config.ServerDetails) (token auth.CommonTokenParams, err error) { 16 if err = sendUnauthenticatedPing(serverDetails); err != nil { 17 return 18 } 19 20 uuidToken, err := uuid.NewRandom() 21 if errorutils.CheckError(err) != nil { 22 return 23 } 24 uuidStr := uuidToken.String() 25 accessManager, err := CreateAccessServiceManager(serverDetails, false) 26 if err != nil { 27 return 28 } 29 if err = accessManager.SendLoginAuthenticationRequest(uuidStr); err != nil { 30 err = errors.Join(err, 31 errorutils.CheckErrorf("The 'Web Login' functionality is only supported for Artifactory version 7.64.0 and above. "+ 32 "Make sure the details you entered are correct and that Artifactory meets the version requirement.")) 33 return 34 } 35 log.Info("After logging in via your web browser, please enter the code if prompted: " + uuidStr[len(uuidStr)-4:]) 36 if err = browser.OpenURL(clientUtils.AddTrailingSlashIfNeeded(serverDetails.Url) + "ui/login?jfClientSession=" + uuidStr + "&jfClientName=JFrog-CLI&jfClientCode=1"); err != nil { 37 return 38 } 39 time.Sleep(1 * time.Second) 40 log.Debug("Attempting to get the authentication token...") 41 token, err = accessManager.GetLoginAuthenticationToken(uuidStr) 42 if err != nil { 43 return 44 } 45 if token.AccessToken == "" { 46 return token, errorutils.CheckErrorf("failed getting authentication token after web log") 47 } 48 log.Info("You're now logged in!") 49 return 50 } 51 52 func sendUnauthenticatedPing(serverDetails *config.ServerDetails) error { 53 artifactoryManager, err := CreateServiceManager(serverDetails, 3, 0, false) 54 if err != nil { 55 return err 56 } 57 _, err = artifactoryManager.Ping() 58 return err 59 }