♻️ Use the new dealer BaseUser and remove ExternalID

This commit is contained in:
2024-09-11 23:42:46 +08:00
parent aab0724653
commit a131a5bf86
20 changed files with 65 additions and 163 deletions

View File

@ -4,6 +4,7 @@ import (
"fmt"
"time"
"git.solsynth.dev/hydrogen/dealer/pkg/hyper"
"git.solsynth.dev/hydrogen/interactive/pkg/internal/database"
"git.solsynth.dev/hydrogen/interactive/pkg/internal/gap"
"git.solsynth.dev/hydrogen/interactive/pkg/internal/models"
@ -82,7 +83,7 @@ func createArticle(c *fiber.Ctx) error {
if data.RealmAlias != nil {
if realm, err := services.GetRealmWithAlias(*data.RealmAlias); err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
} else if _, err = services.GetRealmMember(realm.ExternalID, user.ExternalID); err != nil {
} else if _, err = services.GetRealmMember(realm.ID, user.ID); err != nil {
return fiber.NewError(fiber.StatusBadRequest, fmt.Sprintf("unable to post in the realm, access denied: %v", err))
} else {
item.RealmID = &realm.ID
@ -129,7 +130,7 @@ func editArticle(c *fiber.Ctx) error {
var item models.Post
if err := database.C.Where(models.Post{
BaseModel: models.BaseModel{ID: uint(id)},
BaseModel: hyper.BaseModel{ID: uint(id)},
AuthorID: user.ID,
}).First(&item).Error; err != nil {
return fiber.NewError(fiber.StatusNotFound, err.Error())
@ -179,7 +180,7 @@ func editArticle(c *fiber.Ctx) error {
if data.RealmAlias != nil {
if realm, err := services.GetRealmWithAlias(*data.RealmAlias); err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
} else if _, err = services.GetRealmMember(realm.ExternalID, user.ExternalID); err != nil {
} else if _, err = services.GetRealmMember(realm.ID, user.ID); err != nil {
return fiber.NewError(fiber.StatusBadRequest, fmt.Sprintf("unable to post in the realm, access denied: %v", err))
} else {
item.RealmID = &realm.ID

View File

@ -2,7 +2,6 @@ package api
import (
"git.solsynth.dev/hydrogen/interactive/pkg/internal/gap"
"git.solsynth.dev/hydrogen/interactive/pkg/internal/models"
"git.solsynth.dev/hydrogen/interactive/pkg/internal/server/exts"
"git.solsynth.dev/hydrogen/interactive/pkg/internal/services"
"github.com/gofiber/fiber/v2"
@ -29,13 +28,9 @@ func listCategories(c *fiber.Ctx) error {
}
func newCategory(c *fiber.Ctx) error {
if err := gap.H.EnsureAuthenticated(c); err != nil {
if err := gap.H.EnsureGrantedPerm(c, "CreatePostCategories", true); err != nil {
return err
}
user := c.Locals("user").(models.Account)
if user.PowerLevel <= 55 {
return fiber.NewError(fiber.StatusForbidden, "require power level 55 to create categories")
}
var data struct {
Alias string `json:"alias" validate:"required"`
@ -56,13 +51,9 @@ func newCategory(c *fiber.Ctx) error {
}
func editCategory(c *fiber.Ctx) error {
if err := gap.H.EnsureAuthenticated(c); err != nil {
if err := gap.H.EnsureGrantedPerm(c, "CreatePostCategories", true); err != nil {
return err
}
user := c.Locals("user").(models.Account)
if user.PowerLevel <= 55 {
return fiber.NewError(fiber.StatusForbidden, "require power level 55 to edit categories")
}
id, _ := c.ParamsInt("categoryId", 0)
category, err := services.GetCategoryWithID(uint(id))
@ -89,13 +80,9 @@ func editCategory(c *fiber.Ctx) error {
}
func deleteCategory(c *fiber.Ctx) error {
if err := gap.H.EnsureAuthenticated(c); err != nil {
if err := gap.H.EnsureGrantedPerm(c, "CreatePostCategories", true); err != nil {
return err
}
user := c.Locals("user").(models.Account)
if user.PowerLevel <= 55 {
return fiber.NewError(fiber.StatusForbidden, "require power level 55 to delete categories")
}
id, _ := c.ParamsInt("categoryId", 0)
category, err := services.GetCategoryWithID(uint(id))

View File

@ -5,6 +5,7 @@ import (
"strconv"
"strings"
"git.solsynth.dev/hydrogen/dealer/pkg/hyper"
"git.solsynth.dev/hydrogen/interactive/pkg/internal/database"
"git.solsynth.dev/hydrogen/interactive/pkg/internal/gap"
"git.solsynth.dev/hydrogen/interactive/pkg/internal/models"
@ -72,7 +73,7 @@ func listPost(c *fiber.Ctx) error {
if len(c.Query("author")) > 0 {
var author models.Account
if err := database.C.Where(&models.Account{Name: c.Query("author")}).First(&author).Error; err != nil {
if err := database.C.Where(&hyper.BaseUser{Name: c.Query("author")}).First(&author).Error; err != nil {
return fiber.NewError(fiber.StatusNotFound, err.Error())
}
tx = tx.Where("author_id = ?", author.ID)
@ -125,7 +126,7 @@ func listPostMinimal(c *fiber.Ctx) error {
if len(c.Query("author")) > 0 {
var author models.Account
if err := database.C.Where(&models.Account{Name: c.Query("author")}).First(&author).Error; err != nil {
if err := database.C.Where(&hyper.BaseUser{Name: c.Query("author")}).First(&author).Error; err != nil {
return fiber.NewError(fiber.StatusNotFound, err.Error())
}
tx = tx.Where("author_id = ?", author.ID)
@ -191,7 +192,7 @@ func deletePost(c *fiber.Ctx) error {
var item models.Post
if err := database.C.Where(models.Post{
BaseModel: models.BaseModel{ID: uint(id)},
BaseModel: hyper.BaseModel{ID: uint(id)},
AuthorID: user.ID,
}).First(&item).Error; err != nil {
return fiber.NewError(fiber.StatusNotFound, err.Error())

View File

@ -3,6 +3,7 @@ package api
import (
"fmt"
"git.solsynth.dev/hydrogen/dealer/pkg/hyper"
"git.solsynth.dev/hydrogen/interactive/pkg/internal/database"
"git.solsynth.dev/hydrogen/interactive/pkg/internal/models"
"git.solsynth.dev/hydrogen/interactive/pkg/internal/services"
@ -23,7 +24,7 @@ func listPostReplies(c *fiber.Ctx) error {
if len(c.Query("author")) > 0 {
var author models.Account
if err := database.C.Where(&models.Account{Name: c.Query("author")}).First(&author).Error; err != nil {
if err := database.C.Where(&hyper.BaseUser{Name: c.Query("author")}).First(&author).Error; err != nil {
return fiber.NewError(fiber.StatusNotFound, err.Error())
}
tx = tx.Where("author_id = ?", author.ID)

View File

@ -4,6 +4,7 @@ import (
"fmt"
"time"
"git.solsynth.dev/hydrogen/dealer/pkg/hyper"
"git.solsynth.dev/hydrogen/interactive/pkg/internal/database"
"git.solsynth.dev/hydrogen/interactive/pkg/internal/gap"
"git.solsynth.dev/hydrogen/interactive/pkg/internal/models"
@ -101,7 +102,7 @@ func createStory(c *fiber.Ctx) error {
if data.RealmAlias != nil {
if realm, err := services.GetRealmWithAlias(*data.RealmAlias); err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
} else if _, err = services.GetRealmMember(realm.ExternalID, user.ExternalID); err != nil {
} else if _, err = services.GetRealmMember(realm.ID, user.ID); err != nil {
return fiber.NewError(fiber.StatusBadRequest, fmt.Sprintf("unable to post in the realm, access denied: %v", err))
} else {
item.RealmID = &realm.ID
@ -148,7 +149,7 @@ func editStory(c *fiber.Ctx) error {
var item models.Post
if err := database.C.Where(models.Post{
BaseModel: models.BaseModel{ID: uint(id)},
BaseModel: hyper.BaseModel{ID: uint(id)},
AuthorID: user.ID,
}).First(&item).Error; err != nil {
return fiber.NewError(fiber.StatusNotFound, err.Error())
@ -198,7 +199,7 @@ func editStory(c *fiber.Ctx) error {
if data.RealmAlias != nil {
if realm, err := services.GetRealmWithAlias(*data.RealmAlias); err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
} else if _, err = services.GetRealmMember(realm.ExternalID, user.ExternalID); err != nil {
} else if _, err = services.GetRealmMember(realm.ID, user.ID); err != nil {
return fiber.NewError(fiber.StatusBadRequest, fmt.Sprintf("unable to post in the realm, access denied: %v", err))
} else {
item.RealmID = &realm.ID

View File

@ -1,6 +1,7 @@
package api
import (
"git.solsynth.dev/hydrogen/dealer/pkg/hyper"
"git.solsynth.dev/hydrogen/interactive/pkg/internal/database"
"git.solsynth.dev/hydrogen/interactive/pkg/internal/gap"
"git.solsynth.dev/hydrogen/interactive/pkg/internal/models"
@ -16,7 +17,7 @@ func getUserinfo(c *fiber.Ctx) error {
var data models.Account
if err := database.C.
Where(&models.Account{BaseModel: models.BaseModel{ID: user.ID}}).
Where(&hyper.BaseModel{ID: user.ID}).
First(&data).Error; err != nil {
return fiber.NewError(fiber.StatusInternalServerError, err.Error())
}
@ -29,7 +30,7 @@ func getOthersInfo(c *fiber.Ctx) error {
var data models.Account
if err := database.C.
Where(&models.Account{Name: account}).
Where(&hyper.BaseUser{Name: account}).
First(&data).Error; err != nil {
return fiber.NewError(fiber.StatusInternalServerError, err.Error())
}
@ -42,7 +43,7 @@ func listOthersPinnedPost(c *fiber.Ctx) error {
var user models.Account
if err := database.C.
Where(&models.Account{Name: account}).
Where(&hyper.BaseUser{Name: account}).
First(&user).Error; err != nil {
return fiber.NewError(fiber.StatusInternalServerError, err.Error())
}

View File

@ -1,19 +0,0 @@
package exts
import (
"git.solsynth.dev/hydrogen/dealer/pkg/proto"
"git.solsynth.dev/hydrogen/interactive/pkg/internal/services"
"github.com/gofiber/fiber/v2"
)
func LinkAccountMiddleware(c *fiber.Ctx) error {
if val, ok := c.Locals("p_user").(*proto.UserInfo); ok {
if account, err := services.LinkAccount(val); err != nil {
return fiber.NewError(fiber.StatusInternalServerError, err.Error())
} else {
c.Locals("user", account)
}
}
return c.Next()
}

View File

@ -3,9 +3,11 @@ package server
import (
"strings"
"git.solsynth.dev/hydrogen/dealer/pkg/hyper"
"git.solsynth.dev/hydrogen/interactive/pkg/internal/database"
"git.solsynth.dev/hydrogen/interactive/pkg/internal/gap"
"git.solsynth.dev/hydrogen/interactive/pkg/internal/models"
"git.solsynth.dev/hydrogen/interactive/pkg/internal/server/api"
"git.solsynth.dev/hydrogen/interactive/pkg/internal/server/exts"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/cors"
"github.com/gofiber/fiber/v2/middleware/idempotency"
@ -53,7 +55,15 @@ func NewServer() {
}))
app.Use(gap.H.AuthMiddleware)
app.Use(exts.LinkAccountMiddleware)
app.Use(hyper.LinkAccountMiddleware[models.Account](
database.C,
&models.Account{},
func(u hyper.BaseUser) models.Account {
return models.Account{
BaseUser: u,
}
},
))
api.MapAPIs(app, "/api")
}