🐛 Fix wont link account to local model
This commit is contained in:
parent
2f2a39d93d
commit
f601476e6b
@ -1,11 +1,8 @@
|
|||||||
package models
|
package models
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/samber/lo"
|
|
||||||
"github.com/spf13/viper"
|
|
||||||
"gorm.io/datatypes"
|
"gorm.io/datatypes"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -15,49 +12,10 @@ type Account struct {
|
|||||||
Name string `json:"name" gorm:"uniqueIndex"`
|
Name string `json:"name" gorm:"uniqueIndex"`
|
||||||
Nick string `json:"nick"`
|
Nick string `json:"nick"`
|
||||||
Description string `json:"description"`
|
Description string `json:"description"`
|
||||||
Avatar *uint `json:"avatar"`
|
Avatar string `json:"avatar"`
|
||||||
Banner *uint `json:"banner"`
|
Banner string `json:"banner"`
|
||||||
|
EmailAddress string `json:"email"`
|
||||||
ConfirmedAt *time.Time `json:"confirmed_at"`
|
ConfirmedAt *time.Time `json:"confirmed_at"`
|
||||||
SuspendedAt *time.Time `json:"suspended_at"`
|
SuspendedAt *time.Time `json:"suspended_at"`
|
||||||
PermNodes datatypes.JSONMap `json:"perm_nodes"`
|
PermNodes datatypes.JSONMap `json:"perm_nodes"`
|
||||||
|
|
||||||
Contacts []AccountContact `json:"contacts"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v Account) GetAvatar() *string {
|
|
||||||
if v.Avatar != nil {
|
|
||||||
return lo.ToPtr(fmt.Sprintf("%s/api/attachments/%d", viper.GetString("content_endpoint"), *v.Avatar))
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v Account) GetBanner() *string {
|
|
||||||
if v.Banner != nil {
|
|
||||||
return lo.ToPtr(fmt.Sprintf("%s/api/attachments/%d", viper.GetString("content_endpoint"), *v.Banner))
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v Account) GetPrimaryEmail() AccountContact {
|
|
||||||
val, _ := lo.Find(v.Contacts, func(item AccountContact) bool {
|
|
||||||
return item.Type == EmailAccountContact && item.IsPrimary
|
|
||||||
})
|
|
||||||
return val
|
|
||||||
}
|
|
||||||
|
|
||||||
type AccountContactType = int8
|
|
||||||
|
|
||||||
const (
|
|
||||||
EmailAccountContact = AccountContactType(iota)
|
|
||||||
)
|
|
||||||
|
|
||||||
type AccountContact struct {
|
|
||||||
BaseModel
|
|
||||||
|
|
||||||
Type int8 `json:"type"`
|
|
||||||
Content string `json:"content" gorm:"uniqueIndex"`
|
|
||||||
IsPublic bool `json:"is_public"`
|
|
||||||
IsPrimary bool `json:"is_primary"`
|
|
||||||
VerifiedAt *time.Time `json:"verified_at"`
|
|
||||||
AccountID uint `json:"account_id"`
|
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@ import (
|
|||||||
|
|
||||||
"git.solsynth.dev/hydrogen/dealer/pkg/hyper"
|
"git.solsynth.dev/hydrogen/dealer/pkg/hyper"
|
||||||
"git.solsynth.dev/hydrogen/dealer/pkg/internal/directory"
|
"git.solsynth.dev/hydrogen/dealer/pkg/internal/directory"
|
||||||
|
"git.solsynth.dev/hydrogen/dealer/pkg/internal/models"
|
||||||
"git.solsynth.dev/hydrogen/dealer/pkg/proto"
|
"git.solsynth.dev/hydrogen/dealer/pkg/proto"
|
||||||
"github.com/gofiber/fiber/v2"
|
"github.com/gofiber/fiber/v2"
|
||||||
jsoniter "github.com/json-iterator/go"
|
jsoniter "github.com/json-iterator/go"
|
||||||
@ -117,3 +118,23 @@ func EnsureGrantedPerm(c *fiber.Ctx, key string, val any) error {
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func LinkAccountMiddleware(c *fiber.Ctx) error {
|
||||||
|
if val, ok := c.Locals("p_user").(*proto.UserInfo); ok {
|
||||||
|
account := models.Account{
|
||||||
|
BaseModel: models.BaseModel{
|
||||||
|
ID: uint(val.Id),
|
||||||
|
},
|
||||||
|
Name: val.Name,
|
||||||
|
Nick: val.Nick,
|
||||||
|
Avatar: val.Avatar,
|
||||||
|
Banner: val.Banner,
|
||||||
|
Description: val.GetDescription(),
|
||||||
|
EmailAddress: val.GetEmail(),
|
||||||
|
}
|
||||||
|
|
||||||
|
c.Locals("user", account)
|
||||||
|
}
|
||||||
|
|
||||||
|
return c.Next()
|
||||||
|
}
|
||||||
|
@ -53,6 +53,7 @@ func NewServer() *HTTPApp {
|
|||||||
}))
|
}))
|
||||||
|
|
||||||
app.Use(exts.AuthMiddleware)
|
app.Use(exts.AuthMiddleware)
|
||||||
|
app.Use(exts.LinkAccountMiddleware)
|
||||||
|
|
||||||
api.MapAPIs(app)
|
api.MapAPIs(app)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user