parent
fc5aefe435
commit
7d1707ca7c
@ -0,0 +1,112 @@
|
|||||||
|
package register
|
||||||
|
|
||||||
|
import (
|
||||||
|
apiStruct "Open_IM/pkg/base_info"
|
||||||
|
"Open_IM/pkg/common/constant"
|
||||||
|
imdb "Open_IM/pkg/common/db/mysql_model/im_mysql_model"
|
||||||
|
"Open_IM/pkg/common/log"
|
||||||
|
"Open_IM/pkg/utils"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"net/http"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
type InvitationCode struct {
|
||||||
|
InvitationCode string `json:"invitationCode"`
|
||||||
|
CreateTime time.Time `json:"createTime"`
|
||||||
|
UserID string `json:"userID"`
|
||||||
|
LastTime time.Time `json:"lastTime"`
|
||||||
|
Status int32 `json:"status"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type GenerateInvitationCodeReq struct {
|
||||||
|
CodesNum int `json:"codesNum" binding:"required"`
|
||||||
|
CodeLen int `json:"codeLen" binding:"required"`
|
||||||
|
OperationID string `json:"operationID" binding:"required"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type GenerateInvitationCodeResp struct {
|
||||||
|
Codes []string `json:"codes"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func GenerateInvitationCode(c *gin.Context) {
|
||||||
|
req := GenerateInvitationCodeReq{}
|
||||||
|
resp := GenerateInvitationCodeResp{}
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": constant.FormattingError, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var err error
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req:", req)
|
||||||
|
resp.Codes, err = imdb.BatchCreateInvitationCodes(req.CodesNum, req.CodeLen)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, "BatchCreateInvitationCodes failed", req.CodesNum, req.CodeLen)
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": constant.ErrDB, "errMsg": "Verification code error!"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
c.JSON(http.StatusOK, gin.H{"errCode": 0, "errMsg": "", "data": resp})
|
||||||
|
}
|
||||||
|
|
||||||
|
type QueryInvitationCodeReq struct {
|
||||||
|
Code string `json:"code" binding:"required"`
|
||||||
|
OperationID string `json:"operationID" binding:"required"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type QueryInvitationCodeResp struct {
|
||||||
|
InvitationCode
|
||||||
|
}
|
||||||
|
|
||||||
|
func QueryInvitationCode(c *gin.Context) {
|
||||||
|
req := QueryInvitationCodeReq{}
|
||||||
|
resp := QueryInvitationCodeResp{}
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": constant.FormattingError, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req:", req)
|
||||||
|
invitation, err := imdb.GetInvitationCode(req.Code)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, "GetInvitationCode failed", req.Code)
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": constant.ErrDB, "errMsg": "Verification code error!"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp.UserID = invitation.UserID
|
||||||
|
resp.CreateTime = invitation.CreateTime
|
||||||
|
resp.Status = invitation.Status
|
||||||
|
resp.LastTime = invitation.LastTime
|
||||||
|
resp.InvitationCode.InvitationCode = invitation.InvitationCode
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp:", resp)
|
||||||
|
c.JSON(http.StatusOK, gin.H{"errCode": 0, "errMsg": "", "data": resp})
|
||||||
|
}
|
||||||
|
|
||||||
|
type GetInvitationCodesReq struct {
|
||||||
|
Status int32 `json:"status" binding:"required"`
|
||||||
|
OperationID string `json:"operationID" binding:"required"`
|
||||||
|
apiStruct.Pagination
|
||||||
|
}
|
||||||
|
|
||||||
|
type GetInvitationCodesResp struct {
|
||||||
|
apiStruct.Pagination
|
||||||
|
codes []InvitationCode
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetInvitationCodes(c *gin.Context) {
|
||||||
|
req := GetInvitationCodesReq{}
|
||||||
|
resp := GetInvitationCodesResp{}
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": constant.FormattingError, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req:", req)
|
||||||
|
codes, err := imdb.GetInvitationCodes(req.ShowNumber, req.PageNumber, req.Status)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, "GetInvitationCode failed", req.ShowNumber, req.PageNumber, req.Status)
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": constant.ErrDB, "errMsg": "Verification code error!"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp.Pagination.PageNumber = req.PageNumber
|
||||||
|
resp.Pagination.ShowNumber = req.ShowNumber
|
||||||
|
utils.CopyStructFields(codes, resp.codes)
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp:", resp)
|
||||||
|
c.JSON(http.StatusOK, gin.H{"errCode": 0, "errMsg": "", "data": resp})
|
||||||
|
}
|
@ -0,0 +1,137 @@
|
|||||||
|
package register
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Open_IM/pkg/common/constant"
|
||||||
|
"Open_IM/pkg/common/db"
|
||||||
|
imdb "Open_IM/pkg/common/db/mysql_model/im_mysql_model"
|
||||||
|
"Open_IM/pkg/common/log"
|
||||||
|
"Open_IM/pkg/utils"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"net/http"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
type QueryIPReq struct {
|
||||||
|
OperationID string `json:"operationID"`
|
||||||
|
IP string `json:"ip"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type QueryIPResp struct {
|
||||||
|
IP string `json:"ip"`
|
||||||
|
RegisterNum int `json:"num"`
|
||||||
|
UserIDList []string `json:"userIDList"`
|
||||||
|
Status int
|
||||||
|
}
|
||||||
|
|
||||||
|
func QueryIP(c *gin.Context) {
|
||||||
|
req := QueryIPReq{}
|
||||||
|
resp := QueryIPResp{}
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": constant.FormattingError, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req:", req)
|
||||||
|
ips, err := imdb.QueryUserIPLimits(req.IP)
|
||||||
|
if err != nil {
|
||||||
|
log.NewError(req.OperationID, "GetInvitationCode failed", req.IP)
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": constant.ErrDB, "errMsg": "QueryUserIPLimits error!"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp.IP = req.IP
|
||||||
|
resp.RegisterNum = len(ips)
|
||||||
|
for _, ip := range ips {
|
||||||
|
resp.UserIDList = append(resp.UserIDList, ip.UserID)
|
||||||
|
}
|
||||||
|
b, _ := imdb.IsLimitLoginIp(req.IP)
|
||||||
|
if b == true {
|
||||||
|
resp.Status = 1
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp:", resp)
|
||||||
|
c.JSON(http.StatusOK, gin.H{"errCode": 0, "errMsg": "", "data": resp})
|
||||||
|
}
|
||||||
|
|
||||||
|
type GetIPListReq struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
type GetIPListResp struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetIPList(c *gin.Context) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
type AddIPLimitReq struct {
|
||||||
|
OperationID string `json:"operationID"`
|
||||||
|
IP string `json:"ip"`
|
||||||
|
LimitTime int32 `json:"limitTime"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type AddIPLimitResp struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
func AddIPLimit(c *gin.Context) {
|
||||||
|
req := AddIPLimitReq{}
|
||||||
|
//resp := AddIPLimitResp{}
|
||||||
|
if err := c.BindJSON(&req); err != nil {
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": constant.FormattingError, "errMsg": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req:", req)
|
||||||
|
if err := imdb.InsertOneIntoIpLimits(db.IpLimit{
|
||||||
|
Ip: req.IP,
|
||||||
|
LimitRegister: 1,
|
||||||
|
LimitLogin: 1,
|
||||||
|
CreateTime: time.Now(),
|
||||||
|
LimitTime: time.Time{},
|
||||||
|
}); err != nil {
|
||||||
|
log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error(), req.IP, req.LimitTime)
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": constant.ErrDB, "errMsg": "InsertOneIntoIpLimits error!"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
c.JSON(http.StatusOK, gin.H{"errCode": 0, "errMsg": ""})
|
||||||
|
}
|
||||||
|
|
||||||
|
type RemoveIPLimitReq struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
type RemoveIPLimitResp struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
func RemoveIPLimit(c *gin.Context) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================sk 写
|
||||||
|
|
||||||
|
type QueryUserIDIPLimitReq struct {
|
||||||
|
UserID string `json:"userID" binding:"required"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type QueryUserIDIPLimitResp struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
func QueryUserIDIPLimit(c *gin.Context) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
type AddUserIPLimitReq struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
type AddUserIPLimitResp struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加ip 特定用户才能登录 user_ip_limits 表
|
||||||
|
func AddUserIPLimit(c *gin.Context) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
type RemoveUserIPLimitReq struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
type RemoveUserIPLimitResp struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除ip 特定用户才能登录 user_ip_limits 表
|
||||||
|
func RemoveUserIPLimit(c *gin.Context) {
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
package base_info
|
||||||
|
|
||||||
|
type Pagination struct {
|
||||||
|
PageNumber int32 `json:"pageNumber" binding:"required"`
|
||||||
|
ShowNumber int32 `json:"showNumber" binding:"required"`
|
||||||
|
}
|
@ -0,0 +1,40 @@
|
|||||||
|
package im_mysql_model
|
||||||
|
|
||||||
|
import "Open_IM/pkg/common/db"
|
||||||
|
|
||||||
|
func IsLimitRegisterIp(RegisterIp string) (bool, error) {
|
||||||
|
//如果已经存在则限制
|
||||||
|
var count int64
|
||||||
|
if err := db.DB.MysqlDB.DefaultGormDB().Table("ip_limits").Where("ip=? and limit_register=? and limit_time>now()", RegisterIp, 1).Count(&count).Error; err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
return count > 0, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func IsLimitLoginIp(LoginIp string) (bool, error) {
|
||||||
|
//如果已经存在则限制
|
||||||
|
var count int64
|
||||||
|
if err := db.DB.MysqlDB.DefaultGormDB().Table("ip_limits").Where("ip=? and limit_login=? and limit_time>now()", LoginIp, 1).Count(&count).Error; err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
return count > 0, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func IsLimitUserLoginIp(userID string, LoginIp string) (bool, error) {
|
||||||
|
//如果已经存在则放行
|
||||||
|
var count int64
|
||||||
|
if err := db.DB.MysqlDB.DefaultGormDB().Table("user_ip_limits").Where("ip=? and user_id=?", LoginIp, userID).Count(&count).Error; err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
return count == 0, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func QueryUserIPLimits(ip string) ([]db.UserIpLimit, error) {
|
||||||
|
var ips []db.UserIpLimit
|
||||||
|
err := db.DB.MysqlDB.DefaultGormDB().Model(&db.UserIpLimit{}).Where("ip=?", ip).Find(&ips).Error
|
||||||
|
return ips, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func InsertOneIntoIpLimits(ipLimits db.IpLimit) error {
|
||||||
|
return db.DB.MysqlDB.DefaultGormDB().Model(&db.IpLimit{}).Create(ipLimits).Error
|
||||||
|
}
|
Loading…
Reference in new issue