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 { return container.Container.Invoke(func(http Http) error {
mid := http.Middlewares mid := http.Middlewares
http.Service.Engine.Use(mid.WeChatVerify) 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.WeChatSilentAuth)
http.Service.Engine.Use(mid.JwtParse)
mounts := map[string][]string{ mounts := map[string][]string{
"/t/{tenant}": {"users", "medias"}, "/t/{tenant}": {"users", "medias"},

View File

@@ -10,7 +10,7 @@ import (
log "github.com/sirupsen/logrus" 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") state := c.Query("state")
code := c.Query("code") code := c.Query("code")
@@ -29,9 +29,19 @@ func (f *Middlewares) AuthUserInfo(c fiber.Ctx) error {
return errors.Wrap(err, "failed to get openid") 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 var oauthInfo pg.UserOAuth
copier.Copy(&oauthInfo, token) 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 { if err != nil {
return errors.Wrap(err, "failed to get user") return errors.Wrap(err, "failed to get user")
} }
@@ -42,13 +52,7 @@ func (f *Middlewares) AuthUserInfo(c fiber.Ctx) error {
if err != nil { if err != nil {
return errors.Wrap(err, "failed to create token") return errors.Wrap(err, "failed to create token")
} }
_ = jwtToken
// set the openid to the cookie
c.Cookie(&fiber.Cookie{
Name: "token",
Value: jwtToken,
HTTPOnly: true,
})
return c.Redirect().To("/") return c.Redirect().To("/")
} }

View File

@@ -194,3 +194,17 @@ func (svc *Service) CreateTenantUser(ctx context.Context, userID, tenantID int64
} }
return nil 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
}