func (messageRouter *messageRouter) manageDrains(activeSinks *groupedsinks.GroupedSinks, appId string, drainUrls []string, sourceName string) { if sourceName != "App" { return } //delete all drains for app if len(drainUrls) == 0 { for _, sink := range activeSinks.DrainsFor(appId) { messageRouter.unregisterSink(sink, activeSinks) } return } //delete all drains that were not sent for _, sink := range activeSinks.DrainsFor(appId) { if contains(sink.Identifier(), drainUrls) { continue } messageRouter.unregisterSink(sink, activeSinks) } //add all drains that didn't exist for _, drainUrl := range drainUrls { if activeSinks.DrainFor(appId, drainUrl) == nil && !messageRouter.urlIsBlackListed(drainUrl) { dl, err := url.Parse(drainUrl) if err != nil { messageRouter.blacklistedURLS = append(messageRouter.blacklistedURLS, drainUrl) errorMessage := fmt.Sprintf("MessageRouter: Error when trying to parse syslog url %v. Requesting close. Err: %v", drainUrl, err) messageRouter.sendLoggregatorErrorMessage(errorMessage, appId) continue } ipNotBlacklisted, err := iprange.IpOutsideOfRanges(*dl, messageRouter.blackListIPs) if err != nil { messageRouter.blacklistedURLS = append(messageRouter.blacklistedURLS, drainUrl) errorMessage := fmt.Sprintf("MessageRouter: Error when trying to check syslog url %v against blacklist ip ranges. Requesting close. Err: %v", drainUrl, err) messageRouter.sendLoggregatorErrorMessage(errorMessage, appId) continue } if ipNotBlacklisted { sysLogger := sinks.NewSyslogWriter(dl.Scheme, dl.Host, appId, messageRouter.skipCertVerify) s := sinks.NewSyslogSink(appId, drainUrl, messageRouter.logger, sysLogger, messageRouter.errorChannel) ok := messageRouter.registerSink(s, activeSinks) if ok { go s.Run() } } else { messageRouter.blacklistedURLS = append(messageRouter.blacklistedURLS, drainUrl) errorMsg := fmt.Sprintf("MessageRouter: Syslog drain url is blacklisted: %s", drainUrl) messageRouter.sendLoggregatorErrorMessage(errorMsg, appId) } } } }
func (blacklistManager *URLBlacklistManager) CheckUrl(rawUrl string) (outputURL *url.URL, err error) { outputURL, err = url.Parse(rawUrl) if err != nil { return nil, err } ipNotBlacklisted, err := iprange.IpOutsideOfRanges(*outputURL, blacklistManager.blacklistIPs) if err != nil { return nil, err } if !ipNotBlacklisted { return nil, errors.New("Syslog Drain URL is blacklisted") } return outputURL, nil }