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
e5550828
Unverified
Commit
e5550828
authored
Jan 02, 2023
by
boojack
Committed by
GitHub
Jan 02, 2023
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
chore: update activity payload (#891)
parent
2e95f682
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
183 additions
and
56 deletions
+183
-56
activity.go
api/activity.go
+39
-2
main.go
bin/server/main.go
+1
-6
auth.go
server/auth.go
+23
-9
http_getter.go
server/http_getter.go
+1
-16
resource.go
server/resource.go
+24
-4
server.go
server/server.go
+26
-2
shortcut.go
server/shortcut.go
+23
-4
system.go
server/system.go
+0
-5
tag.go
server/tag.go
+22
-4
user.go
server/user.go
+24
-4
No files found.
api/activity.go
View file @
e5550828
package
api
import
"github.com/usememos/memos/server/profile"
// ActivityType is the type for an activity.
type
ActivityType
string
...
...
@@ -16,8 +18,6 @@ const (
ActivityUserAuthSignIn
ActivityType
=
"user.auth.signin"
// ActivityUserAuthSignUp is the type for user signup.
ActivityUserAuthSignUp
ActivityType
=
"user.auth.signup"
// ActivityUserAuthSignOut is the type for user signout.
ActivityUserAuthSignOut
ActivityType
=
"user.auth.signout"
// ActivityUserSettingUpdate is the type for updating user settings.
ActivityUserSettingUpdate
ActivityType
=
"user.setting.update"
...
...
@@ -39,6 +39,13 @@ const (
// ActivityShortcutDelete is the type for deleting shortcuts.
ActivityShortcutDelete
ActivityType
=
"shortcut.delete"
// Resource related.
// ActivityResourceCreate is the type for creating resources.
ActivityResourceCreate
ActivityType
=
"resource.create"
// ActivityResourceDelete is the type for deleting resources.
ActivityResourceDelete
ActivityType
=
"resource.delete"
// Tag related.
// ActivityTagCreate is the type for creating tags.
...
...
@@ -64,11 +71,41 @@ const (
ActivityError
ActivityLevel
=
"ERROR"
)
type
ActivityUserCreatePayload
struct
{
UserID
int
`json:"userId"`
Username
string
`json:"username"`
Role
Role
`json:"role"`
}
type
ActivityUserAuthSignInPayload
struct
{
UserID
int
`json:"userId"`
IP
string
`json:"ip"`
}
type
ActivityUserAuthSignUpPayload
struct
{
Username
string
`json:"username"`
IP
string
`json:"ip"`
}
type
ActivityShortcutCreatePayload
struct
{
Title
string
`json:"title"`
Payload
string
`json:"payload"`
}
type
ActivityResourceCreatePayload
struct
{
Filename
string
`json:"filename"`
Type
string
`json:"type"`
Size
int64
`json:"size"`
}
type
ActivityTagCreatePayload
struct
{
TagName
string
`json:"tagName"`
}
type
ActivityServerStartPayload
struct
{
Profile
*
profile
.
Profile
`json:"profile"`
}
type
Activity
struct
{
ID
int
`json:"id"`
...
...
bin/server/main.go
View file @
e5550828
...
...
@@ -8,7 +8,6 @@ import (
"context"
"fmt"
metric
"github.com/usememos/memos/plugin/metrics"
"github.com/usememos/memos/server"
"github.com/usememos/memos/server/profile"
"github.com/usememos/memos/store"
...
...
@@ -46,11 +45,7 @@ func run(profile *profile.Profile) error {
println
(
greetingBanner
)
fmt
.
Printf
(
"Version %s has started at :%d
\n
"
,
profile
.
Version
,
profile
.
Port
)
metricCollector
.
Collect
(
ctx
,
&
metric
.
Metric
{
Name
:
"service started"
,
})
return
serverInstance
.
Run
()
return
serverInstance
.
Run
(
ctx
)
}
func
execute
()
error
{
...
...
server/auth.go
View file @
e5550828
...
...
@@ -8,7 +8,6 @@ import (
"github.com/pkg/errors"
"github.com/usememos/memos/api"
"github.com/usememos/memos/common"
metric
"github.com/usememos/memos/plugin/metrics"
"github.com/labstack/echo/v4"
"golang.org/x/crypto/bcrypt"
...
...
@@ -115,9 +114,9 @@ func (s *Server) registerAuthRoutes(g *echo.Group) {
if
err
!=
nil
{
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to create user"
)
.
SetInternal
(
err
)
}
s
.
Collector
.
Collect
(
ctx
,
&
metric
.
Metric
{
Name
:
"user signed up"
,
}
)
if
err
:=
s
.
createUserAuthSignUpActivity
(
c
,
user
);
err
!=
nil
{
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to create activity"
)
.
SetInternal
(
err
)
}
err
=
setUserSession
(
c
,
user
)
if
err
!=
nil
{
...
...
@@ -132,14 +131,10 @@ func (s *Server) registerAuthRoutes(g *echo.Group) {
})
g
.
POST
(
"/auth/signout"
,
func
(
c
echo
.
Context
)
error
{
ctx
:=
c
.
Request
()
.
Context
()
err
:=
removeUserSession
(
c
)
if
err
!=
nil
{
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to set sign out session"
)
.
SetInternal
(
err
)
}
s
.
Collector
.
Collect
(
ctx
,
&
metric
.
Metric
{
Name
:
"user signout"
,
})
return
c
.
JSON
(
http
.
StatusOK
,
true
)
})
...
...
@@ -153,7 +148,7 @@ func (s *Server) createUserAuthSignInActivity(c echo.Context, user *api.User) er
}
payloadStr
,
err
:=
json
.
Marshal
(
payload
)
if
err
!=
nil
{
return
errors
.
Wrap
(
err
,
"failed to ma
l
shal activity payload"
)
return
errors
.
Wrap
(
err
,
"failed to ma
r
shal activity payload"
)
}
_
,
err
=
s
.
Store
.
CreateActivity
(
ctx
,
&
api
.
ActivityCreate
{
CreatorID
:
user
.
ID
,
...
...
@@ -163,3 +158,22 @@ func (s *Server) createUserAuthSignInActivity(c echo.Context, user *api.User) er
})
return
err
}
func
(
s
*
Server
)
createUserAuthSignUpActivity
(
c
echo
.
Context
,
user
*
api
.
User
)
error
{
ctx
:=
c
.
Request
()
.
Context
()
payload
:=
api
.
ActivityUserAuthSignUpPayload
{
Username
:
user
.
Username
,
IP
:
echo
.
ExtractIPFromRealIPHeader
()(
c
.
Request
()),
}
payloadStr
,
err
:=
json
.
Marshal
(
payload
)
if
err
!=
nil
{
return
errors
.
Wrap
(
err
,
"failed to marshal activity payload"
)
}
_
,
err
=
s
.
Store
.
CreateActivity
(
ctx
,
&
api
.
ActivityCreate
{
CreatorID
:
user
.
ID
,
Type
:
api
.
ActivityUserAuthSignUp
,
Level
:
api
.
ActivityInfo
,
Payload
:
string
(
payloadStr
),
})
return
err
}
server/http_getter.go
View file @
e5550828
...
...
@@ -8,12 +8,10 @@ import (
"github.com/labstack/echo/v4"
getter
"github.com/usememos/memos/plugin/http_getter"
metric
"github.com/usememos/memos/plugin/metrics"
)
func
(
s
*
Server
)
registerGetterPublicRoutes
(
g
*
echo
.
Group
)
{
func
registerGetterPublicRoutes
(
g
*
echo
.
Group
)
{
g
.
GET
(
"/get/httpmeta"
,
func
(
c
echo
.
Context
)
error
{
ctx
:=
c
.
Request
()
.
Context
()
urlStr
:=
c
.
QueryParam
(
"url"
)
if
urlStr
==
""
{
return
echo
.
NewHTTPError
(
http
.
StatusBadRequest
,
"Missing website url"
)
...
...
@@ -26,12 +24,6 @@ func (s *Server) registerGetterPublicRoutes(g *echo.Group) {
if
err
!=
nil
{
return
echo
.
NewHTTPError
(
http
.
StatusNotAcceptable
,
fmt
.
Sprintf
(
"Failed to get website meta with url: %s"
,
urlStr
))
.
SetInternal
(
err
)
}
s
.
Collector
.
Collect
(
ctx
,
&
metric
.
Metric
{
Name
:
"getter used"
,
Labels
:
map
[
string
]
string
{
"type"
:
"httpmeta"
,
},
})
c
.
Response
()
.
Header
()
.
Set
(
echo
.
HeaderContentType
,
echo
.
MIMEApplicationJSONCharsetUTF8
)
if
err
:=
json
.
NewEncoder
(
c
.
Response
()
.
Writer
)
.
Encode
(
composeResponse
(
htmlMeta
));
err
!=
nil
{
...
...
@@ -41,7 +33,6 @@ func (s *Server) registerGetterPublicRoutes(g *echo.Group) {
})
g
.
GET
(
"/get/image"
,
func
(
c
echo
.
Context
)
error
{
ctx
:=
c
.
Request
()
.
Context
()
urlStr
:=
c
.
QueryParam
(
"url"
)
if
urlStr
==
""
{
return
echo
.
NewHTTPError
(
http
.
StatusBadRequest
,
"Missing image url"
)
...
...
@@ -54,12 +45,6 @@ func (s *Server) registerGetterPublicRoutes(g *echo.Group) {
if
err
!=
nil
{
return
echo
.
NewHTTPError
(
http
.
StatusBadRequest
,
fmt
.
Sprintf
(
"Failed to get image url: %s"
,
urlStr
))
.
SetInternal
(
err
)
}
s
.
Collector
.
Collect
(
ctx
,
&
metric
.
Metric
{
Name
:
"getter used"
,
Labels
:
map
[
string
]
string
{
"type"
:
"image"
,
},
})
c
.
Response
()
.
Writer
.
WriteHeader
(
http
.
StatusOK
)
c
.
Response
()
.
Writer
.
Header
()
.
Set
(
"Content-Type"
,
image
.
Mediatype
)
...
...
server/resource.go
View file @
e5550828
...
...
@@ -9,9 +9,9 @@ import (
"strconv"
"time"
"github.com/pkg/errors"
"github.com/usememos/memos/api"
"github.com/usememos/memos/common"
metric
"github.com/usememos/memos/plugin/metrics"
"github.com/labstack/echo/v4"
)
...
...
@@ -66,9 +66,9 @@ func (s *Server) registerResourceRoutes(g *echo.Group) {
if
err
!=
nil
{
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to create resource"
)
.
SetInternal
(
err
)
}
s
.
Collector
.
Collect
(
ctx
,
&
metric
.
Metric
{
Name
:
"resource created"
,
}
)
if
err
:=
s
.
createResourceCreateActivity
(
c
,
resource
);
err
!=
nil
{
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to create activity"
)
.
SetInternal
(
err
)
}
c
.
Response
()
.
Header
()
.
Set
(
echo
.
HeaderContentType
,
echo
.
MIMEApplicationJSONCharsetUTF8
)
if
err
:=
json
.
NewEncoder
(
c
.
Response
()
.
Writer
)
.
Encode
(
composeResponse
(
resource
));
err
!=
nil
{
...
...
@@ -275,3 +275,23 @@ func (s *Server) registerResourcePublicRoutes(g *echo.Group) {
return
nil
})
}
func
(
s
*
Server
)
createResourceCreateActivity
(
c
echo
.
Context
,
resource
*
api
.
Resource
)
error
{
ctx
:=
c
.
Request
()
.
Context
()
payload
:=
api
.
ActivityResourceCreatePayload
{
Filename
:
resource
.
Filename
,
Type
:
resource
.
Type
,
Size
:
resource
.
Size
,
}
payloadStr
,
err
:=
json
.
Marshal
(
payload
)
if
err
!=
nil
{
return
errors
.
Wrap
(
err
,
"failed to marshal activity payload"
)
}
_
,
err
=
s
.
Store
.
CreateActivity
(
ctx
,
&
api
.
ActivityCreate
{
CreatorID
:
resource
.
CreatorID
,
Type
:
api
.
ActivityResourceCreate
,
Level
:
api
.
ActivityInfo
,
Payload
:
string
(
payloadStr
),
})
return
err
}
server/server.go
View file @
e5550828
package
server
import
(
"context"
"encoding/json"
"fmt"
"time"
"github.com/pkg/errors"
"github.com/usememos/memos/api"
"github.com/usememos/memos/server/profile"
"github.com/usememos/memos/store"
...
...
@@ -77,7 +81,7 @@ func NewServer(profile *profile.Profile) *Server {
publicGroup
:=
e
.
Group
(
"/o"
)
s
.
registerResourcePublicRoutes
(
publicGroup
)
s
.
registerGetterPublicRoutes
(
publicGroup
)
registerGetterPublicRoutes
(
publicGroup
)
apiGroup
:=
e
.
Group
(
"/api"
)
apiGroup
.
Use
(
func
(
next
echo
.
HandlerFunc
)
echo
.
HandlerFunc
{
...
...
@@ -94,6 +98,26 @@ func NewServer(profile *profile.Profile) *Server {
return
s
}
func
(
s
*
Server
)
Run
()
error
{
func
(
s
*
Server
)
Run
(
ctx
context
.
Context
)
error
{
if
err
:=
s
.
createServerStartActivity
(
ctx
);
err
!=
nil
{
return
errors
.
Wrap
(
err
,
"failed to create activity"
)
}
return
s
.
e
.
Start
(
fmt
.
Sprintf
(
":%d"
,
s
.
Profile
.
Port
))
}
func
(
s
*
Server
)
createServerStartActivity
(
ctx
context
.
Context
)
error
{
payload
:=
api
.
ActivityServerStartPayload
{
Profile
:
s
.
Profile
,
}
payloadStr
,
err
:=
json
.
Marshal
(
payload
)
if
err
!=
nil
{
return
errors
.
Wrap
(
err
,
"failed to marshal activity payload"
)
}
_
,
err
=
s
.
Store
.
CreateActivity
(
ctx
,
&
api
.
ActivityCreate
{
CreatorID
:
api
.
UnknownID
,
Type
:
api
.
ActivityServerStart
,
Level
:
api
.
ActivityInfo
,
Payload
:
string
(
payloadStr
),
})
return
err
}
server/shortcut.go
View file @
e5550828
...
...
@@ -7,9 +7,9 @@ import (
"strconv"
"time"
"github.com/pkg/errors"
"github.com/usememos/memos/api"
"github.com/usememos/memos/common"
metric
"github.com/usememos/memos/plugin/metrics"
"github.com/labstack/echo/v4"
)
...
...
@@ -31,9 +31,9 @@ func (s *Server) registerShortcutRoutes(g *echo.Group) {
if
err
!=
nil
{
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to create shortcut"
)
.
SetInternal
(
err
)
}
s
.
Collector
.
Collect
(
ctx
,
&
metric
.
Metric
{
Name
:
"shortcut created"
,
}
)
if
err
:=
s
.
createShortcutCreateActivity
(
c
,
shortcut
);
err
!=
nil
{
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to create activity"
)
.
SetInternal
(
err
)
}
c
.
Response
()
.
Header
()
.
Set
(
echo
.
HeaderContentType
,
echo
.
MIMEApplicationJSONCharsetUTF8
)
if
err
:=
json
.
NewEncoder
(
c
.
Response
()
.
Writer
)
.
Encode
(
composeResponse
(
shortcut
));
err
!=
nil
{
...
...
@@ -164,3 +164,22 @@ func (s *Server) registerShortcutRoutes(g *echo.Group) {
return
c
.
JSON
(
http
.
StatusOK
,
true
)
})
}
func
(
s
*
Server
)
createShortcutCreateActivity
(
c
echo
.
Context
,
shortcut
*
api
.
Shortcut
)
error
{
ctx
:=
c
.
Request
()
.
Context
()
payload
:=
api
.
ActivityShortcutCreatePayload
{
Title
:
shortcut
.
Title
,
Payload
:
shortcut
.
Payload
,
}
payloadStr
,
err
:=
json
.
Marshal
(
payload
)
if
err
!=
nil
{
return
errors
.
Wrap
(
err
,
"failed to marshal activity payload"
)
}
_
,
err
=
s
.
Store
.
CreateActivity
(
ctx
,
&
api
.
ActivityCreate
{
CreatorID
:
shortcut
.
CreatorID
,
Type
:
api
.
ActivityShortcutCreate
,
Level
:
api
.
ActivityInfo
,
Payload
:
string
(
payloadStr
),
})
return
err
}
server/system.go
View file @
e5550828
...
...
@@ -7,7 +7,6 @@ import (
"github.com/usememos/memos/api"
"github.com/usememos/memos/common"
metric
"github.com/usememos/memos/plugin/metrics"
"github.com/labstack/echo/v4"
)
...
...
@@ -152,10 +151,6 @@ func (s *Server) registerSystemRoutes(g *echo.Group) {
if
err
!=
nil
{
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to upsert system setting"
)
.
SetInternal
(
err
)
}
s
.
Collector
.
Collect
(
ctx
,
&
metric
.
Metric
{
Name
:
"systemSetting updated"
,
Labels
:
map
[
string
]
string
{
"field"
:
string
(
systemSettingUpsert
.
Name
)},
})
c
.
Response
()
.
Header
()
.
Set
(
echo
.
HeaderContentType
,
echo
.
MIMEApplicationJSONCharsetUTF8
)
if
err
:=
json
.
NewEncoder
(
c
.
Response
()
.
Writer
)
.
Encode
(
composeResponse
(
systemSetting
));
err
!=
nil
{
...
...
server/tag.go
View file @
e5550828
...
...
@@ -7,9 +7,9 @@ import (
"regexp"
"sort"
"github.com/pkg/errors"
"github.com/usememos/memos/api"
"github.com/usememos/memos/common"
metric
"github.com/usememos/memos/plugin/metrics"
"github.com/labstack/echo/v4"
)
...
...
@@ -35,9 +35,9 @@ func (s *Server) registerTagRoutes(g *echo.Group) {
if
err
!=
nil
{
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to upsert tag"
)
.
SetInternal
(
err
)
}
s
.
Collector
.
Collect
(
ctx
,
&
metric
.
Metric
{
Name
:
"tag created"
,
}
)
if
err
:=
s
.
createTagCreateActivity
(
c
,
tag
);
err
!=
nil
{
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to create activity"
)
.
SetInternal
(
err
)
}
c
.
Response
()
.
Header
()
.
Set
(
echo
.
HeaderContentType
,
echo
.
MIMEApplicationJSONCharsetUTF8
)
if
err
:=
json
.
NewEncoder
(
c
.
Response
()
.
Writer
)
.
Encode
(
composeResponse
(
tag
.
Name
));
err
!=
nil
{
...
...
@@ -155,3 +155,21 @@ func findTagListFromMemoContent(memoContent string) []string {
sort
.
Strings
(
tagList
)
return
tagList
}
func
(
s
*
Server
)
createTagCreateActivity
(
c
echo
.
Context
,
tag
*
api
.
Tag
)
error
{
ctx
:=
c
.
Request
()
.
Context
()
payload
:=
api
.
ActivityTagCreatePayload
{
TagName
:
tag
.
Name
,
}
payloadStr
,
err
:=
json
.
Marshal
(
payload
)
if
err
!=
nil
{
return
errors
.
Wrap
(
err
,
"failed to marshal activity payload"
)
}
_
,
err
=
s
.
Store
.
CreateActivity
(
ctx
,
&
api
.
ActivityCreate
{
CreatorID
:
tag
.
CreatorID
,
Type
:
api
.
ActivityTagCreate
,
Level
:
api
.
ActivityInfo
,
Payload
:
string
(
payloadStr
),
})
return
err
}
server/user.go
View file @
e5550828
...
...
@@ -7,9 +7,9 @@ import (
"strconv"
"time"
"github.com/pkg/errors"
"github.com/usememos/memos/api"
"github.com/usememos/memos/common"
metric
"github.com/usememos/memos/plugin/metrics"
"github.com/labstack/echo/v4"
"golang.org/x/crypto/bcrypt"
...
...
@@ -55,9 +55,9 @@ func (s *Server) registerUserRoutes(g *echo.Group) {
if
err
!=
nil
{
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to create user"
)
.
SetInternal
(
err
)
}
s
.
Collector
.
Collect
(
ctx
,
&
metric
.
Metric
{
Name
:
"user created"
,
}
)
if
err
:=
s
.
createUserCreateActivity
(
c
,
user
);
err
!=
nil
{
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to create activity"
)
.
SetInternal
(
err
)
}
c
.
Response
()
.
Header
()
.
Set
(
echo
.
HeaderContentType
,
echo
.
MIMEApplicationJSONCharsetUTF8
)
if
err
:=
json
.
NewEncoder
(
c
.
Response
()
.
Writer
)
.
Encode
(
composeResponse
(
user
));
err
!=
nil
{
...
...
@@ -277,3 +277,23 @@ func (s *Server) registerUserRoutes(g *echo.Group) {
return
c
.
JSON
(
http
.
StatusOK
,
true
)
})
}
func
(
s
*
Server
)
createUserCreateActivity
(
c
echo
.
Context
,
user
*
api
.
User
)
error
{
ctx
:=
c
.
Request
()
.
Context
()
payload
:=
api
.
ActivityUserCreatePayload
{
UserID
:
user
.
ID
,
Username
:
user
.
Username
,
Role
:
user
.
Role
,
}
payloadStr
,
err
:=
json
.
Marshal
(
payload
)
if
err
!=
nil
{
return
errors
.
Wrap
(
err
,
"failed to marshal activity payload"
)
}
_
,
err
=
s
.
Store
.
CreateActivity
(
ctx
,
&
api
.
ActivityCreate
{
CreatorID
:
user
.
ID
,
Type
:
api
.
ActivityUserCreate
,
Level
:
api
.
ActivityInfo
,
Payload
:
string
(
payloadStr
),
})
return
err
}
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