Updating API to re-use client for multiple users
This commit is contained in:
parent
c0f3da8060
commit
08bfe83ba4
@ -23,7 +23,7 @@ const (
|
||||
/*//////// API Requests ////////*/
|
||||
|
||||
// IndexBlock - A list of contacts you have blocked. These people cannot DM you
|
||||
func (c *Client) IndexBlock(ctx context.Context, userID string) ([]*Block, error) {
|
||||
func (c *Client) IndexBlock(ctx context.Context, userID string, authToken string) ([]*Block, error) {
|
||||
httpReq, err := http.NewRequest("GET", c.endpointBase+indexBlocksEndpoint, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@ -37,7 +37,7 @@ func (c *Client) IndexBlock(ctx context.Context, userID string) ([]*Block, error
|
||||
var resp struct {
|
||||
Blocks []*Block `json:"blocks"`
|
||||
}
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp)
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp, authToken)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -46,7 +46,7 @@ func (c *Client) IndexBlock(ctx context.Context, userID string) ([]*Block, error
|
||||
}
|
||||
|
||||
// BlockBetween - Asks if a block exists between you and another user id
|
||||
func (c *Client) BlockBetween(ctx context.Context, userID, otherUserID string) (bool, error) {
|
||||
func (c *Client) BlockBetween(ctx context.Context, userID, otherUserID string, authToken string) (bool, error) {
|
||||
httpReq, err := http.NewRequest("GET", c.endpointBase+blockBetweenEndpoint, nil)
|
||||
if err != nil {
|
||||
return false, err
|
||||
@ -61,7 +61,7 @@ func (c *Client) BlockBetween(ctx context.Context, userID, otherUserID string) (
|
||||
var resp struct {
|
||||
Between bool `json:"between"`
|
||||
}
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp)
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp, authToken)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
@ -70,7 +70,7 @@ func (c *Client) BlockBetween(ctx context.Context, userID, otherUserID string) (
|
||||
}
|
||||
|
||||
// CreateBlock - Creates a block between you and the contact
|
||||
func (c *Client) CreateBlock(ctx context.Context, userID, otherUserID string) (*Block, error) {
|
||||
func (c *Client) CreateBlock(ctx context.Context, userID, otherUserID string, authToken string) (*Block, error) {
|
||||
httpReq, err := http.NewRequest("POST", c.endpointBase+createBlockEndpoint, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@ -85,7 +85,7 @@ func (c *Client) CreateBlock(ctx context.Context, userID, otherUserID string) (*
|
||||
var resp struct {
|
||||
Block *Block `json:"block"`
|
||||
}
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp)
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp, authToken)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -94,7 +94,7 @@ func (c *Client) CreateBlock(ctx context.Context, userID, otherUserID string) (*
|
||||
}
|
||||
|
||||
// Unblock - Removes block between you and other user
|
||||
func (c *Client) Unblock(ctx context.Context, userID, otherUserID string) error {
|
||||
func (c *Client) Unblock(ctx context.Context, userID, otherUserID string, authToken string) error {
|
||||
httpReq, err := http.NewRequest("DELETE", c.endpointBase+unblockEndpoint, nil)
|
||||
if err != nil {
|
||||
return err
|
||||
@ -106,7 +106,7 @@ func (c *Client) Unblock(ctx context.Context, userID, otherUserID string) error
|
||||
query.Set("otherUser", otherUserID)
|
||||
URL.RawQuery = query.Encode()
|
||||
|
||||
err = c.doWithAuthToken(ctx, httpReq, nil)
|
||||
err = c.doWithAuthToken(ctx, httpReq, nil, authToken)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
12
bots_api.go
12
bots_api.go
@ -27,7 +27,7 @@ const (
|
||||
|
||||
// CreateBot - Create a bot. See the Bots Tutorial (https://dev.groupme.com/tutorials/bots)
|
||||
// for a full walkthrough.
|
||||
func (c *Client) CreateBot(ctx context.Context, bot *Bot) (*Bot, error) {
|
||||
func (c *Client) CreateBot(ctx context.Context, bot *Bot, authToken string) (*Bot, error) {
|
||||
URL := c.endpointBase + createBotEndpoint
|
||||
|
||||
var data = struct {
|
||||
@ -47,7 +47,7 @@ func (c *Client) CreateBot(ctx context.Context, bot *Bot) (*Bot, error) {
|
||||
}
|
||||
|
||||
var resp Bot
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp)
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp, authToken)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -84,14 +84,14 @@ func (c *Client) PostBotMessage(ctx context.Context, botID ID, text string, pict
|
||||
}
|
||||
|
||||
// IndexBots - list bots that you have created
|
||||
func (c *Client) IndexBots(ctx context.Context) ([]*Bot, error) {
|
||||
func (c *Client) IndexBots(ctx context.Context, authToken string) ([]*Bot, error) {
|
||||
httpReq, err := http.NewRequest("GET", c.endpointBase+indexBotsEndpoint, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var resp []*Bot
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp)
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp, authToken)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -100,7 +100,7 @@ func (c *Client) IndexBots(ctx context.Context) ([]*Bot, error) {
|
||||
}
|
||||
|
||||
// DestroyBot - Remove a bot that you have created
|
||||
func (c *Client) DestroyBot(ctx context.Context, botID ID) error {
|
||||
func (c *Client) DestroyBot(ctx context.Context, botID ID, authToken string) error {
|
||||
URL := fmt.Sprintf(c.endpointBase + destroyBotEndpoint)
|
||||
|
||||
var data = struct {
|
||||
@ -119,5 +119,5 @@ func (c *Client) DestroyBot(ctx context.Context, botID ID) error {
|
||||
return err
|
||||
}
|
||||
|
||||
return c.doWithAuthToken(ctx, httpReq, nil)
|
||||
return c.doWithAuthToken(ctx, httpReq, nil, authToken)
|
||||
}
|
||||
|
@ -27,7 +27,7 @@ type IndexChatsQuery struct {
|
||||
|
||||
// IndexChats - Returns a paginated list of direct message chats, or
|
||||
// conversations, sorted by updated_at descending.
|
||||
func (c *Client) IndexChats(ctx context.Context, req *IndexChatsQuery) ([]*Chat, error) {
|
||||
func (c *Client) IndexChats(ctx context.Context, req *IndexChatsQuery, authToken string) ([]*Chat, error) {
|
||||
httpReq, err := http.NewRequest("GET", c.endpointBase+indexChatsEndpoint, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@ -46,14 +46,14 @@ func (c *Client) IndexChats(ctx context.Context, req *IndexChatsQuery) ([]*Chat,
|
||||
URL.RawQuery = query.Encode()
|
||||
|
||||
var resp []*Chat
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp)
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp, authToken)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return resp, nil
|
||||
}
|
||||
func (c *Client) IndexRelations(ctx context.Context) ([]*User, error) {
|
||||
func (c *Client) IndexRelations(ctx context.Context, authToken string) ([]*User, error) {
|
||||
httpReq, err := http.NewRequest("GET", "https://api.groupme.com/v4"+"/relationships", nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@ -66,7 +66,7 @@ func (c *Client) IndexRelations(ctx context.Context) ([]*User, error) {
|
||||
URL.RawQuery = query.Encode()
|
||||
|
||||
var resp []*User
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp)
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp, authToken)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -18,16 +18,14 @@ const GroupMeAPIBase = "https://api.groupme.com/v3"
|
||||
type Client struct {
|
||||
httpClient *http.Client
|
||||
endpointBase string
|
||||
authorizationToken string
|
||||
}
|
||||
|
||||
// NewClient creates a new GroupMe API Client
|
||||
func NewClient(authToken string) *Client {
|
||||
func NewClient() *Client {
|
||||
return &Client{
|
||||
// TODO: enable transport information passing in
|
||||
httpClient: &http.Client{},
|
||||
endpointBase: GroupMeAPIBase,
|
||||
authorizationToken: authToken,
|
||||
}
|
||||
}
|
||||
|
||||
@ -112,10 +110,10 @@ func (c Client) do(ctx context.Context, req *http.Request, i interface{}) error
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c Client) doWithAuthToken(ctx context.Context, req *http.Request, i interface{}) error {
|
||||
func (c Client) doWithAuthToken(ctx context.Context, req *http.Request, i interface{}, authToken string) error {
|
||||
URL := req.URL
|
||||
query := URL.Query()
|
||||
query.Set("token", c.authorizationToken)
|
||||
query.Set("token", authToken)
|
||||
URL.RawQuery = query.Encode()
|
||||
|
||||
return c.do(ctx, req, i)
|
||||
|
@ -63,10 +63,11 @@ Note that for historical reasons, likes are returned as an array
|
||||
of user ids in the favorited_by key.
|
||||
|
||||
Parameters:
|
||||
|
||||
otherUserID - required, ID(string); the other participant in the conversation.
|
||||
See IndexDirectMessagesQuery
|
||||
*/
|
||||
func (c *Client) IndexDirectMessages(ctx context.Context, otherUserID string, req *IndexDirectMessagesQuery) (IndexDirectMessagesResponse, error) {
|
||||
func (c *Client) IndexDirectMessages(ctx context.Context, otherUserID string, req *IndexDirectMessagesQuery, authToken string) (IndexDirectMessagesResponse, error) {
|
||||
httpReq, err := http.NewRequest("GET", c.endpointBase+indexDirectMessagesEndpoint, nil)
|
||||
if err != nil {
|
||||
return IndexDirectMessagesResponse{}, err
|
||||
@ -85,7 +86,7 @@ func (c *Client) IndexDirectMessages(ctx context.Context, otherUserID string, re
|
||||
httpReq.URL.RawQuery = query.Encode()
|
||||
|
||||
var resp IndexDirectMessagesResponse
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp)
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp, authToken)
|
||||
if err != nil {
|
||||
return IndexDirectMessagesResponse{}, err
|
||||
}
|
||||
@ -107,7 +108,7 @@ specify a replacement charmap to substitute emoji characters
|
||||
The character map is an array of arrays containing rune data
|
||||
([[{pack_id,offset}],...]).
|
||||
*/
|
||||
func (c *Client) CreateDirectMessage(ctx context.Context, m *Message) (*Message, error) {
|
||||
func (c *Client) CreateDirectMessage(ctx context.Context, m *Message, authToken string) (*Message, error) {
|
||||
URL := fmt.Sprintf(c.endpointBase + createDirectMessageEndpoint)
|
||||
|
||||
m.SourceGUID = uuid.New().String()
|
||||
@ -130,7 +131,7 @@ func (c *Client) CreateDirectMessage(ctx context.Context, m *Message) (*Message,
|
||||
var resp struct {
|
||||
*Message `json:"direct_message"`
|
||||
}
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp)
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp, authToken)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -18,20 +18,20 @@ var authorizationToken = "ABCD"
|
||||
func main() {
|
||||
//create push subscription and start listening
|
||||
p := groupme.NewPushSubscription(context.Background())
|
||||
err := p.Connect(context.TODO(), authorizationToken)
|
||||
err := p.Connect(context.TODO())
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
// Create a new client with your auth token
|
||||
client := groupme.NewClient(authorizationToken)
|
||||
User, _ := client.MyUser(context.Background())
|
||||
client := groupme.NewClient()
|
||||
User, _ := client.MyUser(context.Background(), authorizationToken)
|
||||
|
||||
//handles (in this case prints) all messages
|
||||
p.AddFullHandler(Handler{User: User})
|
||||
|
||||
//Subscribe to get messages and events for the specific user
|
||||
err = p.SubscribeToUser(context.Background(), User.ID)
|
||||
err = p.SubscribeToUser(context.Background(), User.ID, authorizationToken)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
@ -43,7 +43,7 @@ func main() {
|
||||
Page: 0,
|
||||
PerPage: 2,
|
||||
Omit: "memberships",
|
||||
})
|
||||
}, authorizationToken)
|
||||
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
@ -51,7 +51,7 @@ func main() {
|
||||
}
|
||||
//Subscribe to those groups
|
||||
for _, j := range groups {
|
||||
err = p.SubscribeToGroup(context.TODO(), j.ID)
|
||||
err = p.SubscribeToGroup(context.TODO(), j.ID, authorizationToken)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
@ -62,10 +62,10 @@ func main() {
|
||||
&groupme.IndexChatsQuery{
|
||||
Page: 0,
|
||||
PerPage: 2,
|
||||
})
|
||||
}, authorizationToken)
|
||||
//subscribe to all those chats
|
||||
for _, j := range chats {
|
||||
err = p.SubscribeToDM(context.TODO(), j.LastMessage.ConversationID)
|
||||
err = p.SubscribeToDM(context.TODO(), j.LastMessage.ConversationID, authorizationToken)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
2
go.mod
2
go.mod
@ -3,7 +3,7 @@ module gitea.watsonlabs.net/watsonb8/groupme-lib
|
||||
go 1.21.0
|
||||
|
||||
require (
|
||||
gitea.watsonlabs.net/watsonb8/fayec v0.0.2
|
||||
gitea.watsonlabs.net/watsonb8/fayec v0.0.3
|
||||
github.com/google/uuid v1.2.0
|
||||
github.com/gorilla/mux v1.8.0
|
||||
github.com/stretchr/testify v1.7.0
|
||||
|
2
go.sum
2
go.sum
@ -6,6 +6,8 @@ gitea.watsonlabs.net/watsonb8/fayec v0.0.1 h1:MNFmTaTyyKKgrw04dGO9C5ojtm1jIvy8oH
|
||||
gitea.watsonlabs.net/watsonb8/fayec v0.0.1/go.mod h1:gv8CWMq6dFJQhH30u8bO3u4k2irKlclZktLNYDebQ/0=
|
||||
gitea.watsonlabs.net/watsonb8/fayec v0.0.2 h1:tqbgr1vRZ6Wq4W81xBg+FTOywSv3EJpK263SAVXXTco=
|
||||
gitea.watsonlabs.net/watsonb8/fayec v0.0.2/go.mod h1:gv8CWMq6dFJQhH30u8bO3u4k2irKlclZktLNYDebQ/0=
|
||||
gitea.watsonlabs.net/watsonb8/fayec v0.0.3 h1:YpaZBIee8Ix6uGm1UoEtBix1dEU1TURChAsJGJ3pVRo=
|
||||
gitea.watsonlabs.net/watsonb8/fayec v0.0.3/go.mod h1:gv8CWMq6dFJQhH30u8bO3u4k2irKlclZktLNYDebQ/0=
|
||||
github.com/autogrowsystems/wray v0.0.0-20160519030252-f36984f6648c/go.mod h1:druJ8QMeBCUmwJ7ZSFowx77dWxEWF3SYlQlsqZaLZQg=
|
||||
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
|
@ -86,7 +86,7 @@ app for users who are participating in huge groups.
|
||||
|
||||
Parameters: See GroupsQuery
|
||||
*/
|
||||
func (c *Client) IndexGroups(ctx context.Context, req *GroupsQuery) ([]*Group, error) {
|
||||
func (c *Client) IndexGroups(ctx context.Context, req *GroupsQuery, authToken string) ([]*Group, error) {
|
||||
httpReq, err := http.NewRequest("GET", c.endpointBase+indexGroupsEndpoint, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@ -108,7 +108,7 @@ func (c *Client) IndexGroups(ctx context.Context, req *GroupsQuery) ([]*Group, e
|
||||
URL.RawQuery = query.Encode()
|
||||
|
||||
var resp []*Group
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp)
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp, authToken)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -123,14 +123,14 @@ FormerGroups -
|
||||
|
||||
List they groups you have left but can rejoin.
|
||||
*/
|
||||
func (c *Client) FormerGroups(ctx context.Context) ([]*Group, error) {
|
||||
func (c *Client) FormerGroups(ctx context.Context, authToken string) ([]*Group, error) {
|
||||
httpReq, err := http.NewRequest("GET", c.endpointBase+formerGroupsEndpoint, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var resp []*Group
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp)
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp, authToken)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -146,9 +146,10 @@ ShowGroup -
|
||||
Loads a specific group.
|
||||
|
||||
Parameters:
|
||||
|
||||
groupID - required, ID(string)
|
||||
*/
|
||||
func (c *Client) ShowGroup(ctx context.Context, groupID ID) (*Group, error) {
|
||||
func (c *Client) ShowGroup(ctx context.Context, groupID ID, authToken string) (*Group, error) {
|
||||
URL := fmt.Sprintf(c.endpointBase+showGroupEndpoint, groupID)
|
||||
|
||||
httpReq, err := http.NewRequest("GET", URL, nil)
|
||||
@ -157,7 +158,7 @@ func (c *Client) ShowGroup(ctx context.Context, groupID ID) (*Group, error) {
|
||||
}
|
||||
|
||||
var resp Group
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp)
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp, authToken)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -170,11 +171,11 @@ func (c *Client) ShowGroup(ctx context.Context, groupID ID) (*Group, error) {
|
||||
/*
|
||||
CreateGroup -
|
||||
|
||||
Create a new group
|
||||
# Create a new group
|
||||
|
||||
Parameters: See GroupSettings
|
||||
*/
|
||||
func (c *Client) CreateGroup(ctx context.Context, gs GroupSettings) (*Group, error) {
|
||||
func (c *Client) CreateGroup(ctx context.Context, gs GroupSettings, authToken string) (*Group, error) {
|
||||
URL := fmt.Sprintf(c.endpointBase + createGroupEndpoint)
|
||||
|
||||
jsonBytes, err := json.Marshal(&gs)
|
||||
@ -188,7 +189,7 @@ func (c *Client) CreateGroup(ctx context.Context, gs GroupSettings) (*Group, err
|
||||
}
|
||||
|
||||
var resp Group
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp)
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp, authToken)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -201,13 +202,14 @@ func (c *Client) CreateGroup(ctx context.Context, gs GroupSettings) (*Group, err
|
||||
/*
|
||||
UpdateGroup -
|
||||
|
||||
Update a group after creation
|
||||
# Update a group after creation
|
||||
|
||||
Parameters:
|
||||
|
||||
groupID - required, ID(string)
|
||||
See GroupSettings
|
||||
*/
|
||||
func (c *Client) UpdateGroup(ctx context.Context, groupID ID, gs GroupSettings) (*Group, error) {
|
||||
func (c *Client) UpdateGroup(ctx context.Context, groupID ID, gs GroupSettings, authToken string) (*Group, error) {
|
||||
URL := fmt.Sprintf(c.endpointBase+updateGroupEndpoint, groupID)
|
||||
|
||||
jsonBytes, err := json.Marshal(&gs)
|
||||
@ -221,7 +223,7 @@ func (c *Client) UpdateGroup(ctx context.Context, groupID ID, gs GroupSettings)
|
||||
}
|
||||
|
||||
var resp Group
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp)
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp, authToken)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -234,14 +236,15 @@ func (c *Client) UpdateGroup(ctx context.Context, groupID ID, gs GroupSettings)
|
||||
/*
|
||||
DestroyGroup -
|
||||
|
||||
Disband a group
|
||||
# Disband a group
|
||||
|
||||
This action is only available to the group creator
|
||||
# This action is only available to the group creator
|
||||
|
||||
Parameters:
|
||||
|
||||
groupID - required, ID(string)
|
||||
*/
|
||||
func (c *Client) DestroyGroup(ctx context.Context, groupID ID) error {
|
||||
func (c *Client) DestroyGroup(ctx context.Context, groupID ID, authToken string) error {
|
||||
url := fmt.Sprintf(c.endpointBase+destroyGroupEndpoint, groupID)
|
||||
|
||||
httpReq, err := http.NewRequest("POST", url, nil)
|
||||
@ -249,7 +252,7 @@ func (c *Client) DestroyGroup(ctx context.Context, groupID ID) error {
|
||||
return err
|
||||
}
|
||||
|
||||
return c.doWithAuthToken(ctx, httpReq, nil)
|
||||
return c.doWithAuthToken(ctx, httpReq, nil, authToken)
|
||||
}
|
||||
|
||||
/*/// Join ///*/
|
||||
@ -257,13 +260,14 @@ func (c *Client) DestroyGroup(ctx context.Context, groupID ID) error {
|
||||
/*
|
||||
JoinGroup -
|
||||
|
||||
Join a shared group
|
||||
# Join a shared group
|
||||
|
||||
Parameters:
|
||||
|
||||
groupID - required, ID(string)
|
||||
shareToken - required, string
|
||||
*/
|
||||
func (c *Client) JoinGroup(ctx context.Context, groupID ID, shareToken string) (*Group, error) {
|
||||
func (c *Client) JoinGroup(ctx context.Context, groupID ID, shareToken string, authToken string) (*Group, error) {
|
||||
URL := fmt.Sprintf(c.endpointBase+joinGroupEndpoint, groupID, shareToken)
|
||||
|
||||
httpReq, err := http.NewRequest("POST", URL, nil)
|
||||
@ -272,7 +276,7 @@ func (c *Client) JoinGroup(ctx context.Context, groupID ID, shareToken string) (
|
||||
}
|
||||
|
||||
var resp Group
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp)
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp, authToken)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -288,9 +292,10 @@ RejoinGroup -
|
||||
Rejoin a group. Only works if you previously removed yourself.
|
||||
|
||||
Parameters:
|
||||
|
||||
groupID - required, ID(string)
|
||||
*/
|
||||
func (c *Client) RejoinGroup(ctx context.Context, groupID ID) (*Group, error) {
|
||||
func (c *Client) RejoinGroup(ctx context.Context, groupID ID, authToken string) (*Group, error) {
|
||||
URL := fmt.Sprintf(c.endpointBase + rejoinGroupEndpoint)
|
||||
|
||||
var data = struct {
|
||||
@ -310,7 +315,7 @@ func (c *Client) RejoinGroup(ctx context.Context, groupID ID) (*Group, error) {
|
||||
}
|
||||
|
||||
var resp Group
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp)
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp, authToken)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -330,7 +335,7 @@ the result of change owner action for the request
|
||||
|
||||
Parameters: See ChangeOwnerRequest
|
||||
*/
|
||||
func (c *Client) ChangeGroupOwner(ctx context.Context, reqs ChangeOwnerRequest) (ChangeOwnerResult, error) {
|
||||
func (c *Client) ChangeGroupOwner(ctx context.Context, reqs ChangeOwnerRequest, authToken string) (ChangeOwnerResult, error) {
|
||||
URL := fmt.Sprintf(c.endpointBase + changeGroupOwnerEndpoint)
|
||||
|
||||
var data = struct {
|
||||
@ -353,7 +358,7 @@ func (c *Client) ChangeGroupOwner(ctx context.Context, reqs ChangeOwnerRequest)
|
||||
Results []ChangeOwnerResult `json:"results"`
|
||||
}
|
||||
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp)
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp, authToken)
|
||||
if err != nil {
|
||||
return ChangeOwnerResult{}, err
|
||||
}
|
||||
|
@ -35,7 +35,7 @@ const (
|
||||
|
||||
// IndexLeaderboard - A list of the liked messages in the group for a given period of
|
||||
// time. Messages are ranked in order of number of likes.
|
||||
func (c *Client) IndexLeaderboard(ctx context.Context, groupID ID, p period) ([]*Message, error) {
|
||||
func (c *Client) IndexLeaderboard(ctx context.Context, groupID ID, p period, authToken string) ([]*Message, error) {
|
||||
url := fmt.Sprintf(c.endpointBase+indexLeaderboardEndpoint, groupID)
|
||||
httpReq, err := http.NewRequest("GET", url, nil)
|
||||
if err != nil {
|
||||
@ -50,7 +50,7 @@ func (c *Client) IndexLeaderboard(ctx context.Context, groupID ID, p period) ([]
|
||||
var resp struct {
|
||||
Messages []*Message `json:"messages"`
|
||||
}
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp)
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp, authToken)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -68,9 +68,10 @@ reverse chrono-order. Note that the payload includes a liked_at
|
||||
timestamp in ISO-8601 format.
|
||||
|
||||
Parameters:
|
||||
|
||||
groupID - required, ID(string)
|
||||
*/
|
||||
func (c *Client) MyLikesLeaderboard(ctx context.Context, groupID ID) ([]*Message, error) {
|
||||
func (c *Client) MyLikesLeaderboard(ctx context.Context, groupID ID, authToken string) ([]*Message, error) {
|
||||
url := fmt.Sprintf(c.endpointBase+myLikesLeaderboardEndpoint, groupID)
|
||||
httpReq, err := http.NewRequest("GET", url, nil)
|
||||
if err != nil {
|
||||
@ -80,7 +81,7 @@ func (c *Client) MyLikesLeaderboard(ctx context.Context, groupID ID) ([]*Message
|
||||
var resp struct {
|
||||
Messages []*Message `json:"messages"`
|
||||
}
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp)
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp, authToken)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -98,9 +99,10 @@ reverse chrono-order. Note that the payload includes a liked_at
|
||||
timestamp in ISO-8601 format.
|
||||
|
||||
Parameters:
|
||||
|
||||
groupID - required, ID(string)
|
||||
*/
|
||||
func (c *Client) MyHitsLeaderboard(ctx context.Context, groupID ID) ([]*Message, error) {
|
||||
func (c *Client) MyHitsLeaderboard(ctx context.Context, groupID ID, authToken string) ([]*Message, error) {
|
||||
url := fmt.Sprintf(c.endpointBase+myHitsLeaderboardEndpoint, groupID)
|
||||
httpReq, err := http.NewRequest("GET", url, nil)
|
||||
if err != nil {
|
||||
@ -110,7 +112,7 @@ func (c *Client) MyHitsLeaderboard(ctx context.Context, groupID ID) ([]*Message,
|
||||
var resp struct {
|
||||
Messages []*Message `json:"messages"`
|
||||
}
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp)
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp, authToken)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -23,7 +23,7 @@ const (
|
||||
// Create
|
||||
|
||||
// CreateLike - Like a message.
|
||||
func (c *Client) CreateLike(ctx context.Context, conversationID, messageID ID) error {
|
||||
func (c *Client) CreateLike(ctx context.Context, conversationID, messageID ID, authToken string) error {
|
||||
url := fmt.Sprintf(c.endpointBase+createLikeEndpoint, conversationID, messageID)
|
||||
|
||||
httpReq, err := http.NewRequest("POST", url, nil)
|
||||
@ -31,11 +31,11 @@ func (c *Client) CreateLike(ctx context.Context, conversationID, messageID ID) e
|
||||
return err
|
||||
}
|
||||
|
||||
return c.doWithAuthToken(ctx, httpReq, nil)
|
||||
return c.doWithAuthToken(ctx, httpReq, nil, authToken)
|
||||
}
|
||||
|
||||
// DestroyLike - Unlike a message.
|
||||
func (c *Client) DestroyLike(ctx context.Context, conversationID, messageID ID) error {
|
||||
func (c *Client) DestroyLike(ctx context.Context, conversationID, messageID ID, authToken string) error {
|
||||
url := fmt.Sprintf(c.endpointBase+destroyLikeEndpoint, conversationID, messageID)
|
||||
|
||||
httpReq, err := http.NewRequest("POST", url, nil)
|
||||
@ -43,5 +43,5 @@ func (c *Client) DestroyLike(ctx context.Context, conversationID, messageID ID)
|
||||
return err
|
||||
}
|
||||
|
||||
return c.doWithAuthToken(ctx, httpReq, nil)
|
||||
return c.doWithAuthToken(ctx, httpReq, nil, authToken)
|
||||
}
|
||||
|
@ -40,6 +40,7 @@ GUIDs can be added to the members parameters. These GUIDs will
|
||||
be reflected in the membership JSON objects.
|
||||
|
||||
Parameters:
|
||||
|
||||
groupID - required, ID(string)
|
||||
See Member.
|
||||
Nickname - required
|
||||
@ -48,7 +49,7 @@ Parameters:
|
||||
PhoneNumber - PhoneNumber(string)
|
||||
Email - string
|
||||
*/
|
||||
func (c *Client) AddMembers(ctx context.Context, groupID ID, members ...*Member) (string, error) {
|
||||
func (c *Client) AddMembers(ctx context.Context, groupID ID, authToken string, members ...*Member) (string, error) {
|
||||
URL := fmt.Sprintf(c.endpointBase+addMembersEndpoint, groupID)
|
||||
|
||||
var data = struct {
|
||||
@ -71,7 +72,7 @@ func (c *Client) AddMembers(ctx context.Context, groupID ID, members ...*Member)
|
||||
ResultsID string `json:"results_id"`
|
||||
}
|
||||
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp)
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp, authToken)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
@ -94,10 +95,11 @@ Keep in mind that results are temporary -- they will only be
|
||||
available for 1 hour after the add request.
|
||||
|
||||
Parameters:
|
||||
|
||||
groupID - required, ID(string)
|
||||
resultID - required, string
|
||||
*/
|
||||
func (c *Client) AddMembersResults(ctx context.Context, groupID ID, resultID string) ([]*Member, error) {
|
||||
func (c *Client) AddMembersResults(ctx context.Context, groupID ID, resultID string, authToken string) ([]*Member, error) {
|
||||
URL := fmt.Sprintf(c.endpointBase+addMembersResultsEndpoint, groupID, resultID)
|
||||
|
||||
httpReq, err := http.NewRequest("GET", URL, nil)
|
||||
@ -109,7 +111,7 @@ func (c *Client) AddMembersResults(ctx context.Context, groupID ID, resultID str
|
||||
Members []*Member `json:"members"`
|
||||
}
|
||||
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp)
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp, authToken)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -127,10 +129,11 @@ Remove a member (or yourself) from a group.
|
||||
Note: The creator of the group cannot be removed or exit.
|
||||
|
||||
Parameters:
|
||||
|
||||
groupID - required, ID(string)
|
||||
membershipID - required, ID(string). Not the same as userID
|
||||
*/
|
||||
func (c *Client) RemoveMember(ctx context.Context, groupID, membershipID ID) error {
|
||||
func (c *Client) RemoveMember(ctx context.Context, groupID, membershipID ID, authToken string) error {
|
||||
URL := fmt.Sprintf(c.endpointBase+removeMemberEndpoint, groupID, membershipID)
|
||||
|
||||
httpReq, err := http.NewRequest("POST", URL, nil)
|
||||
@ -138,7 +141,7 @@ func (c *Client) RemoveMember(ctx context.Context, groupID, membershipID ID) err
|
||||
return err
|
||||
}
|
||||
|
||||
return c.doWithAuthToken(ctx, httpReq, nil)
|
||||
return c.doWithAuthToken(ctx, httpReq, nil, authToken)
|
||||
}
|
||||
|
||||
/*/// Update ///*/
|
||||
@ -149,7 +152,7 @@ UpdateMember -
|
||||
Update your nickname in a group. The nickname must be
|
||||
between 1 and 50 characters.
|
||||
*/
|
||||
func (c *Client) UpdateMember(ctx context.Context, groupID ID, nickname string) (*Member, error) {
|
||||
func (c *Client) UpdateMember(ctx context.Context, groupID ID, nickname string, authToken string) (*Member, error) {
|
||||
URL := fmt.Sprintf(c.endpointBase+updateMemberEndpoint, groupID)
|
||||
|
||||
type Nickname struct {
|
||||
@ -173,7 +176,7 @@ func (c *Client) UpdateMember(ctx context.Context, groupID ID, nickname string)
|
||||
|
||||
var resp Member
|
||||
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp)
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp, authToken)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -75,7 +75,7 @@ we return code 304.
|
||||
Note that for historical reasons, likes are returned as an
|
||||
array of user ids in the favorited_by key.
|
||||
*/
|
||||
func (c *Client) IndexMessages(ctx context.Context, groupID ID, req *IndexMessagesQuery) (IndexMessagesResponse, error) {
|
||||
func (c *Client) IndexMessages(ctx context.Context, groupID ID, req *IndexMessagesQuery, authToken string) (IndexMessagesResponse, error) {
|
||||
url := fmt.Sprintf(c.endpointBase+indexMessagesEndpoint, groupID)
|
||||
httpReq, err := http.NewRequest("GET", url, nil)
|
||||
if err != nil {
|
||||
@ -101,7 +101,7 @@ func (c *Client) IndexMessages(ctx context.Context, groupID ID, req *IndexMessag
|
||||
URL.RawQuery = query.Encode()
|
||||
|
||||
var resp IndexMessagesResponse
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp)
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp, authToken)
|
||||
if err != nil {
|
||||
return IndexMessagesResponse{}, err
|
||||
}
|
||||
@ -125,7 +125,7 @@ The character map is an array of arrays containing rune data
|
||||
|
||||
The placeholder should be a high-point/invisible UTF-8 character.
|
||||
*/
|
||||
func (c *Client) CreateMessage(ctx context.Context, groupID ID, m *Message) (*Message, error) {
|
||||
func (c *Client) CreateMessage(ctx context.Context, groupID ID, m *Message, authToken string) (*Message, error) {
|
||||
URL := fmt.Sprintf(c.endpointBase+createMessagesEndpoint, groupID)
|
||||
|
||||
m.SourceGUID = uuid.New().String()
|
||||
@ -148,7 +148,7 @@ func (c *Client) CreateMessage(ctx context.Context, groupID ID, m *Message) (*Me
|
||||
var resp struct {
|
||||
*Message `json:"message"`
|
||||
}
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp)
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp, authToken)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
30
real_time.go
30
real_time.go
@ -25,7 +25,6 @@ var (
|
||||
)
|
||||
|
||||
var concur = sync.Mutex{}
|
||||
var token string
|
||||
|
||||
type HandlerAll interface {
|
||||
Handler
|
||||
@ -118,17 +117,8 @@ var RealTimeHandlers map[string]func(r *PushSubscription, channel string, data .
|
||||
var RealTimeSystemHandlers map[string]func(r *PushSubscription, channel string, id ID, rawData []byte)
|
||||
|
||||
// Listen connects to GroupMe. Runs in Goroutine.
|
||||
func (r *PushSubscription) Connect(context context.Context, authorizationToken string) error {
|
||||
token = authorizationToken
|
||||
var authenticationExtension message.Extension = func(message *message.Message) {
|
||||
if message.Channel == "/meta/subscribe" {
|
||||
message.Ext = map[string]string{
|
||||
"access_token": authorizationToken,
|
||||
"timestamp": string(time.Now().Unix()),
|
||||
}
|
||||
}
|
||||
}
|
||||
c, err := fayec.NewClient(PushServer, fayec.WithOutExtension(authenticationExtension))
|
||||
func (r *PushSubscription) Connect(context context.Context) error {
|
||||
c, err := fayec.NewClient(PushServer)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -138,22 +128,22 @@ func (r *PushSubscription) Connect(context context.Context, authorizationToken s
|
||||
}
|
||||
|
||||
// SubscribeToUser to users
|
||||
func (r *PushSubscription) SubscribeToUser(context context.Context, id ID) error {
|
||||
return r.subscribeWithPrefix(userChannel, context, id)
|
||||
func (r *PushSubscription) SubscribeToUser(context context.Context, id ID, authToken string) error {
|
||||
return r.subscribeWithPrefix(userChannel, context, id, authToken)
|
||||
}
|
||||
|
||||
// SubscribeToGroup to groups for typing notification
|
||||
func (r *PushSubscription) SubscribeToGroup(context context.Context, id ID) error {
|
||||
return r.subscribeWithPrefix(groupChannel, context, id)
|
||||
func (r *PushSubscription) SubscribeToGroup(context context.Context, id ID, authToken string) error {
|
||||
return r.subscribeWithPrefix(groupChannel, context, id, authToken)
|
||||
}
|
||||
|
||||
// SubscribeToDM to users
|
||||
func (r *PushSubscription) SubscribeToDM(context context.Context, id ID) error {
|
||||
func (r *PushSubscription) SubscribeToDM(context context.Context, id ID, authToken string) error {
|
||||
id = ID(strings.Replace(id.String(), "+", "_", 1))
|
||||
return r.subscribeWithPrefix(dmChannel, context, id)
|
||||
return r.subscribeWithPrefix(dmChannel, context, id, authToken)
|
||||
}
|
||||
|
||||
func (r *PushSubscription) subscribeWithPrefix(prefix string, context context.Context, groupID ID) error {
|
||||
func (r *PushSubscription) subscribeWithPrefix(prefix string, context context.Context, groupID ID, authToken string) error {
|
||||
concur.Lock()
|
||||
defer concur.Unlock()
|
||||
if r.client == nil {
|
||||
@ -161,7 +151,7 @@ func (r *PushSubscription) subscribeWithPrefix(prefix string, context context.Co
|
||||
}
|
||||
|
||||
var sub *subscription.Subscription
|
||||
sub, err := r.client.Subscribe(prefix + groupID.String())
|
||||
sub, err := r.client.Subscribe(prefix+groupID.String(), authToken)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
@ -31,13 +31,14 @@ Enables SMS mode for N hours, where N is at most 48. After N
|
||||
hours have elapsed, user will receive push notfications.
|
||||
|
||||
Parameters:
|
||||
|
||||
duration - required, integer
|
||||
registration_id - string; The push notification ID/token
|
||||
that should be suppressed during SMS mode. If this is
|
||||
omitted, both SMS and push notifications will be
|
||||
delivered to the device.
|
||||
*/
|
||||
func (c *Client) CreateSMSMode(ctx context.Context, duration int, registrationID *ID) error {
|
||||
func (c *Client) CreateSMSMode(ctx context.Context, duration int, registrationID *ID, authToken string) error {
|
||||
URL := fmt.Sprintf(c.endpointBase + createSMSModeEndpoint)
|
||||
|
||||
var data = struct {
|
||||
@ -58,7 +59,7 @@ func (c *Client) CreateSMSMode(ctx context.Context, duration int, registrationID
|
||||
return err
|
||||
}
|
||||
|
||||
err = c.doWithAuthToken(ctx, httpReq, nil)
|
||||
err = c.doWithAuthToken(ctx, httpReq, nil, authToken)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -73,7 +74,7 @@ DeleteSMSMode -
|
||||
|
||||
Disables SMS mode
|
||||
*/
|
||||
func (c *Client) DeleteSMSMode(ctx context.Context) error {
|
||||
func (c *Client) DeleteSMSMode(ctx context.Context, authToken string) error {
|
||||
url := fmt.Sprintf(c.endpointBase + deleteSMSModeEndpoint)
|
||||
|
||||
httpReq, err := http.NewRequest("POST", url, nil)
|
||||
@ -81,5 +82,5 @@ func (c *Client) DeleteSMSMode(ctx context.Context) error {
|
||||
return err
|
||||
}
|
||||
|
||||
return c.doWithAuthToken(ctx, httpReq, nil)
|
||||
return c.doWithAuthToken(ctx, httpReq, nil, authToken)
|
||||
}
|
||||
|
11
users_api.go
11
users_api.go
@ -31,9 +31,10 @@ MyUser -
|
||||
Loads a specific group.
|
||||
|
||||
Parameters:
|
||||
|
||||
groupID - required, ID(string)
|
||||
*/
|
||||
func (c *Client) MyUser(ctx context.Context) (*User, error) {
|
||||
func (c *Client) MyUser(ctx context.Context, authToken string) (*User, error) {
|
||||
URL := fmt.Sprintf(c.endpointBase + myUserEndpoint)
|
||||
|
||||
httpReq, err := http.NewRequest("GET", URL, nil)
|
||||
@ -42,7 +43,7 @@ func (c *Client) MyUser(ctx context.Context) (*User, error) {
|
||||
}
|
||||
|
||||
var resp User
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp)
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp, authToken)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -65,11 +66,11 @@ type UserSettings struct {
|
||||
/*
|
||||
UpdateMyUser -
|
||||
|
||||
Update attributes about your own account
|
||||
# Update attributes about your own account
|
||||
|
||||
Parameters: See UserSettings
|
||||
*/
|
||||
func (c *Client) UpdateMyUser(ctx context.Context, us UserSettings) (*User, error) {
|
||||
func (c *Client) UpdateMyUser(ctx context.Context, us UserSettings, authToken string) (*User, error) {
|
||||
URL := fmt.Sprintf(c.endpointBase + updateMyUserEndpoint)
|
||||
|
||||
jsonBytes, err := json.Marshal(&us)
|
||||
@ -83,7 +84,7 @@ func (c *Client) UpdateMyUser(ctx context.Context, us UserSettings) (*User, erro
|
||||
}
|
||||
|
||||
var resp User
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp)
|
||||
err = c.doWithAuthToken(ctx, httpReq, &resp, authToken)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user