Skip to content

Commit eca21f7

Browse files
committed
Initial draft
1 parent f26e846 commit eca21f7

File tree

1 file changed

+66
-7
lines changed

1 file changed

+66
-7
lines changed

knock/providers.go

Lines changed: 66 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package knock
22

33
import (
4+
"bytes"
45
"context"
6+
"encoding/json"
57
"fmt"
68
"github.com/pkg/errors"
79
"net/http"
@@ -58,11 +60,28 @@ type ProviderAuthCheckResponse struct {
5860
type ProviderListChannelsRequest struct {
5961
ProviderContext `json:"-"`
6062
AccessTokenObject ProviderAccessTokenObject `json:"access_token_object"`
61-
// TODO: query_options
63+
SlackQueryOptions *SlackQueryOptions `json:"query_options,omitempty"`
6264
}
6365

6466
type ProviderListChannelsResponse struct {
65-
// TODO:
67+
SlackChannels []SlackChannel `json:"slack_channels"`
68+
NextCursor string `json:"next_cursor"`
69+
}
70+
71+
type SlackQueryOptions struct {
72+
Cursor string `json:"cursor,omitempty"`
73+
ExcludeArchived bool `json:"exclude_archived,omitempty"`
74+
Limit int `json:"limit,omitempty"`
75+
TeamId string `json:"team_id,omitempty"`
76+
Types string `json:"types,omitempty"`
77+
}
78+
79+
type SlackChannel struct {
80+
ID string `json:"id"`
81+
Name string `json:"name"`
82+
IsPrivate bool `json:"is_private"`
83+
IsIM bool `json:"is_im"`
84+
ContextTeamId string `json:"context_team_id"`
6685
}
6786

6887
type ProviderRevokeAccessRequest struct {
@@ -78,7 +97,12 @@ func (ps providersService) AuthCheck(ctx context.Context, request *ProviderAuthC
7897
path := providersAPIPath(request.ProviderName, request.ChannelId)
7998
path = fmt.Sprintf("%s/auth_check", path)
8099

81-
req, err := ps.client.newRequest(http.MethodGet, path, nil, nil)
100+
raw, err := json.Marshal(request)
101+
if err != nil {
102+
return nil, errors.Wrap(err, "error creating body for provider auth check")
103+
}
104+
105+
req, err := ps.client.newRequest(http.MethodGet, path, bytes.NewBuffer(raw), nil)
82106
if err != nil {
83107
return nil, errors.Wrap(err, "error creating request for provider auth check")
84108
}
@@ -96,11 +120,46 @@ func (ps providersService) ListChannels(ctx context.Context, request *ProviderLi
96120
path := providersAPIPath(request.ProviderName, request.ChannelId)
97121
path = fmt.Sprintf("%s/channels", path)
98122

99-
//TODO implement me
100-
panic("implement me")
123+
raw, err := json.Marshal(request)
124+
if err != nil {
125+
return nil, errors.Wrap(err, "error creating body for provider list channels")
126+
}
127+
128+
req, err := ps.client.newRequest(http.MethodGet, path, bytes.NewBuffer(raw), nil)
129+
if err != nil {
130+
return nil, errors.Wrap(err, "error creating request for provider list channels")
131+
}
132+
133+
listChannelsResponse := &ProviderListChannelsResponse{}
134+
_, err = ps.client.do(ctx, req, listChannelsResponse)
135+
if err != nil {
136+
return nil, errors.Wrap(err, "error making request for provider list channels")
137+
}
138+
139+
return listChannelsResponse, nil
101140
}
102141

103142
func (ps providersService) RevokeAccess(ctx context.Context, request *ProviderRevokeAccessRequest) (bool, error) {
104-
//TODO implement me
105-
panic("implement me")
143+
path := providersAPIPath(request.ProviderName, request.ChannelId)
144+
path = fmt.Sprintf("%s/revoke_access", path)
145+
146+
raw, err := json.Marshal(request)
147+
if err != nil {
148+
return false, errors.Wrap(err, "error creating body for provider revoke access")
149+
}
150+
151+
req, err := ps.client.newRequest(http.MethodGet, path, bytes.NewBuffer(raw), nil)
152+
if err != nil {
153+
return false, errors.Wrap(err, "error creating request for provider revoke access")
154+
}
155+
156+
revokeAccessResponse := struct {
157+
Ok bool `json:"ok"`
158+
}{}
159+
_, err = ps.client.do(ctx, req, revokeAccessResponse)
160+
if err != nil {
161+
return false, errors.Wrap(err, "error making request for provider revoke access")
162+
}
163+
164+
return revokeAccessResponse.Ok, nil
106165
}

0 commit comments

Comments
 (0)