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  }