mirror of
https://github.com/aykhans/slash-e.git
synced 2025-04-16 12:23:12 +00:00
feat: add redirect api
This commit is contained in:
parent
39e00637a3
commit
02619882d1
@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
52
server/redirect.go
Normal 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)
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
@ -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)
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user