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
da70917b
Unverified
Commit
da70917b
authored
Jul 09, 2023
by
boojack
Committed by
GitHub
Jul 09, 2023
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
chore: update auth page (#1920)
* chore: update auth page * chore: update
parent
0292f472
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
39 additions
and
47 deletions
+39
-47
auth.go
api/v1/auth/auth.go
+2
-4
system.go
api/v1/system.go
+1
-1
user.go
api/v1/user.go
+6
-6
server.go
test/server/server.go
+2
-1
DemoBanner.tsx
web/src/components/DemoBanner.tsx
+1
-1
Auth.tsx
web/src/pages/Auth.tsx
+27
-34
No files found.
api/v1/auth/auth.go
View file @
da70917b
...
@@ -33,11 +33,9 @@ const (
...
@@ -33,11 +33,9 @@ const (
// 2. The access token has already expired, we refresh the token so that the ongoing request can pass through.
// 2. The access token has already expired, we refresh the token so that the ongoing request can pass through.
CookieExpDuration
=
refreshTokenDuration
-
1
*
time
.
Minute
CookieExpDuration
=
refreshTokenDuration
-
1
*
time
.
Minute
// AccessTokenCookieName is the cookie name of access token.
// AccessTokenCookieName is the cookie name of access token.
AccessTokenCookieName
=
"access-token"
AccessTokenCookieName
=
"
memos.
access-token"
// RefreshTokenCookieName is the cookie name of refresh token.
// RefreshTokenCookieName is the cookie name of refresh token.
RefreshTokenCookieName
=
"refresh-token"
RefreshTokenCookieName
=
"memos.refresh-token"
// UserIDCookieName is the cookie name of user ID.
UserIDCookieName
=
"user"
)
)
type
claimsMessage
struct
{
type
claimsMessage
struct
{
...
...
api/v1/system.go
View file @
da70917b
...
@@ -73,7 +73,7 @@ func (s *APIV1Service) registerSystemRoutes(g *echo.Group) {
...
@@ -73,7 +73,7 @@ func (s *APIV1Service) registerSystemRoutes(g *echo.Group) {
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to find host user"
)
.
SetInternal
(
err
)
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to find host user"
)
.
SetInternal
(
err
)
}
}
if
hostUser
!=
nil
{
if
hostUser
!=
nil
{
systemStatus
.
Host
=
converUserFromStore
(
hostUser
)
systemStatus
.
Host
=
conver
t
UserFromStore
(
hostUser
)
// data desensitize
// data desensitize
systemStatus
.
Host
.
OpenID
=
""
systemStatus
.
Host
.
OpenID
=
""
systemStatus
.
Host
.
Email
=
""
systemStatus
.
Host
.
Email
=
""
...
...
api/v1/user.go
View file @
da70917b
...
@@ -177,7 +177,7 @@ func (s *APIV1Service) registerUserRoutes(g *echo.Group) {
...
@@ -177,7 +177,7 @@ func (s *APIV1Service) registerUserRoutes(g *echo.Group) {
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to create user"
)
.
SetInternal
(
err
)
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to create user"
)
.
SetInternal
(
err
)
}
}
userMessage
:=
converUserFromStore
(
user
)
userMessage
:=
conver
t
UserFromStore
(
user
)
if
err
:=
s
.
createUserCreateActivity
(
c
,
userMessage
);
err
!=
nil
{
if
err
:=
s
.
createUserCreateActivity
(
c
,
userMessage
);
err
!=
nil
{
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to create activity"
)
.
SetInternal
(
err
)
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to create activity"
)
.
SetInternal
(
err
)
}
}
...
@@ -193,7 +193,7 @@ func (s *APIV1Service) registerUserRoutes(g *echo.Group) {
...
@@ -193,7 +193,7 @@ func (s *APIV1Service) registerUserRoutes(g *echo.Group) {
userMessageList
:=
make
([]
*
User
,
0
,
len
(
list
))
userMessageList
:=
make
([]
*
User
,
0
,
len
(
list
))
for
_
,
user
:=
range
list
{
for
_
,
user
:=
range
list
{
userMessage
:=
converUserFromStore
(
user
)
userMessage
:=
conver
t
UserFromStore
(
user
)
// data desensitize
// data desensitize
userMessage
.
OpenID
=
""
userMessage
.
OpenID
=
""
userMessage
.
Email
=
""
userMessage
.
Email
=
""
...
@@ -228,7 +228,7 @@ func (s *APIV1Service) registerUserRoutes(g *echo.Group) {
...
@@ -228,7 +228,7 @@ func (s *APIV1Service) registerUserRoutes(g *echo.Group) {
for
_
,
userSetting
:=
range
list
{
for
_
,
userSetting
:=
range
list
{
userSettingList
=
append
(
userSettingList
,
convertUserSettingFromStore
(
userSetting
))
userSettingList
=
append
(
userSettingList
,
convertUserSettingFromStore
(
userSetting
))
}
}
userMessage
:=
converUserFromStore
(
user
)
userMessage
:=
conver
t
UserFromStore
(
user
)
userMessage
.
UserSettingList
=
userSettingList
userMessage
.
UserSettingList
=
userSettingList
return
c
.
JSON
(
http
.
StatusOK
,
userMessage
)
return
c
.
JSON
(
http
.
StatusOK
,
userMessage
)
})
})
...
@@ -248,7 +248,7 @@ func (s *APIV1Service) registerUserRoutes(g *echo.Group) {
...
@@ -248,7 +248,7 @@ func (s *APIV1Service) registerUserRoutes(g *echo.Group) {
return
echo
.
NewHTTPError
(
http
.
StatusNotFound
,
"User not found"
)
return
echo
.
NewHTTPError
(
http
.
StatusNotFound
,
"User not found"
)
}
}
userMessage
:=
converUserFromStore
(
user
)
userMessage
:=
conver
t
UserFromStore
(
user
)
// data desensitize
// data desensitize
userMessage
.
OpenID
=
""
userMessage
.
OpenID
=
""
userMessage
.
Email
=
""
userMessage
.
Email
=
""
...
@@ -334,7 +334,7 @@ func (s *APIV1Service) registerUserRoutes(g *echo.Group) {
...
@@ -334,7 +334,7 @@ func (s *APIV1Service) registerUserRoutes(g *echo.Group) {
for
_
,
userSetting
:=
range
list
{
for
_
,
userSetting
:=
range
list
{
userSettingList
=
append
(
userSettingList
,
convertUserSettingFromStore
(
userSetting
))
userSettingList
=
append
(
userSettingList
,
convertUserSettingFromStore
(
userSetting
))
}
}
userMessage
:=
converUserFromStore
(
user
)
userMessage
:=
conver
t
UserFromStore
(
user
)
userMessage
.
UserSettingList
=
userSettingList
userMessage
.
UserSettingList
=
userSettingList
return
c
.
JSON
(
http
.
StatusOK
,
userMessage
)
return
c
.
JSON
(
http
.
StatusOK
,
userMessage
)
})
})
...
@@ -395,7 +395,7 @@ func (s *APIV1Service) createUserCreateActivity(c echo.Context, user *User) erro
...
@@ -395,7 +395,7 @@ func (s *APIV1Service) createUserCreateActivity(c echo.Context, user *User) erro
return
err
return
err
}
}
func
converUserFromStore
(
user
*
store
.
User
)
*
User
{
func
conver
t
UserFromStore
(
user
*
store
.
User
)
*
User
{
return
&
User
{
return
&
User
{
ID
:
user
.
ID
,
ID
:
user
.
ID
,
RowStatus
:
RowStatus
(
user
.
RowStatus
),
RowStatus
:
RowStatus
(
user
.
RowStatus
),
...
...
test/server/server.go
View file @
da70917b
...
@@ -11,6 +11,7 @@ import (
...
@@ -11,6 +11,7 @@ import (
"time"
"time"
"github.com/pkg/errors"
"github.com/pkg/errors"
"github.com/usememos/memos/api/v1/auth"
"github.com/usememos/memos/server"
"github.com/usememos/memos/server"
"github.com/usememos/memos/server/profile"
"github.com/usememos/memos/server/profile"
"github.com/usememos/memos/store"
"github.com/usememos/memos/store"
...
@@ -132,7 +133,7 @@ func (s *TestingServer) request(method, uri string, body io.Reader, params, head
...
@@ -132,7 +133,7 @@ func (s *TestingServer) request(method, uri string, body io.Reader, params, head
h
:=
resp
.
Header
.
Get
(
"Set-Cookie"
)
h
:=
resp
.
Header
.
Get
(
"Set-Cookie"
)
parts
:=
strings
.
Split
(
h
,
"; "
)
parts
:=
strings
.
Split
(
h
,
"; "
)
for
_
,
p
:=
range
parts
{
for
_
,
p
:=
range
parts
{
if
strings
.
HasPrefix
(
p
,
"access-token="
)
{
if
strings
.
HasPrefix
(
p
,
fmt
.
Sprintf
(
"%s="
,
auth
.
AccessTokenCookieName
)
)
{
cookie
=
p
cookie
=
p
break
break
}
}
...
...
web/src/components/DemoBanner.tsx
View file @
da70917b
...
@@ -23,7 +23,7 @@ const DemoBanner: React.FC = () => {
...
@@ -23,7 +23,7 @@ const DemoBanner: React.FC = () => {
if
(
!
state
.
show
)
return
null
;
if
(
!
state
.
show
)
return
null
;
return
(
return
(
<
div
className=
"z-1 flex flex-row items-center justify-center w-full py-2 text-sm sm:text-lg font-medium dark:text-gray-300 bg-white dark:bg-zinc-700 shadow"
>
<
div
className=
"z-1
0
flex flex-row items-center justify-center w-full py-2 text-sm sm:text-lg font-medium dark:text-gray-300 bg-white dark:bg-zinc-700 shadow"
>
<
div
className=
"w-full max-w-6xl px-4 flex flex-row justify-between items-center gap-x-3"
>
<
div
className=
"w-full max-w-6xl px-4 flex flex-row justify-between items-center gap-x-3"
>
<
span
>
✨ A lightweight, self-hosted memo hub. Open Source and Free forever. ✨
</
span
>
<
span
>
✨ A lightweight, self-hosted memo hub. Open Source and Free forever. ✨
</
span
>
<
a
className=
"btn-primary shadow"
href=
"https://usememos.com/docs/install/docker"
target=
"_blank"
>
<
a
className=
"btn-primary shadow"
href=
"https://usememos.com/docs/install/docker"
target=
"_blank"
>
...
...
web/src/pages/Auth.tsx
View file @
da70917b
...
@@ -17,8 +17,8 @@ const Auth = () => {
...
@@ -17,8 +17,8 @@ const Auth = () => {
const
actionBtnLoadingState
=
useLoading
(
false
);
const
actionBtnLoadingState
=
useLoading
(
false
);
const
{
appearance
,
locale
,
systemStatus
}
=
globalStore
.
state
;
const
{
appearance
,
locale
,
systemStatus
}
=
globalStore
.
state
;
const
mode
=
systemStatus
.
profile
.
mode
;
const
mode
=
systemStatus
.
profile
.
mode
;
const
[
username
,
setUsername
]
=
useState
(
mode
===
"demo"
?
"demohero"
:
""
);
const
[
username
,
setUsername
]
=
useState
(
""
);
const
[
password
,
setPassword
]
=
useState
(
mode
===
"demo"
?
"secret"
:
""
);
const
[
password
,
setPassword
]
=
useState
(
""
);
const
[
identityProviderList
,
setIdentityProviderList
]
=
useState
<
IdentityProvider
[]
>
([]);
const
[
identityProviderList
,
setIdentityProviderList
]
=
useState
<
IdentityProvider
[]
>
([]);
useEffect
(()
=>
{
useEffect
(()
=>
{
...
@@ -30,6 +30,13 @@ const Auth = () => {
...
@@ -30,6 +30,13 @@ const Auth = () => {
fetchIdentityProviderList
();
fetchIdentityProviderList
();
},
[]);
},
[]);
useEffect
(()
=>
{
if
(
mode
===
"demo"
)
{
setUsername
(
"demohero"
);
setPassword
(
"secret"
);
}
},
[
mode
]);
const
handleUsernameInputChanged
=
(
e
:
React
.
ChangeEvent
<
HTMLInputElement
>
)
=>
{
const
handleUsernameInputChanged
=
(
e
:
React
.
ChangeEvent
<
HTMLInputElement
>
)
=>
{
const
text
=
e
.
target
.
value
as
string
;
const
text
=
e
.
target
.
value
as
string
;
setUsername
(
text
);
setUsername
(
text
);
...
@@ -51,13 +58,13 @@ const Auth = () => {
...
@@ -51,13 +58,13 @@ const Auth = () => {
const
handleFormSubmit
=
(
e
:
React
.
FormEvent
<
HTMLFormElement
>
)
=>
{
const
handleFormSubmit
=
(
e
:
React
.
FormEvent
<
HTMLFormElement
>
)
=>
{
e
.
preventDefault
();
e
.
preventDefault
();
if
(
systemStatus
?.
host
)
{
if
(
systemStatus
?.
host
)
{
handleSignInB
t
nClick
();
handleSignInB
utto
nClick
();
}
else
{
}
else
{
handleSignUpB
tns
Click
();
handleSignUpB
utton
Click
();
}
}
};
};
const
handleSignInB
t
nClick
=
async
()
=>
{
const
handleSignInB
utto
nClick
=
async
()
=>
{
if
(
username
===
""
||
password
===
""
)
{
if
(
username
===
""
||
password
===
""
)
{
return
;
return
;
}
}
...
@@ -82,7 +89,7 @@ const Auth = () => {
...
@@ -82,7 +89,7 @@ const Auth = () => {
actionBtnLoadingState
.
setFinish
();
actionBtnLoadingState
.
setFinish
();
};
};
const
handleSignUpB
tns
Click
=
async
()
=>
{
const
handleSignUpB
utton
Click
=
async
()
=>
{
if
(
username
===
""
||
password
===
""
)
{
if
(
username
===
""
||
password
===
""
)
{
return
;
return
;
}
}
...
@@ -170,40 +177,26 @@ const Auth = () => {
...
@@ -170,40 +177,26 @@ const Auth = () => {
</
div
>
</
div
>
</
div
>
</
div
>
<
div
className=
"flex flex-row justify-end items-center w-full mt-2"
>
<
div
className=
"flex flex-row justify-end items-center w-full mt-2"
>
{
systemStatus
?.
host
?
(
{
actionBtnLoadingState
.
isLoading
&&
<
Icon
.
Loader
className=
"w-4 h-auto mr-2 animate-spin dark:text-gray-300"
/>
}
<>
{
systemStatus
?.
allowSignUp
&&
(
{
actionBtnLoadingState
.
isLoading
&&
<
Icon
.
Loader
className=
"w-4 h-auto mr-2 animate-spin dark:text-gray-300"
/>
}
{
systemStatus
?.
allowSignUp
&&
(
<>
<
button
type=
"button"
className=
{
`btn-text ${actionBtnLoadingState.isLoading ? "cursor-wait opacity-80" : ""}`
}
onClick=
{
handleSignUpBtnsClick
}
>
{
t
(
"common.sign-up"
)
}
</
button
>
<
span
className=
"mr-2 font-mono text-gray-200"
>
/
</
span
>
</>
)
}
<
button
type=
"submit"
className=
{
`btn-primary ${actionBtnLoadingState.isLoading ? "cursor-wait opacity-80" : ""}`
}
onClick=
{
handleSignInBtnClick
}
>
{
t
(
"common.sign-in"
)
}
</
button
>
</>
)
:
(
<>
<>
<
button
<
button
type=
"
submit
"
type=
"
button
"
className=
{
`btn-
primary
${actionBtnLoadingState.isLoading ? "cursor-wait opacity-80" : ""}`
}
className=
{
`btn-
text
${actionBtnLoadingState.isLoading ? "cursor-wait opacity-80" : ""}`
}
onClick=
{
handleSignUpB
tns
Click
}
onClick=
{
handleSignUpB
utton
Click
}
>
>
{
t
(
"
auth.signup-as-host
"
)
}
{
t
(
"
common.sign-up
"
)
}
</
button
>
</
button
>
<
span
className=
"mr-2 font-mono text-gray-200"
>
/
</
span
>
</>
</>
)
}
)
}
<
button
type=
"submit"
className=
{
`btn-primary ${actionBtnLoadingState.isLoading ? "cursor-wait opacity-80" : ""}`
}
onClick=
{
handleSignInButtonClick
}
>
{
t
(
"common.sign-in"
)
}
</
button
>
</
div
>
</
div
>
</
form
>
</
form
>
{
identityProviderList
.
length
>
0
&&
(
{
identityProviderList
.
length
>
0
&&
(
...
...
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