From 26b58e3ca613c61a91ca2dceaf1da034ef25373a Mon Sep 17 00:00:00 2001 From: henry Date: Mon, 24 Jan 2022 17:29:02 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E5=AE=8C=E5=96=84=E4=BF=A1?= =?UTF-8?q?=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/admin/api/tenant.go | 3 ++- app/api/admin/controller/tenant/instance.go | 12 ++++++++---- .../controller/technology/demand_service.go | 11 ++++++++++- app/common/model/sys_tenant.go | 1 + serve/web/web.go | 16 +++++++++++++++- utils/array_test.go | 2 ++ 6 files changed, 38 insertions(+), 7 deletions(-) diff --git a/app/api/admin/api/tenant.go b/app/api/admin/api/tenant.go index e8c68f0..4d7c210 100644 --- a/app/api/admin/api/tenant.go +++ b/app/api/admin/api/tenant.go @@ -16,6 +16,7 @@ type ( tenantForm struct { Name string `json:"name" form:"name" binding:"required"` // 名称 Domain string `json:"domain" form:"domain" binding:"required"` // 域名 + IP string `json:"ip" form:"ip" binding:"required"` // IP Contact string `json:"contact" form:"contact" binding:"required"` // 联系人 ContactMobile string `json:"contact_mobile" form:"contact_mobile" binding:"required"` // 联系方式 Province string `json:"province" form:"province" binding:"required"` // 省 @@ -52,7 +53,7 @@ func (a *Tenant) Form(c *gin.Context) { return } err := tenant.NewInstance()(api.GetSession()(c).(*session.Admin)).Form(&tenant.InstanceParams{ID: form.Convert(), - Name: form.Name, Domain: form.Domain, Contact: form.Contact, ContactMobile: form.ContactMobile, + Name: form.Name, Domain: form.Domain, IP: form.IP, Contact: form.Contact, ContactMobile: form.ContactMobile, Area: config.Area{Province: form.Province, City: form.City}, Remark: form.Remark, }) api.APIResponse(err)(c) diff --git a/app/api/admin/controller/tenant/instance.go b/app/api/admin/controller/tenant/instance.go index 5ab24c8..446d03f 100644 --- a/app/api/admin/controller/tenant/instance.go +++ b/app/api/admin/controller/tenant/instance.go @@ -38,10 +38,10 @@ type ( } // InstanceParams 参数信息 InstanceParams struct { - ID uint64 - Name, Domain, Remark string - Area config.Area - Contact, ContactMobile string + ID uint64 + Name, Domain, IP, Remark string + Area config.Area + Contact, ContactMobile string } ) @@ -118,6 +118,9 @@ func (c *Instance) Form(params *InstanceParams) error { isExist := false + if !utils.ValidateIP(params.IP) { + return errors.New("操作错误,IP地址异常") + } if params.ID > 0 { mSysTenant.ID = params.ID @@ -143,6 +146,7 @@ func (c *Instance) Form(params *InstanceParams) error { Province: params.Area.Province, City: params.Area.City, } + mSysTenant.IP = params.IP mSysTenant.Contact = params.Contact mSysTenant.ContactMobile = params.ContactMobile mSysTenant.Remark = params.Remark diff --git a/app/api/enterprise/controller/technology/demand_service.go b/app/api/enterprise/controller/technology/demand_service.go index 0eaafb0..b4544b5 100644 --- a/app/api/enterprise/controller/technology/demand_service.go +++ b/app/api/enterprise/controller/technology/demand_service.go @@ -176,7 +176,16 @@ func (c *DemandService) Delete(id uint64) error { } else if !isExist { return errors.New("操作错误,需求服务信息不存在或已被删除") } - return nil + mUserAgent := model.NewUserAgent() + + if isExist, err = model2.FirstField(mUserAgent.UserAgent, []string{"id", "agent_id"}, model2.NewWhere("uid", c.UID)); err != nil { + return err + } else if !isExist { + return errors.New("操作错误,未知的身份信息") + } else if mUserAgent.AgentID != mTechnologyDemandService.AgentID { + return errors.New("操作错误,无权限操作") + } + return model2.Delete(mTechnologyDemandService.TechnologyDemandService) } func NewDemandService() DemandServiceHandle { diff --git a/app/common/model/sys_tenant.go b/app/common/model/sys_tenant.go index 0873519..3f38ab7 100644 --- a/app/common/model/sys_tenant.go +++ b/app/common/model/sys_tenant.go @@ -9,6 +9,7 @@ type SysTenant struct { ContactMobile string `gorm:"column:contact_mobile;type:varchar(15);default:'';comment:联系方式" json:"contact_mobile"` Area Domain string `gorm:"column:domain;type:varchar(255);default:'';comment:域名地址" json:"domain"` + IP string `gorm:"column:ip;type:char(16);default:'';comment:IP地址" json:"ip"` Remark string `gorm:"column:remark;type:varchar(255);default:'';comment:备注信息" json:"remark"` ModelDeleted ModelAt diff --git a/serve/web/web.go b/serve/web/web.go index ecfef3e..c5451a8 100644 --- a/serve/web/web.go +++ b/serve/web/web.go @@ -2,9 +2,11 @@ package web import ( "fmt" + "net" "net/http" "os" "os/signal" + "strings" "syscall" "time" ) @@ -58,7 +60,19 @@ func WithFunction(function func(string) (bool, func(r *http.Request))) Option { func (this *Web) ServeHTTP(w http.ResponseWriter, r *http.Request) { //remoteUrl, _ := url.Parse("http://192.168.0.147:9000") fmt.Println(r.Host) - //fmt.Println(r.RequestURI) + // 获取 + ip, _, err := net.SplitHostPort(strings.TrimSpace(r.RemoteAddr)) + + if err != nil { + _, _ = w.Write([]byte("403: Host forbidden")) + return + } + remoteIP := net.ParseIP(ip) + + if remoteIP == nil { + _, _ = w.Write([]byte("403: Host forbidden")) + return + } if this.function != nil { pass, callback := this.function(r.Host) diff --git a/utils/array_test.go b/utils/array_test.go index 844268c..2f2c641 100644 --- a/utils/array_test.go +++ b/utils/array_test.go @@ -24,6 +24,8 @@ func TestArrayFlip(t *testing.T) { t.Log(a[4]) a = append(a, []int{1, 2, 3, 4, 5, 6, 7, 8, 9}...) t.Log(a) + t.Log(len(a)) + t.Log(cap(a)) } func TestArrayStrings(t *testing.T) {