feat: mid
This commit is contained in:
@@ -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"},
|
||||||
|
|||||||
@@ -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("/")
|
||||||
}
|
}
|
||||||
@@ -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
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user