This commit is contained in:
crusader 2018-03-14 18:45:07 +09:00
parent c38073b8d0
commit 920f9f8c30
3 changed files with 100 additions and 13 deletions

View File

@ -9,8 +9,16 @@ import (
func SendRESTResponse(ctx *fasthttp.RequestCtx, response interface{}) {
ctx.SetContentType("application/json")
jRes, _ := json.Marshal(response)
ctx.SetBody(jRes)
var body []byte
switch response.(type) {
default:
body, _ = json.Marshal(response)
case string:
body = []byte(response.(string))
}
ctx.SetBody(body)
}
func SendRESTError(ctx *fasthttp.RequestCtx, statusCode int, err error) {

View File

@ -31,7 +31,8 @@ func main() {
external.ExternalInit()
s := server.New()
s.Route("POST", "/account/signin", member.SignIn)
s.Route("POST", "/account/signin", member.Signin)
s.Route("POST", "/account/signin_cookie", member.SigninByCookie)
s.Route("POST", "/account/signup", member.SignUp)
s.Route("POST", "/account/forgot_password", member.ForgotPassword)
s.Route("POST", "/account/reset_password", member.ResetPassword)

View File

@ -3,6 +3,7 @@ package member
import (
"context"
"crypto/rsa"
"errors"
"fmt"
"io/ioutil"
"log"
@ -10,6 +11,7 @@ import (
"encoding/json"
"git.loafle.net/commons_go/logging"
"git.loafle.net/overflow/overflow_server_app/commons"
"git.loafle.net/overflow/overflow_server_app/external/grpc"
jwt "github.com/dgrijalva/jwt-go"
@ -43,7 +45,7 @@ func init() {
}
}
func SignIn(ctx *fasthttp.RequestCtx) {
func Signin(ctx *fasthttp.RequestCtx) {
var err error
var webParams map[string]interface{}
@ -79,7 +81,7 @@ func SignIn(ctx *fasthttp.RequestCtx) {
/* Create a map to store our claims */
claims := token.Claims.(jwt.MapClaims)
expireTime := time.Now().Add(time.Hour * 24)
// expireTime := time.Now().Add(time.Hour * 24)
/* Set token claims */
claims["iss"] = "overFlow"
@ -93,14 +95,90 @@ func SignIn(ctx *fasthttp.RequestCtx) {
log.Printf("%s \n", tokenString)
var jwtCookie fasthttp.Cookie
jwtCookie.SetKey("AuthToken")
jwtCookie.SetValue(tokenString)
// jwtCookie.SetHTTPOnly(true)
jwtCookie.SetSecure(true)
jwtCookie.SetExpire(expireTime)
jwtCookie.SetPath("/")
ctx.Response.Header.SetCookie(&jwtCookie)
var domainMember interface{}
err = json.Unmarshal([]byte(r), &domainMember)
signInResult := &SignInResult{
AuthToken: tokenString,
DomainMember: domainMember,
}
// var jwtCookie fasthttp.Cookie
// jwtCookie.SetKey("AuthToken")
// jwtCookie.SetValue(tokenString)
// // jwtCookie.SetHTTPOnly(true)
// // jwtCookie.SetSecure(true)
// // jwtCookie.SetDomain("127.0.0.1")
// jwtCookie.SetExpire(expireTime)
// jwtCookie.SetPath("/")
commons.SendRESTResponse(ctx, signInResult)
}
type SignInResult struct {
AuthToken string `json:"authToken"`
DomainMember interface{} `json:"domainMember"`
}
func SigninByCookie(ctx *fasthttp.RequestCtx) {
var err error
var webParams map[string]interface{}
webBytes := ctx.PostBody()
err = json.Unmarshal(webBytes, &webParams)
if err != nil {
commons.SendRESTError(ctx, fasthttp.StatusBadRequest, err)
return
}
length := len(webParams)
if length < 0 {
fmt.Println("eeee")
}
authToken := webParams["authToken"].(string)
if authToken == "" {
err = errors.New("authToken is not exist")
commons.SendRESTError(ctx, fasthttp.StatusBadRequest, err)
return
}
token, err := jwt.Parse(authToken, func(token *jwt.Token) (interface{}, error) {
// Don't forget to validate the alg is what you expect:
if _, ok := token.Method.(*jwt.SigningMethodRSA); !ok {
return nil, fmt.Errorf("Webapp: Unexpected signing method: %v", token.Header["alg"])
}
// hmacSampleSecret is a []byte containing your secret, e.g. []byte("my_secret_key")
return verifyKey, nil
})
if nil != err {
commons.SendRESTError(ctx, fasthttp.StatusBadRequest, err)
return
}
var ok bool
var claims jwt.MapClaims
if claims, ok = token.Claims.(jwt.MapClaims); !ok || !token.Valid {
logging.Logger().Warn(fmt.Sprintf("Webapp: Token is not valid %v", token))
err = errors.New("authToken is invalid")
commons.SendRESTError(ctx, fasthttp.StatusBadRequest, err)
return
}
params := []string{claims["sub"].(string)}
gRPCCtx := context.Background()
r, err := grpc.Exec(gRPCCtx, "DomainMemberService.readByMemberEmail", params)
if nil != err {
commons.SendRESTError(ctx, fasthttp.StatusBadRequest, err)
return
}
commons.SendRESTResponse(ctx, r)
}