Browse Source

Add partner addres validation

Now service exit when:
- Domain name instead IP address used as an argument
with `-d` key.
- Port number greater than 65535 IPv4 max port numbers (unsigned 16 bit
int)
- When an endpoint specified by IP:port argument
main
Дмитрий 3 years ago
parent
commit
bdde8c4906
  1. 12
      Makefile
  2. 14
      src/client_server/validators.go
  3. 15
      src/main.go

12
Makefile

@ -1,5 +1,17 @@
run: run:
go run src/main.go -p 5053 -d "127.0.0.1:5059" go run src/main.go -p 5053 -d "127.0.0.1:5059"
test-ip:
go run src/main.go -p 5053 -d "127.0.0.1:5059,localhost:5059"
test-port:
go run src/main.go -p 5053 -d "127.0.0.1:5059,127.0.0.1:as"
test-port-max:
go run src/main.go -p 5053 -d "127.0.0.1:5059,127.0.0.1:65537"
test-port-endpoint:
go run src/main.go -p 5053 -d "127.0.0.1:9001/bid_request"
build: build:
go build -o bin/simple-choose-ad src/main.go go build -o bin/simple-choose-ad src/main.go

14
src/client_server/validators.go

@ -10,6 +10,8 @@ import (
"strings" "strings"
) )
const MAX_PORT_NUM = 65535
// Returns false if ipv4 `correct`. // Returns false if ipv4 `correct`.
func wrongIPAddresFormat(ipv4 string) bool { func wrongIPAddresFormat(ipv4 string) bool {
re, err := regexp.Compile(`^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$`) re, err := regexp.Compile(`^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$`)
@ -24,6 +26,8 @@ func throwHTTPError(err_text string, code int, w *http.ResponseWriter) {
log.Printf("Error: %d %v\n", code, err_text) log.Printf("Error: %d %v\n", code, err_text)
} }
// Wait string in format "10.10.10.10:8080", where `10.10.10.10` IPv4,
// and `8080` port. If ip or port has wrong format, returns error.
func ParsePartnersAddress(ipAndPort string) (string, int64, error) { func ParsePartnersAddress(ipAndPort string) (string, int64, error) {
var err error var err error
iap := strings.Split(ipAndPort, ":") iap := strings.Split(ipAndPort, ":")
@ -33,6 +37,14 @@ func ParsePartnersAddress(ipAndPort string) (string, int64, error) {
err = errors.New(fmt.Sprintf("Wrong ip address format in partner ip: %v", ip)) err = errors.New(fmt.Sprintf("Wrong ip address format in partner ip: %v", ip))
} }
port, _ := strconv.ParseInt(iap[1], 10, 32) port, e := strconv.ParseInt(iap[1], 10, 32)
if e != nil {
err = errors.New(fmt.Sprintf("Wrong port format in partner ip: %v", e))
}
if port > MAX_PORT_NUM {
err = errors.New(fmt.Sprintf("Wrong port in partner ip: grater than %v", MAX_PORT_NUM))
}
return ip, port, err return ip, port, err
} }

15
src/main.go

@ -1,16 +1,14 @@
/* /*
Usage: Usage:
sample-choose-ad [flags] sample-choose-ad [flags]
The flags are: The flags are:
-p
Listening port
-d
Adversment partners list in format ip_p1:port,ip_p2:port2...ip_p10:port
-p
Listening port
-d
Adversment partners list in format ip_p1:port,ip_p2:port2...ip_p10:port
*/ */
package main package main
@ -49,8 +47,7 @@ func main() {
ip, port, err := clientserver.ParsePartnersAddress(p) ip, port, err := clientserver.ParsePartnersAddress(p)
if err != nil { if err != nil {
log.Println(err) log.Fatalln(err)
continue
} }
partners = append(partners, customtypes.PartnersAddress{ partners = append(partners, customtypes.PartnersAddress{

Loading…
Cancel
Save