fix: resource api

pull/26/head
email 3 years ago
parent d609f2741d
commit 4535e0ce6d

@ -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…
Cancel
Save