mirror of
https://github.com/usememos/memos.git
synced 2025-03-04 01:04:38 +08:00
fix: resource api
This commit is contained in:
parent
d609f2741d
commit
4535e0ce6d
8 changed files with 47 additions and 19 deletions
|
@ -23,9 +23,6 @@ RUN go build \
|
|||
FROM alpine:3.14.3 AS monolithic
|
||||
WORKDIR /usr/local/memos
|
||||
|
||||
# RUN apk add --no-cache tzdata
|
||||
# ENV TZ="Asia/Shanghai"
|
||||
|
||||
COPY --from=backend /backend-build/memos /usr/local/memos/
|
||||
COPY --from=frontend /frontend-build/dist /usr/local/memos/web/dist
|
||||
|
||||
|
|
|
@ -84,6 +84,8 @@ func (m *Main) Run() error {
|
|||
s.ShortcutService = store.NewShortcutService(db)
|
||||
s.MemoService = store.NewMemoService(db)
|
||||
s.UserService = store.NewUserService(db)
|
||||
s.ShortcutService = store.NewShortcutService(db)
|
||||
s.ResourceService = store.NewResourceService(db)
|
||||
|
||||
m.server = s
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@ func getUserIdContextKey() string {
|
|||
func setUserSession(c echo.Context, user *api.User) error {
|
||||
sess, err := session.Get("session", c)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to get session")
|
||||
return fmt.Errorf("failed to get session, err: %w", err)
|
||||
}
|
||||
sess.Options = &sessions.Options{
|
||||
Path: "/",
|
||||
|
@ -34,7 +34,7 @@ func setUserSession(c echo.Context, user *api.User) error {
|
|||
sess.Values[userIdContextKey] = user.Id
|
||||
err = sess.Save(c.Request(), c.Response())
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to set session")
|
||||
return fmt.Errorf("failed to set session, err: %w", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
|
@ -43,7 +43,7 @@ func setUserSession(c echo.Context, user *api.User) error {
|
|||
func removeUserSession(c echo.Context) error {
|
||||
sess, err := session.Get("session", c)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to get session")
|
||||
return fmt.Errorf("failed to get session, err: %w", err)
|
||||
}
|
||||
sess.Options = &sessions.Options{
|
||||
Path: "/",
|
||||
|
@ -53,14 +53,14 @@ func removeUserSession(c echo.Context) error {
|
|||
sess.Values[userIdContextKey] = nil
|
||||
err = sess.Save(c.Request(), c.Response())
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to set session")
|
||||
return fmt.Errorf("failed to set session, err: %w", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Use session instead of jwt in the initial version
|
||||
func JWTMiddleware(us api.UserService, next echo.HandlerFunc) echo.HandlerFunc {
|
||||
func BasicAuthMiddleware(us api.UserService, next echo.HandlerFunc) echo.HandlerFunc {
|
||||
return func(c echo.Context) error {
|
||||
// Skips auth
|
||||
if common.HasPrefixes(c.Path(), "/api/auth") {
|
||||
|
@ -69,7 +69,7 @@ func JWTMiddleware(us api.UserService, next echo.HandlerFunc) echo.HandlerFunc {
|
|||
|
||||
sess, err := session.Get("session", c)
|
||||
if err != nil {
|
||||
return echo.NewHTTPError(http.StatusUnauthorized, "Missing session")
|
||||
return echo.NewHTTPError(http.StatusUnauthorized, "Missing session").SetInternal(err)
|
||||
}
|
||||
|
||||
userIdValue := sess.Values[userIdContextKey]
|
|
@ -30,20 +30,20 @@ func (s *Server) registerResourceRoutes(g *echo.Group) {
|
|||
size := file.Size
|
||||
src, err := file.Open()
|
||||
if err != nil {
|
||||
return echo.NewHTTPError(http.StatusBadRequest, "Failed to open file").SetInternal(err)
|
||||
return echo.NewHTTPError(http.StatusInternalServerError, "Failed to open file").SetInternal(err)
|
||||
}
|
||||
defer src.Close()
|
||||
|
||||
blob, err := ioutil.ReadAll(src)
|
||||
fileBytes, err := ioutil.ReadAll(src)
|
||||
if err != nil {
|
||||
return echo.NewHTTPError(http.StatusBadRequest, "Failed to read file").SetInternal(err)
|
||||
return echo.NewHTTPError(http.StatusInternalServerError, "Failed to read file").SetInternal(err)
|
||||
}
|
||||
|
||||
resourceCreate := &api.ResourceCreate{
|
||||
Filename: filename,
|
||||
Type: filetype,
|
||||
Size: size,
|
||||
Blob: blob,
|
||||
Blob: fileBytes,
|
||||
CreatorId: userId,
|
||||
}
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ package server
|
|||
import (
|
||||
"fmt"
|
||||
"memos/api"
|
||||
"memos/common"
|
||||
"time"
|
||||
|
||||
"github.com/gorilla/sessions"
|
||||
"github.com/labstack/echo-contrib/session"
|
||||
|
@ -28,6 +28,16 @@ func NewServer() *Server {
|
|||
e.HideBanner = true
|
||||
e.HidePort = false
|
||||
|
||||
e.Use(middleware.LoggerWithConfig(middleware.LoggerConfig{
|
||||
Format: "${method} ${uri} ${status}\n",
|
||||
}))
|
||||
|
||||
e.Use(middleware.TimeoutWithConfig(middleware.TimeoutConfig{
|
||||
Skipper: middleware.DefaultSkipper,
|
||||
ErrorMessage: "Request timeout",
|
||||
Timeout: 30 * time.Second,
|
||||
}))
|
||||
|
||||
e.Use(middleware.StaticWithConfig(middleware.StaticConfig{
|
||||
Skipper: middleware.DefaultSkipper,
|
||||
Root: "web/dist",
|
||||
|
@ -35,7 +45,7 @@ func NewServer() *Server {
|
|||
HTML5: true,
|
||||
}))
|
||||
|
||||
e.Use(session.Middleware(sessions.NewCookieStore([]byte(common.GenUUID()))))
|
||||
e.Use(session.Middleware(sessions.NewCookieStore([]byte("just_memos"))))
|
||||
|
||||
s := &Server{
|
||||
e: e,
|
||||
|
@ -47,7 +57,7 @@ func NewServer() *Server {
|
|||
|
||||
apiGroup := e.Group("/api")
|
||||
apiGroup.Use(func(next echo.HandlerFunc) echo.HandlerFunc {
|
||||
return JWTMiddleware(s.UserService, next)
|
||||
return BasicAuthMiddleware(s.UserService, next)
|
||||
})
|
||||
s.registerAuthRoutes(apiGroup)
|
||||
s.registerUserRoutes(apiGroup)
|
||||
|
|
|
@ -11,7 +11,13 @@ import (
|
|||
|
||||
func (s *Server) registerUserRoutes(g *echo.Group) {
|
||||
g.GET("/user/me", func(c echo.Context) error {
|
||||
userId := c.Get(getUserIdContextKey()).(int)
|
||||
// /api/user/me is used to check if the user is logged in,
|
||||
userSessionId := c.Get(getUserIdContextKey())
|
||||
if userSessionId == nil {
|
||||
return echo.NewHTTPError(http.StatusUnauthorized, "Missing session")
|
||||
}
|
||||
|
||||
userId := userSessionId.(int)
|
||||
userFind := &api.UserFind{
|
||||
Id: &userId,
|
||||
}
|
||||
|
|
|
@ -47,7 +47,7 @@ func (s *Server) registerWebhookRoutes(g *echo.Group) {
|
|||
|
||||
return nil
|
||||
})
|
||||
g.GET("r/:resourceId/:filename", func(c echo.Context) error {
|
||||
g.GET("/r/:resourceId/:filename", func(c echo.Context) error {
|
||||
resourceId, err := strconv.Atoi(c.Param("resourceId"))
|
||||
if err != nil {
|
||||
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("ID is not a number: %s", c.Param("resourceId"))).SetInternal(err)
|
||||
|
|
|
@ -24,7 +24,7 @@ func (s *ResourceService) CreateResource(create *api.ResourceCreate) (*api.Resou
|
|||
return resource, nil
|
||||
}
|
||||
|
||||
func (s *ResourceService) FindResouceList(find *api.ResourceFind) ([]*api.Resource, error) {
|
||||
func (s *ResourceService) FindResourceList(find *api.ResourceFind) ([]*api.Resource, error) {
|
||||
list, err := findResourceList(s.db, find)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
@ -33,6 +33,19 @@ func (s *ResourceService) FindResouceList(find *api.ResourceFind) ([]*api.Resour
|
|||
return list, nil
|
||||
}
|
||||
|
||||
func (s *ResourceService) FindResource(find *api.ResourceFind) (*api.Resource, error) {
|
||||
list, err := findResourceList(s.db, find)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if len(list) == 0 {
|
||||
return nil, &common.Error{Code: common.NotFound, Err: fmt.Errorf("not found")}
|
||||
}
|
||||
|
||||
return list[0], nil
|
||||
}
|
||||
|
||||
func (s *ResourceService) DeleteResource(delete *api.ResourceDelete) error {
|
||||
err := deleteResource(s.db, delete)
|
||||
if err != nil {
|
||||
|
|
Loading…
Reference in a new issue