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
d0ddac29
Unverified
Commit
d0ddac29
authored
Apr 05, 2023
by
boojack
Committed by
GitHub
Apr 05, 2023
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
chore: update store error handler (#1479)
parent
609366da
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
16 additions
and
28 deletions
+16
-28
jwt.go
server/jwt.go
+9
-10
rss.go
server/rss.go
+7
-18
No files found.
server/jwt.go
View file @
d0ddac29
package
server
package
server
import
(
import
(
"errors"
"fmt"
"fmt"
"net/http"
"net/http"
"strconv"
"strconv"
...
@@ -10,7 +9,7 @@ import (
...
@@ -10,7 +9,7 @@ import (
"github.com/golang-jwt/jwt/v4"
"github.com/golang-jwt/jwt/v4"
"github.com/labstack/echo/v4"
"github.com/labstack/echo/v4"
pkgerrors
"github.com/pkg/errors"
"github.com/pkg/errors"
"github.com/usememos/memos/api"
"github.com/usememos/memos/api"
"github.com/usememos/memos/common"
"github.com/usememos/memos/common"
"github.com/usememos/memos/server/auth"
"github.com/usememos/memos/server/auth"
...
@@ -38,7 +37,7 @@ func getUserIDContextKey() string {
...
@@ -38,7 +37,7 @@ func getUserIDContextKey() string {
func
GenerateTokensAndSetCookies
(
c
echo
.
Context
,
user
*
api
.
User
,
mode
string
,
secret
string
)
error
{
func
GenerateTokensAndSetCookies
(
c
echo
.
Context
,
user
*
api
.
User
,
mode
string
,
secret
string
)
error
{
accessToken
,
err
:=
auth
.
GenerateAccessToken
(
user
.
Username
,
user
.
ID
,
mode
,
secret
)
accessToken
,
err
:=
auth
.
GenerateAccessToken
(
user
.
Username
,
user
.
ID
,
mode
,
secret
)
if
err
!=
nil
{
if
err
!=
nil
{
return
pkg
errors
.
Wrap
(
err
,
"failed to generate access token"
)
return
errors
.
Wrap
(
err
,
"failed to generate access token"
)
}
}
cookieExp
:=
time
.
Now
()
.
Add
(
auth
.
CookieExpDuration
)
cookieExp
:=
time
.
Now
()
.
Add
(
auth
.
CookieExpDuration
)
...
@@ -47,7 +46,7 @@ func GenerateTokensAndSetCookies(c echo.Context, user *api.User, mode string, se
...
@@ -47,7 +46,7 @@ func GenerateTokensAndSetCookies(c echo.Context, user *api.User, mode string, se
// We generate here a new refresh token and saving it to the cookie.
// We generate here a new refresh token and saving it to the cookie.
refreshToken
,
err
:=
auth
.
GenerateRefreshToken
(
user
.
Username
,
user
.
ID
,
mode
,
secret
)
refreshToken
,
err
:=
auth
.
GenerateRefreshToken
(
user
.
Username
,
user
.
ID
,
mode
,
secret
)
if
err
!=
nil
{
if
err
!=
nil
{
return
pkg
errors
.
Wrap
(
err
,
"failed to generate refresh token"
)
return
errors
.
Wrap
(
err
,
"failed to generate refresh token"
)
}
}
setTokenCookie
(
c
,
auth
.
RefreshTokenCookieName
,
refreshToken
,
cookieExp
)
setTokenCookie
(
c
,
auth
.
RefreshTokenCookieName
,
refreshToken
,
cookieExp
)
...
@@ -116,7 +115,7 @@ func JWTMiddleware(server *Server, next echo.HandlerFunc, secret string) echo.Ha
...
@@ -116,7 +115,7 @@ func JWTMiddleware(server *Server, next echo.HandlerFunc, secret string) echo.Ha
}
}
// Skip validation for server status endpoints.
// Skip validation for server status endpoints.
if
common
.
HasPrefixes
(
path
,
"/api/ping"
,
"/api/
status"
,
"/api/
idp"
,
"/api/user/:id"
)
&&
method
==
http
.
MethodGet
{
if
common
.
HasPrefixes
(
path
,
"/api/ping"
,
"/api/idp"
,
"/api/user/:id"
)
&&
method
==
http
.
MethodGet
{
return
next
(
c
)
return
next
(
c
)
}
}
...
@@ -127,7 +126,7 @@ func JWTMiddleware(server *Server, next echo.HandlerFunc, secret string) echo.Ha
...
@@ -127,7 +126,7 @@ func JWTMiddleware(server *Server, next echo.HandlerFunc, secret string) echo.Ha
return
next
(
c
)
return
next
(
c
)
}
}
// When the request is not authenticated, we allow the user to access the memo endpoints for those public memos.
// When the request is not authenticated, we allow the user to access the memo endpoints for those public memos.
if
common
.
HasPrefixes
(
path
,
"/api/memo"
)
&&
method
==
http
.
MethodGet
{
if
common
.
HasPrefixes
(
path
,
"/api/
status"
,
"/api/
memo"
)
&&
method
==
http
.
MethodGet
{
return
next
(
c
)
return
next
(
c
)
}
}
return
echo
.
NewHTTPError
(
http
.
StatusUnauthorized
,
"Missing access token"
)
return
echo
.
NewHTTPError
(
http
.
StatusUnauthorized
,
"Missing access token"
)
...
@@ -136,14 +135,14 @@ func JWTMiddleware(server *Server, next echo.HandlerFunc, secret string) echo.Ha
...
@@ -136,14 +135,14 @@ func JWTMiddleware(server *Server, next echo.HandlerFunc, secret string) echo.Ha
claims
:=
&
Claims
{}
claims
:=
&
Claims
{}
accessToken
,
err
:=
jwt
.
ParseWithClaims
(
token
,
claims
,
func
(
t
*
jwt
.
Token
)
(
any
,
error
)
{
accessToken
,
err
:=
jwt
.
ParseWithClaims
(
token
,
claims
,
func
(
t
*
jwt
.
Token
)
(
any
,
error
)
{
if
t
.
Method
.
Alg
()
!=
jwt
.
SigningMethodHS256
.
Name
{
if
t
.
Method
.
Alg
()
!=
jwt
.
SigningMethodHS256
.
Name
{
return
nil
,
pkg
errors
.
Errorf
(
"unexpected access token signing method=%v, expect %v"
,
t
.
Header
[
"alg"
],
jwt
.
SigningMethodHS256
)
return
nil
,
errors
.
Errorf
(
"unexpected access token signing method=%v, expect %v"
,
t
.
Header
[
"alg"
],
jwt
.
SigningMethodHS256
)
}
}
if
kid
,
ok
:=
t
.
Header
[
"kid"
]
.
(
string
);
ok
{
if
kid
,
ok
:=
t
.
Header
[
"kid"
]
.
(
string
);
ok
{
if
kid
==
"v1"
{
if
kid
==
"v1"
{
return
[]
byte
(
secret
),
nil
return
[]
byte
(
secret
),
nil
}
}
}
}
return
nil
,
pkg
errors
.
Errorf
(
"unexpected access token kid=%v"
,
t
.
Header
[
"kid"
])
return
nil
,
errors
.
Errorf
(
"unexpected access token kid=%v"
,
t
.
Header
[
"kid"
])
})
})
if
!
audienceContains
(
claims
.
Audience
,
fmt
.
Sprintf
(
auth
.
AccessTokenAudienceFmt
,
mode
))
{
if
!
audienceContains
(
claims
.
Audience
,
fmt
.
Sprintf
(
auth
.
AccessTokenAudienceFmt
,
mode
))
{
...
@@ -202,7 +201,7 @@ func JWTMiddleware(server *Server, next echo.HandlerFunc, secret string) echo.Ha
...
@@ -202,7 +201,7 @@ func JWTMiddleware(server *Server, next echo.HandlerFunc, secret string) echo.Ha
refreshTokenClaims
:=
&
Claims
{}
refreshTokenClaims
:=
&
Claims
{}
refreshToken
,
err
:=
jwt
.
ParseWithClaims
(
rc
.
Value
,
refreshTokenClaims
,
func
(
t
*
jwt
.
Token
)
(
any
,
error
)
{
refreshToken
,
err
:=
jwt
.
ParseWithClaims
(
rc
.
Value
,
refreshTokenClaims
,
func
(
t
*
jwt
.
Token
)
(
any
,
error
)
{
if
t
.
Method
.
Alg
()
!=
jwt
.
SigningMethodHS256
.
Name
{
if
t
.
Method
.
Alg
()
!=
jwt
.
SigningMethodHS256
.
Name
{
return
nil
,
pkg
errors
.
Errorf
(
"unexpected refresh token signing method=%v, expected %v"
,
t
.
Header
[
"alg"
],
jwt
.
SigningMethodHS256
)
return
nil
,
errors
.
Errorf
(
"unexpected refresh token signing method=%v, expected %v"
,
t
.
Header
[
"alg"
],
jwt
.
SigningMethodHS256
)
}
}
if
kid
,
ok
:=
t
.
Header
[
"kid"
]
.
(
string
);
ok
{
if
kid
,
ok
:=
t
.
Header
[
"kid"
]
.
(
string
);
ok
{
...
@@ -210,7 +209,7 @@ func JWTMiddleware(server *Server, next echo.HandlerFunc, secret string) echo.Ha
...
@@ -210,7 +209,7 @@ func JWTMiddleware(server *Server, next echo.HandlerFunc, secret string) echo.Ha
return
[]
byte
(
secret
),
nil
return
[]
byte
(
secret
),
nil
}
}
}
}
return
nil
,
pkg
errors
.
Errorf
(
"unexpected refresh token kid=%v"
,
t
.
Header
[
"kid"
])
return
nil
,
errors
.
Errorf
(
"unexpected refresh token kid=%v"
,
t
.
Header
[
"kid"
])
})
})
if
err
!=
nil
{
if
err
!=
nil
{
if
err
==
jwt
.
ErrSignatureInvalid
{
if
err
==
jwt
.
ErrSignatureInvalid
{
...
...
server/rss.go
View file @
d0ddac29
...
@@ -11,6 +11,7 @@ import (
...
@@ -11,6 +11,7 @@ import (
"github.com/gorilla/feeds"
"github.com/gorilla/feeds"
"github.com/labstack/echo/v4"
"github.com/labstack/echo/v4"
"github.com/usememos/memos/api"
"github.com/usememos/memos/api"
"github.com/usememos/memos/common"
)
)
func
(
s
*
Server
)
registerRSSRoutes
(
g
*
echo
.
Group
)
{
func
(
s
*
Server
)
registerRSSRoutes
(
g
*
echo
.
Group
)
{
...
@@ -92,13 +93,10 @@ func generateRSSFromMemoList(memoList []*api.Memo, baseURL string, profile *api.
...
@@ -92,13 +93,10 @@ func generateRSSFromMemoList(memoList []*api.Memo, baseURL string, profile *api.
Created
:
time
.
Now
(),
Created
:
time
.
Now
(),
}
}
var
itemCountLimit
=
min
(
len
(
memoList
),
MaxRSSItemCount
)
var
itemCountLimit
=
common
.
Min
(
len
(
memoList
),
MaxRSSItemCount
)
feed
.
Items
=
make
([]
*
feeds
.
Item
,
itemCountLimit
)
feed
.
Items
=
make
([]
*
feeds
.
Item
,
itemCountLimit
)
for
i
:=
0
;
i
<
itemCountLimit
;
i
++
{
for
i
:=
0
;
i
<
itemCountLimit
;
i
++
{
memo
:=
memoList
[
i
]
memo
:=
memoList
[
i
]
feed
.
Items
[
i
]
=
&
feeds
.
Item
{
feed
.
Items
[
i
]
=
&
feeds
.
Item
{
Title
:
getRSSItemTitle
(
memo
.
Content
),
Title
:
getRSSItemTitle
(
memo
.
Content
),
Link
:
&
feeds
.
Link
{
Href
:
baseURL
+
"/m/"
+
strconv
.
Itoa
(
memo
.
ID
)},
Link
:
&
feeds
.
Link
{
Href
:
baseURL
+
"/m/"
+
strconv
.
Itoa
(
memo
.
ID
)},
...
@@ -126,31 +124,22 @@ func getSystemCustomizedProfile(ctx context.Context, s *Server) (*api.Customized
...
@@ -126,31 +124,22 @@ func getSystemCustomizedProfile(ctx context.Context, s *Server) (*api.Customized
systemSetting
,
err
:=
s
.
Store
.
FindSystemSetting
(
ctx
,
&
api
.
SystemSettingFind
{
systemSetting
,
err
:=
s
.
Store
.
FindSystemSetting
(
ctx
,
&
api
.
SystemSettingFind
{
Name
:
api
.
SystemSettingCustomizedProfileName
,
Name
:
api
.
SystemSettingCustomizedProfileName
,
})
})
if
err
!=
nil
{
if
err
!=
nil
&&
common
.
ErrorCode
(
err
)
!=
common
.
NotFound
{
return
customizedProfile
,
err
return
nil
,
err
}
}
if
err
:=
json
.
Unmarshal
([]
byte
(
systemSetting
.
Value
),
customizedProfile
);
err
!=
nil
{
err
=
json
.
Unmarshal
([]
byte
(
systemSetting
.
Value
),
customizedProfile
)
return
nil
,
err
if
err
!=
nil
{
return
customizedProfile
,
err
}
}
return
customizedProfile
,
nil
return
customizedProfile
,
nil
}
}
func
min
(
a
,
b
int
)
int
{
if
a
<
b
{
return
a
}
return
b
}
func
getRSSItemTitle
(
content
string
)
string
{
func
getRSSItemTitle
(
content
string
)
string
{
var
title
string
var
title
string
if
isTitleDefined
(
content
)
{
if
isTitleDefined
(
content
)
{
title
=
strings
.
Split
(
content
,
"
\n
"
)[
0
][
2
:
]
title
=
strings
.
Split
(
content
,
"
\n
"
)[
0
][
2
:
]
}
else
{
}
else
{
title
=
strings
.
Split
(
content
,
"
\n
"
)[
0
]
title
=
strings
.
Split
(
content
,
"
\n
"
)[
0
]
var
titleLengthLimit
=
m
in
(
len
(
title
),
MaxRSSItemTitleLength
)
var
titleLengthLimit
=
common
.
M
in
(
len
(
title
),
MaxRSSItemTitleLength
)
if
titleLengthLimit
<
len
(
title
)
{
if
titleLengthLimit
<
len
(
title
)
{
title
=
title
[
:
titleLengthLimit
]
+
"..."
title
=
title
[
:
titleLengthLimit
]
+
"..."
}
}
...
...
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