Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
canifa_note
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Vũ Hoàng Anh
canifa_note
Commits
4535e0ce
Commit
4535e0ce
authored
Feb 04, 2022
by
email
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix: resource api
parent
d609f274
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
47 additions
and
19 deletions
+47
-19
Dockerfile
Dockerfile
+0
-3
root.go
bin/server/cmd/root.go
+2
-0
basic_auth.go
server/basic_auth.go
+6
-6
resource.go
server/resource.go
+4
-4
server.go
server/server.go
+13
-3
user.go
server/user.go
+7
-1
webhook.go
server/webhook.go
+1
-1
resource.go
store/resource.go
+14
-1
No files found.
Dockerfile
View file @
4535e0ce
...
@@ -23,9 +23,6 @@ RUN go build \
...
@@ -23,9 +23,6 @@ RUN go build \
FROM
alpine:3.14.3 AS monolithic
FROM
alpine:3.14.3 AS monolithic
WORKDIR
/usr/local/memos
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=backend /backend-build/memos /usr/local/memos/
COPY
--from=frontend /frontend-build/dist /usr/local/memos/web/dist
COPY
--from=frontend /frontend-build/dist /usr/local/memos/web/dist
...
...
bin/server/cmd/root.go
View file @
4535e0ce
...
@@ -84,6 +84,8 @@ func (m *Main) Run() error {
...
@@ -84,6 +84,8 @@ func (m *Main) Run() error {
s
.
ShortcutService
=
store
.
NewShortcutService
(
db
)
s
.
ShortcutService
=
store
.
NewShortcutService
(
db
)
s
.
MemoService
=
store
.
NewMemoService
(
db
)
s
.
MemoService
=
store
.
NewMemoService
(
db
)
s
.
UserService
=
store
.
NewUserService
(
db
)
s
.
UserService
=
store
.
NewUserService
(
db
)
s
.
ShortcutService
=
store
.
NewShortcutService
(
db
)
s
.
ResourceService
=
store
.
NewResourceService
(
db
)
m
.
server
=
s
m
.
server
=
s
...
...
server/
jwt
.go
→
server/
basic_auth
.go
View file @
4535e0ce
...
@@ -24,7 +24,7 @@ func getUserIdContextKey() string {
...
@@ -24,7 +24,7 @@ func getUserIdContextKey() string {
func
setUserSession
(
c
echo
.
Context
,
user
*
api
.
User
)
error
{
func
setUserSession
(
c
echo
.
Context
,
user
*
api
.
User
)
error
{
sess
,
err
:=
session
.
Get
(
"session"
,
c
)
sess
,
err
:=
session
.
Get
(
"session"
,
c
)
if
err
!=
nil
{
if
err
!=
nil
{
return
fmt
.
Errorf
(
"failed to get session
"
)
return
fmt
.
Errorf
(
"failed to get session
, err: %w"
,
err
)
}
}
sess
.
Options
=
&
sessions
.
Options
{
sess
.
Options
=
&
sessions
.
Options
{
Path
:
"/"
,
Path
:
"/"
,
...
@@ -34,7 +34,7 @@ func setUserSession(c echo.Context, user *api.User) error {
...
@@ -34,7 +34,7 @@ func setUserSession(c echo.Context, user *api.User) error {
sess
.
Values
[
userIdContextKey
]
=
user
.
Id
sess
.
Values
[
userIdContextKey
]
=
user
.
Id
err
=
sess
.
Save
(
c
.
Request
(),
c
.
Response
())
err
=
sess
.
Save
(
c
.
Request
(),
c
.
Response
())
if
err
!=
nil
{
if
err
!=
nil
{
return
fmt
.
Errorf
(
"failed to set session
"
)
return
fmt
.
Errorf
(
"failed to set session
, err: %w"
,
err
)
}
}
return
nil
return
nil
...
@@ -43,7 +43,7 @@ func setUserSession(c echo.Context, user *api.User) error {
...
@@ -43,7 +43,7 @@ func setUserSession(c echo.Context, user *api.User) error {
func
removeUserSession
(
c
echo
.
Context
)
error
{
func
removeUserSession
(
c
echo
.
Context
)
error
{
sess
,
err
:=
session
.
Get
(
"session"
,
c
)
sess
,
err
:=
session
.
Get
(
"session"
,
c
)
if
err
!=
nil
{
if
err
!=
nil
{
return
fmt
.
Errorf
(
"failed to get session
"
)
return
fmt
.
Errorf
(
"failed to get session
, err: %w"
,
err
)
}
}
sess
.
Options
=
&
sessions
.
Options
{
sess
.
Options
=
&
sessions
.
Options
{
Path
:
"/"
,
Path
:
"/"
,
...
@@ -53,14 +53,14 @@ func removeUserSession(c echo.Context) error {
...
@@ -53,14 +53,14 @@ func removeUserSession(c echo.Context) error {
sess
.
Values
[
userIdContextKey
]
=
nil
sess
.
Values
[
userIdContextKey
]
=
nil
err
=
sess
.
Save
(
c
.
Request
(),
c
.
Response
())
err
=
sess
.
Save
(
c
.
Request
(),
c
.
Response
())
if
err
!=
nil
{
if
err
!=
nil
{
return
fmt
.
Errorf
(
"failed to set session
"
)
return
fmt
.
Errorf
(
"failed to set session
, err: %w"
,
err
)
}
}
return
nil
return
nil
}
}
// Use session instead of jwt in the initial version
// Use session instead of jwt in the initial version
func
JWT
Middleware
(
us
api
.
UserService
,
next
echo
.
HandlerFunc
)
echo
.
HandlerFunc
{
func
BasicAuth
Middleware
(
us
api
.
UserService
,
next
echo
.
HandlerFunc
)
echo
.
HandlerFunc
{
return
func
(
c
echo
.
Context
)
error
{
return
func
(
c
echo
.
Context
)
error
{
// Skips auth
// Skips auth
if
common
.
HasPrefixes
(
c
.
Path
(),
"/api/auth"
)
{
if
common
.
HasPrefixes
(
c
.
Path
(),
"/api/auth"
)
{
...
@@ -69,7 +69,7 @@ func JWTMiddleware(us api.UserService, next echo.HandlerFunc) echo.HandlerFunc {
...
@@ -69,7 +69,7 @@ func JWTMiddleware(us api.UserService, next echo.HandlerFunc) echo.HandlerFunc {
sess
,
err
:=
session
.
Get
(
"session"
,
c
)
sess
,
err
:=
session
.
Get
(
"session"
,
c
)
if
err
!=
nil
{
if
err
!=
nil
{
return
echo
.
NewHTTPError
(
http
.
StatusUnauthorized
,
"Missing session"
)
return
echo
.
NewHTTPError
(
http
.
StatusUnauthorized
,
"Missing session"
)
.
SetInternal
(
err
)
}
}
userIdValue
:=
sess
.
Values
[
userIdContextKey
]
userIdValue
:=
sess
.
Values
[
userIdContextKey
]
...
...
server/resource.go
View file @
4535e0ce
...
@@ -30,20 +30,20 @@ func (s *Server) registerResourceRoutes(g *echo.Group) {
...
@@ -30,20 +30,20 @@ func (s *Server) registerResourceRoutes(g *echo.Group) {
size
:=
file
.
Size
size
:=
file
.
Size
src
,
err
:=
file
.
Open
()
src
,
err
:=
file
.
Open
()
if
err
!=
nil
{
if
err
!=
nil
{
return
echo
.
NewHTTPError
(
http
.
Status
BadRequest
,
"Failed to open file"
)
.
SetInternal
(
err
)
return
echo
.
NewHTTPError
(
http
.
Status
InternalServerError
,
"Failed to open file"
)
.
SetInternal
(
err
)
}
}
defer
src
.
Close
()
defer
src
.
Close
()
blob
,
err
:=
ioutil
.
ReadAll
(
src
)
fileBytes
,
err
:=
ioutil
.
ReadAll
(
src
)
if
err
!=
nil
{
if
err
!=
nil
{
return
echo
.
NewHTTPError
(
http
.
Status
BadRequest
,
"Failed to read file"
)
.
SetInternal
(
err
)
return
echo
.
NewHTTPError
(
http
.
Status
InternalServerError
,
"Failed to read file"
)
.
SetInternal
(
err
)
}
}
resourceCreate
:=
&
api
.
ResourceCreate
{
resourceCreate
:=
&
api
.
ResourceCreate
{
Filename
:
filename
,
Filename
:
filename
,
Type
:
filetype
,
Type
:
filetype
,
Size
:
size
,
Size
:
size
,
Blob
:
blob
,
Blob
:
fileBytes
,
CreatorId
:
userId
,
CreatorId
:
userId
,
}
}
...
...
server/server.go
View file @
4535e0ce
...
@@ -3,7 +3,7 @@ package server
...
@@ -3,7 +3,7 @@ package server
import
(
import
(
"fmt"
"fmt"
"memos/api"
"memos/api"
"
memos/common
"
"
time
"
"github.com/gorilla/sessions"
"github.com/gorilla/sessions"
"github.com/labstack/echo-contrib/session"
"github.com/labstack/echo-contrib/session"
...
@@ -28,6 +28,16 @@ func NewServer() *Server {
...
@@ -28,6 +28,16 @@ func NewServer() *Server {
e
.
HideBanner
=
true
e
.
HideBanner
=
true
e
.
HidePort
=
false
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
{
e
.
Use
(
middleware
.
StaticWithConfig
(
middleware
.
StaticConfig
{
Skipper
:
middleware
.
DefaultSkipper
,
Skipper
:
middleware
.
DefaultSkipper
,
Root
:
"web/dist"
,
Root
:
"web/dist"
,
...
@@ -35,7 +45,7 @@ func NewServer() *Server {
...
@@ -35,7 +45,7 @@ func NewServer() *Server {
HTML5
:
true
,
HTML5
:
true
,
}))
}))
e
.
Use
(
session
.
Middleware
(
sessions
.
NewCookieStore
([]
byte
(
common
.
GenUUID
()
))))
e
.
Use
(
session
.
Middleware
(
sessions
.
NewCookieStore
([]
byte
(
"just_memos"
))))
s
:=
&
Server
{
s
:=
&
Server
{
e
:
e
,
e
:
e
,
...
@@ -47,7 +57,7 @@ func NewServer() *Server {
...
@@ -47,7 +57,7 @@ func NewServer() *Server {
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
JWT
Middleware
(
s
.
UserService
,
next
)
return
BasicAuth
Middleware
(
s
.
UserService
,
next
)
})
})
s
.
registerAuthRoutes
(
apiGroup
)
s
.
registerAuthRoutes
(
apiGroup
)
s
.
registerUserRoutes
(
apiGroup
)
s
.
registerUserRoutes
(
apiGroup
)
...
...
server/user.go
View file @
4535e0ce
...
@@ -11,7 +11,13 @@ import (
...
@@ -11,7 +11,13 @@ import (
func
(
s
*
Server
)
registerUserRoutes
(
g
*
echo
.
Group
)
{
func
(
s
*
Server
)
registerUserRoutes
(
g
*
echo
.
Group
)
{
g
.
GET
(
"/user/me"
,
func
(
c
echo
.
Context
)
error
{
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
{
userFind
:=
&
api
.
UserFind
{
Id
:
&
userId
,
Id
:
&
userId
,
}
}
...
...
server/webhook.go
View file @
4535e0ce
...
@@ -47,7 +47,7 @@ func (s *Server) registerWebhookRoutes(g *echo.Group) {
...
@@ -47,7 +47,7 @@ func (s *Server) registerWebhookRoutes(g *echo.Group) {
return
nil
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"
))
resourceId
,
err
:=
strconv
.
Atoi
(
c
.
Param
(
"resourceId"
))
if
err
!=
nil
{
if
err
!=
nil
{
return
echo
.
NewHTTPError
(
http
.
StatusBadRequest
,
fmt
.
Sprintf
(
"ID is not a number: %s"
,
c
.
Param
(
"resourceId"
)))
.
SetInternal
(
err
)
return
echo
.
NewHTTPError
(
http
.
StatusBadRequest
,
fmt
.
Sprintf
(
"ID is not a number: %s"
,
c
.
Param
(
"resourceId"
)))
.
SetInternal
(
err
)
...
...
store/resource.go
View file @
4535e0ce
...
@@ -24,7 +24,7 @@ func (s *ResourceService) CreateResource(create *api.ResourceCreate) (*api.Resou
...
@@ -24,7 +24,7 @@ func (s *ResourceService) CreateResource(create *api.ResourceCreate) (*api.Resou
return
resource
,
nil
return
resource
,
nil
}
}
func
(
s
*
ResourceService
)
FindResouceList
(
find
*
api
.
ResourceFind
)
([]
*
api
.
Resource
,
error
)
{
func
(
s
*
ResourceService
)
FindResou
r
ceList
(
find
*
api
.
ResourceFind
)
([]
*
api
.
Resource
,
error
)
{
list
,
err
:=
findResourceList
(
s
.
db
,
find
)
list
,
err
:=
findResourceList
(
s
.
db
,
find
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
...
@@ -33,6 +33,19 @@ func (s *ResourceService) FindResouceList(find *api.ResourceFind) ([]*api.Resour
...
@@ -33,6 +33,19 @@ func (s *ResourceService) FindResouceList(find *api.ResourceFind) ([]*api.Resour
return
list
,
nil
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
{
func
(
s
*
ResourceService
)
DeleteResource
(
delete
*
api
.
ResourceDelete
)
error
{
err
:=
deleteResource
(
s
.
db
,
delete
)
err
:=
deleteResource
(
s
.
db
,
delete
)
if
err
!=
nil
{
if
err
!=
nil
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment