2020-09-18 00:33:23 +03:00
// Copyright 2020 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package convert
import (
2021-11-28 14:58:28 +03:00
"code.gitea.io/gitea/models/perm"
2021-11-24 12:49:20 +03:00
user_model "code.gitea.io/gitea/models/user"
2020-09-18 00:33:23 +03:00
api "code.gitea.io/gitea/modules/structs"
)
2021-11-24 12:49:20 +03:00
// ToUser convert user_model.User to api.User
2021-03-27 19:45:26 +03:00
// if doer is set, private information is added if the doer has the permission to see it
2021-11-24 12:49:20 +03:00
func ToUser ( user , doer * user_model . User ) * api . User {
2021-03-27 19:45:26 +03:00
if user == nil {
return nil
}
authed := false
signed := false
if doer != nil {
signed = true
authed = doer . ID == user . ID || doer . IsAdmin
}
return toUser ( user , signed , authed )
}
2021-11-24 12:49:20 +03:00
// ToUsers convert list of user_model.User to list of api.User
func ToUsers ( doer * user_model . User , users [ ] * user_model . User ) [ ] * api . User {
2021-06-17 17:02:34 +03:00
result := make ( [ ] * api . User , len ( users ) )
for i := range users {
result [ i ] = ToUser ( users [ i ] , doer )
}
return result
}
2021-11-24 12:49:20 +03:00
// ToUserWithAccessMode convert user_model.User to api.User
2021-03-27 19:45:26 +03:00
// AccessMode is not none show add some more information
2021-11-28 14:58:28 +03:00
func ToUserWithAccessMode ( user * user_model . User , accessMode perm . AccessMode ) * api . User {
2020-10-17 07:23:08 +03:00
if user == nil {
return nil
}
2021-11-28 14:58:28 +03:00
return toUser ( user , accessMode != perm . AccessModeNone , false )
2021-03-27 19:45:26 +03:00
}
2021-11-24 12:49:20 +03:00
// toUser convert user_model.User to api.User
2021-03-27 19:45:26 +03:00
// signed shall only be set if requester is logged in. authed shall only be set if user is site admin or user himself
2021-11-24 12:49:20 +03:00
func toUser ( user * user_model . User , signed , authed bool ) * api . User {
2020-09-18 00:33:23 +03:00
result := & api . User {
2021-05-01 12:05:55 +03:00
ID : user . ID ,
UserName : user . Name ,
2021-10-22 10:17:35 +03:00
FullName : user . FullName ,
2021-05-01 12:05:55 +03:00
Email : user . GetEmail ( ) ,
AvatarURL : user . AvatarLink ( ) ,
Created : user . CreatedUnix . AsTime ( ) ,
Restricted : user . IsRestricted ,
Location : user . Location ,
Website : user . Website ,
Description : user . Description ,
2021-06-17 10:17:35 +03:00
// counter's
Followers : user . NumFollowers ,
Following : user . NumFollowing ,
StarredRepos : user . NumStars ,
2020-09-18 00:33:23 +03:00
}
2021-06-26 22:53:14 +03:00
result . Visibility = user . Visibility . String ( )
2020-09-18 00:33:23 +03:00
// hide primary email if API caller is anonymous or user keep email private
if signed && ( ! user . KeepEmailPrivate || authed ) {
result . Email = user . Email
}
2021-06-26 22:53:14 +03:00
2020-09-18 00:33:23 +03:00
// only site admin will get these information and possibly user himself
if authed {
result . IsAdmin = user . IsAdmin
result . LastLogin = user . LastLoginUnix . AsTime ( )
result . Language = user . Language
2021-05-11 03:22:29 +03:00
result . IsActive = user . IsActive
result . ProhibitLogin = user . ProhibitLogin
2020-09-18 00:33:23 +03:00
}
return result
}
2021-06-23 22:58:44 +03:00
// User2UserSettings return UserSettings based on a user
2021-11-24 12:49:20 +03:00
func User2UserSettings ( user * user_model . User ) api . UserSettings {
2021-06-23 22:58:44 +03:00
return api . UserSettings {
FullName : user . FullName ,
Website : user . Website ,
Location : user . Location ,
Language : user . Language ,
Description : user . Description ,
Theme : user . Theme ,
HideEmail : user . KeepEmailPrivate ,
HideActivity : user . KeepActivityPrivate ,
DiffViewStyle : user . DiffViewStyle ,
}
}
2022-04-29 15:24:38 +03:00
// ToUserAndPermission return User and its collaboration permission for a repository
func ToUserAndPermission ( user , doer * user_model . User , accessMode perm . AccessMode ) api . RepoCollaboratorPermission {
return api . RepoCollaboratorPermission {
User : ToUser ( user , doer ) ,
Permission : accessMode . String ( ) ,
RoleName : accessMode . String ( ) ,
}
}