Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'master' into feature/remote-file
- Loading branch information
Showing
127 changed files
with
9,402 additions
and
2,563 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,142 @@ | ||
package slack | ||
|
||
import ( | ||
"context" | ||
"net/url" | ||
"strconv" | ||
) | ||
|
||
type AuditLogResponse struct { | ||
Entries []AuditEntry `json:"entries"` | ||
SlackResponse | ||
} | ||
|
||
type AuditEntry struct { | ||
ID string `json:"id"` | ||
DateCreate int `json:"date_create"` | ||
Action string `json:"action"` | ||
Actor struct { | ||
Type string `json:"type"` | ||
User AuditUser `json:"user"` | ||
} `json:"actor"` | ||
Entity struct { | ||
Type string `json:"type"` | ||
// Only one of the below will be completed, based on the value of Type a user, a channel, a file, an app, a workspace, or an enterprise | ||
User AuditUser `json:"user"` | ||
Channel AuditChannel `json:"channel"` | ||
File AuditFile `json:"file"` | ||
App AuditApp `json:"app"` | ||
Workspace AuditWorkspace `json:"workspace"` | ||
Enterprise AuditEnterprise `json:"enterprise"` | ||
} `json:"entity"` | ||
Context struct { | ||
Location struct { | ||
Type string `json:"type"` | ||
ID string `json:"id"` | ||
Name string `json:"name"` | ||
Domain string `json:"domain"` | ||
} `json:"location"` | ||
UA string `json:"ua"` | ||
IPAddress string `json:"ip_address"` | ||
} `json:"context"` | ||
} | ||
|
||
type AuditUser struct { | ||
ID string `json:"id"` | ||
Name string `json:"name"` | ||
Email string `json:"email"` | ||
Team string `json:"team"` | ||
} | ||
|
||
type AuditChannel struct { | ||
ID string `json:"id"` | ||
Name string `json:"name"` | ||
Privacy string `json:"privacy"` | ||
IsShared bool `json:"is_shared"` | ||
IsOrgShared bool `json:"is_org_shared"` | ||
} | ||
|
||
type AuditFile struct { | ||
ID string `json:"id"` | ||
Name string `json:"name"` | ||
Filetype string `json:"filetype"` | ||
Title string `json:"title"` | ||
} | ||
|
||
type AuditApp struct { | ||
ID string `json:"id"` | ||
Name string `json:"name"` | ||
IsDistributed bool `json:"is_distributed"` | ||
IsDirectoryApproved bool `json:"is_directory_approved"` | ||
IsWorkflowApp bool `json:"is_workflow_app"` | ||
Scopes []string `json:"scopes"` | ||
} | ||
|
||
type AuditWorkspace struct { | ||
ID string `json:"id"` | ||
Name string `json:"name"` | ||
Domain string `json:"domain"` | ||
} | ||
|
||
type AuditEnterprise struct { | ||
ID string `json:"id"` | ||
Name string `json:"name"` | ||
Domain string `json:"domain"` | ||
} | ||
|
||
// AuditLogParameters contains all the parameters necessary (including the optional ones) for a GetAuditLogs() request | ||
type AuditLogParameters struct { | ||
Limit int | ||
Cursor string | ||
Latest int | ||
Oldest int | ||
Action string | ||
Actor string | ||
Entity string | ||
} | ||
|
||
func (api *Client) auditLogsRequest(ctx context.Context, path string, values url.Values) (*AuditLogResponse, error) { | ||
response := &AuditLogResponse{} | ||
err := api.getMethod(ctx, path, api.token, values, response) | ||
if err != nil { | ||
return nil, err | ||
} | ||
return response, response.Err() | ||
} | ||
|
||
// GetAuditLogs retrieves a page of audit entires according to the parameters given | ||
func (api *Client) GetAuditLogs(params AuditLogParameters) (entries []AuditEntry, nextCursor string, err error) { | ||
return api.GetAuditLogsContext(context.Background(), params) | ||
} | ||
|
||
// GetAuditLogsContext retrieves a page of audit entries according to the parameters given with a custom context | ||
func (api *Client) GetAuditLogsContext(ctx context.Context, params AuditLogParameters) (entries []AuditEntry, nextCursor string, err error) { | ||
values := url.Values{} | ||
if params.Limit != 0 { | ||
values.Add("limit", strconv.Itoa(params.Limit)) | ||
} | ||
if params.Oldest != 0 { | ||
values.Add("oldest", strconv.Itoa(params.Oldest)) | ||
} | ||
if params.Latest != 0 { | ||
values.Add("latest", strconv.Itoa(params.Latest)) | ||
} | ||
if params.Cursor != "" { | ||
values.Add("cursor", params.Cursor) | ||
} | ||
if params.Action != "" { | ||
values.Add("action", params.Action) | ||
} | ||
if params.Actor != "" { | ||
values.Add("actor", params.Actor) | ||
} | ||
if params.Entity != "" { | ||
values.Add("entity", params.Entity) | ||
} | ||
|
||
response, err := api.auditLogsRequest(ctx, "audit/v1/logs", values) | ||
if err != nil { | ||
return nil, "", err | ||
} | ||
return response.Entries, response.ResponseMetadata.Cursor, response.Err() | ||
} |
Oops, something went wrong.