feat: add redirect api

This commit is contained in:
steven 2022-09-30 08:41:35 +08:00
parent 39e00637a3
commit 02619882d1
6 changed files with 65 additions and 2 deletions

View File

@ -104,7 +104,7 @@ func aclMiddleware(s *Server, next echo.HandlerFunc) echo.HandlerFunc {
} }
} }
if common.HasPrefixes(path, "/api/workspace/:workspaceName/shortcut/:shortcutName") && c.Request().Method == http.MethodGet { if common.HasPrefixes(path, "/o/:shortcutName", "/api/workspace/:workspaceName/shortcut/:shortcutName") && c.Request().Method == http.MethodGet {
return next(c) return next(c)
} }

View File

@ -24,7 +24,7 @@ func getFileSystem(path string) http.FileSystem {
func skipper(c echo.Context) bool { func skipper(c echo.Context) bool {
path := c.Path() path := c.Path()
return common.HasPrefixes(path, "/api") return common.HasPrefixes(path, "/api", "/o")
} }
func embedFrontend(e *echo.Echo) { func embedFrontend(e *echo.Echo) {

52
server/redirect.go Normal file
View File

@ -0,0 +1,52 @@
package server
import (
"net/http"
"github.com/boojack/corgi/api"
"github.com/labstack/echo/v4"
)
func (s *Server) registerRedirectRoutes(g *echo.Group) {
g.GET("/:shortcutName", func(c echo.Context) error {
ctx := c.Request().Context()
userID, ok := c.Get(getUserIDContextKey()).(int)
if !ok {
return echo.NewHTTPError(http.StatusUnauthorized, "Missing user in session")
}
shortcutName := c.Param("shortcutName")
if shortcutName == "" {
return echo.NewHTTPError(http.StatusBadRequest, "Missing shortcut name")
}
list := []*api.Shortcut{}
shortcutFind := &api.ShortcutFind{
Name: &shortcutName,
MemberID: &userID,
}
shortcutFind.VisibilityList = []api.Visibility{api.VisibilityWorkspace, api.VisibilityPublic}
visibleShortcutList, err := s.Store.FindShortcutList(ctx, shortcutFind)
if err != nil {
return echo.NewHTTPError(http.StatusInternalServerError, "Failed to fetch shortcut list").SetInternal(err)
}
list = append(list, visibleShortcutList...)
shortcutFind.VisibilityList = []api.Visibility{api.VisibilityPrivite}
shortcutFind.CreatorID = &userID
privateShortcutList, err := s.Store.FindShortcutList(ctx, shortcutFind)
if err != nil {
return echo.NewHTTPError(http.StatusInternalServerError, "Failed to fetch private shortcut list").SetInternal(err)
}
list = append(list, privateShortcutList...)
if len(list) == 0 {
return echo.NewHTTPError(http.StatusNotFound, "Not found shortcut").SetInternal(err)
}
// TODO(steven): improve the matched result later
matchedShortcut := list[0]
return c.Redirect(http.StatusPermanentRedirect, matchedShortcut.Link)
})
}

View File

@ -56,6 +56,12 @@ func NewServer(profile *profile.Profile) *Server {
Profile: profile, Profile: profile,
} }
redirectGroup := e.Group("/o")
redirectGroup.Use(func(next echo.HandlerFunc) echo.HandlerFunc {
return aclMiddleware(s, next)
})
s.registerRedirectRoutes(redirectGroup)
apiGroup := e.Group("/api") apiGroup := e.Group("/api")
apiGroup.Use(func(next echo.HandlerFunc) echo.HandlerFunc { apiGroup.Use(func(next echo.HandlerFunc) echo.HandlerFunc {
return aclMiddleware(s, next) return aclMiddleware(s, next)

View File

@ -91,6 +91,7 @@ func (s *Server) registerShortcutRoutes(g *echo.Group) {
} }
list := []*api.Shortcut{} list := []*api.Shortcut{}
if shortcutFind.WorkspaceID == nil { if shortcutFind.WorkspaceID == nil {
shortcutFind.MemberID = &userID shortcutFind.MemberID = &userID
} }

View File

@ -11,6 +11,10 @@ export default defineConfig({
target: "http://localhost:8081/", target: "http://localhost:8081/",
changeOrigin: true, changeOrigin: true,
}, },
"/o": {
target: "http://localhost:8081/",
changeOrigin: true,
},
}, },
}, },
}); });