2020-06-06 16:18:54 +08:00
|
|
|
// Copyright 2020 The casbin Authors. All Rights Reserved.
|
|
|
|
//
|
|
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
// you may not use this file except in compliance with the License.
|
|
|
|
// You may obtain a copy of the License at
|
|
|
|
//
|
|
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
//
|
|
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
// See the License for the specific language governing permissions and
|
|
|
|
// limitations under the License.
|
|
|
|
|
|
|
|
package object
|
|
|
|
|
2021-03-02 00:08:28 +08:00
|
|
|
import (
|
2021-05-16 16:07:03 +08:00
|
|
|
"fmt"
|
2021-08-03 23:27:39 +08:00
|
|
|
"strconv"
|
2021-04-07 21:40:41 +08:00
|
|
|
"strings"
|
2021-05-04 22:27:20 +08:00
|
|
|
|
2021-08-25 00:59:01 +08:00
|
|
|
"github.com/casbin/casnode/casdoor"
|
2021-05-04 22:27:20 +08:00
|
|
|
"github.com/casbin/casnode/util"
|
2022-09-29 00:37:37 +08:00
|
|
|
"github.com/casdoor/casdoor-go-sdk/casdoorsdk"
|
2021-03-02 00:08:28 +08:00
|
|
|
)
|
2020-09-20 10:30:39 +08:00
|
|
|
|
2022-09-29 00:37:37 +08:00
|
|
|
func GetRankingRich() ([]*casdoorsdk.User, error) {
|
2021-08-28 11:26:44 +08:00
|
|
|
return casdoor.GetSortedUsers("score", 25), nil
|
2021-03-02 00:08:28 +08:00
|
|
|
}
|
|
|
|
|
2022-09-29 00:37:37 +08:00
|
|
|
func GetRankingPlayer() ([]*casdoorsdk.User, error) {
|
2022-08-09 20:10:21 +08:00
|
|
|
return casdoor.GetSortedUsers("karma", 25), nil
|
2022-03-02 19:13:58 +08:00
|
|
|
}
|
|
|
|
|
2022-09-29 00:37:37 +08:00
|
|
|
func GetUser(id string) *casdoorsdk.User {
|
2021-08-25 00:59:01 +08:00
|
|
|
user := casdoor.GetUser(id)
|
2021-08-21 16:06:49 +08:00
|
|
|
return user
|
2020-07-07 00:33:29 +08:00
|
|
|
}
|
|
|
|
|
2022-09-29 00:37:37 +08:00
|
|
|
func GetUsers() []*casdoorsdk.User {
|
2021-08-25 00:59:01 +08:00
|
|
|
users := casdoor.GetUsers()
|
2021-08-21 16:06:49 +08:00
|
|
|
return users
|
2020-06-06 16:18:54 +08:00
|
|
|
}
|
|
|
|
|
2021-08-21 16:06:49 +08:00
|
|
|
func GetMemberNum() int {
|
2021-08-28 11:26:44 +08:00
|
|
|
return casdoor.GetUserCount()
|
2020-10-06 01:41:48 +08:00
|
|
|
}
|
|
|
|
|
2022-09-29 00:37:37 +08:00
|
|
|
func UpdateMemberEditorType(user *casdoorsdk.User, editorType string) (bool, error) {
|
2021-08-22 10:35:04 +08:00
|
|
|
if user == nil {
|
|
|
|
return false, fmt.Errorf("user is nil")
|
2021-02-20 20:56:46 +08:00
|
|
|
}
|
|
|
|
|
2021-08-21 21:07:41 +08:00
|
|
|
SetUserField(user, "editorType", editorType)
|
2022-09-29 00:37:37 +08:00
|
|
|
return casdoorsdk.UpdateUserForColumns(user, []string{"properties"})
|
2021-02-20 20:56:46 +08:00
|
|
|
}
|
|
|
|
|
2022-09-29 00:37:37 +08:00
|
|
|
func GetMemberEditorType(user *casdoorsdk.User) string {
|
2021-08-21 16:06:49 +08:00
|
|
|
return GetUserField(user, "editorType")
|
2021-02-20 20:56:46 +08:00
|
|
|
}
|
|
|
|
|
2022-09-29 00:37:37 +08:00
|
|
|
func UpdateMemberLanguage(user *casdoorsdk.User, language string) (bool, error) {
|
2021-08-21 21:07:41 +08:00
|
|
|
SetUserField(user, "language", language)
|
2022-09-29 00:37:37 +08:00
|
|
|
return casdoorsdk.UpdateUserForColumns(user, []string{"properties"})
|
2020-07-17 13:14:40 +08:00
|
|
|
}
|
|
|
|
|
2022-09-29 00:37:37 +08:00
|
|
|
func GetMemberLanguage(user *casdoorsdk.User) string {
|
2021-08-21 21:07:41 +08:00
|
|
|
return GetUserField(user, "language")
|
2020-06-06 16:18:54 +08:00
|
|
|
}
|
2020-06-28 20:24:22 +08:00
|
|
|
|
2021-06-07 20:56:32 +08:00
|
|
|
// GetMemberEmailReminder return member's email reminder status, and his email address.
|
2020-10-31 02:18:21 +08:00
|
|
|
func GetMemberEmailReminder(id string) (bool, string) {
|
2021-08-21 21:07:41 +08:00
|
|
|
user := GetUser(id)
|
|
|
|
if user == nil {
|
2020-10-31 02:18:21 +08:00
|
|
|
return false, ""
|
2020-10-06 01:41:48 +08:00
|
|
|
}
|
|
|
|
|
2021-08-21 21:07:41 +08:00
|
|
|
return true, user.Email
|
2021-06-07 20:56:32 +08:00
|
|
|
}
|
2020-06-28 20:24:22 +08:00
|
|
|
|
2022-09-29 00:37:37 +08:00
|
|
|
func GetUserByEmail(email string) *casdoorsdk.User {
|
2021-08-28 11:26:44 +08:00
|
|
|
return casdoor.GetUserByEmail(email)
|
2020-06-28 20:24:22 +08:00
|
|
|
}
|
2020-07-05 18:21:18 +08:00
|
|
|
|
2022-09-29 00:37:37 +08:00
|
|
|
func GetMemberCheckinDate(user *casdoorsdk.User) string {
|
2021-08-21 21:07:41 +08:00
|
|
|
return GetUserField(user, "checkinDate")
|
2020-07-25 20:08:52 +08:00
|
|
|
}
|
|
|
|
|
2022-09-29 00:37:37 +08:00
|
|
|
func UpdateMemberCheckinDate(user *casdoorsdk.User, checkinDate string) (bool, error) {
|
2021-08-21 21:07:41 +08:00
|
|
|
SetUserField(user, "checkinDate", checkinDate)
|
2022-09-29 00:37:37 +08:00
|
|
|
return casdoorsdk.UpdateUserForColumns(user, []string{"properties"})
|
2020-07-25 20:08:52 +08:00
|
|
|
}
|
2020-07-31 16:13:08 +08:00
|
|
|
|
2022-09-29 00:37:37 +08:00
|
|
|
func GetUserName(user *casdoorsdk.User) string {
|
2021-08-21 21:07:41 +08:00
|
|
|
if user == nil {
|
2021-08-22 10:35:04 +08:00
|
|
|
return ""
|
2020-07-31 16:13:08 +08:00
|
|
|
}
|
2021-06-07 20:56:32 +08:00
|
|
|
|
2021-08-25 00:28:08 +08:00
|
|
|
return user.Name
|
2020-07-31 16:13:08 +08:00
|
|
|
}
|
2020-08-05 11:59:51 +08:00
|
|
|
|
2022-09-29 00:37:37 +08:00
|
|
|
func CheckIsAdmin(user *casdoorsdk.User) bool {
|
2021-08-21 21:07:41 +08:00
|
|
|
if user == nil {
|
2021-08-22 10:35:04 +08:00
|
|
|
return false
|
2020-08-10 19:42:26 +08:00
|
|
|
}
|
2021-06-07 20:56:32 +08:00
|
|
|
|
2021-08-22 10:35:04 +08:00
|
|
|
return user.IsAdmin
|
2020-08-10 19:42:26 +08:00
|
|
|
}
|
2020-08-14 19:24:48 +08:00
|
|
|
|
2022-09-29 00:37:37 +08:00
|
|
|
func GetMemberFileQuota(user *casdoorsdk.User) int {
|
2021-08-21 21:07:41 +08:00
|
|
|
if user == nil {
|
|
|
|
return 0
|
2020-09-20 10:30:39 +08:00
|
|
|
}
|
2021-06-07 20:56:32 +08:00
|
|
|
|
2021-08-22 10:35:04 +08:00
|
|
|
return GetUserFieldInt(user, "fileQuota")
|
2020-09-20 10:30:39 +08:00
|
|
|
}
|
2020-11-06 10:19:16 +08:00
|
|
|
|
|
|
|
// UpdateMemberOnlineStatus updates member's online information.
|
2022-09-29 00:37:37 +08:00
|
|
|
func UpdateMemberOnlineStatus(user *casdoorsdk.User, isOnline bool, lastActionDate string) (bool, error) {
|
2021-08-25 00:28:08 +08:00
|
|
|
if user == nil {
|
2021-08-22 10:35:04 +08:00
|
|
|
return false, fmt.Errorf("user is nil")
|
2021-06-07 20:56:32 +08:00
|
|
|
}
|
2020-11-06 10:19:16 +08:00
|
|
|
|
2021-08-21 21:07:41 +08:00
|
|
|
user.IsOnline = isOnline
|
|
|
|
SetUserField(user, "lastActionDate", lastActionDate)
|
2022-09-29 00:37:37 +08:00
|
|
|
return casdoorsdk.UpdateUserForColumns(user, []string{"isOnline", "properties"})
|
2020-11-06 10:19:16 +08:00
|
|
|
}
|
|
|
|
|
2021-08-21 21:07:41 +08:00
|
|
|
func GetOnlineUserCount() int {
|
2021-08-28 11:26:44 +08:00
|
|
|
return casdoor.GetOnlineUserCount()
|
2020-11-06 10:19:16 +08:00
|
|
|
}
|
2021-04-13 22:56:27 +08:00
|
|
|
|
|
|
|
type UpdateListItem struct {
|
2021-05-26 20:25:12 +08:00
|
|
|
Table string
|
2021-04-13 22:56:27 +08:00
|
|
|
Attribute string
|
|
|
|
}
|
|
|
|
|
2022-09-29 00:37:37 +08:00
|
|
|
func AddMemberByNameAndEmailIfNotExist(username, email string) (*casdoorsdk.User, error) {
|
2021-05-04 22:27:20 +08:00
|
|
|
username = strings.ReplaceAll(username, " ", "")
|
2021-08-21 12:44:19 +08:00
|
|
|
if username == "" {
|
|
|
|
return nil, fmt.Errorf("username is empty")
|
|
|
|
}
|
|
|
|
|
2021-05-04 22:27:20 +08:00
|
|
|
email = strings.ReplaceAll(email, " ", "")
|
2021-08-21 12:44:19 +08:00
|
|
|
if email == "" {
|
|
|
|
return nil, fmt.Errorf("email is empty")
|
2021-05-04 22:27:20 +08:00
|
|
|
}
|
2021-08-21 12:44:19 +08:00
|
|
|
|
2022-09-29 00:37:37 +08:00
|
|
|
user, err := casdoorsdk.GetUser(username)
|
2021-08-21 12:44:19 +08:00
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
2021-05-04 22:27:20 +08:00
|
|
|
}
|
2021-08-21 12:44:19 +08:00
|
|
|
if user != nil {
|
|
|
|
return user, nil
|
2021-05-04 22:27:20 +08:00
|
|
|
}
|
2021-08-21 12:44:19 +08:00
|
|
|
|
2021-05-04 22:27:20 +08:00
|
|
|
username = strings.Split(email, "@")[0]
|
2022-09-29 00:37:37 +08:00
|
|
|
user, err = casdoorsdk.GetUser(username)
|
2021-08-21 12:44:19 +08:00
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
if user != nil {
|
|
|
|
return user, nil
|
|
|
|
}
|
|
|
|
|
2021-08-28 11:26:44 +08:00
|
|
|
newUser := GetUserByEmail(email)
|
2021-08-21 12:44:19 +08:00
|
|
|
if newUser == nil {
|
|
|
|
properties := map[string]string{}
|
|
|
|
properties["emailVerifiedTime"] = util.GetCurrentTime()
|
|
|
|
properties["fileQuota"] = strconv.Itoa(DefaultUploadFileQuota)
|
|
|
|
properties["renameQuota"] = strconv.Itoa(DefaultRenameQuota)
|
|
|
|
|
2022-09-29 00:37:37 +08:00
|
|
|
newUser = &casdoorsdk.User{
|
2021-08-21 12:44:19 +08:00
|
|
|
Name: username,
|
2021-05-26 20:25:12 +08:00
|
|
|
CreatedTime: util.GetCurrentTime(),
|
2021-08-21 12:44:19 +08:00
|
|
|
UpdatedTime: util.GetCurrentTime(),
|
|
|
|
Id: "",
|
|
|
|
Type: "",
|
|
|
|
Password: "",
|
|
|
|
DisplayName: "",
|
2021-08-30 01:12:03 +08:00
|
|
|
Avatar: "",
|
2021-05-26 20:25:12 +08:00
|
|
|
Email: email,
|
2021-08-21 12:44:19 +08:00
|
|
|
Phone: "",
|
|
|
|
Location: "",
|
|
|
|
Address: nil,
|
|
|
|
Affiliation: "",
|
|
|
|
Title: "",
|
|
|
|
Homepage: "",
|
|
|
|
Tag: "",
|
2021-08-28 14:06:13 +08:00
|
|
|
Score: getInitScore(),
|
2021-08-21 12:44:19 +08:00
|
|
|
Ranking: GetMemberNum() + 1,
|
|
|
|
IsOnline: false,
|
|
|
|
IsAdmin: false,
|
|
|
|
IsGlobalAdmin: false,
|
|
|
|
IsForbidden: false,
|
|
|
|
SignupApplication: CasdoorApplication,
|
|
|
|
Properties: properties,
|
|
|
|
}
|
|
|
|
|
2022-09-29 00:37:37 +08:00
|
|
|
_, err = casdoorsdk.AddUser(newUser)
|
2021-08-21 12:44:19 +08:00
|
|
|
if err != nil {
|
|
|
|
return newUser, err
|
2021-05-04 22:27:20 +08:00
|
|
|
}
|
|
|
|
}
|
2021-08-21 12:44:19 +08:00
|
|
|
|
|
|
|
return newUser, nil
|
2021-05-04 22:27:20 +08:00
|
|
|
}
|