mattermost/server/public/pluginapi/user.go

265 lines
7.5 KiB
Go
Raw Permalink Normal View History

[MM-53968] Includes mattermost-plugin-api into the mono repo (#24235) Include https://github.com/mattermost/mattermost-plugin-api into the mono repo Co-authored-by: Jesse Hallam <jesse.hallam@gmail.com> Co-authored-by: Michael Kochell <mjkochell@gmail.com> Co-authored-by: Alejandro García Montoro <alejandro.garciamontoro@gmail.com> Co-authored-by: Ben Schumacher <ben.schumacher@mattermost.com> Co-authored-by: Alex Dovenmuehle <alex.dovenmuehle@mattermost.com> Co-authored-by: Michael Kochell <6913320+mickmister@users.noreply.github.com> Co-authored-by: Christopher Poile <cpoile@gmail.com> Co-authored-by: İlker Göktuğ Öztürk <ilkergoktugozturk@gmail.com> Co-authored-by: Shota Gvinepadze <wineson@gmail.com> Co-authored-by: Ali Farooq <ali.farooq0@pm.me> Co-authored-by: Maria A Nunez <maria.nunez@mattermost.com> Co-authored-by: Daniel Espino García <larkox@gmail.com> Co-authored-by: Christopher Speller <crspeller@gmail.com> Co-authored-by: Alex Dovenmuehle <adovenmuehle@gmail.com> Co-authored-by: Szymon Gibała <szymongib@gmail.com> Co-authored-by: Lev <1187448+levb@users.noreply.github.com> Co-authored-by: Jason Frerich <jason.frerich@mattermost.com> Co-authored-by: Agniva De Sarker <agnivade@yahoo.co.in> Co-authored-by: Artur M. Wolff <artur.m.wolff@gmail.com> Co-authored-by: Madhav Hugar <16546715+madhavhugar@users.noreply.github.com> Co-authored-by: Joe <security.joe@pm.me> Co-authored-by: Ibrahim Serdar Acikgoz <serdaracikgoz86@gmail.com> Co-authored-by: José Peso <trilopin@users.noreply.github.com>
2023-08-21 03:50:30 -04:00
package pluginapi
import (
"bytes"
"io"
"github.com/mattermost/mattermost/server/public/model"
"github.com/mattermost/mattermost/server/public/plugin"
)
// UserService exposes methods to manipulate users.
type UserService struct {
api plugin.API
}
// Get gets a user.
//
// Minimum server version: 5.2
func (u *UserService) Get(userID string) (*model.User, error) {
user, appErr := u.api.GetUser(userID)
return user, normalizeAppErr(appErr)
}
// GetByEmail gets a user by their email address.
//
// Minimum server version: 5.2
func (u *UserService) GetByEmail(email string) (*model.User, error) {
user, appErr := u.api.GetUserByEmail(email)
return user, normalizeAppErr(appErr)
}
// GetByUsername gets a user by their username.
//
// Minimum server version: 5.2
func (u *UserService) GetByUsername(username string) (*model.User, error) {
user, appErr := u.api.GetUserByUsername(username)
return user, normalizeAppErr(appErr)
}
// List a list of users based on search options.
//
// Minimum server version: 5.10
func (u *UserService) List(options *model.UserGetOptions) ([]*model.User, error) {
users, appErr := u.api.GetUsers(options)
return users, normalizeAppErr(appErr)
}
// ListByUserIDs gets users by their IDs.
//
// Minimum server version: 9.8
func (u *UserService) ListByUserIDs(userIDs []string) ([]*model.User, error) {
users, appErr := u.api.GetUsersByIds(userIDs)
return users, normalizeAppErr(appErr)
}
[MM-53968] Includes mattermost-plugin-api into the mono repo (#24235) Include https://github.com/mattermost/mattermost-plugin-api into the mono repo Co-authored-by: Jesse Hallam <jesse.hallam@gmail.com> Co-authored-by: Michael Kochell <mjkochell@gmail.com> Co-authored-by: Alejandro García Montoro <alejandro.garciamontoro@gmail.com> Co-authored-by: Ben Schumacher <ben.schumacher@mattermost.com> Co-authored-by: Alex Dovenmuehle <alex.dovenmuehle@mattermost.com> Co-authored-by: Michael Kochell <6913320+mickmister@users.noreply.github.com> Co-authored-by: Christopher Poile <cpoile@gmail.com> Co-authored-by: İlker Göktuğ Öztürk <ilkergoktugozturk@gmail.com> Co-authored-by: Shota Gvinepadze <wineson@gmail.com> Co-authored-by: Ali Farooq <ali.farooq0@pm.me> Co-authored-by: Maria A Nunez <maria.nunez@mattermost.com> Co-authored-by: Daniel Espino García <larkox@gmail.com> Co-authored-by: Christopher Speller <crspeller@gmail.com> Co-authored-by: Alex Dovenmuehle <adovenmuehle@gmail.com> Co-authored-by: Szymon Gibała <szymongib@gmail.com> Co-authored-by: Lev <1187448+levb@users.noreply.github.com> Co-authored-by: Jason Frerich <jason.frerich@mattermost.com> Co-authored-by: Agniva De Sarker <agnivade@yahoo.co.in> Co-authored-by: Artur M. Wolff <artur.m.wolff@gmail.com> Co-authored-by: Madhav Hugar <16546715+madhavhugar@users.noreply.github.com> Co-authored-by: Joe <security.joe@pm.me> Co-authored-by: Ibrahim Serdar Acikgoz <serdaracikgoz86@gmail.com> Co-authored-by: José Peso <trilopin@users.noreply.github.com>
2023-08-21 03:50:30 -04:00
// ListByUsernames gets users by their usernames.
//
// Minimum server version: 5.6
func (u *UserService) ListByUsernames(usernames []string) ([]*model.User, error) {
users, appErr := u.api.GetUsersByUsernames(usernames)
return users, normalizeAppErr(appErr)
}
// ListInChannel returns a page of users in a channel. Page counting starts at 0.
// The sortBy parameter can be: "username" or "status".
//
// Minimum server version: 5.6
func (u *UserService) ListInChannel(channelID, sortBy string, page, perPage int) ([]*model.User, error) {
users, appErr := u.api.GetUsersInChannel(channelID, sortBy, page, perPage)
return users, normalizeAppErr(appErr)
}
// ListInTeam gets users in team.
//
// Minimum server version: 5.6
func (u *UserService) ListInTeam(teamID string, page, perPage int) ([]*model.User, error) {
users, appErr := u.api.GetUsersInTeam(teamID, page, perPage)
return users, normalizeAppErr(appErr)
}
// Search returns a list of users based on some search criteria.
//
// Minimum server version: 5.6
func (u *UserService) Search(search *model.UserSearch) ([]*model.User, error) {
users, appErr := u.api.SearchUsers(search)
return users, normalizeAppErr(appErr)
}
// Create creates a user.
//
// Minimum server version: 5.2
func (u *UserService) Create(user *model.User) error {
createdUser, appErr := u.api.CreateUser(user)
if appErr != nil {
return normalizeAppErr(appErr)
}
*user = *createdUser
return nil
}
// Update updates a user.
//
// Minimum server version: 5.2
func (u *UserService) Update(user *model.User) error {
updatedUser, appErr := u.api.UpdateUser(user)
if appErr != nil {
return normalizeAppErr(appErr)
}
*user = *updatedUser
return nil
}
// Delete deletes a user.
//
// Minimum server version: 5.2
func (u *UserService) Delete(userID string) error {
appErr := u.api.DeleteUser(userID)
return normalizeAppErr(appErr)
}
// GetStatus will get a user's status.
//
// Minimum server version: 5.2
func (u *UserService) GetStatus(userID string) (*model.Status, error) {
status, appErr := u.api.GetUserStatus(userID)
return status, normalizeAppErr(appErr)
}
// ListStatusesByIDs will return a list of user statuses based on the provided slice of user IDs.
//
// Minimum server version: 5.2
func (u *UserService) ListStatusesByIDs(userIDs []string) ([]*model.Status, error) {
statuses, appErr := u.api.GetUserStatusesByIds(userIDs)
return statuses, normalizeAppErr(appErr)
}
// UpdateStatus will set a user's status until the user, or another integration/plugin, sets it back to online.
// The status parameter can be: "online", "away", "dnd", or "offline".
//
// Minimum server version: 5.2
func (u *UserService) UpdateStatus(userID, status string) (*model.Status, error) {
rStatus, appErr := u.api.UpdateUserStatus(userID, status)
return rStatus, normalizeAppErr(appErr)
}
// UpdateActive deactivates or reactivates an user.
//
// Minimum server version: 5.8
func (u *UserService) UpdateActive(userID string, active bool) error {
appErr := u.api.UpdateUserActive(userID, active)
return normalizeAppErr(appErr)
}
// GetProfileImage gets user's profile image.
//
// Minimum server version: 5.6
func (u *UserService) GetProfileImage(userID string) (io.Reader, error) {
contentBytes, appErr := u.api.GetProfileImage(userID)
if appErr != nil {
return nil, normalizeAppErr(appErr)
}
return bytes.NewReader(contentBytes), nil
}
// SetProfileImage sets a user's profile image.
//
// Minimum server version: 5.6
func (u *UserService) SetProfileImage(userID string, content io.Reader) error {
contentBytes, err := io.ReadAll(content)
if err != nil {
return err
}
return normalizeAppErr(u.api.SetProfileImage(userID, contentBytes))
}
// HasPermissionTo check if the user has the permission at system scope.
//
// Minimum server version: 5.3
func (u *UserService) HasPermissionTo(userID string, permission *model.Permission) bool {
return u.api.HasPermissionTo(userID, permission)
}
// HasPermissionToTeam check if the user has the permission at team scope.
//
// Minimum server version: 5.3
func (u *UserService) HasPermissionToTeam(userID, teamID string, permission *model.Permission) bool {
return u.api.HasPermissionToTeam(userID, teamID, permission)
}
// HasPermissionToChannel check if the user has the permission at channel scope.
//
// Minimum server version: 5.3
func (u *UserService) HasPermissionToChannel(userID, channelID string, permission *model.Permission) bool {
return u.api.HasPermissionToChannel(userID, channelID, permission)
}
// RolesGrantPermission check if the specified roles grant the specified permission
//
// Minimum server version: 6.3
func (u *UserService) RolesGrantPermission(roleNames []string, permissionID string) bool {
return u.api.RolesGrantPermission(roleNames, permissionID)
}
// GetLDAPAttributes will return LDAP attributes for a user.
// The attributes parameter should be a list of attributes to pull.
// Returns a map with attribute names as keys and the user's attributes as values.
// Requires an enterprise license, LDAP to be configured and for the user to use LDAP as an authentication method.
//
// Minimum server version: 5.3
func (u *UserService) GetLDAPAttributes(userID string, attributes []string) (map[string]string, error) {
ldapUserAttributes, appErr := u.api.GetLDAPUserAttributes(userID, attributes)
return ldapUserAttributes, normalizeAppErr(appErr)
}
// CreateAccessToken creates a new access token.
//
// Minimum server version: 5.38
func (u *UserService) CreateAccessToken(userID, description string) (*model.UserAccessToken, error) {
token := &model.UserAccessToken{
UserId: userID,
Description: description,
}
createdToken, appErr := u.api.CreateUserAccessToken(token)
return createdToken, normalizeAppErr(appErr)
}
// RevokeAccessToken revokes an existing access token.
//
// Minimum server version: 5.38
func (u *UserService) RevokeAccessToken(tokenID string) error {
return normalizeAppErr(u.api.RevokeUserAccessToken(tokenID))
}
// UpdateRoles updates the roles for a user.
//
// Minimum server version: 9.8
func (u *UserService) UpdateRoles(userID, newRoles string) (*model.User, error) {
user, appErr := u.api.UpdateUserRoles(userID, newRoles)
return user, normalizeAppErr(appErr)
}