@@ -3,15 +3,13 @@ package bayeux
33import (
44 "bytes"
55 "encoding/json"
6- "errors"
76 "fmt"
87 "io"
98 "io/ioutil"
109 "log"
1110 "net/http"
1211 "net/url"
1312 "os"
14- "strings"
1513 "sync"
1614 "time"
1715)
@@ -32,11 +30,6 @@ type TriggerEvent struct {
3230 Successful bool `json:"successful,omitempty"`
3331}
3432
35- func (t TriggerEvent ) channel () string {
36- s := strings .Replace (t .Channel , "/topic/" , "" , 1 )
37- return s
38- }
39-
4033// Status is the state of success and subscribed channels
4134type Status struct {
4235 connected bool
@@ -81,6 +74,14 @@ type clientIDAndCookies struct {
8174 cookies []* http.Cookie
8275}
8376
77+ type AuthenticationParameters struct {
78+ ClientID string // consumer key from Salesforce (e.g. 3MVG9pRsdbjsbdjfm1I.fz3f7zBuH4xdKCJcM9B5XLgxXh2AFTmQmr8JMn1vsadjsadjjsadakd_C)
79+ ClientSecret string // consumer secret from Salesforce (e.g. E9FE118633BC7SGDADUHUE81F19C1D4529D09CB7231754AD2F2CA668400619)
80+ Username string // Salesforce user email (e.g. [email protected] ) 81+ Password string // Salesforce password
82+ TokenURL string // Salesforce token endpoint (e.g. https://login.salesforce.com/services/oauth2/token)
83+ }
84+
8485// Bayeux struct allow for centralized storage of creds, ids, and cookies
8586type Bayeux struct {
8687 creds Credentials
@@ -115,7 +116,7 @@ func (b *Bayeux) call(body string, route string) (resp *http.Response, e error)
115116 logger .Printf ("Bad bayeuxCall io.EOF: %s\n " , err )
116117 logger .Printf ("Bad bayeuxCall Response: %+v\n " , resp )
117118 } else if err != nil {
118- e = errors . New ( fmt .Sprintf ( "Unknown error: %s " , err ) )
119+ e = fmt .Errorf ( "unknown error: %w " , err )
119120 logger .Printf ("Bad unrecoverable Call: %s" , err )
120121 }
121122 return resp , e
@@ -238,39 +239,25 @@ func (b *Bayeux) connect(out chan TriggerEvent) chan TriggerEvent {
238239 return out
239240}
240241
241- func GetSalesforceCredentials () Credentials {
242- clientID := mustGetEnv ("SALESFORCE_CONSUMER_KEY" )
243- clientSecret := mustGetEnv ("SALESFORCE_CONSUMER_SECRET" )
244- username := mustGetEnv ("SALESFORCE_USER" )
245- password := mustGetEnv ("SALESFORCE_PASSWORD" )
246- tokenURL := mustGetEnv ("SALESFORCE_TOKEN_URL" )
242+ func GetSalesforceCredentials (ap AuthenticationParameters ) (creds * Credentials , err error ) {
247243 params := url.Values {"grant_type" : {"password" },
248- "client_id" : {clientID },
249- "client_secret" : {clientSecret },
250- "username" : {username },
251- "password" : {password }}
252- res , err := http .PostForm (tokenURL , params )
244+ "client_id" : {ap . ClientID },
245+ "client_secret" : {ap . ClientSecret },
246+ "username" : {ap . Username },
247+ "password" : {ap . Password }}
248+ res , err := http .PostForm (ap . TokenURL , params )
253249 if err != nil {
254250 logger .Fatal (err )
255251 }
256252 decoder := json .NewDecoder (res .Body )
257- var creds Credentials
258253 if err := decoder .Decode (& creds ); err == io .EOF {
259- logger . Fatal ( err )
254+ return nil , err
260255 } else if err != nil {
261- logger . Fatal ( err )
256+ return nil , err
262257 } else if creds .AccessToken == "" {
263- logger .Fatalf ("Unable to fetch access token. Check credentials in environmental variables" )
264- }
265- return creds
266- }
267-
268- func mustGetEnv (s string ) string {
269- r := os .Getenv (s )
270- if r == "" {
271- panic (fmt .Sprintf ("Could not fetch key %s" , s ))
258+ return nil , fmt .Errorf ("unable to fetch access token: %w" , err )
272259 }
273- return r
260+ return creds , nil
274261}
275262
276263func (b * Bayeux ) Channel (out chan TriggerEvent , r string , creds Credentials , channel string ) chan TriggerEvent {
0 commit comments