Merge branch 'master' of github.com:apid/apid-core into bug67694505
diff --git a/util/.util.go.swp b/util/.util.go.swp
new file mode 100644
index 0000000..da82acd
--- /dev/null
+++ b/util/.util.go.swp
Binary files differ
diff --git a/util/util.go b/util/util.go
index ad936ff..0ae4108 100644
--- a/util/util.go
+++ b/util/util.go
@@ -14,12 +14,26 @@
 
 package util
 
+
 import (
 	"github.com/google/uuid"
 	"net/http"
+	"net/url"
 	"time"
+	"github.com/apid/apid-core"
 )
 
+const (
+	configfwdProxyURL	=   "configfwdProxyURL"
+	configfwdProxyUser	=   "configfwdProxyUser"
+	configfwdProxyPasswd	=   "configfwdProxyPasswd"
+	configfwdProxyProtocol  =   "configfwdProxyProtocol"
+	configfwdProxyPort      =   "configfwdProxyPort"
+)
+
+var config apid.ConfigService
+
+
 func IsValidUUID(id string) bool {
 	_, err := uuid.Parse(id)
 	return err == nil
@@ -29,6 +43,41 @@
 	return uuid.New().String()
 }
 
+// Returns the http.Transport with Forward Proxy params set (if Configured).
+func Transport() *http.Transport {
+	var tr http.Transport
+	var pURL *url.URL
+	var err error
+	// Apigee Forward Proxy
+	fwdPrxy := config.GetString(configfwdProxyURL)
+	fwdPrxyPro := config.GetString(configfwdProxyProtocol)
+	fwdPrxyUser := config.GetString(configfwdProxyUser)
+	fwdPrxyPass := config.GetString(configfwdProxyPasswd)
+	fwdPrxyPort := config.GetString(configfwdProxyPort)
+
+	if fwdPrxy != "" && fwdPrxyPro != "" && fwdPrxyUser != "" && fwdPrxyPort != "" {
+		pURL, err = url.Parse(fwdPrxyPro + "//" + fwdPrxyUser + ":" + fwdPrxyPass + "@" + fwdPrxy + ":" + fwdPrxyPort)
+		if err != nil {
+			panic("Error parsing proxy URL")
+		}
+	} else if fwdPrxy != "" && fwdPrxyPro != "" && fwdPrxyPort != "" {
+		pURL, err = url.Parse(fwdPrxyPro + "//" + fwdPrxy + ":" + fwdPrxyPort)
+		if err != nil {
+			panic("Error parsing proxy URL")
+		}
+	}
+
+	if pURL != nil {
+		tr = http.Transport{
+			Proxy:           http.ProxyURL(pURL),
+		}
+	} else {
+		tr = http.Transport{
+		}
+	}
+	return &tr
+}
+
 // distributeEvents() receives elements from deliverChan, and send them to subscribers
 // Sending a `chan interface{}` to addSubscriber adds a new subscriber.
 // It closes the subscriber channel after sending the element.