mirror of https://github.com/casbin/casnode.git
208 lines
5.1 KiB
Go
208 lines
5.1 KiB
Go
// 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
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"github.com/casbin/casnode/casdoor"
|
|
"github.com/casbin/casnode/util"
|
|
"github.com/casdoor/casdoor-go-sdk/casdoorsdk"
|
|
)
|
|
|
|
func GetRankingRich() ([]*casdoorsdk.User, error) {
|
|
return casdoor.GetSortedUsers("score", 25), nil
|
|
}
|
|
|
|
func GetRankingPlayer() ([]*casdoorsdk.User, error) {
|
|
return casdoor.GetSortedUsers("karma", 25), nil
|
|
}
|
|
|
|
func GetUser(id string) *casdoorsdk.User {
|
|
user := casdoor.GetUser(id)
|
|
return user
|
|
}
|
|
|
|
func GetUsers() []*casdoorsdk.User {
|
|
users := casdoor.GetUsers()
|
|
return users
|
|
}
|
|
|
|
func GetMemberNum() int {
|
|
return casdoor.GetUserCount()
|
|
}
|
|
|
|
func UpdateMemberEditorType(user *casdoorsdk.User, editorType string) (bool, error) {
|
|
if user == nil {
|
|
return false, fmt.Errorf("user is nil")
|
|
}
|
|
|
|
SetUserField(user, "editorType", editorType)
|
|
return casdoorsdk.UpdateUserForColumns(user, []string{"properties"})
|
|
}
|
|
|
|
func GetMemberEditorType(user *casdoorsdk.User) string {
|
|
return GetUserField(user, "editorType")
|
|
}
|
|
|
|
func UpdateMemberLanguage(user *casdoorsdk.User, language string) (bool, error) {
|
|
SetUserField(user, "language", language)
|
|
return casdoorsdk.UpdateUserForColumns(user, []string{"properties"})
|
|
}
|
|
|
|
func GetMemberLanguage(user *casdoorsdk.User) string {
|
|
return GetUserField(user, "language")
|
|
}
|
|
|
|
// GetMemberEmailReminder return member's email reminder status, and his email address.
|
|
func GetMemberEmailReminder(id string) (bool, string) {
|
|
user := GetUser(id)
|
|
if user == nil {
|
|
return false, ""
|
|
}
|
|
|
|
return true, user.Email
|
|
}
|
|
|
|
func GetUserByEmail(email string) *casdoorsdk.User {
|
|
return casdoor.GetUserByEmail(email)
|
|
}
|
|
|
|
func GetMemberCheckinDate(user *casdoorsdk.User) string {
|
|
return GetUserField(user, "checkinDate")
|
|
}
|
|
|
|
func UpdateMemberCheckinDate(user *casdoorsdk.User, checkinDate string) (bool, error) {
|
|
SetUserField(user, "checkinDate", checkinDate)
|
|
return casdoorsdk.UpdateUserForColumns(user, []string{"properties"})
|
|
}
|
|
|
|
func GetUserName(user *casdoorsdk.User) string {
|
|
if user == nil {
|
|
return ""
|
|
}
|
|
|
|
return user.Name
|
|
}
|
|
|
|
func CheckIsAdmin(user *casdoorsdk.User) bool {
|
|
if user == nil {
|
|
return false
|
|
}
|
|
|
|
return user.IsAdmin
|
|
}
|
|
|
|
func GetMemberFileQuota(user *casdoorsdk.User) int {
|
|
if user == nil {
|
|
return 0
|
|
}
|
|
|
|
return GetUserFieldInt(user, "fileQuota")
|
|
}
|
|
|
|
// UpdateMemberOnlineStatus updates member's online information.
|
|
func UpdateMemberOnlineStatus(user *casdoorsdk.User, isOnline bool, lastActionDate string) (bool, error) {
|
|
if user == nil {
|
|
return false, fmt.Errorf("user is nil")
|
|
}
|
|
|
|
user.IsOnline = isOnline
|
|
SetUserField(user, "lastActionDate", lastActionDate)
|
|
return casdoorsdk.UpdateUserForColumns(user, []string{"isOnline", "properties"})
|
|
}
|
|
|
|
func GetOnlineUserCount() int {
|
|
return casdoor.GetOnlineUserCount()
|
|
}
|
|
|
|
type UpdateListItem struct {
|
|
Table string
|
|
Attribute string
|
|
}
|
|
|
|
func AddMemberByNameAndEmailIfNotExist(username, email string) (*casdoorsdk.User, error) {
|
|
username = strings.ReplaceAll(username, " ", "")
|
|
if username == "" {
|
|
return nil, fmt.Errorf("username is empty")
|
|
}
|
|
|
|
email = strings.ReplaceAll(email, " ", "")
|
|
if email == "" {
|
|
return nil, fmt.Errorf("email is empty")
|
|
}
|
|
|
|
user, err := casdoorsdk.GetUser(username)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if user != nil {
|
|
return user, nil
|
|
}
|
|
|
|
username = strings.Split(email, "@")[0]
|
|
user, err = casdoorsdk.GetUser(username)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if user != nil {
|
|
return user, nil
|
|
}
|
|
|
|
newUser := GetUserByEmail(email)
|
|
if newUser == nil {
|
|
properties := map[string]string{}
|
|
properties["emailVerifiedTime"] = util.GetCurrentTime()
|
|
properties["fileQuota"] = strconv.Itoa(DefaultUploadFileQuota)
|
|
properties["renameQuota"] = strconv.Itoa(DefaultRenameQuota)
|
|
|
|
newUser = &casdoorsdk.User{
|
|
Name: username,
|
|
CreatedTime: util.GetCurrentTime(),
|
|
UpdatedTime: util.GetCurrentTime(),
|
|
Id: "",
|
|
Type: "",
|
|
Password: "",
|
|
DisplayName: "",
|
|
Avatar: "",
|
|
Email: email,
|
|
Phone: "",
|
|
Location: "",
|
|
Address: nil,
|
|
Affiliation: "",
|
|
Title: "",
|
|
Homepage: "",
|
|
Tag: "",
|
|
Score: getInitScore(),
|
|
Ranking: GetMemberNum() + 1,
|
|
IsOnline: false,
|
|
IsAdmin: false,
|
|
IsGlobalAdmin: false,
|
|
IsForbidden: false,
|
|
SignupApplication: CasdoorApplication,
|
|
Properties: properties,
|
|
}
|
|
|
|
_, err = casdoorsdk.AddUser(newUser)
|
|
if err != nil {
|
|
return newUser, err
|
|
}
|
|
}
|
|
|
|
return newUser, nil
|
|
}
|