mattermost-community-enterp.../public/pluginapi/user.go
Claude ec1f89217a Merge: Complete Mattermost Server with Community Enterprise
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>
2025-12-17 23:59:07 +09:00

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)
}