You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

user.go 3.3KB

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