summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/matterbridge/Rocket.Chat.Go.SDK/rest/users.go
diff options
context:
space:
mode:
authorWim <wim@42.be>2019-02-10 17:00:11 +0100
committerWim <wim@42.be>2019-02-15 18:19:34 +0100
commit6ebd5cbbd8a941e0bc5f99f0d8e99cfd1d8ac0d7 (patch)
tree47070e58e7802afd80fce53f0048a87a014a7c0d /vendor/github.com/matterbridge/Rocket.Chat.Go.SDK/rest/users.go
parent2cfd880cdb0df29771bf8f31df8d990ab897889d (diff)
downloadmatterbridge-msglm-6ebd5cbbd8a941e0bc5f99f0d8e99cfd1d8ac0d7.tar.gz
matterbridge-msglm-6ebd5cbbd8a941e0bc5f99f0d8e99cfd1d8ac0d7.tar.bz2
matterbridge-msglm-6ebd5cbbd8a941e0bc5f99f0d8e99cfd1d8ac0d7.zip
Refactor and update RocketChat bridge
* 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
Diffstat (limited to 'vendor/github.com/matterbridge/Rocket.Chat.Go.SDK/rest/users.go')
-rw-r--r--vendor/github.com/matterbridge/Rocket.Chat.Go.SDK/rest/users.go145
1 files changed, 145 insertions, 0 deletions
diff --git a/vendor/github.com/matterbridge/Rocket.Chat.Go.SDK/rest/users.go b/vendor/github.com/matterbridge/Rocket.Chat.Go.SDK/rest/users.go
new file mode 100644
index 00000000..dcf783a0
--- /dev/null
+++ b/vendor/github.com/matterbridge/Rocket.Chat.Go.SDK/rest/users.go
@@ -0,0 +1,145 @@
+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
+}