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