fix private subnets bug

This commit is contained in:
sunyu 2020-09-25 14:48:44 +08:00
parent 2b7a8d01c7
commit a89fb34555
5 changed files with 52 additions and 15 deletions

View file

@ -157,6 +157,12 @@ func NewClient() echo.HandlerFunc {
return c.JSON(http.StatusBadRequest, jsonHTTPResponse{false, "Allowed IPs must be in CIDR format"}) return c.JSON(http.StatusBadRequest, jsonHTTPResponse{false, "Allowed IPs must be in CIDR format"})
} }
// validate the input PrivateSubnets
if util.ValidatePrivateSubnets(client.PrivateSubnets) == false {
log.Warnf("Invalid Private Subnets input from user: %v", client.PrivateSubnets)
return c.JSON(http.StatusBadRequest, jsonHTTPResponse{false, "Private Subnets must be in CIDR format"})
}
// gen ID // gen ID
guid := xid.New() guid := xid.New()
client.ID = guid.String() client.ID = guid.String()
@ -180,6 +186,14 @@ func NewClient() echo.HandlerFunc {
client.CreatedAt = time.Now().UTC() client.CreatedAt = time.Now().UTC()
client.UpdatedAt = client.CreatedAt client.UpdatedAt = client.CreatedAt
client.HasPrivateSubnet = false
for _, privateSubnet := range client.PrivateSubnets {
if privateSubnet != "" {
client.HasPrivateSubnet = true
}
}
// write client to the database // write client to the database
db.Write("clients", client.ID, client) db.Write("clients", client.ID, client)
log.Infof("Created wireguard client: %v", client) log.Infof("Created wireguard client: %v", client)
@ -229,14 +243,28 @@ func UpdateClient() echo.HandlerFunc {
return c.JSON(http.StatusBadRequest, jsonHTTPResponse{false, "Allowed IPs must be in CIDR format"}) return c.JSON(http.StatusBadRequest, jsonHTTPResponse{false, "Allowed IPs must be in CIDR format"})
} }
// validate the input PrivateSubnets
if util.ValidatePrivateSubnets(_client.PrivateSubnets) == false {
log.Warnf("Invalid Private Subnets input from user: %v", _client.PrivateSubnets)
return c.JSON(http.StatusBadRequest, jsonHTTPResponse{false, "Private Subnets must be in CIDR format"})
}
// map new data // map new data
client.Name = _client.Name client.Name = _client.Name
client.Email = _client.Email client.Email = _client.Email
client.Enabled = _client.Enabled client.Enabled = _client.Enabled
client.AllocatedIPs = _client.AllocatedIPs client.AllocatedIPs = _client.AllocatedIPs
client.AllowedIPs = _client.AllowedIPs client.AllowedIPs = _client.AllowedIPs
client.PrivateSubnets = _client.PrivateSubnets
client.UpdatedAt = time.Now().UTC() client.UpdatedAt = time.Now().UTC()
client.HasPrivateSubnet = false
for _, privateSubnet := range client.PrivateSubnets {
if privateSubnet != "" {
client.HasPrivateSubnet = true
}
}
// write to the database // write to the database
db.Write("clients", client.ID, &client) db.Write("clients", client.ID, &client)
log.Infof("Updated client information successfully => %v", client) log.Infof("Updated client information successfully => %v", client)

View file

@ -6,18 +6,19 @@ import (
// Client model // Client model
type Client struct { type Client struct {
ID string `json:"id"` ID string `json:"id"`
PrivateKey string `json:"private_key"` PrivateKey string `json:"private_key"`
PublicKey string `json:"public_key"` PublicKey string `json:"public_key"`
PresharedKey string `json:"preshared_key"` PresharedKey string `json:"preshared_key"`
Name string `json:"name"` Name string `json:"name"`
Email string `json:"email"` Email string `json:"email"`
AllocatedIPs []string `json:"allocated_ips"` AllocatedIPs []string `json:"allocated_ips"`
AllowedIPs []string `json:"allowed_ips"` AllowedIPs []string `json:"allowed_ips"`
PrivateSubnets []string `json:"private_subnets"` HasPrivateSubnet bool `json:"hasPrivateSubnet"`
Enabled bool `json:"enabled"` PrivateSubnets []string `json:"private_subnets"`
CreatedAt time.Time `json:"created_at"` Enabled bool `json:"enabled"`
UpdatedAt time.Time `json:"updated_at"` CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
} }
// ClientData includes the Client and extra data // ClientData includes the Client and extra data

View file

@ -154,7 +154,7 @@
value="0.0.0.0/0"> value="0.0.0.0/0">
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="client_private_subnets" class="control-label">Allowed IPs</label> <label for="client_private_subnets" class="control-label">Private Subnets</label>
<input type="text" data-role="tagsinput" class="form-control" id="client_private_subnets"> <input type="text" data-role="tagsinput" class="form-control" id="client_private_subnets">
</div> </div>
<div class="form-group"> <div class="form-group">

View file

@ -20,5 +20,5 @@ PostDown = {{ .serverConfig.Interface.PostDown }}
[Peer] [Peer]
PublicKey = {{ .Client.PublicKey }} PublicKey = {{ .Client.PublicKey }}
PresharedKey = {{ .Client.PresharedKey }} PresharedKey = {{ .Client.PresharedKey }}
AllowedIPs = {{$first :=true}}{{range .Client.AllocatedIPs }}{{if $first}}{{$first = false}}{{else}},{{end}}{{.}}{{end}}{{if .Client.PrivateSubnets}},{{end}}{{$first :=true}}{{range .Client.PrivateSubnets }}{{if $first}}{{$first = false}}{{else}},{{end}}{{.}}{{end}} AllowedIPs = {{$first :=true}}{{range .Client.AllocatedIPs }}{{if $first}}{{$first = false}}{{else}},{{end}}{{.}}{{end}}{{if eq .Client.HasPrivateSubnet true}},{{$first :=true}}{{range .Client.PrivateSubnets }}{{if $first}}{{$first = false}}{{else}},{{end}}{{.}}{{end}}{{end}}
{{end}}{{end}} {{end}}{{end}}

View file

@ -57,7 +57,7 @@ func ValidateCIDR(cidr string) bool {
// ValidateCIDRList to validate a list of network CIDR // ValidateCIDRList to validate a list of network CIDR
func ValidateCIDRList(cidrs []string) bool { func ValidateCIDRList(cidrs []string) bool {
for _, cidr := range cidrs { for _, cidr := range cidrs {
if ValidateCIDR(cidr) == false { if cidr != "" && ValidateCIDR(cidr) == false {
return false return false
} }
} }
@ -72,6 +72,14 @@ func ValidateAllowedIPs(cidrs []string) bool {
return true return true
} }
// ValidatePrivateSubnets to validate allowed ip addresses in CIDR format
func ValidatePrivateSubnets(cidrs []string) bool {
if ValidateCIDRList(cidrs) == false {
return false
}
return true
}
// ValidateServerAddresses to validate allowed ip addresses in CIDR format // ValidateServerAddresses to validate allowed ip addresses in CIDR format
func ValidateServerAddresses(cidrs []string) bool { func ValidateServerAddresses(cidrs []string) bool {
if ValidateCIDRList(cidrs) == false { if ValidateCIDRList(cidrs) == false {