code.gitea.io/gitea@v1.22.3/services/convert/user.go (about) 1 // Copyright 2020 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package convert 5 6 import ( 7 "context" 8 9 "code.gitea.io/gitea/models/perm" 10 user_model "code.gitea.io/gitea/models/user" 11 api "code.gitea.io/gitea/modules/structs" 12 ) 13 14 // ToUser convert user_model.User to api.User 15 // if doer is set, private information is added if the doer has the permission to see it 16 func ToUser(ctx context.Context, user, doer *user_model.User) *api.User { 17 if user == nil { 18 return nil 19 } 20 authed := false 21 signed := false 22 if doer != nil { 23 signed = true 24 authed = doer.ID == user.ID || doer.IsAdmin 25 } 26 return toUser(ctx, user, signed, authed) 27 } 28 29 // ToUsers convert list of user_model.User to list of api.User 30 func ToUsers(ctx context.Context, doer *user_model.User, users []*user_model.User) []*api.User { 31 result := make([]*api.User, len(users)) 32 for i := range users { 33 result[i] = ToUser(ctx, users[i], doer) 34 } 35 return result 36 } 37 38 // ToUserWithAccessMode convert user_model.User to api.User 39 // AccessMode is not none show add some more information 40 func ToUserWithAccessMode(ctx context.Context, user *user_model.User, accessMode perm.AccessMode) *api.User { 41 if user == nil { 42 return nil 43 } 44 return toUser(ctx, user, accessMode != perm.AccessModeNone, false) 45 } 46 47 // toUser convert user_model.User to api.User 48 // signed shall only be set if requester is logged in. authed shall only be set if user is site admin or user himself 49 func toUser(ctx context.Context, user *user_model.User, signed, authed bool) *api.User { 50 result := &api.User{ 51 ID: user.ID, 52 UserName: user.Name, 53 FullName: user.FullName, 54 Email: user.GetPlaceholderEmail(), 55 AvatarURL: user.AvatarLink(ctx), 56 HTMLURL: user.HTMLURL(), 57 Created: user.CreatedUnix.AsTime(), 58 Restricted: user.IsRestricted, 59 Location: user.Location, 60 Website: user.Website, 61 Description: user.Description, 62 // counter's 63 Followers: user.NumFollowers, 64 Following: user.NumFollowing, 65 StarredRepos: user.NumStars, 66 } 67 68 result.Visibility = user.Visibility.String() 69 70 // hide primary email if API caller is anonymous or user keep email private 71 if signed && (!user.KeepEmailPrivate || authed) { 72 result.Email = user.Email 73 } 74 75 // only site admin will get these information and possibly user himself 76 if authed { 77 result.IsAdmin = user.IsAdmin 78 result.LoginName = user.LoginName 79 result.SourceID = user.LoginSource 80 result.LastLogin = user.LastLoginUnix.AsTime() 81 result.Language = user.Language 82 result.IsActive = user.IsActive 83 result.ProhibitLogin = user.ProhibitLogin 84 } 85 return result 86 } 87 88 // User2UserSettings return UserSettings based on a user 89 func User2UserSettings(user *user_model.User) api.UserSettings { 90 return api.UserSettings{ 91 FullName: user.FullName, 92 Website: user.Website, 93 Location: user.Location, 94 Language: user.Language, 95 Description: user.Description, 96 Theme: user.Theme, 97 HideEmail: user.KeepEmailPrivate, 98 HideActivity: user.KeepActivityPrivate, 99 DiffViewStyle: user.DiffViewStyle, 100 } 101 } 102 103 // ToUserAndPermission return User and its collaboration permission for a repository 104 func ToUserAndPermission(ctx context.Context, user, doer *user_model.User, accessMode perm.AccessMode) api.RepoCollaboratorPermission { 105 return api.RepoCollaboratorPermission{ 106 User: ToUser(ctx, user, doer), 107 Permission: accessMode.ToString(), 108 RoleName: accessMode.ToString(), 109 } 110 }