|
@@ -2,7 +2,7 @@ package api
|
|
|
|
|
|
import (
|
|
import (
|
|
"errors"
|
|
"errors"
|
|
- "log"
|
|
|
|
|
|
+ "fmt"
|
|
"net/http"
|
|
"net/http"
|
|
"net/url"
|
|
"net/url"
|
|
"time"
|
|
"time"
|
|
@@ -55,8 +55,7 @@ func loginHandler() http.Handler {
|
|
return http.HandlerFunc(fn)
|
|
return http.HandlerFunc(fn)
|
|
}
|
|
}
|
|
|
|
|
|
-func queryDB(username string, password string) (*User, error) {
|
|
|
|
- log.Println(username, config.Config.Admin.Username, password, config.Config.Admin.Password)
|
|
|
|
|
|
+func checkCredential(username string, password string) (*User, error) {
|
|
if username == config.Config.Admin.Username && password == config.Config.Admin.Password {
|
|
if username == config.Config.Admin.Username && password == config.Config.Admin.Password {
|
|
return &User{username, true}, nil
|
|
return &User{username, true}, nil
|
|
}
|
|
}
|
|
@@ -64,7 +63,8 @@ func queryDB(username string, password string) (*User, error) {
|
|
}
|
|
}
|
|
|
|
|
|
func getToken(username string, password string) ([]byte, error) {
|
|
func getToken(username string, password string) ([]byte, error) {
|
|
- user, err := queryDB(username, password)
|
|
|
|
|
|
+ user, err := checkCredential(username, password)
|
|
|
|
+
|
|
if err != nil {
|
|
if err != nil {
|
|
return nil, err
|
|
return nil, err
|
|
}
|
|
}
|
|
@@ -86,3 +86,33 @@ func getToken(username string, password string) ([]byte, error) {
|
|
|
|
|
|
return []byte(tokenString), nil
|
|
return []byte(tokenString), nil
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+func getTokenHandler() http.Handler {
|
|
|
|
+ fn := func(w http.ResponseWriter, r *http.Request) {
|
|
|
|
+ username, password, _ := r.BasicAuth()
|
|
|
|
+
|
|
|
|
+ user, err := checkCredential(username, password)
|
|
|
|
+ if err != nil {
|
|
|
|
+ panic(err)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /* Set token claims */
|
|
|
|
+ claims := make(map[string]interface{})
|
|
|
|
+ claims["admin"] = true
|
|
|
|
+ claims["name"] = user.Name
|
|
|
|
+ claims["exp"] = time.Now().Add(time.Hour * 24).Unix()
|
|
|
|
+
|
|
|
|
+ /* Create the token */
|
|
|
|
+ token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims(claims))
|
|
|
|
+
|
|
|
|
+ /* Sign the token with our secret */
|
|
|
|
+ tokenString, err := token.SignedString(signingKey)
|
|
|
|
+ if err != nil {
|
|
|
|
+ panic(err)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ w.Header().Set("Content-Type", "application/json; charset=utf-8")
|
|
|
|
+ w.Write([]byte(fmt.Sprintf("{\"Token\":\"%s\",\"User\":\"%s\"}", tokenString, user.Name)))
|
|
|
|
+ }
|
|
|
|
+ return http.HandlerFunc(fn)
|
|
|
|
+}
|