mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-11-28 12:16:17 +01:00
commit
fd53028139
1 changed files with 46 additions and 18 deletions
|
@ -12,6 +12,7 @@ import (
|
|||
"errors"
|
||||
"fmt"
|
||||
"image"
|
||||
// Needed for jpeg support
|
||||
_ "image/jpeg"
|
||||
"image/png"
|
||||
"os"
|
||||
|
@ -34,20 +35,35 @@ import (
|
|||
"code.gitea.io/gitea/modules/setting"
|
||||
)
|
||||
|
||||
// UserType defines the user type
|
||||
type UserType int
|
||||
|
||||
const (
|
||||
// UserTypeIndividual defines an individual user
|
||||
UserTypeIndividual UserType = iota // Historic reason to make it starts at 0.
|
||||
|
||||
// UserTypeOrganization defines an organization
|
||||
UserTypeOrganization
|
||||
)
|
||||
|
||||
var (
|
||||
ErrUserNotKeyOwner = errors.New("User does not the owner of public key")
|
||||
ErrEmailNotExist = errors.New("E-mail does not exist")
|
||||
ErrEmailNotActivated = errors.New("E-mail address has not been activated")
|
||||
ErrUserNameIllegal = errors.New("User name contains illegal characters")
|
||||
// ErrUserNotKeyOwner user does not own this key error
|
||||
ErrUserNotKeyOwner = errors.New("User does not own this public key")
|
||||
|
||||
// ErrEmailNotExist e-mail does not exist error
|
||||
ErrEmailNotExist = errors.New("E-mail does not exist")
|
||||
|
||||
// ErrEmailNotActivated e-mail address has not been activated error
|
||||
ErrEmailNotActivated = errors.New("E-mail address has not been activated")
|
||||
|
||||
// ErrUserNameIllegal user name contains illegal characters error
|
||||
ErrUserNameIllegal = errors.New("User name contains illegal characters")
|
||||
|
||||
// ErrLoginSourceNotActived login source is not actived error
|
||||
ErrLoginSourceNotActived = errors.New("Login source is not actived")
|
||||
ErrUnsupportedLoginType = errors.New("Login source is unknown")
|
||||
|
||||
// ErrUnsupportedLoginType login source is unknown error
|
||||
ErrUnsupportedLoginType = errors.New("Login source is unknown")
|
||||
)
|
||||
|
||||
// User represents the object of individual and member of organization.
|
||||
|
@ -112,11 +128,13 @@ type User struct {
|
|||
DiffViewStyle string `xorm:"NOT NULL DEFAULT ''"`
|
||||
}
|
||||
|
||||
// BeforeInsert is invoked from XORM before inserting an object of this type.
|
||||
func (u *User) BeforeInsert() {
|
||||
u.CreatedUnix = time.Now().Unix()
|
||||
u.UpdatedUnix = u.CreatedUnix
|
||||
}
|
||||
|
||||
// BeforeUpdate is invoked from XORM before updating this object.
|
||||
func (u *User) BeforeUpdate() {
|
||||
if u.MaxRepoCreation < -1 {
|
||||
u.MaxRepoCreation = -1
|
||||
|
@ -124,16 +142,18 @@ func (u *User) BeforeUpdate() {
|
|||
u.UpdatedUnix = time.Now().Unix()
|
||||
}
|
||||
|
||||
// Set time to last login
|
||||
// SetLastLogin set time to last login
|
||||
func (u *User) SetLastLogin() {
|
||||
u.LastLoginUnix = time.Now().Unix()
|
||||
}
|
||||
|
||||
// UpdateDiffViewStyle updates the users diff view style
|
||||
func (u *User) UpdateDiffViewStyle(style string) error {
|
||||
u.DiffViewStyle = style
|
||||
return UpdateUser(u)
|
||||
}
|
||||
|
||||
// AfterSet is invoked from XORM after setting the value of a field of this object.
|
||||
func (u *User) AfterSet(colName string, _ xorm.Cell) {
|
||||
switch colName {
|
||||
case "full_name":
|
||||
|
@ -147,6 +167,7 @@ func (u *User) AfterSet(colName string, _ xorm.Cell) {
|
|||
}
|
||||
}
|
||||
|
||||
// APIFormat converts a User to api.User
|
||||
func (u *User) APIFormat() *api.User {
|
||||
return &api.User{
|
||||
ID: u.ID,
|
||||
|
@ -157,7 +178,7 @@ func (u *User) APIFormat() *api.User {
|
|||
}
|
||||
}
|
||||
|
||||
// returns true if user login type is LoginPlain.
|
||||
// IsLocal returns true if user login type is LoginPlain.
|
||||
func (u *User) IsLocal() bool {
|
||||
return u.LoginType <= LoginPlain
|
||||
}
|
||||
|
@ -168,6 +189,7 @@ func (u *User) HasForkedRepo(repoID int64) bool {
|
|||
return has
|
||||
}
|
||||
|
||||
// RepoCreationNum returns the number of repositories created by the user
|
||||
func (u *User) RepoCreationNum() int {
|
||||
if u.MaxRepoCreation <= -1 {
|
||||
return setting.Repository.MaxCreationLimit
|
||||
|
@ -175,6 +197,7 @@ func (u *User) RepoCreationNum() int {
|
|||
return u.MaxRepoCreation
|
||||
}
|
||||
|
||||
// CanCreateRepo returns if user login can create a repository
|
||||
func (u *User) CanCreateRepo() bool {
|
||||
if u.MaxRepoCreation <= -1 {
|
||||
if setting.Repository.MaxCreationLimit <= -1 {
|
||||
|
@ -261,15 +284,15 @@ func (u *User) GenerateRandomAvatar() error {
|
|||
// which includes app sub-url as prefix. However, it is possible
|
||||
// to return full URL if user enables Gravatar-like service.
|
||||
func (u *User) RelAvatarLink() string {
|
||||
defaultImgUrl := setting.AppSubURL + "/img/avatar_default.png"
|
||||
defaultImgURL := setting.AppSubURL + "/img/avatar_default.png"
|
||||
if u.ID == -1 {
|
||||
return defaultImgUrl
|
||||
return defaultImgURL
|
||||
}
|
||||
|
||||
switch {
|
||||
case u.UseCustomAvatar:
|
||||
if !com.IsExist(u.CustomAvatarPath()) {
|
||||
return defaultImgUrl
|
||||
return defaultImgURL
|
||||
}
|
||||
return setting.AppSubURL + "/avatars/" + com.ToStr(u.ID)
|
||||
case setting.DisableGravatar, setting.OfflineMode:
|
||||
|
@ -293,7 +316,7 @@ func (u *User) AvatarLink() string {
|
|||
return link
|
||||
}
|
||||
|
||||
// User.GetFollwoers returns range of user's followers.
|
||||
// GetFollowers returns range of user's followers.
|
||||
func (u *User) GetFollowers(page int) ([]*User, error) {
|
||||
users := make([]*User, 0, ItemsPerPage)
|
||||
sess := x.
|
||||
|
@ -307,6 +330,7 @@ func (u *User) GetFollowers(page int) ([]*User, error) {
|
|||
return users, sess.Find(&users)
|
||||
}
|
||||
|
||||
// IsFollowing returns true if user is following followID.
|
||||
func (u *User) IsFollowing(followID int64) bool {
|
||||
return IsFollowing(u.ID, followID)
|
||||
}
|
||||
|
@ -418,13 +442,13 @@ func (u *User) IsOrganization() bool {
|
|||
}
|
||||
|
||||
// IsUserOrgOwner returns true if user is in the owner team of given organization.
|
||||
func (u *User) IsUserOrgOwner(orgId int64) bool {
|
||||
return IsOrganizationOwner(orgId, u.ID)
|
||||
func (u *User) IsUserOrgOwner(orgID int64) bool {
|
||||
return IsOrganizationOwner(orgID, u.ID)
|
||||
}
|
||||
|
||||
// IsPublicMember returns true if user public his/her membership in give organization.
|
||||
func (u *User) IsPublicMember(orgId int64) bool {
|
||||
return IsPublicMembership(orgId, u.ID)
|
||||
func (u *User) IsPublicMember(orgID int64) bool {
|
||||
return IsPublicMembership(orgID, u.ID)
|
||||
}
|
||||
|
||||
func (u *User) getOrganizationCount(e Engine) (int64, error) {
|
||||
|
@ -444,7 +468,7 @@ func (u *User) GetRepositories(page, pageSize int) (err error) {
|
|||
return err
|
||||
}
|
||||
|
||||
// GetRepositories returns mirror repositories that user owns, including private repositories.
|
||||
// GetMirrorRepositories returns mirror repositories that user owns, including private repositories.
|
||||
func (u *User) GetMirrorRepositories() ([]*Repository, error) {
|
||||
return GetUserMirrorRepositories(u.ID)
|
||||
}
|
||||
|
@ -481,6 +505,7 @@ func (u *User) DisplayName() string {
|
|||
return u.Name
|
||||
}
|
||||
|
||||
// ShortName ellipses username to length
|
||||
func (u *User) ShortName(length int) string {
|
||||
return base.EllipsisString(u.Name, length)
|
||||
}
|
||||
|
@ -542,6 +567,7 @@ func isUsableName(names, patterns []string, name string) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// IsUsableUsername returns an error when a username is reserved
|
||||
func IsUsableUsername(name string) error {
|
||||
return isUsableName(reservedUsernames, reservedUserPatterns, name)
|
||||
}
|
||||
|
@ -630,7 +656,7 @@ func getVerifyUser(code string) (user *User) {
|
|||
return nil
|
||||
}
|
||||
|
||||
// verify active code when active account
|
||||
// VerifyUserActiveCode verifies active code when active account
|
||||
func VerifyUserActiveCode(code string) (user *User) {
|
||||
minutes := setting.Service.ActiveCodeLives
|
||||
|
||||
|
@ -646,7 +672,7 @@ func VerifyUserActiveCode(code string) (user *User) {
|
|||
return nil
|
||||
}
|
||||
|
||||
// verify active code when active account
|
||||
// VerifyActiveEmailCode verifies active email code when active account
|
||||
func VerifyActiveEmailCode(code, email string) *EmailAddress {
|
||||
minutes := setting.Service.ActiveCodeLives
|
||||
|
||||
|
@ -1063,6 +1089,7 @@ func GetUserByEmail(email string) (*User, error) {
|
|||
return nil, ErrUserNotExist{0, email, 0}
|
||||
}
|
||||
|
||||
// SearchUserOptions contains the options for searching
|
||||
type SearchUserOptions struct {
|
||||
Keyword string
|
||||
Type UserType
|
||||
|
@ -1123,6 +1150,7 @@ type Follow struct {
|
|||
FollowID int64 `xorm:"UNIQUE(follow)"`
|
||||
}
|
||||
|
||||
// IsFollowing returns true if user is following followID.
|
||||
func IsFollowing(userID, followID int64) bool {
|
||||
has, _ := x.Get(&Follow{UserID: userID, FollowID: followID})
|
||||
return has
|
||||
|
|
Loading…
Reference in a new issue