helpers.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. package logic
  2. import (
  3. "context"
  4. "database/sql"
  5. "errors"
  6. "strings"
  7. "time"
  8. "udeServer/internal/apierr"
  9. "udeServer/internal/model"
  10. "udeServer/internal/types"
  11. )
  12. func nullString(v string) sql.NullString {
  13. return sql.NullString{String: v, Valid: v != ""}
  14. }
  15. func nullInt64(v int64) sql.NullInt64 {
  16. return sql.NullInt64{Int64: v, Valid: v != 0}
  17. }
  18. func stringValue(v sql.NullString) string {
  19. if !v.Valid {
  20. return ""
  21. }
  22. return v.String
  23. }
  24. func int64Value(v sql.NullInt64) int64 {
  25. if !v.Valid {
  26. return 0
  27. }
  28. return v.Int64
  29. }
  30. func timeValue(t time.Time) string {
  31. if t.IsZero() {
  32. return ""
  33. }
  34. return t.Format(time.RFC3339)
  35. }
  36. func checkId(id int64) error {
  37. if id <= 0 {
  38. return apierr.BadRequest("id must be greater than 0")
  39. }
  40. return nil
  41. }
  42. func findDirectory(ctx context.Context, m model.TDirectoryModel, id int64) (*model.TDirectory, error) {
  43. data, err := m.FindOne(ctx, id)
  44. if errors.Is(err, model.ErrNotFound) {
  45. return nil, apierr.NotFound("directory", id)
  46. }
  47. if err != nil {
  48. return nil, err
  49. }
  50. return data, nil
  51. }
  52. func findKey(ctx context.Context, m model.TKeyModel, id int64) (*model.TKey, error) {
  53. data, err := m.FindOne(ctx, id)
  54. if errors.Is(err, model.ErrNotFound) {
  55. return nil, apierr.NotFound("key", id)
  56. }
  57. if err != nil {
  58. return nil, err
  59. }
  60. return data, nil
  61. }
  62. func findService(ctx context.Context, m model.TServiceModel, id int64) (*model.TService, error) {
  63. data, err := m.FindOne(ctx, id)
  64. if errors.Is(err, model.ErrNotFound) {
  65. return nil, apierr.NotFound("service", id)
  66. }
  67. if err != nil {
  68. return nil, err
  69. }
  70. return data, nil
  71. }
  72. func toDirectoryResp(data *model.TDirectory) *types.DirectoryResp {
  73. return &types.DirectoryResp{
  74. Id: data.Id,
  75. ServiceId: int64Value(data.ServiceId),
  76. Directory: stringValue(data.Directory),
  77. }
  78. }
  79. func toKeyResp(data *model.TKey) *types.KeyResp {
  80. return &types.KeyResp{
  81. Id: data.Id,
  82. Iden: stringValue(data.Iden),
  83. Name: stringValue(data.Name),
  84. Content: stringValue(data.Content),
  85. Status: stringValue(data.Status),
  86. CreateAt: timeValue(data.CreateAt),
  87. }
  88. }
  89. func toServiceResp(data *model.TService) *types.ServiceResp {
  90. return &types.ServiceResp{
  91. Id: data.Id,
  92. Name: stringValue(data.Name),
  93. Ip: stringValue(data.Ip),
  94. Port: data.Port,
  95. Iden: stringValue(data.Iden),
  96. KeyIden: stringValue(data.KeyIden),
  97. KeyAlgo: stringValue(data.KeyAlgo),
  98. Status: stringValue(data.Status),
  99. MountStatus: stringValue(data.MountStatus),
  100. Brush: data.Brush,
  101. CreateAt: timeValue(data.CreateAt),
  102. }
  103. }
  104. func toListServiceResp(data *model.TService) *types.ServiceResp {
  105. return &types.ServiceResp{
  106. Id: data.Id,
  107. Name: stringValue(data.Name),
  108. Ip: stringValue(data.Ip),
  109. Port: data.Port,
  110. Iden: maskSensitive(stringValue(data.Iden)),
  111. KeyIden: stringValue(data.KeyIden),
  112. KeyAlgo: stringValue(data.KeyAlgo),
  113. Status: stringValue(data.Status),
  114. MountStatus: stringValue(data.MountStatus),
  115. Brush: data.Brush,
  116. CreateAt: timeValue(data.CreateAt),
  117. }
  118. }
  119. // maskSensitive 掩码展示:前 4 后 4 明文,中间打星;长度不大于 8 时原样返回。
  120. func maskSensitive(value string) string {
  121. if len(value) <= 8 {
  122. return value
  123. }
  124. return value[:4] + strings.Repeat("*", len(value)-8) + value[len(value)-4:]
  125. }