1
This commit is contained in:
parent
0d18be75d2
commit
a685c53dfc
@ -34,6 +34,39 @@ module.exports = class {
|
||||
new common.RspHead(),
|
||||
]
|
||||
},
|
||||
{
|
||||
'method': 'GET',
|
||||
'name': 'api/v1/user/getNonce',
|
||||
'desc': '获取nonce',
|
||||
'group': 'User',
|
||||
'url': 'api/v1/user/getNonce',
|
||||
'uri_params': [
|
||||
['account', '', 'account'],
|
||||
],
|
||||
'response': [
|
||||
new common.RspHead(),
|
||||
['data', '', 'nonce']
|
||||
]
|
||||
},
|
||||
{
|
||||
'method': 'POST',
|
||||
'name': 'metamask_login',
|
||||
'desc': 'metamask用户登录',
|
||||
'group': 'User',
|
||||
'url': 'api/v1/user/metamask_login',
|
||||
'header': [
|
||||
],
|
||||
'is_json_params': true,
|
||||
'params': [
|
||||
['account', '', 'account'],
|
||||
['nonce', '', 'nonce'],
|
||||
['signature', '', 'signature'],
|
||||
['tips', '', 'tips'],
|
||||
],
|
||||
'response': [
|
||||
new common.RspHead(),
|
||||
]
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
|
@ -1,9 +1,10 @@
|
||||
package system
|
||||
|
||||
import (
|
||||
"q5"
|
||||
"f5"
|
||||
"github.com/gin-gonic/gin"
|
||||
"main/constant"
|
||||
"mt"
|
||||
. "main/global"
|
||||
"main/model/system"
|
||||
"net/http"
|
||||
@ -15,50 +16,11 @@ type UserApi struct {
|
||||
}
|
||||
|
||||
func (this *UserApi) Login(c *gin.Context) {
|
||||
//username := c.PostForm("username")
|
||||
//password := c.PostForm("password")
|
||||
//if username == "" || password == "" {
|
||||
// c.JSON(http.StatusOK, gin.H{
|
||||
// "errcode": 1,
|
||||
// "errmsg": "请求参数不正确",
|
||||
// })
|
||||
// return
|
||||
//}
|
||||
type loginForm struct {
|
||||
Username string `binding:"required" json:"username"`
|
||||
Password string `binding:"required" json:"password"`
|
||||
}
|
||||
reqJson := loginForm{}
|
||||
if err := c.ShouldBindJSON(&reqJson); err != nil {
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
"code": 1,
|
||||
"message": err.Error(),
|
||||
})
|
||||
return
|
||||
}
|
||||
user := system.SysUser{}
|
||||
//err := f5.GetApp().GetOrmDb(constant.ADMIN_DB).Where("username = ?", username).Where("password = ?", password).First(&user).Error
|
||||
err := f5.GetApp().GetOrmDb(constant.ADMIN_DB).Where("username = ?", reqJson.Username).Where("password = ?", reqJson.Password).First(&user).Error
|
||||
if err != nil {
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
"code": 1,
|
||||
"message": "用户名或密码错误",
|
||||
})
|
||||
return
|
||||
}
|
||||
//token := GetApp().AddSession(username)
|
||||
token := GetApp().AddSession(reqJson.Username)
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
"code": 0,
|
||||
"message": "登录成功",
|
||||
"data": user,
|
||||
"token": token,
|
||||
})
|
||||
}
|
||||
|
||||
func (this *UserApi) Info(c *gin.Context) {
|
||||
token := c.Request.Header.Get("Authorization")
|
||||
strArr := strings.Split(token, "|")
|
||||
//token := c.Request.Header.Get("Authorization")
|
||||
//strArr := strings.Split(token, "|")
|
||||
//username := c.Query("username")
|
||||
//if username == "" {
|
||||
// c.JSON(http.StatusOK, gin.H{
|
||||
@ -68,6 +30,19 @@ func (this *UserApi) Info(c *gin.Context) {
|
||||
// return
|
||||
//}
|
||||
|
||||
user := new(system.SysUser)
|
||||
user.Idx = 1000
|
||||
user.Username = ""
|
||||
user.Password = ""
|
||||
q5.NewSlice(&user.Roles, 0, 10)
|
||||
q5.AppendSlice(&user.Roles, "admin")
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
"code": 0,
|
||||
"message": "success",
|
||||
"data": user,
|
||||
})
|
||||
|
||||
/*
|
||||
user := system.SysUser{}
|
||||
err := f5.GetApp().GetOrmDb(constant.ADMIN_DB).Where("username = ?", strArr[0]).First(&user).Error
|
||||
if err != nil {
|
||||
@ -83,7 +58,7 @@ func (this *UserApi) Info(c *gin.Context) {
|
||||
"code": 0,
|
||||
"message": "success",
|
||||
"data": user,
|
||||
})
|
||||
})*/
|
||||
}
|
||||
|
||||
func (this *UserApi) Logout(c *gin.Context) {
|
||||
@ -95,3 +70,54 @@ func (this *UserApi) Logout(c *gin.Context) {
|
||||
"message": "success",
|
||||
})
|
||||
}
|
||||
|
||||
func (this *UserApi) MetaMaskLogin(c *gin.Context) {
|
||||
reqJson := struct {
|
||||
AccountAddress string `json:"account"`
|
||||
Nonce string `json:"nonce"`
|
||||
Signature string `json:"signature"`
|
||||
Tips string `json:"tips"`
|
||||
}{}
|
||||
if err := c.ShouldBindJSON(&reqJson); err != nil {
|
||||
f5.RspErr2(c, 1, err.Error())
|
||||
return
|
||||
}
|
||||
if len(reqJson.Nonce) > 1024 || len(reqJson.Signature) > 1024 || len(reqJson.Tips) > 1024 {
|
||||
f5.RspErr2(c, 2, "param error")
|
||||
return
|
||||
}
|
||||
|
||||
f5.GetHttpCliMgr().SendGoStyleRequest(
|
||||
mt.Table.Web3ServiceCluster.RandElement().GetUrl() + "/webapp/index.php",
|
||||
map[string]string {
|
||||
"c": "BcService",
|
||||
"a": "authVerifySignature",
|
||||
"tips": reqJson.Tips,
|
||||
"nonce": reqJson.Nonce,
|
||||
"signature": reqJson.Signature,
|
||||
},
|
||||
func (rsp f5.HttpCliResponse) {
|
||||
if rsp.GetErr() != nil {
|
||||
f5.RspErr2(c, 500, rsp.GetErr().Error())
|
||||
return
|
||||
}
|
||||
rspJson := struct {
|
||||
ErrCode int32 `json:"errcode"`
|
||||
ErrMsg string `json:"errmsg"`
|
||||
Recovered string `json:"recovered"`
|
||||
}{}
|
||||
if q5.DecodeJson(rsp.GetRawData(), &rspJson) != nil {
|
||||
f5.RspErr2(c, 500, "server internal error")
|
||||
return
|
||||
}
|
||||
if strings.ToLower(rspJson.Recovered) != strings.ToLower(reqJson.AccountAddress) {
|
||||
f5.RspErr2(c, 500, "server internal error")
|
||||
return
|
||||
}
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
"code": 0,
|
||||
"message": "success",
|
||||
"token": "312424",
|
||||
})
|
||||
})
|
||||
}
|
||||
|
@ -1,24 +1,20 @@
|
||||
package app
|
||||
|
||||
import (
|
||||
"crypto/md5"
|
||||
"encoding/hex"
|
||||
//"crypto/md5"
|
||||
//"encoding/hex"
|
||||
"f5"
|
||||
"fmt"
|
||||
//"fmt"
|
||||
"main/constant"
|
||||
"main/task"
|
||||
"math/rand"
|
||||
"mt"
|
||||
"sync"
|
||||
"time"
|
||||
//"sync"
|
||||
//"time"
|
||||
)
|
||||
|
||||
type app struct {
|
||||
initCb func()
|
||||
unInitCb func()
|
||||
sessionLock sync.Mutex
|
||||
sessionHash map[string]string
|
||||
accountIdHash map[string]string
|
||||
}
|
||||
|
||||
func (this *app) GetPkgName() string {
|
||||
@ -38,8 +34,6 @@ func (this *app) Run(initCb func(), unInitCb func()) {
|
||||
func (this *app) Init() {
|
||||
f5.LoadMetaTable(mt.Table)
|
||||
this.registerDataSources()
|
||||
this.sessionHash = make(map[string]string)
|
||||
this.accountIdHash = make(map[string]string)
|
||||
task.TaskMgr.Init()
|
||||
this.initCb()
|
||||
}
|
||||
@ -130,6 +124,7 @@ func (this *app) registerDataSources() {
|
||||
}
|
||||
|
||||
func (this *app) AddSession(accountId string) string {
|
||||
/*
|
||||
this.sessionLock.Lock()
|
||||
defer this.sessionLock.Unlock()
|
||||
uuid := f5.GetApp().NewGlobalUuid()
|
||||
@ -141,34 +136,8 @@ func (this *app) AddSession(accountId string) string {
|
||||
token := accountId + "|" + md5String
|
||||
this.sessionHash[accountId] = token
|
||||
return token
|
||||
}
|
||||
|
||||
const letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||
|
||||
func randStringBytes(n int) string {
|
||||
b := make([]byte, n)
|
||||
for i := range b {
|
||||
b[i] = letterBytes[rand.Intn(len(letterBytes))]
|
||||
}
|
||||
return string(b)
|
||||
}
|
||||
|
||||
func (this *app) GetSessionAccountId(accountId string) string {
|
||||
this.sessionLock.Lock()
|
||||
defer this.sessionLock.Unlock()
|
||||
if session, ok := this.sessionHash[accountId]; ok {
|
||||
return session
|
||||
} else {
|
||||
return "nil"
|
||||
}
|
||||
}
|
||||
|
||||
func (this *app) RemoveSession(accountId string) {
|
||||
this.sessionLock.Lock()
|
||||
defer this.sessionLock.Unlock()
|
||||
if _, ok := this.sessionHash[accountId]; ok {
|
||||
delete(this.sessionHash, accountId)
|
||||
}
|
||||
*/
|
||||
return ""
|
||||
}
|
||||
|
||||
func (this *app) HasTask() bool {
|
||||
|
@ -2,13 +2,14 @@ package middleware
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
. "main/global"
|
||||
"net/http"
|
||||
"strings"
|
||||
//. "main/global"
|
||||
//"net/http"
|
||||
//"strings"
|
||||
)
|
||||
|
||||
func Auth() gin.HandlerFunc {
|
||||
return func(c *gin.Context) {
|
||||
/*
|
||||
token := c.Request.Header.Get("Authorization")
|
||||
strArr := strings.Split(token, "|")
|
||||
authToken := GetApp().GetSessionAccountId(strArr[0])
|
||||
@ -17,11 +18,10 @@ func Auth() gin.HandlerFunc {
|
||||
"code": 50014,
|
||||
"message": "未登录或非法访问",
|
||||
})
|
||||
/*
|
||||
response.FailWithDetailed(gin.H{"reload": true}, "未登录或非法访问", c)*/
|
||||
response.FailWithDetailed(gin.H{"reload": true}, "未登录或非法访问", c)
|
||||
c.Abort()
|
||||
return
|
||||
}
|
||||
}*/
|
||||
c.Next()
|
||||
}
|
||||
}
|
||||
|
@ -15,6 +15,7 @@ func (this *UserRouter) InitUserRouter(priRouter *gin.RouterGroup,
|
||||
{
|
||||
pubUserRouter.POST("login", userApi.Login)
|
||||
pubUserRouter.GET("getNonce", userApi.GetNonce)
|
||||
pubUserRouter.POST("metamask_login", userApi.MetaMaskLogin)
|
||||
}
|
||||
{
|
||||
priUserRouter.GET("info", userApi.Info)
|
||||
|
2
third_party/f5
vendored
2
third_party/f5
vendored
@ -1 +1 @@
|
||||
Subproject commit ac6d1f71f5281b1a10c7fadce50ef65e48a9f41f
|
||||
Subproject commit 5610bc1f758e6b7b7738e4ac4ee492206b26b3e3
|
Loading…
x
Reference in New Issue
Block a user