casnode/object/member.go

207 lines
5.0 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{"is_online", "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,
IsForbidden: false,
SignupApplication: CasdoorApplication,
Properties: properties,
}
_, err = casdoorsdk.AddUser(newUser)
if err != nil {
return newUser, err
}
}
return newUser, nil
}