Don't send password hash to front-end
Former-commit-id: 8063326551ef444c718284c0307acd646c28921d [formerly 222b0e273b26617e86c624f54e39db3743c2bff4] [formerly b75a02d333e94460ac83a305d062dc17bacf705e [formerly 43115f44f2941e92c41b1c8270d57f800ded93fa]] Former-commit-id: b2bc236aacbca7a2ede89809fd728b70291335f9 [formerly 332d8886620d00420c4ef9bf786464acaebb807e] Former-commit-id: 4bf173a4143a85a7f8fbba9cd5b7a4673ef64062
This commit is contained in:
parent
e1fb77a33b
commit
f4f1fc4213
46
auth.go
46
auth.go
|
@ -12,11 +12,6 @@ import (
|
||||||
"github.com/dgrijalva/jwt-go/request"
|
"github.com/dgrijalva/jwt-go/request"
|
||||||
)
|
)
|
||||||
|
|
||||||
type claims struct {
|
|
||||||
*User
|
|
||||||
jwt.StandardClaims
|
|
||||||
}
|
|
||||||
|
|
||||||
// authHandler proccesses the authentication for the user.
|
// authHandler proccesses the authentication for the user.
|
||||||
func authHandler(c *requestContext, w http.ResponseWriter, r *http.Request) (int, error) {
|
func authHandler(c *requestContext, w http.ResponseWriter, r *http.Request) (int, error) {
|
||||||
// Receive the credentials from the request and unmarshal them.
|
// Receive the credentials from the request and unmarshal them.
|
||||||
|
@ -41,23 +36,8 @@ func authHandler(c *requestContext, w http.ResponseWriter, r *http.Request) (int
|
||||||
return http.StatusForbidden, nil
|
return http.StatusForbidden, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
claims := claims{
|
c.us = u
|
||||||
c.fm.Users["admin"],
|
return printToken(c, w)
|
||||||
jwt.StandardClaims{
|
|
||||||
ExpiresAt: time.Now().Add(time.Hour * 24).Unix(),
|
|
||||||
Issuer: "File Manager",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
|
|
||||||
string, err := token.SignedString(c.fm.key)
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
return http.StatusInternalServerError, err
|
|
||||||
}
|
|
||||||
|
|
||||||
w.Write([]byte(string))
|
|
||||||
return 0, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// renewAuthHandler is used when the front-end already has a JWT token
|
// renewAuthHandler is used when the front-end already has a JWT token
|
||||||
|
@ -68,6 +48,25 @@ func renewAuthHandler(c *requestContext, w http.ResponseWriter, r *http.Request)
|
||||||
return http.StatusForbidden, nil
|
return http.StatusForbidden, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
c.us = u
|
||||||
|
return printToken(c, w)
|
||||||
|
}
|
||||||
|
|
||||||
|
// claims is the JWT claims.
|
||||||
|
type claims struct {
|
||||||
|
User
|
||||||
|
jwt.StandardClaims
|
||||||
|
}
|
||||||
|
|
||||||
|
// printToken prints the final JWT token to the user.
|
||||||
|
func printToken(c *requestContext, w http.ResponseWriter) (int, error) {
|
||||||
|
// Creates a copy of the user and removes it password
|
||||||
|
// hash so it never arrives to the user.
|
||||||
|
u := User{}
|
||||||
|
u = *c.us
|
||||||
|
u.Password = ""
|
||||||
|
|
||||||
|
// Builds the claims.
|
||||||
claims := claims{
|
claims := claims{
|
||||||
u,
|
u,
|
||||||
jwt.StandardClaims{
|
jwt.StandardClaims{
|
||||||
|
@ -76,12 +75,15 @@ func renewAuthHandler(c *requestContext, w http.ResponseWriter, r *http.Request)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Creates the token and signs it.
|
||||||
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
|
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
|
||||||
string, err := token.SignedString(c.fm.key)
|
string, err := token.SignedString(c.fm.key)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return http.StatusInternalServerError, err
|
return http.StatusInternalServerError, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Writes the token.
|
||||||
w.Write([]byte(string))
|
w.Write([]byte(string))
|
||||||
return 0, nil
|
return 0, nil
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue