Skip to content

Commit

Permalink
Improve audit trail interface by using client token
Browse files Browse the repository at this point in the history
  • Loading branch information
sebasslash committed Jun 6, 2022
1 parent 5b904cc commit 1e52b52
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 15 deletions.
11 changes: 6 additions & 5 deletions audit_trail.go
Expand Up @@ -15,13 +15,14 @@ import (
var _ AuditTrails = (*auditTrails)(nil)

// AuditTrails describes all the audit event related methods that the Terraform
// Cloud API supports. **Note:** These methods require an organization token for
// an organization in the Business tier and are only available in Terraform Cloud.
// Cloud API supports.
// **Note:** These methods require the client to be configured with an organization token for
// an organization in the Business tier. Furthermore, these methods are only available in Terraform Cloud.
//
// TFC API Docs: https://www.terraform.io/cloud-docs/api-docs/audit-trails
type AuditTrails interface {
// Read all the audit events in an organization.
List(ctx context.Context, orgToken string, options *AuditTrailListOptions) (*AuditTrailList, error)
List(ctx context.Context, options *AuditTrailListOptions) (*AuditTrailList, error)
}

// auditTrails implements AuditTrails
Expand Down Expand Up @@ -78,14 +79,14 @@ type AuditTrailListOptions struct {
}

// List all the audit events in an organization.
func (s *auditTrails) List(ctx context.Context, orgToken string, options *AuditTrailListOptions) (*AuditTrailList, error) {
func (s *auditTrails) List(ctx context.Context, options *AuditTrailListOptions) (*AuditTrailList, error) {
u, err := s.client.baseURL.Parse("/api/v2/organization/audit-trail")
if err != nil {
return nil, err
}

headers := make(http.Header)
headers.Set("Authorization", "Bearer "+orgToken)
headers.Set("Authorization", "Bearer "+s.client.token)
headers.Set("Content-Type", "application/json")

if options != nil {
Expand Down
18 changes: 8 additions & 10 deletions audit_trail_integration_test.go
Expand Up @@ -15,25 +15,23 @@ import (
func TestAuditTrailsList(t *testing.T) {
skipIfEnterprise(t)

client := testClient(t)
userClient := testClient(t)
ctx := context.Background()

org, orgCleanup := createOrganization(t, client)
org, orgCleanup := createOrganization(t, userClient)
t.Cleanup(orgCleanup)

upgradeOrganizationSubscription(t, client, org)
auditTrailClient := testAuditTrailClient(t, userClient, org)

orgToken, orgTokenCleanup := createOrganizationToken(t, client, org)
t.Cleanup(orgTokenCleanup)
// First let's generate some audit events in this test organization
_, wkspace1Cleanup := createWorkspace(t, client, org)
_, wkspace1Cleanup := createWorkspace(t, userClient, org)
t.Cleanup(wkspace1Cleanup)

_, wkspace2Cleanup := createWorkspace(t, client, org)
_, wkspace2Cleanup := createWorkspace(t, userClient, org)
t.Cleanup(wkspace2Cleanup)

t.Run("with no specified timeframe", func(t *testing.T) {
atl, err := client.AuditTrails.List(ctx, orgToken.Token, nil)
atl, err := auditTrailClient.AuditTrails.List(ctx, nil)
require.NoError(t, err)
require.Greater(t, len(atl.Items), 0)

Expand Down Expand Up @@ -75,10 +73,10 @@ func TestAuditTrailsList(t *testing.T) {
time.Sleep(1 * time.Second)

// Let's create an event that is sent to the audit log
_, wsCleanup := createWorkspace(t, client, org)
_, wsCleanup := createWorkspace(t, userClient, org)
t.Cleanup(wsCleanup)

atl, err := client.AuditTrails.List(ctx, orgToken.Token, &AuditTrailListOptions{
atl, err := auditTrailClient.AuditTrails.List(ctx, &AuditTrailListOptions{
Since: since,
ListOptions: &ListOptions{
PageNumber: 1,
Expand Down
16 changes: 16 additions & 0 deletions helper_test.go
Expand Up @@ -60,6 +60,22 @@ func testClient(t *testing.T) *Client {
return client
}

func testAuditTrailClient(t *testing.T, userClient *Client, org *Organization) *Client {
upgradeOrganizationSubscription(t, userClient, org)

orgToken, orgTokenCleanup := createOrganizationToken(t, userClient, org)
t.Cleanup(orgTokenCleanup)

client, err := NewClient(&Config{
Token: orgToken.Token,
})
if err != nil {
t.Fatal(err)
}

return client
}

func fetchTestAccountDetails(t *testing.T, client *Client) *TestAccountDetails {
if _testAccountDetails == nil {
_testAccountDetails = FetchTestAccountDetails(t, client)
Expand Down

0 comments on commit 1e52b52

Please sign in to comment.