Files
metatube-server/route/redirect.go
T
2022-12-15 23:13:04 +08:00

62 lines
1.2 KiB
Go

package route
import (
"net/http"
"strings"
"github.com/gin-gonic/gin"
"github.com/javtube/metatube-sdk-go/engine"
"github.com/javtube/metatube-sdk-go/model"
mt "github.com/javtube/metatube-sdk-go/provider"
)
func redirect(app *engine.Engine) gin.HandlerFunc {
const (
separator = ":"
queryKey = "redirect"
)
return func(c *gin.Context) {
if url := c.Query(queryKey); url != "" {
var (
provider string
id string
)
if ss := strings.Split(url, separator); len(ss) > 1 {
provider, id = ss[0], ss[1]
}
var (
info any
err error
)
switch {
case app.IsActorProvider(provider):
info, err = app.GetActorInfoByProviderID(provider, id, true)
case app.IsMovieProvider(provider):
info, err = app.GetMovieInfoByProviderID(provider, id, true)
default:
abortWithError(c, mt.ErrProviderNotFound)
return
}
if err != nil {
abortWithError(c, err)
return
}
var homepage string
switch v := info.(type) {
case *model.ActorInfo:
homepage = v.Homepage
case *model.MovieInfo:
homepage = v.Homepage
}
c.Redirect(http.StatusTemporaryRedirect, homepage)
c.Abort() // abort pending middlewares
return
}
c.Next()
}
}