feat: mid

This commit is contained in:
Rogee
2024-12-06 18:47:48 +08:00
parent 869625d70a
commit e15d8d9bb2
3 changed files with 29 additions and 10 deletions

View File

@@ -62,8 +62,9 @@ func Serve(cmd *cobra.Command, args []string) error {
return container.Container.Invoke(func(http Http) error {
mid := http.Middlewares
http.Service.Engine.Use(mid.WeChatVerify)
http.Service.Engine.Use(mid.AuthUserInfo)
http.Service.Engine.Use(mid.WeChatAuthUserInfo)
http.Service.Engine.Use(mid.WeChatSilentAuth)
http.Service.Engine.Use(mid.JwtParse)
mounts := map[string][]string{
"/t/{tenant}": {"users", "medias"},

View File

@@ -10,7 +10,7 @@ import (
log "github.com/sirupsen/logrus"
)
func (f *Middlewares) AuthUserInfo(c fiber.Ctx) error {
func (f *Middlewares) WeChatAuthUserInfo(c fiber.Ctx) error {
state := c.Query("state")
code := c.Query("code")
@@ -29,9 +29,19 @@ func (f *Middlewares) AuthUserInfo(c fiber.Ctx) error {
return errors.Wrap(err, "failed to get openid")
}
tenantSlug := c.Path("tenant")
if tenantSlug == "" {
return errors.New("tenant is empty")
}
tenantId, err := f.userSvc.GetTenantIDBySlug(c.Context(), tenantSlug)
if err != nil {
return errors.Wrap(err, "failed to get tenant id")
}
var oauthInfo pg.UserOAuth
copier.Copy(&oauthInfo, token)
user, err := f.userSvc.GetOrNew(c.Context(), 1, token.Openid, oauthInfo)
user, err := f.userSvc.GetOrNew(c.Context(), tenantId, token.Openid, oauthInfo)
if err != nil {
return errors.Wrap(err, "failed to get user")
}
@@ -42,13 +52,7 @@ func (f *Middlewares) AuthUserInfo(c fiber.Ctx) error {
if err != nil {
return errors.Wrap(err, "failed to create token")
}
// set the openid to the cookie
c.Cookie(&fiber.Cookie{
Name: "token",
Value: jwtToken,
HTTPOnly: true,
})
_ = jwtToken
return c.Redirect().To("/")
}

View File

@@ -194,3 +194,17 @@ func (svc *Service) CreateTenantUser(ctx context.Context, userID, tenantID int64
}
return nil
}
// GetTenantIDBySlug
func (svc *Service) GetTenantIDBySlug(ctx context.Context, slug string) (int64, error) {
log := svc.log.WithField("method", "GetTenantIDBySlug")
stmt := table.Tenants.SELECT(table.Tenants.ID).WHERE(table.Tenants.Slug.EQ(String(slug)))
log.Debug(stmt.DebugSql())
var id int64
if err := stmt.QueryContext(ctx, db.FromContext(ctx, svc.db), &id); err != nil {
return 0, errors.Wrap(err, "failed to query tenant id by slug")
}
return id, nil
}