Full Mattermost server source with integrated Community Enterprise features. Includes vendor directory for offline/air-gapped builds. Structure: - enterprise-impl/: Enterprise feature implementations - enterprise-community/: Init files that register implementations - enterprise/: Bridge imports (community_imports.go) - vendor/: All dependencies for offline builds Build (online): go build ./cmd/mattermost Build (offline/air-gapped): go build -mod=vendor ./cmd/mattermost 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
265 lines
7.5 KiB
Go
265 lines
7.5 KiB
Go
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)
|
|
}
|
|
|
|
// 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)
|
|
}
|