Skip to content

Commit 8e1c24b

Browse files
feat: set specific error from default project config manager when CDN returns 403 response (#232)
* feat: set specific error from default project config manager when CDN returns 403 response
1 parent 54155b5 commit 8e1c24b

File tree

3 files changed

+27
-4
lines changed

3 files changed

+27
-4
lines changed

examples/main.go

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99

1010
"github.com/optimizely/go-sdk"
1111
"github.com/optimizely/go-sdk/pkg/client"
12+
"github.com/optimizely/go-sdk/pkg/config"
1213
"github.com/optimizely/go-sdk/pkg/event"
1314
"github.com/optimizely/go-sdk/pkg/logging"
1415
)
@@ -17,17 +18,27 @@ func main() {
1718
sdkKey := "4SLpaJA1r1pgE6T2CoMs9q"
1819
logging.SetLogLevel(logging.LogLevelDebug)
1920

20-
/************* Simple usage ********************/
21-
2221
user := optimizely.UserContext(
2322
"mike ng",
2423
map[string]interface{}{
2524
"country": "Unknown",
2625
"likes_donuts": true,
2726
},
2827
)
29-
optimizelyClient, err := optimizely.Client(sdkKey)
30-
enabled, _ := optimizelyClient.IsFeatureEnabled("mutext_feat", user)
28+
29+
/************* Bad SDK Key ********************/
30+
31+
optimizelyClient, err := optimizely.Client("some_key")
32+
enabled, err := optimizelyClient.IsFeatureEnabled("mutext_feat", user)
33+
if err == config.Err403Forbidden {
34+
fmt.Println("A Valid 403 error received:", config.Err403Forbidden)
35+
}
36+
37+
/************* Simple usage ********************/
38+
39+
optimizelyClient, err = optimizely.Client(sdkKey)
40+
enabled, _ = optimizelyClient.IsFeatureEnabled("mutext_feat", user)
41+
3142
fmt.Printf("Is feature enabled? %v\n", enabled)
3243

3344
/************* StaticClient ********************/

pkg/config/polling_manager.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ const LastModified = "Last-Modified"
4545
// DatafileURLTemplate is used to construct the endpoint for retrieving the datafile from the CDN
4646
const DatafileURLTemplate = "https://cdn.optimizely.com/datafiles/%s.json"
4747

48+
// Err403Forbidden is 403Forbidden specific error
49+
var Err403Forbidden = errors.New("unable to fetch fresh datafile (consider rechecking SDK key), status code: 403 Forbidden")
50+
4851
var cmLogger = logging.GetLogger("PollingConfigManager")
4952

5053
// PollingProjectConfigManager maintains a dynamic copy of the project config by continuously polling for the datafile
@@ -119,6 +122,12 @@ func (cm *PollingProjectConfigManager) SyncConfig() {
119122
msg := "unable to fetch fresh datafile"
120123
cmLogger.Warning(msg)
121124
cm.configLock.Lock()
125+
126+
if code == http.StatusForbidden {
127+
closeMutex(Err403Forbidden)
128+
return
129+
}
130+
122131
closeMutex(errors.New(fmt.Sprintf("%s, reason (http status code): %s", msg, e.Error())))
123132
return
124133
}

pkg/config/polling_manager_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -585,6 +585,9 @@ func TestPollingInterval(t *testing.T) {
585585

586586
assert.Equal(t, configManager.pollingInterval, 5*time.Second)
587587
assert.Equal(t, asyncConfigManager.pollingInterval, 5*time.Second)
588+
589+
assert.Equal(t, configManager.err, Err403Forbidden)
590+
assert.Nil(t, asyncConfigManager.err)
588591
}
589592

590593
func TestInitialDatafile(t *testing.T) {

0 commit comments

Comments
 (0)