Skip to content

Commit

Permalink
Merge pull request #5 from seatsio/steve/workspace_authentication
Browse files Browse the repository at this point in the history
Workspace authentication
  • Loading branch information
schaloner authored Jul 12, 2023
2 parents 37f0a1c + 3b3f5cf commit baaa871
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 5 deletions.
22 changes: 22 additions & 0 deletions charts_test/create_chart_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,5 +79,27 @@ func TestCreateChartWithCategories(t *testing.T) {
require.Contains(t,
getCategories(drawing),
map[string]interface{}{"key": "anotherCat", "label": "Category 2", "color": "#bbbbbb", "accessible": true})
}

func TestCreateChartInSpecificWorkspace(t *testing.T) {
t.Parallel()
company := test_util.CreateTestCompany(t)
defaultClient := seatsio.NewSeatsioClient(company.Admin.SecretKey, test_util.BaseUrl)

workspace, err := defaultClient.Workspaces.CreateTestWorkspace("anotherWorkspace")
require.NoError(t, err)

workspaceClient := seatsio.NewSeatsioClient(company.Admin.SecretKey, test_util.BaseUrl, seatsio.ClientSupport.WorkspaceKey(workspace.Key))
chart, err := workspaceClient.Charts.Create(&charts.CreateChartParams{})
require.NoError(t, err)

retrievedDefaultWorkspaceCharts, err := defaultClient.Charts.ListAll()
require.NoError(t, err)
require.Len(t, retrievedDefaultWorkspaceCharts, 0)

workspaceCharts, err := workspaceClient.Charts.ListAll()
require.NoError(t, err)
require.Len(t, workspaceCharts, 1)
require.Equal(t, chart.Key, workspaceCharts[0].Key)

}
16 changes: 13 additions & 3 deletions seatsioclient.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,14 @@ import (
"github.com/seatsio/seatsio-go/workspaces"
)

type seatsioClientNS struct{}

var ClientSupport seatsioClientNS

type SeatsioClient struct {
baseUrl string
secretKey string
workspaceKey string
Workspaces *workspaces.Workspaces
Charts *charts.Charts
Events *events.Events
Expand All @@ -23,9 +28,9 @@ type SeatsioClient struct {
Seasons *seasons.Seasons
}

func NewSeatsioClient(secretKey string, baseUrl string) *SeatsioClient {
apiClient := shared.ApiClient(secretKey, baseUrl)
return &SeatsioClient{
func NewSeatsioClient(secretKey string, baseUrl string, additionalHeaders ...shared.AdditionalHeader) *SeatsioClient {
apiClient := shared.ApiClient(secretKey, baseUrl, additionalHeaders...)
client := &SeatsioClient{
baseUrl: baseUrl,
secretKey: secretKey,
Workspaces: &workspaces.Workspaces{Client: apiClient},
Expand All @@ -40,4 +45,9 @@ func NewSeatsioClient(secretKey string, baseUrl string) *SeatsioClient {
Channels: &events.Channels{Client: apiClient},
Seasons: &seasons.Seasons{Client: apiClient},
}
return client
}

func (seatsioClientNS) WorkspaceKey(key string) shared.AdditionalHeader {
return shared.WithAdditionalHeader("X-Workspace-Key", key)
}
20 changes: 18 additions & 2 deletions shared/shared_http.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,24 @@ import (
"time"
)

func ApiClient(secretKey string, baseUrl string) *req.Client {
return req.C().SetBaseURL(baseUrl).
type AdditionalHeader func(headers *map[string]string)

func ApiClient(secretKey string, baseUrl string, additionalHeaders ...AdditionalHeader) *req.Client {
client := req.C().SetBaseURL(baseUrl).
SetCommonBasicAuth(secretKey, "").
SetCommonRetryCount(5).
SetCommonRetryBackoffInterval(400*time.Millisecond, 10*time.Second).
SetCommonRetryCondition(func(resp *req.Response, err error) bool {
return err == nil && resp.StatusCode == 429
})
headers := make(map[string]string)
for _, opt := range additionalHeaders {
opt(&headers)
}
for key, value := range headers {
client.SetCommonHeader(key, value)
}
return client
}

func AssertOk[T interface{}](result *req.Response, err error, data *T) (*T, error) {
Expand Down Expand Up @@ -60,3 +70,9 @@ func AssertOkWithoutResult(result *req.Response, err error) error {
}
return nil
}

func WithAdditionalHeader(key string, value string) AdditionalHeader {
return func(headers *map[string]string) {
(*headers)[key] = value
}
}

0 comments on commit baaa871

Please sign in to comment.