Skip to content

Commit

Permalink
[fix] #28 #46 #48 #50 /[support] #31
Browse files Browse the repository at this point in the history
  • Loading branch information
yoneyan committed Feb 28, 2021
1 parent 637d5c6 commit 6a59020
Show file tree
Hide file tree
Showing 9 changed files with 194 additions and 140 deletions.
2 changes: 0 additions & 2 deletions pkg/api/core/group/info/v0/info.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import (
"github.com/homenoc/dsbd-backend/pkg/api/core/group/network"
"github.com/homenoc/dsbd-backend/pkg/api/core/token"
dbNetwork "github.com/homenoc/dsbd-backend/pkg/api/store/group/network/v0"
"log"
"net/http"
)

Expand Down Expand Up @@ -46,7 +45,6 @@ func Get(c *gin.Context) {
v6 = append(v6, tmpIP.IP)
}
}
log.Println(tmpNetwork.Connection)
if len(tmpNetwork.Connection) > 0 {
for _, tmpConnection := range tmpNetwork.Connection {
if *tmpConnection.Open {
Expand Down
93 changes: 48 additions & 45 deletions pkg/api/core/group/network/interface.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,41 +8,42 @@ import (
)

const (
ID = 0
GID = 1
Org = 2
Open = 3
UpdateName = 100
UpdateDate = 102
UpdateRoute = 103
UpdatePlan = 104
UpdateGID = 104
UpdateData = 105
UpdateAll = 110
ID = 0
GID = 1
Org = 2
Open = 3
SearchNumber = 4
UpdateName = 100
UpdateDate = 102
UpdateRoute = 103
UpdatePlan = 104
UpdateGID = 104
UpdateData = 105
UpdateAll = 110
)

type Network struct {
gorm.Model
GroupID uint `json:"group_id"`
NetworkType string `json:"network_type"`
Org string `json:"org"`
OrgEn string `json:"org_en"`
Postcode string `json:"postcode"`
Address string `json:"address"`
AddressEn string `json:"address_en"`
PI *bool `json:"pi"`
ASN string `json:"asn"`
RouteV4 string `json:"route_v4"`
RouteV6 string `json:"route_v6"`
V4Name string `json:"v4_name"`
V6Name string `json:"v6_name"`
IP []IP `json:"ip"`
Connection []connection.Connection `json:"connection"`
JPNICAdmin JPNICAdmin `json:"jpnic_admin"`
JPNICTech []JPNICTech `json:"jpnic_tech"`
Plan string `json:"plan"`
Open *bool `json:"open"`
Lock *bool `json:"lock"`
GroupID uint `json:"group_id"`
NetworkType string `json:"network_type"`
NetworkComment string `json:"network_comment"`
NetworkNumber uint `json:"network_number"`
Org string `json:"org"`
OrgEn string `json:"org_en"`
Postcode string `json:"postcode"`
Address string `json:"address"`
AddressEn string `json:"address_en"`
ASN string `json:"asn"`
RouteV4 string `json:"route_v4"`
RouteV6 string `json:"route_v6"`
V4Name string `json:"v4_name"`
V6Name string `json:"v6_name"`
IP []IP `json:"ip"`
Connection []connection.Connection `json:"connection"`
JPNICAdmin JPNICAdmin `json:"jpnic_admin"`
JPNICTech []JPNICTech `json:"jpnic_tech"`
Open *bool `json:"open"`
Lock *bool `json:"lock"`
}

type IP struct {
Expand Down Expand Up @@ -73,20 +74,22 @@ type JPNICTech struct {
}

type Input struct {
AdminID uint `json:"admin_id"`
TechID []uint `json:"tech_id"`
GroupID uint `json:"group_id"`
Org string `json:"org"`
OrgEn string `json:"org_en"`
Postcode string `json:"postcode"`
Address string `json:"address"`
AddressEn string `json:"address_en"`
RouteV4 string `json:"route_v4"`
RouteV6 string `json:"route_v6"`
PI bool `json:"pi"`
ASN string `json:"asn"`
IP *[]IPInput `json:"ip"`
Lock bool `json:"lock"`
AdminID uint `json:"admin_id"`
TechID []uint `json:"tech_id"`
GroupID uint `json:"group_id"`
NetworkType string `json:"network_type"`
NetworkComment string `json:"network_comment"`
Org string `json:"org"`
OrgEn string `json:"org_en"`
Postcode string `json:"postcode"`
Address string `json:"address"`
AddressEn string `json:"address_en"`
RouteV4 string `json:"route_v4"`
RouteV6 string `json:"route_v6"`
PI bool `json:"pi"` //廃止予定
ASN string `json:"asn"`
IP []IPInput `json:"ip"`
Lock bool `json:"lock"`
}

type IPInput struct {
Expand Down
1 change: 0 additions & 1 deletion pkg/api/core/group/network/v0/admin.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,6 @@ func AddAdmin(c *gin.Context) {
AddressEn: input.AddressEn,
RouteV4: input.RouteV4,
RouteV6: input.RouteV6,
PI: &[]bool{input.PI}[0],
ASN: input.ASN,
Open: &[]bool{false}[0],
IP: *grpIP,
Expand Down
60 changes: 46 additions & 14 deletions pkg/api/core/group/network/v0/check.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,8 @@ import (
)

func check(input network.Input) error {
// check
if input.RouteV4 == "" && input.RouteV6 == "" {
return fmt.Errorf("no data: route(v4 or v6)")
}
if input.PI {
if input.ASN == "" {
return fmt.Errorf("no data: ASN")
}
} else {
// L2,L3 Static, L3 BGP
if input.NetworkType == "2000" || input.NetworkType == "3S00" || input.NetworkType == "3B00" {
if input.Org == "" {
return fmt.Errorf("no data: Org")
}
Expand All @@ -31,22 +24,61 @@ func check(input network.Input) error {
if input.AddressEn == "" {
return fmt.Errorf("no data: Address(English)")
}
if len(*input.IP) == 0 {
if len(input.IP) == 0 {
return fmt.Errorf("no data: ip address data")
}
if input.AdminID == 0 {
return fmt.Errorf("no data: admin user")
}
if len(input.TechID) == 0 {
return fmt.Errorf("no data: tech user")
}
// 3B00 Service Code
if input.NetworkType == "3B00" {
if input.RouteV4 == "" && input.RouteV6 == "" {
return fmt.Errorf("no data: route information")
}
}

} else if input.NetworkType == "IP3B" {
if input.ASN == "" {
return fmt.Errorf("no data: ASN")
}
if len(input.IP) == 0 {
return fmt.Errorf("no data: ip address data")
}
if input.RouteV4 == "" && input.RouteV6 == "" {
return fmt.Errorf("no data: route(v4 or v6)")
}
if input.AdminID == 0 {
return fmt.Errorf("no data: admin user")
}
if len(input.TechID) == 0 {
return fmt.Errorf("no data: tech user")
}
//} else if input.NetworkType == "ET00" {
// if input.NetworkComment == "" {
// return fmt.Errorf("no data: comment")
// }
} else {
return fmt.Errorf("no data: invalid network type")
}

return nil
}

func ipCheck(ip network.IPInput) error {
func ipCheck(restrict bool, ip network.IPInput) error {

nowTime := time.Now()

if ip.Version != 4 && ip.Version != 6 {
return fmt.Errorf("invalid ip version")
}
if ip.Name == "" {
return fmt.Errorf("no network name")
// 厳格な場合
if restrict {
if ip.Name == "" {
return fmt.Errorf("no network name")
}
}

startDate, _ := time.Parse("2006-01-02", ip.StartDate)
Expand All @@ -65,7 +97,7 @@ func ipCheck(ip network.IPInput) error {
if ip.IP == "" {
return fmt.Errorf("invalid ipv4 address")
}
if ip.Plan == nil {
if restrict && ip.Plan == nil {
return fmt.Errorf("invalid plan data")
}
}
Expand Down
9 changes: 6 additions & 3 deletions pkg/api/core/group/network/v0/ip.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,12 @@ import (
func ipProcess(input network.Input) (*[]network.IP, error) {
var net []network.IP

for _, tmpIP := range *input.IP {
if err := ipCheck(tmpIP); err != nil {
for _, tmpIP := range input.IP {
restrict := true
if input.NetworkType == "IP3B" {
restrict = false
}
if err := ipCheck(restrict, tmpIP); err != nil {
return nil, err
}

Expand All @@ -30,6 +34,5 @@ func ipProcess(input network.Input) (*[]network.IP, error) {
Open: &[]bool{false}[0],
})
}

return &net, nil
}
34 changes: 21 additions & 13 deletions pkg/api/core/group/network/v0/jpnic.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"github.com/homenoc/dsbd-backend/pkg/api/core/group/network"
"github.com/homenoc/dsbd-backend/pkg/api/core/user"
dbUser "github.com/homenoc/dsbd-backend/pkg/api/store/user/v0"
"log"
)

type jpnicHandler struct {
Expand All @@ -16,35 +17,42 @@ type jpnicHandler struct {
}

func (jpnic *jpnicHandler) jpnicProcess() error {
log.Println(jpnic)
// 入力されたユーザのGroupIDを検索
resultGroupUser := dbUser.Get(user.GID, &user.User{GroupID: jpnic.groupID})
if resultGroupUser.Err != nil {
return resultGroupUser.Err
}

// 管理者連絡窓口
if jpnic.groupID != 0 {
for _, tmpUser := range resultGroupUser.User {
if tmpUser.GroupID != jpnic.admin {
return fmt.Errorf("This user have no authorization. ")
}
for _, tmpUser := range resultGroupUser.User {
if tmpUser.ID == jpnic.admin {
jpnic.jpnicAdmin = &network.JPNICAdmin{UserID: jpnic.admin, Lock: &[]bool{true}[0]}
break
}
}
jpnicAdmin := network.JPNICAdmin{UserID: jpnic.admin}
jpnic.jpnicAdmin = &jpnicAdmin

// groupIDに対してJPNICAdminが見つからなかった場合
if jpnic.jpnicAdmin == nil {
return fmt.Errorf("This user have no authorization. ")
}

// 技術連絡担当者
var jpnicTech []network.JPNICTech
for _, tmpTechUserID := range jpnic.tech {
// ユーザの権限確認
if jpnic.groupID != 0 {
for _, tmpUser := range resultGroupUser.User {
if tmpUser.GroupID != tmpTechUserID {
return fmt.Errorf("This user have no authorization. ")
}
for _, tmpUser := range resultGroupUser.User {
if tmpUser.ID == tmpTechUserID {
jpnicTech = append(jpnicTech, network.JPNICTech{UserID: jpnic.admin, Lock: &[]bool{true}[0]})
break
}
}
jpnicTech = append(jpnicTech, network.JPNICTech{UserID: jpnic.admin})
}

if jpnicTech == nil {
return fmt.Errorf("This user have no authorization. ")
}

jpnic.jpnicTech = &jpnicTech

return nil
Expand Down
Loading

0 comments on commit 6a59020

Please sign in to comment.