focalboard/server/services/store/sqlstore/user.go

109 lines
2.7 KiB
Go
Raw Normal View History

2020-10-28 14:35:41 +01:00
package sqlstore
import (
2020-11-06 16:46:35 +01:00
"encoding/json"
2020-10-28 14:35:41 +01:00
"time"
"github.com/mattermost/mattermost-octo-tasks/server/model"
sq "github.com/Masterminds/squirrel"
)
2021-01-14 01:56:01 +01:00
func (s *SQLStore) GetActiveUserCount() (int, error) {
query := s.getQueryBuilder().
Select("count(*)").
From("users").
Where(sq.Eq{"delete_at": 0})
row := query.QueryRow()
var count int
err := row.Scan(&count)
if err != nil {
return 0, err
}
return count, nil
}
2020-10-28 14:35:41 +01:00
func (s *SQLStore) getUserByCondition(condition sq.Eq) (*model.User, error) {
query := s.getQueryBuilder().
Select("id", "username", "email", "password", "mfa_secret", "auth_service", "auth_data", "props", "create_at", "update_at", "delete_at").
From("users").
2020-12-07 20:40:16 +01:00
Where(sq.Eq{"delete_at": 0}).
2020-10-28 14:35:41 +01:00
Where(condition)
row := query.QueryRow()
user := model.User{}
2020-11-06 16:46:35 +01:00
var propsBytes []byte
err := row.Scan(&user.ID, &user.Username, &user.Email, &user.Password, &user.MfaSecret, &user.AuthService, &user.AuthData, &propsBytes, &user.CreateAt, &user.UpdateAt, &user.DeleteAt)
if err != nil {
return nil, err
}
err = json.Unmarshal(propsBytes, &user.Props)
2020-10-28 14:35:41 +01:00
if err != nil {
return nil, err
}
return &user, nil
}
func (s *SQLStore) GetUserById(userID string) (*model.User, error) {
return s.getUserByCondition(sq.Eq{"id": userID})
}
func (s *SQLStore) GetUserByEmail(email string) (*model.User, error) {
return s.getUserByCondition(sq.Eq{"email": email})
}
func (s *SQLStore) GetUserByUsername(username string) (*model.User, error) {
return s.getUserByCondition(sq.Eq{"username": username})
}
func (s *SQLStore) CreateUser(user *model.User) error {
now := time.Now().Unix()
2020-11-06 16:46:35 +01:00
propsBytes, err := json.Marshal(user.Props)
if err != nil {
return err
}
2020-10-28 14:35:41 +01:00
query := s.getQueryBuilder().Insert("users").
Columns("id", "username", "email", "password", "mfa_secret", "auth_service", "auth_data", "props", "create_at", "update_at", "delete_at").
2020-11-06 16:46:35 +01:00
Values(user.ID, user.Username, user.Email, user.Password, user.MfaSecret, user.AuthService, user.AuthData, propsBytes, now, now, 0)
_, err = query.Exec()
return err
2020-10-28 14:35:41 +01:00
}
func (s *SQLStore) UpdateUser(user *model.User) error {
2020-11-06 16:46:35 +01:00
now := time.Now().Unix()
propsBytes, err := json.Marshal(user.Props)
if err != nil {
return err
}
query := s.getQueryBuilder().Update("users").
Set("username", user.Username).
Set("email", user.Email).
Set("props", propsBytes).
Set("update_at", now).
Where(sq.Eq{"id": user.ID})
2020-11-06 16:46:35 +01:00
_, err = query.Exec()
return err
2020-10-28 14:35:41 +01:00
}
func (s *SQLStore) UpdateUserPassword(username string, password string) error {
now := time.Now().Unix()
query := s.getQueryBuilder().Update("users").
Set("password", password).
Set("update_at", now).
Where(sq.Eq{"username": username})
_, err := query.Exec()
return err
}