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
50c8947a
Commit
50c8947a
authored
Dec 12, 2021
by
steven
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: remove user wx_open_id key
parent
1edf40ef
Changes
15
Show whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
55 additions
and
221 deletions
+55
-221
auth.go
api/auth.go
+4
-2
memo.go
api/memo.go
+1
-0
middlewares.go
api/middlewares.go
+8
-0
query.go
api/query.go
+1
-0
user.go
api/user.go
+1
-12
initial_db.sql
resources/initial_db.sql
+23
-21
main.go
server/main.go
+2
-2
user.go
store/user.go
+9
-40
BindWxOpenIdDialog.tsx
web/src/components/BindWxOpenIdDialog.tsx
+0
-79
MyAccountSection.tsx
web/src/components/MyAccountSection.tsx
+0
-42
api.ts
web/src/helpers/api.ts
+1
-8
change-password-dialog.less
web/src/less/change-password-dialog.less
+2
-4
README.md
web/src/services/README.md
+0
-1
userService.ts
web/src/services/userService.ts
+0
-6
models.d.ts
web/src/types/models.d.ts
+3
-4
No files found.
api/auth.go
View file @
50c8947a
...
@@ -39,7 +39,7 @@ func handleUserSignUp(w http.ResponseWriter, r *http.Request) {
...
@@ -39,7 +39,7 @@ func handleUserSignUp(w http.ResponseWriter, r *http.Request) {
return
return
}
}
user
,
err
:=
store
.
CreateNewUser
(
userSignup
.
Username
,
userSignup
.
Password
,
""
,
""
)
user
,
err
:=
store
.
CreateNewUser
(
userSignup
.
Username
,
userSignup
.
Password
,
""
)
if
err
!=
nil
{
if
err
!=
nil
{
e
.
ErrorHandler
(
w
,
"DATABASE_ERROR"
,
err
.
Error
())
e
.
ErrorHandler
(
w
,
"DATABASE_ERROR"
,
err
.
Error
())
...
@@ -225,7 +225,7 @@ func handleGithubAuthCallback(w http.ResponseWriter, r *http.Request) {
...
@@ -225,7 +225,7 @@ func handleGithubAuthCallback(w http.ResponseWriter, r *http.Request) {
username
=
githubUser
.
Name
+
utils
.
GenUUID
()
username
=
githubUser
.
Name
+
utils
.
GenUUID
()
usernameUsable
,
_
=
store
.
CheckUsernameUsable
(
username
)
usernameUsable
,
_
=
store
.
CheckUsernameUsable
(
username
)
}
}
user
,
_
=
store
.
CreateNewUser
(
username
,
username
,
githubUser
.
Login
,
""
)
user
,
_
=
store
.
CreateNewUser
(
username
,
username
,
githubUser
.
Login
)
}
}
session
.
Values
[
"user_id"
]
=
user
.
Id
session
.
Values
[
"user_id"
]
=
user
.
Id
...
@@ -237,6 +237,8 @@ func handleGithubAuthCallback(w http.ResponseWriter, r *http.Request) {
...
@@ -237,6 +237,8 @@ func handleGithubAuthCallback(w http.ResponseWriter, r *http.Request) {
func
RegisterAuthRoutes
(
r
*
mux
.
Router
)
{
func
RegisterAuthRoutes
(
r
*
mux
.
Router
)
{
authRouter
:=
r
.
PathPrefix
(
"/api/auth"
)
.
Subrouter
()
authRouter
:=
r
.
PathPrefix
(
"/api/auth"
)
.
Subrouter
()
authRouter
.
Use
(
JSONResponseMiddleWare
)
authRouter
.
HandleFunc
(
"/signup"
,
handleUserSignUp
)
.
Methods
(
"POST"
)
authRouter
.
HandleFunc
(
"/signup"
,
handleUserSignUp
)
.
Methods
(
"POST"
)
authRouter
.
HandleFunc
(
"/signin"
,
handleUserSignIn
)
.
Methods
(
"POST"
)
authRouter
.
HandleFunc
(
"/signin"
,
handleUserSignIn
)
.
Methods
(
"POST"
)
authRouter
.
HandleFunc
(
"/signout"
,
handleUserSignOut
)
.
Methods
(
"POST"
)
authRouter
.
HandleFunc
(
"/signout"
,
handleUserSignOut
)
.
Methods
(
"POST"
)
...
...
api/memo.go
View file @
50c8947a
...
@@ -105,6 +105,7 @@ func handleDeleteMemo(w http.ResponseWriter, r *http.Request) {
...
@@ -105,6 +105,7 @@ func handleDeleteMemo(w http.ResponseWriter, r *http.Request) {
func
RegisterMemoRoutes
(
r
*
mux
.
Router
)
{
func
RegisterMemoRoutes
(
r
*
mux
.
Router
)
{
memoRouter
:=
r
.
PathPrefix
(
"/api/memo"
)
.
Subrouter
()
memoRouter
:=
r
.
PathPrefix
(
"/api/memo"
)
.
Subrouter
()
memoRouter
.
Use
(
JSONResponseMiddleWare
)
memoRouter
.
Use
(
AuthCheckerMiddleWare
)
memoRouter
.
Use
(
AuthCheckerMiddleWare
)
memoRouter
.
HandleFunc
(
"/all"
,
handleGetMyMemos
)
.
Methods
(
"GET"
)
memoRouter
.
HandleFunc
(
"/all"
,
handleGetMyMemos
)
.
Methods
(
"GET"
)
...
...
api/middlewares.go
View file @
50c8947a
...
@@ -18,6 +18,14 @@ func AuthCheckerMiddleWare(next http.Handler) http.Handler {
...
@@ -18,6 +18,14 @@ func AuthCheckerMiddleWare(next http.Handler) http.Handler {
})
})
}
}
func
JSONResponseMiddleWare
(
next
http
.
Handler
)
http
.
Handler
{
return
http
.
HandlerFunc
(
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
w
.
Header
()
.
Set
(
"Content-Type"
,
"application/json"
)
next
.
ServeHTTP
(
w
,
r
)
})
}
func
CorsMiddleWare
(
next
http
.
Handler
)
http
.
Handler
{
func
CorsMiddleWare
(
next
http
.
Handler
)
http
.
Handler
{
return
http
.
HandlerFunc
(
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
return
http
.
HandlerFunc
(
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
w
.
Header
()
.
Set
(
"Access-Control-Allow-Origin"
,
"*"
)
w
.
Header
()
.
Set
(
"Access-Control-Allow-Origin"
,
"*"
)
...
...
api/query.go
View file @
50c8947a
...
@@ -103,6 +103,7 @@ func handleDeleteQuery(w http.ResponseWriter, r *http.Request) {
...
@@ -103,6 +103,7 @@ func handleDeleteQuery(w http.ResponseWriter, r *http.Request) {
func
RegisterQueryRoutes
(
r
*
mux
.
Router
)
{
func
RegisterQueryRoutes
(
r
*
mux
.
Router
)
{
queryRouter
:=
r
.
PathPrefix
(
"/api/query"
)
.
Subrouter
()
queryRouter
:=
r
.
PathPrefix
(
"/api/query"
)
.
Subrouter
()
queryRouter
.
Use
(
JSONResponseMiddleWare
)
queryRouter
.
Use
(
AuthCheckerMiddleWare
)
queryRouter
.
Use
(
AuthCheckerMiddleWare
)
queryRouter
.
HandleFunc
(
"/all"
,
handleGetMyQueries
)
.
Methods
(
"GET"
)
queryRouter
.
HandleFunc
(
"/all"
,
handleGetMyQueries
)
.
Methods
(
"GET"
)
...
...
api/user.go
View file @
50c8947a
...
@@ -61,18 +61,6 @@ func handleUpdateMyUserInfo(w http.ResponseWriter, r *http.Request) {
...
@@ -61,18 +61,6 @@ func handleUpdateMyUserInfo(w http.ResponseWriter, r *http.Request) {
}
}
}
}
if
userPatch
.
WxOpenId
!=
nil
{
wxOpenIdUsable
,
_
:=
store
.
CheckWxOpenIdUsable
(
*
userPatch
.
GithubName
)
if
!
wxOpenIdUsable
{
json
.
NewEncoder
(
w
)
.
Encode
(
Response
{
Succeed
:
false
,
Message
:
"Wx open id is existed"
,
Data
:
nil
,
})
return
}
}
user
,
err
:=
store
.
UpdateUser
(
userId
,
&
userPatch
)
user
,
err
:=
store
.
UpdateUser
(
userId
,
&
userPatch
)
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -145,6 +133,7 @@ func handleValidPassword(w http.ResponseWriter, r *http.Request) {
...
@@ -145,6 +133,7 @@ func handleValidPassword(w http.ResponseWriter, r *http.Request) {
func
RegisterUserRoutes
(
r
*
mux
.
Router
)
{
func
RegisterUserRoutes
(
r
*
mux
.
Router
)
{
userRouter
:=
r
.
PathPrefix
(
"/api/user"
)
.
Subrouter
()
userRouter
:=
r
.
PathPrefix
(
"/api/user"
)
.
Subrouter
()
userRouter
.
Use
(
JSONResponseMiddleWare
)
userRouter
.
Use
(
AuthCheckerMiddleWare
)
userRouter
.
Use
(
AuthCheckerMiddleWare
)
userRouter
.
HandleFunc
(
"/me"
,
handleGetMyUserInfo
)
.
Methods
(
"GET"
)
userRouter
.
HandleFunc
(
"/me"
,
handleGetMyUserInfo
)
.
Methods
(
"GET"
)
...
...
resources/initial_db.sql
View file @
50c8947a
DROP
TABLE
IF
EXISTS
`memos`
;
DROP
TABLE
IF
EXISTS
`queries`
;
DROP
TABLE
IF
EXISTS
`queries`
;
DROP
TABLE
IF
EXISTS
`users`
;
CREATE
TABLE
`users`
(
`id`
TEXT
NOT
NULL
PRIMARY
KEY
,
`username`
TEXT
NOT
NULL
,
`password`
TEXT
NOT
NULL
,
`github_name`
TEXT
NOT
NULL
DEFAULT
''
,
`created_at`
TEXT
NOT
NULL
DEFAULT
(
DATETIME
(
'now'
,
'localtime'
)),
`updated_at`
TEXT
NOT
NULL
DEFAULT
(
DATETIME
(
'now'
,
'localtime'
)),
UNIQUE
(
`username`
,
`github_name`
)
);
CREATE
TABLE
`queries`
(
CREATE
TABLE
`queries`
(
`id`
TEXT
NOT
NULL
PRIMARY
KEY
,
`id`
TEXT
NOT
NULL
PRIMARY
KEY
,
`user_id`
TEXT
NOT
NULL
,
`user_id`
TEXT
NOT
NULL
,
`title`
TEXT
NOT
NULL
,
`title`
TEXT
NOT
NULL
,
`querystring`
TEXT
NOT
NULL
,
`querystring`
TEXT
NOT
NULL
,
`created_at`
TEXT
NOT
NULL
DEFAULT
CURRENT_TIMESTAMP
,
`created_at`
TEXT
NOT
NULL
DEFAULT
(
DATETIME
(
'now'
,
'localtime'
))
,
`updated_at`
TEXT
NOT
NULL
DEFAULT
CURRENT_TIMESTAMP
,
`updated_at`
TEXT
NOT
NULL
DEFAULT
(
DATETIME
(
'now'
,
'localtime'
))
,
`pinned_at`
TEXT
DEFAULT
''
,
`pinned_at`
TEXT
NOT
NULL
DEFAULT
''
,
FOREIGN
KEY
(
`user_id`
)
REFERENCES
`users`
(
`id`
)
FOREIGN
KEY
(
`user_id`
)
REFERENCES
`users`
(
`id`
)
);
);
DROP
TABLE
IF
EXISTS
`memos`
;
CREATE
TABLE
`memos`
(
CREATE
TABLE
`memos`
(
`id`
TEXT
NOT
NULL
PRIMARY
KEY
,
`id`
TEXT
NOT
NULL
PRIMARY
KEY
,
`content`
TEXT
NOT
NULL
,
`content`
TEXT
NOT
NULL
,
`user_id`
TEXT
NOT
NULL
,
`user_id`
TEXT
NOT
NULL
,
`created_at`
TEXT
NOT
NULL
DEFAULT
CURRENT_TIMESTAMP
,
`created_at`
TEXT
NOT
NULL
DEFAULT
(
DATETIME
(
'now'
,
'localtime'
))
,
`updated_at`
TEXT
NOT
NULL
DEFAULT
CURRENT_TIMESTAMP
,
`updated_at`
TEXT
NOT
NULL
DEFAULT
(
DATETIME
(
'now'
,
'localtime'
))
,
`deleted_at`
TEXT
DEFAULT
''
,
`deleted_at`
TEXT
NOT
NULL
DEFAULT
''
,
FOREIGN
KEY
(
`user_id`
)
REFERENCES
`users`
(
`id`
)
FOREIGN
KEY
(
`user_id`
)
REFERENCES
`users`
(
`id`
)
);
);
DROP
TABLE
IF
EXISTS
`users`
;
CREATE
TABLE
`users`
(
`id`
TEXT
NOT
NULL
PRIMARY
KEY
,
`username`
TEXT
NOT
NULL
,
`password`
TEXT
NOT
NULL
,
`github_name`
TEXT
DEFAULT
''
,
`wx_open_id`
TEXT
DEFAULT
''
,
`created_at`
TEXT
NOT
NULL
DEFAULT
CURRENT_TIMESTAMP
,
`updated_at`
TEXT
NOT
NULL
DEFAULT
CURRENT_TIMESTAMP
,
UNIQUE
(
`username`
,
`github_name`
,
`wx_open_id`
)
);
INSERT
INTO
`users`
INSERT
INTO
`users`
(
`id`
,
`username`
,
`password`
)
(
`id`
,
`username`
,
`password`
)
VALUES
VALUES
(
'1'
,
'guest'
,
'123456'
);
(
'1'
,
'guest'
,
'123456'
),
(
'2'
,
'test'
,
'123456'
);
INSERT
INTO
`memos`
INSERT
INTO
`memos`
(
`id`
,
`content`
,
`user_id`
)
(
`id`
,
`content`
,
`user_id`
)
VALUES
VALUES
(
'1'
,
'👋 Welcome to memos'
,
'1'
);
(
'1'
,
'👋 Welcome to memos'
,
'1'
),
(
'2'
,
'👋 Welcome to memos'
,
'2'
);
server/main.go
View file @
50c8947a
...
@@ -18,12 +18,12 @@ func main() {
...
@@ -18,12 +18,12 @@ func main() {
api
.
RegisterMemoRoutes
(
r
)
api
.
RegisterMemoRoutes
(
r
)
api
.
RegisterQueryRoutes
(
r
)
api
.
RegisterQueryRoutes
(
r
)
spa
:=
api
.
SPAHandler
{
webServe
:=
api
.
SPAHandler
{
StaticPath
:
"./web/dist"
,
StaticPath
:
"./web/dist"
,
IndexPath
:
"index.html"
,
IndexPath
:
"index.html"
,
}
}
r
.
PathPrefix
(
"/"
)
.
Handler
(
spa
)
r
.
PathPrefix
(
"/"
)
.
Handler
(
webServe
)
http
.
ListenAndServe
(
":8080"
,
r
)
http
.
ListenAndServe
(
":8080"
,
r
)
}
}
store/user.go
View file @
50c8947a
...
@@ -11,26 +11,24 @@ type User struct {
...
@@ -11,26 +11,24 @@ type User struct {
Id
string
`json:"id"`
Id
string
`json:"id"`
Username
string
`json:"username"`
Username
string
`json:"username"`
Password
string
`json:"password"`
Password
string
`json:"password"`
WxOpenId
string
`json:"wxOpenId"`
GithubName
string
`json:"githubName"`
GithubName
string
`json:"githubName"`
CreatedAt
string
`json:"createdAt"`
CreatedAt
string
`json:"createdAt"`
UpdatedAt
string
`json:"updatedAt"`
UpdatedAt
string
`json:"updatedAt"`
}
}
func
CreateNewUser
(
username
string
,
password
string
,
githubName
string
,
wxOpenId
string
)
(
User
,
error
)
{
func
CreateNewUser
(
username
string
,
password
string
,
githubName
string
)
(
User
,
error
)
{
nowDateTimeStr
:=
utils
.
GetNowDateTimeStr
()
nowDateTimeStr
:=
utils
.
GetNowDateTimeStr
()
newUser
:=
User
{
newUser
:=
User
{
Id
:
utils
.
GenUUID
(),
Id
:
utils
.
GenUUID
(),
Username
:
username
,
Username
:
username
,
Password
:
password
,
Password
:
password
,
WxOpenId
:
wxOpenId
,
GithubName
:
githubName
,
GithubName
:
githubName
,
CreatedAt
:
nowDateTimeStr
,
CreatedAt
:
nowDateTimeStr
,
UpdatedAt
:
nowDateTimeStr
,
UpdatedAt
:
nowDateTimeStr
,
}
}
query
:=
`INSERT INTO users (id, username, password,
wx_open_id, github_name, created_at, updated_at) VALUES (?,
?, ?, ?, ?, ?, ?)`
query
:=
`INSERT INTO users (id, username, password,
github_name, created_at, updated_at) VALUES (
?, ?, ?, ?, ?, ?)`
_
,
err
:=
DB
.
Exec
(
query
,
newUser
.
Id
,
newUser
.
Username
,
newUser
.
Password
,
newUser
.
WxOpenId
,
newUser
.
GithubName
,
newUser
.
CreatedAt
,
newUser
.
UpdatedAt
)
_
,
err
:=
DB
.
Exec
(
query
,
newUser
.
Id
,
newUser
.
Username
,
newUser
.
Password
,
newUser
.
GithubName
,
newUser
.
CreatedAt
,
newUser
.
UpdatedAt
)
return
newUser
,
err
return
newUser
,
err
}
}
...
@@ -39,7 +37,6 @@ type UserPatch struct {
...
@@ -39,7 +37,6 @@ type UserPatch struct {
Username
*
string
Username
*
string
Password
*
string
Password
*
string
GithubName
*
string
GithubName
*
string
WxOpenId
*
string
}
}
func
UpdateUser
(
id
string
,
userPatch
*
UserPatch
)
(
User
,
error
)
{
func
UpdateUser
(
id
string
,
userPatch
*
UserPatch
)
(
User
,
error
)
{
...
@@ -58,10 +55,6 @@ func UpdateUser(id string, userPatch *UserPatch) (User, error) {
...
@@ -58,10 +55,6 @@ func UpdateUser(id string, userPatch *UserPatch) (User, error) {
user
.
GithubName
=
*
v
user
.
GithubName
=
*
v
set
,
args
=
append
(
set
,
"github_name=?"
),
append
(
args
,
*
v
)
set
,
args
=
append
(
set
,
"github_name=?"
),
append
(
args
,
*
v
)
}
}
if
v
:=
userPatch
.
WxOpenId
;
v
!=
nil
{
user
.
WxOpenId
=
*
v
set
,
args
=
append
(
set
,
"wx_open_id=?"
),
append
(
args
,
*
v
)
}
set
,
args
=
append
(
set
,
"updated_at=?"
),
append
(
args
,
utils
.
GetNowDateTimeStr
())
set
,
args
=
append
(
set
,
"updated_at=?"
),
append
(
args
,
utils
.
GetNowDateTimeStr
())
args
=
append
(
args
,
id
)
args
=
append
(
args
,
id
)
...
@@ -72,30 +65,23 @@ func UpdateUser(id string, userPatch *UserPatch) (User, error) {
...
@@ -72,30 +65,23 @@ func UpdateUser(id string, userPatch *UserPatch) (User, error) {
}
}
func
GetUserById
(
id
string
)
(
User
,
error
)
{
func
GetUserById
(
id
string
)
(
User
,
error
)
{
query
:=
`SELECT id, username, password,
wx_open_id,
github_name, created_at, updated_at FROM users WHERE id=?`
query
:=
`SELECT id, username, password, github_name, created_at, updated_at FROM users WHERE id=?`
user
:=
User
{}
user
:=
User
{}
err
:=
DB
.
QueryRow
(
query
,
id
)
.
Scan
(
&
user
.
Id
,
&
user
.
Username
,
&
user
.
Password
,
&
user
.
WxOpenId
,
&
user
.
GithubName
,
&
user
.
CreatedAt
,
&
user
.
UpdatedAt
)
err
:=
DB
.
QueryRow
(
query
,
id
)
.
Scan
(
&
user
.
Id
,
&
user
.
Username
,
&
user
.
Password
,
&
user
.
GithubName
,
&
user
.
CreatedAt
,
&
user
.
UpdatedAt
)
return
user
,
err
return
user
,
err
}
}
func
GetUserByUsernameAndPassword
(
username
string
,
password
string
)
(
User
,
error
)
{
func
GetUserByUsernameAndPassword
(
username
string
,
password
string
)
(
User
,
error
)
{
query
:=
`SELECT id, username, password,
wx_open_id,
github_name, created_at, updated_at FROM users WHERE username=? AND password=?`
query
:=
`SELECT id, username, password, github_name, created_at, updated_at FROM users WHERE username=? AND password=?`
user
:=
User
{}
user
:=
User
{}
err
:=
DB
.
QueryRow
(
query
,
username
,
password
)
.
Scan
(
&
user
.
Id
,
&
user
.
Username
,
&
user
.
Password
,
&
user
.
WxOpenId
,
&
user
.
GithubName
,
&
user
.
CreatedAt
,
&
user
.
UpdatedAt
)
err
:=
DB
.
QueryRow
(
query
,
username
,
password
)
.
Scan
(
&
user
.
Id
,
&
user
.
Username
,
&
user
.
Password
,
&
user
.
GithubName
,
&
user
.
CreatedAt
,
&
user
.
UpdatedAt
)
return
user
,
err
return
user
,
err
}
}
func
GetUserByGithubName
(
githubName
string
)
(
User
,
error
)
{
func
GetUserByGithubName
(
githubName
string
)
(
User
,
error
)
{
query
:=
`SELECT id, username, password, wx_open_id, github_name, created_at, updated_at FROM users WHERE github_name=?`
query
:=
`SELECT id, username, password, github_name, created_at, updated_at FROM users WHERE github_name=?`
user
:=
User
{}
err
:=
DB
.
QueryRow
(
query
,
githubName
)
.
Scan
(
&
user
.
Id
,
&
user
.
Username
,
&
user
.
Password
,
&
user
.
WxOpenId
,
&
user
.
GithubName
,
&
user
.
CreatedAt
,
&
user
.
UpdatedAt
)
return
user
,
err
}
func
GetUserByWxOpenId
(
wxOpenId
string
)
(
User
,
error
)
{
query
:=
`SELECT id, username, password, wx_open_id, github_name, created_at, updated_at FROM users WHERE id=?`
user
:=
User
{}
user
:=
User
{}
err
:=
DB
.
QueryRow
(
query
,
wxOpenId
)
.
Scan
(
&
user
.
Id
,
&
user
.
Username
,
&
user
.
Password
,
&
user
.
WxOpenI
d
,
&
user
.
GithubName
,
&
user
.
CreatedAt
,
&
user
.
UpdatedAt
)
err
:=
DB
.
QueryRow
(
query
,
githubName
)
.
Scan
(
&
user
.
Id
,
&
user
.
Username
,
&
user
.
Passwor
d
,
&
user
.
GithubName
,
&
user
.
CreatedAt
,
&
user
.
UpdatedAt
)
return
user
,
err
return
user
,
err
}
}
...
@@ -133,23 +119,6 @@ func CheckGithubNameUsable(githubName string) (bool, error) {
...
@@ -133,23 +119,6 @@ func CheckGithubNameUsable(githubName string) (bool, error) {
}
}
}
}
func
CheckWxOpenIdUsable
(
wxOpenId
string
)
(
bool
,
error
)
{
query
:=
`SELECT * FROM users WHERE wx_open_id=?`
query
=
fmt
.
Sprintf
(
"SELECT COUNT(*) FROM (%s)"
,
query
)
var
count
uint
err
:=
DB
.
QueryRow
(
query
,
wxOpenId
)
.
Scan
(
&
count
)
if
err
!=
nil
&&
err
!=
sql
.
ErrNoRows
{
return
false
,
FormatDBError
(
err
)
}
if
count
>
0
{
return
false
,
nil
}
else
{
return
true
,
nil
}
}
func
CheckPasswordValid
(
id
string
,
password
string
)
(
bool
,
error
)
{
func
CheckPasswordValid
(
id
string
,
password
string
)
(
bool
,
error
)
{
query
:=
`SELECT * FROM users WHERE id=? AND password=?`
query
:=
`SELECT * FROM users WHERE id=? AND password=?`
query
=
fmt
.
Sprintf
(
"SELECT COUNT(*) FROM (%s)"
,
query
)
query
=
fmt
.
Sprintf
(
"SELECT COUNT(*) FROM (%s)"
,
query
)
...
...
web/src/components/BindWxOpenIdDialog.tsx
deleted
100644 → 0
View file @
1edf40ef
import
{
useEffect
,
useState
}
from
"react"
;
import
{
userService
}
from
"../services"
;
import
{
showDialog
}
from
"./Dialog"
;
import
toastHelper
from
"./Toast"
;
import
"../less/change-password-dialog.less"
;
interface
Props
extends
DialogProps
{}
const
BindWxOpenIdDialog
:
React
.
FC
<
Props
>
=
({
destroy
}:
Props
)
=>
{
const
[
wxOpenId
,
setWxOpenId
]
=
useState
(
""
);
useEffect
(()
=>
{
// do nth
},
[]);
const
handleCloseBtnClick
=
()
=>
{
destroy
();
};
const
handleWxOpenIdChanged
=
(
e
:
React
.
ChangeEvent
<
HTMLInputElement
>
)
=>
{
const
text
=
e
.
target
.
value
as
string
;
setWxOpenId
(
text
);
};
const
handleSaveBtnClick
=
async
()
=>
{
if
(
wxOpenId
===
""
)
{
toastHelper
.
error
(
"微信 id 不能为空"
);
return
;
}
try
{
await
userService
.
updateWxOpenId
(
wxOpenId
);
userService
.
doSignIn
();
toastHelper
.
info
(
"绑定成功!"
);
handleCloseBtnClick
();
}
catch
(
error
:
any
)
{
toastHelper
.
error
(
error
);
}
};
return
(
<>
<
div
className=
"dialog-header-container"
>
<
p
className=
"title-text"
>
绑定微信 OpenID
</
p
>
<
button
className=
"btn close-btn"
onClick=
{
handleCloseBtnClick
}
>
<
img
className=
"icon-img"
src=
"/icons/close.svg"
/>
</
button
>
</
div
>
<
div
className=
"dialog-content-container"
>
<
p
className=
"tip-text"
>
关注微信公众号“小谈闲事”,主动发送任意消息,即可获取
<
strong
>
OpenID
</
strong
>
。
</
p
>
<
label
className=
"form-label input-form-label"
>
<
span
className=
{
"normal-text "
+
(
wxOpenId
===
""
?
""
:
"not-null"
)
}
>
微信 OpenID
</
span
>
<
input
type=
"text"
value=
{
wxOpenId
}
onChange=
{
handleWxOpenIdChanged
}
/>
</
label
>
<
div
className=
"btns-container"
>
<
span
className=
"btn cancel-btn"
onClick=
{
handleCloseBtnClick
}
>
取消
</
span
>
<
span
className=
"btn confirm-btn"
onClick=
{
handleSaveBtnClick
}
>
保存
</
span
>
</
div
>
</
div
>
</>
);
};
function
showBindWxOpenIdDialog
()
{
showDialog
(
{
className
:
"bind-wxid-dialog"
,
},
BindWxOpenIdDialog
);
}
export
default
showBindWxOpenIdDialog
;
web/src/components/MyAccountSection.tsx
View file @
50c8947a
...
@@ -6,7 +6,6 @@ import { validate, ValidatorConfig } from "../helpers/validator";
...
@@ -6,7 +6,6 @@ import { validate, ValidatorConfig } from "../helpers/validator";
import
Only
from
"./common/OnlyWhen"
;
import
Only
from
"./common/OnlyWhen"
;
import
toastHelper
from
"./Toast"
;
import
toastHelper
from
"./Toast"
;
import
showChangePasswordDialog
from
"./ChangePasswordDialog"
;
import
showChangePasswordDialog
from
"./ChangePasswordDialog"
;
import
showBindWxOpenIdDialog
from
"./BindWxOpenIdDialog"
;
import
"../less/my-account-section.less"
;
import
"../less/my-account-section.less"
;
const
validateConfig
:
ValidatorConfig
=
{
const
validateConfig
:
ValidatorConfig
=
{
...
@@ -88,20 +87,6 @@ const MyAccountSection: React.FC<Props> = () => {
...
@@ -88,20 +87,6 @@ const MyAccountSection: React.FC<Props> = () => {
}
}
};
};
const
handleUnbindWxBtnClick
=
async
()
=>
{
if
(
showConfirmUnbindWxBtn
)
{
try
{
await
userService
.
updateWxOpenId
(
""
);
await
userService
.
doSignIn
();
}
catch
(
error
:
any
)
{
toastHelper
.
error
(
error
.
message
);
}
setShowConfirmUnbindWxBtn
(
false
);
}
else
{
setShowConfirmUnbindWxBtn
(
true
);
}
};
const
handlePreventDefault
=
(
e
:
React
.
MouseEvent
)
=>
{
const
handlePreventDefault
=
(
e
:
React
.
MouseEvent
)
=>
{
e
.
preventDefault
();
e
.
preventDefault
();
};
};
...
@@ -155,33 +140,6 @@ const MyAccountSection: React.FC<Props> = () => {
...
@@ -155,33 +140,6 @@ const MyAccountSection: React.FC<Props> = () => {
<
Only
when=
{
window
.
location
.
origin
.
includes
(
"justsven.top"
)
}
>
<
Only
when=
{
window
.
location
.
origin
.
includes
(
"justsven.top"
)
}
>
<
div
className=
"section-container connect-section-container"
>
<
div
className=
"section-container connect-section-container"
>
<
p
className=
"title-text"
>
关联账号
</
p
>
<
p
className=
"title-text"
>
关联账号
</
p
>
<
label
className=
"form-label input-form-label hidden"
>
<
span
className=
"normal-text"
>
微信 OpenID:
</
span
>
{
user
.
wxOpenId
?
(
<>
<
span
className=
"value-text"
>
************
</
span
>
<
span
className=
{
`btn-text unbind-btn ${showConfirmUnbindWxBtn ? "final-confirm" : ""}`
}
onMouseLeave=
{
()
=>
setShowConfirmUnbindWxBtn
(
false
)
}
onClick=
{
handleUnbindWxBtnClick
}
>
{
showConfirmUnbindWxBtn
?
"确定取消绑定!"
:
"取消绑定"
}
</
span
>
</>
)
:
(
<>
<
span
className=
"value-text"
>
空
</
span
>
<
span
className=
"btn-text bind-btn"
onClick=
{
()
=>
{
showBindWxOpenIdDialog
();
}
}
>
绑定 ID
</
span
>
</>
)
}
</
label
>
<
label
className=
"form-label input-form-label"
>
<
label
className=
"form-label input-form-label"
>
<
span
className=
"normal-text"
>
GitHub:
</
span
>
<
span
className=
"normal-text"
>
GitHub:
</
span
>
{
user
.
githubName
?
(
{
user
.
githubName
?
(
...
...
web/src/helpers/api.ts
View file @
50c8947a
...
@@ -55,14 +55,7 @@ namespace api {
...
@@ -55,14 +55,7 @@ namespace api {
return
request
<
boolean
>
(
"POST"
,
"/api/user/validpassword"
,
{
password
});
return
request
<
boolean
>
(
"POST"
,
"/api/user/validpassword"
,
{
password
});
}
}
interface
UserInfoPatch
{
export
function
updateUserinfo
(
userinfo
:
Partial
<
{
username
:
string
;
password
:
string
;
githubName
:
string
}
>
)
{
username
?:
string
;
password
?:
string
;
githubName
?:
string
;
wxOpenId
?:
string
;
}
export
function
updateUserinfo
(
userinfo
:
UserInfoPatch
)
{
return
request
(
"PATCH"
,
"/api/user/me"
,
userinfo
);
return
request
(
"PATCH"
,
"/api/user/me"
,
userinfo
);
}
}
...
...
web/src/less/change-password-dialog.less
View file @
50c8947a
@import "./mixin.less";
@import "./mixin.less";
.change-password-dialog,
.change-password-dialog {
.bind-wxid-dialog {
> .dialog-container {
> .dialog-container {
width: 300px;
width: 300px;
border-radius: 8px;
border-radius: 8px;
...
@@ -92,8 +91,7 @@
...
@@ -92,8 +91,7 @@
}
}
@media only screen and (max-width: 875px) {
@media only screen and (max-width: 875px) {
.dialog-wrapper.change-password-dialog,
.dialog-wrapper.change-password-dialog {
.dialog-wrapper.bind-wxid-dialog {
padding: 24px 16px;
padding: 24px 16px;
padding-top: 64px;
padding-top: 64px;
...
...
web/src/services/README.md
View file @
50c8947a
...
@@ -4,4 +4,3 @@ What should service do?
...
@@ -4,4 +4,3 @@ What should service do?
-
request data api and throw error;
-
request data api and throw error;
-
dispatch state actions;
-
dispatch state actions;
-
should be a class;
web/src/services/userService.ts
View file @
50c8947a
...
@@ -56,12 +56,6 @@ class UserService {
...
@@ -56,12 +56,6 @@ class UserService {
password
,
password
,
});
});
}
}
public
async
updateWxOpenId
(
wxOpenId
:
string
):
Promise
<
void
>
{
await
api
.
updateUserinfo
({
wxOpenId
,
});
}
}
}
const
userService
=
new
UserService
();
const
userService
=
new
UserService
();
...
...
web/src/types/models.d.ts
View file @
50c8947a
...
@@ -7,18 +7,17 @@ declare namespace Model {
...
@@ -7,18 +7,17 @@ declare namespace Model {
interface
User
extends
BaseModel
{
interface
User
extends
BaseModel
{
username
:
string
;
username
:
string
;
githubName
?:
string
;
githubName
:
string
;
wxOpenId
?:
string
;
}
}
interface
Memo
extends
BaseModel
{
interface
Memo
extends
BaseModel
{
content
:
string
;
content
:
string
;
deletedAt
?
:
string
;
deletedAt
:
string
;
}
}
interface
Query
extends
BaseModel
{
interface
Query
extends
BaseModel
{
title
:
string
;
title
:
string
;
querystring
:
string
;
querystring
:
string
;
pinnedAt
?
:
string
;
pinnedAt
:
string
;
}
}
}
}
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