
* Add support for editing/deleting messages * Add support for uploading files * Add support for avatars * Use the Rocket.Chat.Go.SDK * Use the rest and streaming api
146 lines
4.2 KiB
Go
146 lines
4.2 KiB
Go
package rest
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"fmt"
|
|
"net/url"
|
|
"time"
|
|
|
|
"github.com/matterbridge/Rocket.Chat.Go.SDK/models"
|
|
)
|
|
|
|
type logoutResponse struct {
|
|
Status
|
|
Data struct {
|
|
Message string `json:"message"`
|
|
} `json:"data"`
|
|
}
|
|
|
|
type logonResponse struct {
|
|
Status
|
|
Data struct {
|
|
Token string `json:"authToken"`
|
|
UserID string `json:"userID"`
|
|
} `json:"data"`
|
|
}
|
|
|
|
type CreateUserResponse struct {
|
|
Status
|
|
User struct {
|
|
ID string `json:"_id"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
Services struct {
|
|
Password struct {
|
|
Bcrypt string `json:"bcrypt"`
|
|
} `json:"password"`
|
|
} `json:"services"`
|
|
Username string `json:"username"`
|
|
Emails []struct {
|
|
Address string `json:"address"`
|
|
Verified bool `json:"verified"`
|
|
} `json:"emails"`
|
|
Type string `json:"type"`
|
|
Status string `json:"status"`
|
|
Active bool `json:"active"`
|
|
Roles []string `json:"roles"`
|
|
UpdatedAt time.Time `json:"_updatedAt"`
|
|
Name string `json:"name"`
|
|
CustomFields map[string]string `json:"customFields"`
|
|
} `json:"user"`
|
|
}
|
|
|
|
// Login a user. The Email and the Password are mandatory. The auth token of the user is stored in the Client instance.
|
|
//
|
|
// https://rocket.chat/docs/developer-guides/rest-api/authentication/login
|
|
func (c *Client) Login(credentials *models.UserCredentials) error {
|
|
if c.auth != nil {
|
|
return nil
|
|
}
|
|
|
|
if credentials.ID != "" && credentials.Token != "" {
|
|
c.auth = &authInfo{id: credentials.ID, token: credentials.Token}
|
|
return nil
|
|
}
|
|
|
|
response := new(logonResponse)
|
|
data := url.Values{"user": {credentials.Email}, "password": {credentials.Password}}
|
|
if err := c.PostForm("login", data, response); err != nil {
|
|
return err
|
|
}
|
|
|
|
c.auth = &authInfo{id: response.Data.UserID, token: response.Data.Token}
|
|
credentials.ID, credentials.Token = response.Data.UserID, response.Data.Token
|
|
return nil
|
|
}
|
|
|
|
// CreateToken creates an access token for a user
|
|
//
|
|
// https://rocket.chat/docs/developer-guides/rest-api/users/createtoken/
|
|
func (c *Client) CreateToken(userID, username string) (*models.UserCredentials, error) {
|
|
response := new(logonResponse)
|
|
data := url.Values{"userId": {userID}, "username": {username}}
|
|
if err := c.PostForm("users.createToken", data, response); err != nil {
|
|
return nil, err
|
|
}
|
|
credentials := &models.UserCredentials{}
|
|
credentials.ID, credentials.Token = response.Data.UserID, response.Data.Token
|
|
return credentials, nil
|
|
}
|
|
|
|
// Logout a user. The function returns the response message of the server.
|
|
//
|
|
// https://rocket.chat/docs/developer-guides/rest-api/authentication/logout
|
|
func (c *Client) Logout() (string, error) {
|
|
|
|
if c.auth == nil {
|
|
return "Was not logged in", nil
|
|
}
|
|
|
|
response := new(logoutResponse)
|
|
if err := c.Get("logout", nil, response); err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return response.Data.Message, nil
|
|
}
|
|
|
|
// CreateUser being logged in with a user that has permission to do so.
|
|
//
|
|
// https://rocket.chat/docs/developer-guides/rest-api/users/create
|
|
func (c *Client) CreateUser(req *models.CreateUserRequest) (*CreateUserResponse, error) {
|
|
body, err := json.Marshal(req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
response := new(CreateUserResponse)
|
|
err = c.Post("users.create", bytes.NewBuffer(body), response)
|
|
return response, err
|
|
}
|
|
|
|
// UpdateUser updates a user's data being logged in with a user that has permission to do so.
|
|
//
|
|
// https://rocket.chat/docs/developer-guides/rest-api/users/update/
|
|
func (c *Client) UpdateUser(req *models.UpdateUserRequest) (*CreateUserResponse, error) {
|
|
body, err := json.Marshal(req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
response := new(CreateUserResponse)
|
|
err = c.Post("users.update", bytes.NewBuffer(body), response)
|
|
return response, err
|
|
}
|
|
|
|
// SetUserAvatar updates a user's avatar being logged in with a user that has permission to do so.
|
|
// Currently only passing an URL is possible.
|
|
//
|
|
// https://rocket.chat/docs/developer-guides/rest-api/users/setavatar/
|
|
func (c *Client) SetUserAvatar(userID, username, avatarURL string) (*Status, error) {
|
|
body := fmt.Sprintf(`{ "userId": "%s","username": "%s","avatarUrl":"%s"}`, userID, username, avatarURL)
|
|
response := new(Status)
|
|
err := c.Post("users.setAvatar", bytes.NewBufferString(body), response)
|
|
return response, err
|
|
}
|