Some checks failed
Server CI / Postgres (shard 0) (push) Has been skipped
Server CI / Postgres (shard 3) (push) Has been skipped
BuildEnv Docker Image / build-image (push) Failing after 4s
BuildEnv Docker Image / build-image-fips (push) Failing after 4s
Migration Review & Release Notes / Generate migration review & release notes (push) Failing after 3s
Server CI / Build Environment (push) Failing after 3s
Server CI / Postgres (shard 1) (push) Has been skipped
Tools CI / check-style (mattermost-govet) (push) Failing after 4s
Server CI / Postgres (shard 2) (push) Has been skipped
Tools CI / check-style (mmgotool) (push) Failing after 3s
Server CI / Elasticsearch v8 Compatibility (push) Has been skipped
Server CI / OpenSearch v2 Compatibility (push) Has been skipped
Server CI / Postgres FIPS (shard 0) (push) Has been skipped
Tools CI / Test (mattermost-govet) (push) Failing after 3s
Server CI / Postgres FIPS (shard 1) (push) Has been skipped
Server CI / Postgres FIPS (shard 2) (push) Has been skipped
Tools CI / Test (mmgotool) (push) Failing after 3s
Server CI / Postgres FIPS (shard 3) (push) Has been skipped
Server CI / Run mmctl tests (push) Has been skipped
Server CI / Run mmctl tests (FIPS) (push) Has been skipped
Server CI / Merge Postgres Test Results (push) Has been skipped
Server CI / Merge Postgres FIPS Test Results (push) Has been skipped
Server CI / Check backport migrations (push) Has been skipped
Server CI / Check generated files (push) Has been skipped
Server CI / check-style (push) Has been skipped
Server CI / Vet API (push) Has been skipped
Server CI / Build mattermost server app (push) Has been skipped
Server CI / Server CI Complete (push) Failing after 2s
Server CI / Server CI Artifacts (push) Has been skipped
Server CI / Sentry Upload (push) Has been skipped
Server CI / Server CI Report (push) Failing after 5m1s
Server CI Nightly Race / Race Detector (push) Has been skipped
CodeQL / Analyze (go) (push) Has been cancelled
CodeQL / Analyze (javascript) (push) Has been cancelled
Webapp CI Cache Warm / Warm Webapp node_modules Cache (push) Has been cancelled
E2E CI Cache Warm / Warm E2E npm Registry Cache (push) Has been cancelled
API / build (push) Has been cancelled
Web App CI / check-types (push) Has been cancelled
Web App CI / check-lint (push) Has been cancelled
Web App CI / check-i18n (push) Has been cancelled
Web App CI / check-external-links (push) Has been cancelled
Web App CI / test (platform) (push) Has been cancelled
Web App CI / test (mattermost-redux) (push) Has been cancelled
Web App CI / test (channels shard 1/4) (push) Has been cancelled
Web App CI / test (channels shard 2/4) (push) Has been cancelled
Web App CI / test (channels shard 3/4) (push) Has been cancelled
Web App CI / test (channels shard 4/4) (push) Has been cancelled
Web App CI / upload-coverage (push) Has been cancelled
Web App CI / build (push) Has been cancelled
YAML Lint / yamllint (push) Has been cancelled
Push mirrored docker images / cd/Push mirrored docker images (push) Has been cancelled
docs-cd / Build and deploy docs (push) Has been cancelled
Docs CI / build (push) Has been cancelled
E2E Cache Warm: Cypress deps / Warm Cypress deps cache (push) Has been cancelled
Scorecards supply-chain security / Scorecard analysis (push) Has been cancelled
Server CI Weekly / Postgres FIPS (push) Has been skipped
Server CI Weekly / Run mmctl tests (FIPS) (push) Has been skipped
Server CI Weekly / Postgres with binary parameters (push) Has been skipped
Server CI Weekly / Build Environment (push) Failing after 1s
Server CI Cache Warm / Warm Go Module and Build Cache (push) Failing after 2s
Server CI Nightly Race / Build Environment (push) Failing after 1s
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)
|
|
}
|