mirror of
https://github.com/openimsdk/open-im-server.git
synced 2025-05-31 11:51:28 +08:00
errcode
This commit is contained in:
parent
79b5d4b8bd
commit
1ba5cde076
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,23 +0,0 @@
|
|||||||
package middleware
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/gin-gonic/gin"
|
|
||||||
"net/http"
|
|
||||||
)
|
|
||||||
|
|
||||||
func CorsHandler() gin.HandlerFunc {
|
|
||||||
return func(context *gin.Context) {
|
|
||||||
context.Writer.Header().Set("Access-Control-Allow-Origin", "*")
|
|
||||||
context.Header("Access-Control-Allow-Methods", "*")
|
|
||||||
context.Header("Access-Control-Allow-Headers", "*")
|
|
||||||
context.Header("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers,Cache-Control,Content-Language,Content-Type,Expires,Last-Modified,Pragma,FooBar") // 跨域关键设置 让浏览器可以解析
|
|
||||||
context.Header("Access-Control-Max-Age", "172800") // 缓存请求信息 单位为秒
|
|
||||||
context.Header("Access-Control-Allow-Credentials", "false") // 跨域请求是否需要带cookie信息 默认设置为true
|
|
||||||
context.Header("content-type", "application/json") // 设置返回格式是json
|
|
||||||
//Release all option pre-requests
|
|
||||||
if context.Request.Method == http.MethodOptions {
|
|
||||||
context.JSON(http.StatusOK, "Options Request!")
|
|
||||||
}
|
|
||||||
context.Next()
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,32 +0,0 @@
|
|||||||
package middleware
|
|
||||||
|
|
||||||
import (
|
|
||||||
"Open_IM/pkg/common/config"
|
|
||||||
"Open_IM/pkg/common/log"
|
|
||||||
"Open_IM/pkg/common/token_verify"
|
|
||||||
"Open_IM/pkg/utils"
|
|
||||||
"net/http"
|
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
|
||||||
)
|
|
||||||
|
|
||||||
func JWTAuth() gin.HandlerFunc {
|
|
||||||
return func(c *gin.Context) {
|
|
||||||
ok, userID, errInfo := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), "")
|
|
||||||
// log.NewInfo("0", utils.GetSelfFuncName(), "userID: ", userID)
|
|
||||||
c.Set("userID", userID)
|
|
||||||
if !ok {
|
|
||||||
log.NewError("", "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
|
||||||
c.Abort()
|
|
||||||
c.JSON(http.StatusOK, gin.H{"errCode": 400, "errMsg": errInfo})
|
|
||||||
return
|
|
||||||
} else {
|
|
||||||
if !utils.IsContain(userID, config.Config.Manager.AppManagerUid) {
|
|
||||||
c.Abort()
|
|
||||||
c.JSON(http.StatusOK, gin.H{"errCode": 400, "errMsg": "user is not admin"})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
log.NewInfo("0", utils.GetSelfFuncName(), "failed: ", errInfo)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -48,11 +48,6 @@ func NewGinRouter() *gin.Engine {
|
|||||||
userRouterGroup := r2.Group("/user")
|
userRouterGroup := r2.Group("/user")
|
||||||
{
|
{
|
||||||
userRouterGroup.POST("/get_user_id_by_email_phone", user.GetUserIDByEmailAndPhoneNumber)
|
userRouterGroup.POST("/get_user_id_by_email_phone", user.GetUserIDByEmailAndPhoneNumber)
|
||||||
|
|
||||||
userRouterGroup.POST("/add_user", user.AddUser)
|
|
||||||
userRouterGroup.POST("/unblock_user", user.UnblockUser)
|
|
||||||
userRouterGroup.POST("/block_user", user.BlockUser)
|
|
||||||
userRouterGroup.POST("/get_block_users", user.GetBlockUsers)
|
|
||||||
}
|
}
|
||||||
messageCMSRouterGroup := r2.Group("/message")
|
messageCMSRouterGroup := r2.Group("/message")
|
||||||
{
|
{
|
||||||
|
@ -2,6 +2,7 @@ package user
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"Open_IM/pkg/cms_api_struct"
|
"Open_IM/pkg/cms_api_struct"
|
||||||
|
"Open_IM/pkg/cms_struct"
|
||||||
"Open_IM/pkg/common/config"
|
"Open_IM/pkg/common/config"
|
||||||
"Open_IM/pkg/common/log"
|
"Open_IM/pkg/common/log"
|
||||||
"Open_IM/pkg/getcdv3"
|
"Open_IM/pkg/getcdv3"
|
||||||
@ -16,150 +17,6 @@ import (
|
|||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
func AddUser(c *gin.Context) {
|
|
||||||
var (
|
|
||||||
req cms_struct.AddUserRequest
|
|
||||||
reqPb pb.AddUserReq
|
|
||||||
)
|
|
||||||
if err := c.BindJSON(&req); err != nil {
|
|
||||||
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "BindJSON failed ", err.Error())
|
|
||||||
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
reqPb.OperationID = utils.OperationIDGenerator()
|
|
||||||
log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req)
|
|
||||||
utils.CopyStructFields(&reqPb, &req)
|
|
||||||
etcdConn := getcdv3.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, reqPb.OperationID)
|
|
||||||
if etcdConn == nil {
|
|
||||||
errMsg := reqPb.OperationID + "getcdv3.GetConn == nil"
|
|
||||||
log.NewError(reqPb.OperationID, errMsg)
|
|
||||||
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
client := pb.NewUserClient(etcdConn)
|
|
||||||
respPb, err := client.AddUser(context.Background(), &reqPb)
|
|
||||||
if err != nil {
|
|
||||||
log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error(), reqPb.String())
|
|
||||||
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
c.JSON(http.StatusOK, gin.H{"errCode": respPb.CommonResp.ErrCode, "errMsg": respPb.CommonResp.ErrMsg})
|
|
||||||
}
|
|
||||||
|
|
||||||
func BlockUser(c *gin.Context) {
|
|
||||||
var (
|
|
||||||
req cms_struct.BlockUserRequest
|
|
||||||
reqPb pb.BlockUserReq
|
|
||||||
)
|
|
||||||
if err := c.BindJSON(&req); err != nil {
|
|
||||||
log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error())
|
|
||||||
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
reqPb.OperationID = utils.OperationIDGenerator()
|
|
||||||
log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req)
|
|
||||||
utils.CopyStructFields(&reqPb, &req)
|
|
||||||
etcdConn := getcdv3.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, reqPb.OperationID)
|
|
||||||
if etcdConn == nil {
|
|
||||||
errMsg := reqPb.OperationID + "getcdv3.GetDefaultConn == nil"
|
|
||||||
log.NewError(reqPb.OperationID, errMsg)
|
|
||||||
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
client := pb.NewUserClient(etcdConn)
|
|
||||||
respPb, err := client.BlockUser(context.Background(), &reqPb)
|
|
||||||
if err != nil {
|
|
||||||
log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error(), reqPb.String())
|
|
||||||
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
c.JSON(http.StatusOK, gin.H{"errCode": respPb.CommonResp.ErrCode, "errMsg": respPb.CommonResp.ErrMsg})
|
|
||||||
}
|
|
||||||
|
|
||||||
func UnblockUser(c *gin.Context) {
|
|
||||||
var (
|
|
||||||
req cms_struct.UnblockUserRequest
|
|
||||||
resp cms_struct.UnBlockUserResponse
|
|
||||||
reqPb pb.UnBlockUserReq
|
|
||||||
)
|
|
||||||
if err := c.BindJSON(&req); err != nil {
|
|
||||||
log.NewError(req.OperationID, "BindJSON failed ", err.Error())
|
|
||||||
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
reqPb.OperationID = utils.OperationIDGenerator()
|
|
||||||
log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req)
|
|
||||||
utils.CopyStructFields(&reqPb, &req)
|
|
||||||
etcdConn := getcdv3.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, reqPb.OperationID)
|
|
||||||
if etcdConn == nil {
|
|
||||||
errMsg := reqPb.OperationID + "getcdv3.GetDefaultConn == nil"
|
|
||||||
log.NewError(reqPb.OperationID, errMsg)
|
|
||||||
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
client := pb.NewUserClient(etcdConn)
|
|
||||||
respPb, err := client.UnBlockUser(context.Background(), &reqPb)
|
|
||||||
if err != nil {
|
|
||||||
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), err.Error(), reqPb.String())
|
|
||||||
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "resp: ", resp)
|
|
||||||
c.JSON(http.StatusOK, gin.H{"errCode": respPb.CommonResp.ErrCode, "errMsg": respPb.CommonResp.ErrMsg})
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetBlockUsers(c *gin.Context) {
|
|
||||||
var (
|
|
||||||
req cms_struct.GetBlockUsersRequest
|
|
||||||
resp cms_struct.GetBlockUsersResponse
|
|
||||||
reqPb pb.GetBlockUsersReq
|
|
||||||
respPb *pb.GetBlockUsersResp
|
|
||||||
)
|
|
||||||
reqPb.Pagination = &commonPb.RequestPagination{}
|
|
||||||
if err := c.BindJSON(&req); err != nil {
|
|
||||||
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "ShouldBindQuery failed ", err.Error())
|
|
||||||
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
reqPb.OperationID = utils.OperationIDGenerator()
|
|
||||||
log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req)
|
|
||||||
utils.CopyStructFields(&reqPb.Pagination, &req)
|
|
||||||
log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "blockUsers", reqPb.Pagination, req)
|
|
||||||
etcdConn := getcdv3.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, reqPb.OperationID)
|
|
||||||
if etcdConn == nil {
|
|
||||||
errMsg := reqPb.OperationID + "getcdv3.GetDefaultConn == nil"
|
|
||||||
log.NewError(reqPb.OperationID, errMsg)
|
|
||||||
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
client := pb.NewUserClient(etcdConn)
|
|
||||||
respPb, err := client.GetBlockUsers(context.Background(), &reqPb)
|
|
||||||
if err != nil {
|
|
||||||
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "GetBlockUsers rpc", err.Error())
|
|
||||||
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
for _, v := range respPb.BlockUsers {
|
|
||||||
resp.BlockUsers = append(resp.BlockUsers, cms_struct.BlockUser{
|
|
||||||
UserResponse: cms_struct.UserResponse{
|
|
||||||
UserID: v.UserInfo.UserID,
|
|
||||||
FaceURL: v.UserInfo.FaceURL,
|
|
||||||
Nickname: v.UserInfo.Nickname,
|
|
||||||
PhoneNumber: v.UserInfo.PhoneNumber,
|
|
||||||
Email: v.UserInfo.Email,
|
|
||||||
Gender: int(v.UserInfo.Gender),
|
|
||||||
},
|
|
||||||
BeginDisableTime: v.BeginDisableTime,
|
|
||||||
EndDisableTime: v.EndDisableTime,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
resp.ShowNumber = int(respPb.Pagination.ShowNumber)
|
|
||||||
resp.CurrentPage = int(respPb.Pagination.CurrentPage)
|
|
||||||
resp.UserNums = respPb.UserNums
|
|
||||||
log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", resp)
|
|
||||||
c.JSON(http.StatusOK, gin.H{"errCode": respPb.CommonResp.ErrCode, "errMsg": respPb.CommonResp.ErrMsg, "data": resp})
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetUserIDByEmailAndPhoneNumber(c *gin.Context) {
|
func GetUserIDByEmailAndPhoneNumber(c *gin.Context) {
|
||||||
var (
|
var (
|
||||||
req cms_struct.GetUserIDByEmailAndPhoneNumberRequest
|
req cms_struct.GetUserIDByEmailAndPhoneNumberRequest
|
||||||
|
@ -1,6 +1,10 @@
|
|||||||
package middleware
|
package middleware
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"Open_IM/pkg/common/config"
|
||||||
|
"Open_IM/pkg/common/log"
|
||||||
|
"Open_IM/pkg/common/token_verify"
|
||||||
|
"Open_IM/pkg/utils"
|
||||||
"bytes"
|
"bytes"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
@ -8,6 +12,44 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func JWTAuth() gin.HandlerFunc {
|
||||||
|
return func(c *gin.Context) {
|
||||||
|
ok, userID, errInfo := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), "")
|
||||||
|
// log.NewInfo("0", utils.GetSelfFuncName(), "userID: ", userID)
|
||||||
|
c.Set("userID", userID)
|
||||||
|
if !ok {
|
||||||
|
log.NewError("", "GetUserIDFromToken false ", c.Request.Header.Get("token"))
|
||||||
|
c.Abort()
|
||||||
|
c.JSON(http.StatusOK, gin.H{"errCode": 400, "errMsg": errInfo})
|
||||||
|
return
|
||||||
|
} else {
|
||||||
|
if !utils.IsContain(userID, config.Config.Manager.AppManagerUid) {
|
||||||
|
c.Abort()
|
||||||
|
c.JSON(http.StatusOK, gin.H{"errCode": 400, "errMsg": "user is not admin"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo("0", utils.GetSelfFuncName(), "failed: ", errInfo)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func CorsHandler() gin.HandlerFunc {
|
||||||
|
return func(context *gin.Context) {
|
||||||
|
context.Writer.Header().Set("Access-Control-Allow-Origin", "*")
|
||||||
|
context.Header("Access-Control-Allow-Methods", "*")
|
||||||
|
context.Header("Access-Control-Allow-Headers", "*")
|
||||||
|
context.Header("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers,Cache-Control,Content-Language,Content-Type,Expires,Last-Modified,Pragma,FooBar") // 跨域关键设置 让浏览器可以解析
|
||||||
|
context.Header("Access-Control-Max-Age", "172800") // 缓存请求信息 单位为秒
|
||||||
|
context.Header("Access-Control-Allow-Credentials", "false") // 跨域请求是否需要带cookie信息 默认设置为true
|
||||||
|
context.Header("content-type", "application/json") // 设置返回格式是json
|
||||||
|
//Release all option pre-requests
|
||||||
|
if context.Request.Method == http.MethodOptions {
|
||||||
|
context.JSON(http.StatusOK, "Options Request!")
|
||||||
|
}
|
||||||
|
context.Next()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func GinParseOperationID(c *gin.Context) {
|
func GinParseOperationID(c *gin.Context) {
|
||||||
if c.Request.Method == http.MethodPost {
|
if c.Request.Method == http.MethodPost {
|
||||||
operationID := c.Request.Header.Get("operationID")
|
operationID := c.Request.Header.Get("operationID")
|
||||||
|
@ -1,24 +0,0 @@
|
|||||||
package utils
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net/http"
|
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
|
||||||
)
|
|
||||||
|
|
||||||
func CorsHandler() gin.HandlerFunc {
|
|
||||||
return func(context *gin.Context) {
|
|
||||||
context.Writer.Header().Set("Access-Control-Allow-Origin", "*")
|
|
||||||
context.Header("Access-Control-Allow-Methods", "*")
|
|
||||||
context.Header("Access-Control-Allow-Headers", "*")
|
|
||||||
context.Header("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers,Cache-Control,Content-Language,Content-Type,Expires,Last-Modified,Pragma,FooBar") // 跨域关键设置 让浏览器可以解析
|
|
||||||
context.Header("Access-Control-Max-Age", "172800") // 缓存请求信息 单位为秒
|
|
||||||
context.Header("Access-Control-Allow-Credentials", "false") // 跨域请求是否需要带cookie信息 默认设置为true
|
|
||||||
context.Header("content-type", "application/json") // 设置返回格式是json
|
|
||||||
//Release all option pre-requests
|
|
||||||
if context.Request.Method == http.MethodOptions {
|
|
||||||
context.JSON(http.StatusOK, "Options Request!")
|
|
||||||
}
|
|
||||||
context.Next()
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,67 +0,0 @@
|
|||||||
package utils
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net/http"
|
|
||||||
"net/http/httptest"
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
|
||||||
"github.com/stretchr/testify/assert"
|
|
||||||
)
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
gin.SetMode(gin.TestMode)
|
|
||||||
}
|
|
||||||
|
|
||||||
func performRequest(r http.Handler, method, origin string) *httptest.ResponseRecorder {
|
|
||||||
return performRequestWithHeaders(r, method, origin, http.Header{})
|
|
||||||
}
|
|
||||||
|
|
||||||
func performRequestWithHeaders(r http.Handler, method, origin string, header http.Header) *httptest.ResponseRecorder {
|
|
||||||
req, _ := http.NewRequest(method, "/", nil)
|
|
||||||
// From go/net/http/request.go:
|
|
||||||
// For incoming requests, the Host header is promoted to the
|
|
||||||
// Request.Host field and removed from the Header map.
|
|
||||||
req.Host = header.Get("Host")
|
|
||||||
header.Del("Host")
|
|
||||||
if len(origin) > 0 {
|
|
||||||
header.Set("Origin", origin)
|
|
||||||
}
|
|
||||||
req.Header = header
|
|
||||||
w := httptest.NewRecorder()
|
|
||||||
r.ServeHTTP(w, req)
|
|
||||||
return w
|
|
||||||
}
|
|
||||||
|
|
||||||
func newTestRouter() *gin.Engine {
|
|
||||||
router := gin.New()
|
|
||||||
router.Use(CorsHandler())
|
|
||||||
router.GET("/", func(c *gin.Context) {
|
|
||||||
c.String(http.StatusOK, "get")
|
|
||||||
})
|
|
||||||
router.POST("/", func(c *gin.Context) {
|
|
||||||
c.String(http.StatusOK, "post")
|
|
||||||
})
|
|
||||||
router.PATCH("/", func(c *gin.Context) {
|
|
||||||
c.String(http.StatusOK, "patch")
|
|
||||||
})
|
|
||||||
|
|
||||||
return router
|
|
||||||
}
|
|
||||||
|
|
||||||
func Test_CorsHandler(t *testing.T) {
|
|
||||||
router := newTestRouter()
|
|
||||||
// no CORS request, origin == ""
|
|
||||||
w := performRequest(router, "GET", "")
|
|
||||||
assert.Equal(t, "get", w.Body.String())
|
|
||||||
assert.Equal(t, w.Header().Get("Access-Control-Allow-Origin"), "*")
|
|
||||||
assert.Equal(t, w.Header().Get("Access-Control-Allow-Methods"), "*")
|
|
||||||
assert.Equal(t, w.Header().Get("Access-Control-Allow-Headers"), "*")
|
|
||||||
assert.Equal(t, w.Header().Get("Access-Control-Expose-Headers"), "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers,Cache-Control,Content-Language,Content-Type,Expires,Last-Modified,Pragma,FooBar")
|
|
||||||
assert.Equal(t, w.Header().Get("Access-Control-Max-Age"), "172800")
|
|
||||||
assert.Equal(t, w.Header().Get("Access-Control-Allow-Credentials"), "false")
|
|
||||||
assert.Equal(t, w.Header().Get("content-type"), "application/json")
|
|
||||||
|
|
||||||
w = performRequest(router, "OPTIONS", "")
|
|
||||||
assert.Equal(t, w.Body.String(), "\"Options Request!\"")
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user