Skip to content

Commit

Permalink
feat: Adding Missing Workflow Trigger WebAPI Methods
Browse files Browse the repository at this point in the history
  • Loading branch information
lorenzoaiello committed Nov 14, 2024
1 parent 00d0e9a commit c6e9139
Show file tree
Hide file tree
Showing 4 changed files with 445 additions and 0 deletions.
6 changes: 6 additions & 0 deletions misc.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,12 @@ type SlackResponse struct {
ResponseMetadata ResponseMetadata `json:"response_metadata"`
}

type ResponsePointer struct {
Ok *bool `json:"ok,omitempty"`
Error *string `json:"error,omitempty"`
ResponseMetadata ResponseMetadata `json:"response_metadata,omitempty"`
}

func (t SlackResponse) Err() error {
if t.Ok {
return nil
Expand Down
11 changes: 11 additions & 0 deletions slack.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package slack

import (
"context"
"encoding/json"
"fmt"
"log"
"net/http"
Expand Down Expand Up @@ -168,6 +169,16 @@ func (api *Client) postMethod(ctx context.Context, path string, values url.Value
return postForm(ctx, api.httpclient, api.endpoint+path, values, intf, api)
}

// post to a slack web method with json.
func (api *Client) postJSON(ctx context.Context, path string, request interface{}, response interface{}) error {
jsonPayload, err := json.Marshal(request)
if err != nil {
return err
}

return postJSON(ctx, api.httpclient, api.endpoint+path, api.token, jsonPayload, response, api)
}

// get a slack web method.
func (api *Client) getMethod(ctx context.Context, path string, token string, values url.Values, intf interface{}) error {
return getResource(ctx, api.httpclient, api.endpoint+path, token, values, intf, api)
Expand Down
154 changes: 154 additions & 0 deletions workflows_triggers.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
package slack

import (
"context"
"errors"
"fmt"
)

type (
WorkflowsTriggersPermissionsAddInput struct {
TriggerId string `json:"trigger_id"`
ChannelIds []string `json:"channel_ids,omitempty"`
OrgIds []string `json:"org_ids,omitempty"`
TeamIds []string `json:"team_ids,omitempty"`
UserIds []string `json:"user_ids,omitempty"`
}

WorkflowsTriggersPermissionsAddOutput struct {
PermissionType string `json:"permission_type"`
ChannelIds []string `json:"channel_ids,omitempty"`
OrgIds []string `json:"org_ids,omitempty"`
TeamIds []string `json:"team_ids,omitempty"`
UserIds []string `json:"user_ids,omitempty"`
}

WorkflowsTriggersPermissionsListInput struct {
TriggerId string `json:"trigger_id"`
}

WorkflowsTriggersPermissionsListOutput struct {
PermissionType string `json:"permission_type"`
ChannelIds []string `json:"channel_ids,omitempty"`
OrgIds []string `json:"org_ids,omitempty"`
TeamIds []string `json:"team_ids,omitempty"`
UserIds []string `json:"user_ids,omitempty"`
}

WorkflowsTriggersPermissionsRemoveInput struct {
TriggerId string `json:"trigger_id"`
ChannelIds []string `json:"channel_ids,omitempty"`
OrgIds []string `json:"org_ids,omitempty"`
TeamIds []string `json:"team_ids,omitempty"`
UserIds []string `json:"user_ids,omitempty"`
}

WorkflowsTriggersPermissionsRemoveOutput struct {
PermissionType string `json:"permission_type"`
ChannelIds []string `json:"channel_ids,omitempty"`
OrgIds []string `json:"org_ids,omitempty"`
TeamIds []string `json:"team_ids,omitempty"`
UserIds []string `json:"user_ids,omitempty"`
}

WorkflowsTriggersPermissionsSetInput struct {
PermissionType string `json:"permission_type"`
TriggerId string `json:"trigger_id"`
ChannelIds []string `json:"channel_ids,omitempty"`
OrgIds []string `json:"org_ids,omitempty"`
TeamIds []string `json:"team_ids,omitempty"`
UserIds []string `json:"user_ids,omitempty"`
}

WorkflowsTriggersPermissionsSetOutput struct {
PermissionType string `json:"permission_type"`
ChannelIds []string `json:"channel_ids,omitempty"`
OrgIds []string `json:"org_ids,omitempty"`
TeamIds []string `json:"team_ids,omitempty"`
UserIds []string `json:"user_ids,omitempty"`
}
)

// WorkflowsTriggersPermissionsAdd allows users to run a trigger that has its permission type set to named_entities.
//
// Slack API Docs:https://api.dev.slack.com/methods/workflows.triggers.permissions.add
func (api *Client) WorkflowsTriggersPermissionsAdd(ctx context.Context, input *WorkflowsTriggersPermissionsAddInput) (*WorkflowsTriggersPermissionsAddOutput, error) {
response := struct {
*ResponsePointer
*WorkflowsTriggersPermissionsAddOutput
}{}

err := api.postJSON(ctx, "workflows.triggers.permissions.add", input, &response)
if err != nil {
return nil, err
}

if response.Error != nil {
return nil, errors.New(fmt.Sprintf("error: %s", *response.Error))
}

return response.WorkflowsTriggersPermissionsAddOutput, nil
}

// WorkflowsTriggersPermissionsList returns the permission type of a trigger and if applicable, includes the entities that have been granted access.
//
// Slack API Docs:https://api.dev.slack.com/methods/workflows.triggers.permissions.list
func (api *Client) WorkflowsTriggersPermissionsList(ctx context.Context, input *WorkflowsTriggersPermissionsListInput) (*WorkflowsTriggersPermissionsListOutput, error) {
response := struct {
*ResponsePointer
*WorkflowsTriggersPermissionsListOutput
}{}

err := api.postJSON(ctx, "workflows.triggers.permissions.list", input, &response)
if err != nil {
return nil, err
}

if response.Error != nil {
return nil, errors.New(fmt.Sprintf("error: %s", *response.Error))
}

return response.WorkflowsTriggersPermissionsListOutput, nil
}

// WorkflowsTriggersPermissionsRemove revoke an entity's access to a trigger that has its permission type set to named_entities.
//
// Slack API Docs:https://api.dev.slack.com/methods/workflows.triggers.permissions.remove
func (api *Client) WorkflowsTriggersPermissionsRemove(ctx context.Context, input *WorkflowsTriggersPermissionsRemoveInput) (*WorkflowsTriggersPermissionsRemoveOutput, error) {
response := struct {
*ResponsePointer
*WorkflowsTriggersPermissionsRemoveOutput
}{}

err := api.postJSON(ctx, "workflows.triggers.permissions.remove", input, &response)
if err != nil {
return nil, err
}

if response.Error != nil {
return nil, errors.New(fmt.Sprintf("error: %s", *response.Error))
}

return response.WorkflowsTriggersPermissionsRemoveOutput, nil
}

// WorkflowsTriggersPermissionsSet sets the permission type for who can run a trigger.
//
// Slack API Docs:https://api.dev.slack.com/methods/workflows.triggers.permissions.set
func (api *Client) WorkflowsTriggersPermissionsSet(ctx context.Context, input *WorkflowsTriggersPermissionsSetInput) (*WorkflowsTriggersPermissionsSetOutput, error) {
response := struct {
*ResponsePointer
*WorkflowsTriggersPermissionsSetOutput
}{}

err := api.postJSON(ctx, "workflows.triggers.permissions.set", input, &response)
if err != nil {
return nil, err
}

if response.Error != nil {
return nil, errors.New(fmt.Sprintf("error: %s", *response.Error))
}

return response.WorkflowsTriggersPermissionsSetOutput, nil
}
Loading

0 comments on commit c6e9139

Please sign in to comment.