github.com/mhlo/force@v0.22.28-0.20150915022417-6d05ecfb0b47/login.go (about) 1 package main 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "github.com/bgentry/speakeasy" 7 "net/url" 8 ) 9 10 var cmdLogin = &Command{ 11 Usage: "login", 12 Short: "force login [-i=<instance>] [<-u=username> <-p=password>]", 13 Long: ` 14 force login [-i=<instance>] [<-u=username> <-p=password>] 15 16 Examples: 17 force login 18 force login -i=test 19 force login -u=un -p=pw 20 force login -i=test -u=un -p=pw 21 force login -i=na1-blitz01.soma.salesforce.com -u=un -p=pw 22 `, 23 } 24 25 func init() { 26 cmdLogin.Run = runLogin 27 } 28 29 var ( 30 instance = cmdLogin.Flag.String("i", "login", "non-production server to login to (values are 'pre', 'test', or full instance url") 31 userName = cmdLogin.Flag.String("u", "", "Username for Soap Login") 32 password = cmdLogin.Flag.String("p", "", "Password for Soap Login") 33 ) 34 35 func runLogin(cmd *Command, args []string) { 36 var endpoint ForceEndpoint = EndpointProduction 37 38 /*currentEndpoint, customUrl, err := CurrentEndpoint() 39 if err == nil && ¤tEndpoint != nil { 40 endpoint = currentEndpoint 41 if currentEndpoint == EndpointCustom && customUrl != "" { 42 *instance = customUrl 43 } 44 }*/ 45 46 switch *instance { 47 case "login": 48 endpoint = EndpointProduction 49 case "test": 50 endpoint = EndpointTest 51 case "pre": 52 endpoint = EndpointPrerelease 53 default: 54 if *instance != "" { 55 //need to determine the form of the endpoint 56 uri, err := url.Parse(*instance) 57 if err != nil { 58 ErrorAndExit("no such endpoint: %s", *instance) 59 } 60 // Could be short hand? 61 if uri.Host == "" { 62 uri, err = url.Parse(fmt.Sprintf("https://%s", *instance)) 63 //fmt.Println(uri) 64 if err != nil { 65 ErrorAndExit("no such endpoint: %s", *instance) 66 } 67 } 68 CustomEndpoint = uri.Scheme + "://" + uri.Host 69 endpoint = EndpointCustom 70 71 fmt.Println("Loaded Endpoint: (" + CustomEndpoint + ")") 72 } 73 } 74 75 if len(*userName) != 0 { // Do SOAP login 76 if len(*password) == 0 { 77 var err error 78 *password, err = speakeasy.Ask("Password: ") 79 if err != nil { 80 ErrorAndExit(err.Error()) 81 } 82 } 83 _, err := ForceLoginAndSaveSoap(endpoint, *userName, *password) 84 if err != nil { 85 ErrorAndExit(err.Error()) 86 } 87 } else { // Do OAuth login 88 _, err := ForceLoginAndSave(endpoint) 89 if err != nil { 90 ErrorAndExit(err.Error()) 91 } 92 } 93 } 94 95 func CurrentEndpoint() (endpoint ForceEndpoint, customUrl string, err error) { 96 creds, err := ActiveCredentials() 97 if err != nil { 98 return 99 } 100 endpoint = creds.ForceEndpoint 101 customUrl = creds.InstanceUrl 102 return 103 } 104 105 func ForceSaveLogin(creds ForceCredentials) (username string, err error) { 106 force := NewForce(creds) 107 login, err := force.Get(creds.Id) 108 if err != nil { 109 return 110 } 111 body, err := json.Marshal(creds) 112 if err != nil { 113 return 114 } 115 username = login["username"].(string) 116 117 me, err := force.Whoami() 118 if err != nil { 119 return 120 } 121 fmt.Printf("Logged in as '%s'\n", me["Username"]) 122 title := fmt.Sprintf("\033];%s\007", me["Username"]) 123 fmt.Printf(title) 124 125 describe, err := force.Metadata.DescribeMetadata() 126 127 if err == nil { 128 creds.Namespace = describe.NamespacePrefix 129 } else { 130 fmt.Printf("Your profile does not have Modify All Data enabled. Functionallity will be limited.\n") 131 err = nil 132 } 133 134 body, err = json.Marshal(creds) 135 if err != nil { 136 return 137 } 138 Config.Save("accounts", username, string(body)) 139 Config.Save("current", "account", username) 140 return 141 } 142 143 func ForceLoginAndSaveSoap(endpoint ForceEndpoint, user_name string, password string) (username string, err error) { 144 creds, err := ForceSoapLogin(endpoint, user_name, password) 145 if err != nil { 146 return 147 } 148 149 username, err = ForceSaveLogin(creds) 150 //fmt.Printf("Creds %+v", creds) 151 return 152 } 153 154 func ForceLoginAndSave(endpoint ForceEndpoint) (username string, err error) { 155 creds, err := ForceLogin(endpoint) 156 if err != nil { 157 return 158 } 159 username, err = ForceSaveLogin(creds) 160 return 161 }