Fixed TLS for ICCC

Added the hostname of the public server in order to send ICCC messages over TLS and HTTP/2
This commit is contained in:
Thorsten Sommer 2016-03-16 12:26:48 +01:00
parent 4ef6e64a45
commit 50f4836e44
7 changed files with 61 additions and 47 deletions

View File

@ -21,6 +21,7 @@ func checkConfiguration() {
CheckSingleConfigurationPresentsAndAddIfMissing(`AdminWebServerWriteTimeoutSeconds`, `10`) CheckSingleConfigurationPresentsAndAddIfMissing(`AdminWebServerWriteTimeoutSeconds`, `10`)
CheckSingleConfigurationPresentsAndAddIfMissing(`AdminWebServerMaxHeaderLenBytes`, `10485760`) CheckSingleConfigurationPresentsAndAddIfMissing(`AdminWebServerMaxHeaderLenBytes`, `10485760`)
CheckSingleConfigurationPresentsAndAddIfMissing(`PublicWebServerPort`, `50000`) CheckSingleConfigurationPresentsAndAddIfMissing(`PublicWebServerPort`, `50000`)
CheckSingleConfigurationPresentsAndAddIfMissing(`PublicWebServerHostname`, `www.my-site.domain`)
CheckSingleConfigurationPresentsAndAddIfMissing(`PublicWebServerReadTimeoutSeconds`, `10`) CheckSingleConfigurationPresentsAndAddIfMissing(`PublicWebServerReadTimeoutSeconds`, `10`)
CheckSingleConfigurationPresentsAndAddIfMissing(`PublicWebServerWriteTimeoutSeconds`, `10`) CheckSingleConfigurationPresentsAndAddIfMissing(`PublicWebServerWriteTimeoutSeconds`, `10`)
CheckSingleConfigurationPresentsAndAddIfMissing(`PublicWebServerMaxHeaderLenBytes`, `1048576`) CheckSingleConfigurationPresentsAndAddIfMissing(`PublicWebServerMaxHeaderLenBytes`, `1048576`)

View File

@ -2,9 +2,11 @@ package ICCC
import ( import (
"container/list" "container/list"
"github.com/SommerEngineering/Ocean/ConfigurationDB"
"github.com/SommerEngineering/Ocean/Log" "github.com/SommerEngineering/Ocean/Log"
LM "github.com/SommerEngineering/Ocean/Log/Meta" LM "github.com/SommerEngineering/Ocean/Log/Meta"
"github.com/SommerEngineering/Ocean/Tools" "github.com/SommerEngineering/Ocean/Tools"
"strings"
) )
// Init this package. // Init this package.
@ -22,6 +24,13 @@ func init() {
// Using the local IP address: // Using the local IP address:
correctAddressWithPort = Tools.LocalIPAddressAndPort() correctAddressWithPort = Tools.LocalIPAddressAndPort()
// Determine the correct protocol:
if publicTLSEnabled := ConfigurationDB.Read(`PublicWebServerUseTLS`); strings.ToLower(publicTLSEnabled) == `true` {
activeProtocol = "https://"
} else {
activeProtocol = "http://"
}
// Init the database: // Init the database:
initDB() initDB()

View File

@ -1,45 +1,47 @@
package ICCC package ICCC
import ( import (
"fmt" "fmt"
"github.com/SommerEngineering/Ocean/ICCC/Scheme" "github.com/SommerEngineering/Ocean/ConfigurationDB"
"github.com/SommerEngineering/Ocean/Log" "github.com/SommerEngineering/Ocean/ICCC/Scheme"
LM "github.com/SommerEngineering/Ocean/Log/Meta" "github.com/SommerEngineering/Ocean/Log"
"gopkg.in/mgo.v2/bson" LM "github.com/SommerEngineering/Ocean/Log/Meta"
) "gopkg.in/mgo.v2/bson"
)
// The internal function to register an listener to ICCC.
func registerListener2Database(channel, command, ipAddressPort string, isActive bool, kind byte) { // The internal function to register an listener to ICCC.
Log.LogShort(senderName, LM.CategorySYSTEM, LM.LevelINFO, LM.MessageNameSTARTUP, `Register this ICCC command in to the database.`, `channel=`+channel, `command=`+command, `IPAddressPort=`+ipAddressPort, fmt.Sprintf("isActive=%v", isActive)) func registerListener2Database(channel, command, ipAddressPort string, isActive bool, kind byte) {
Log.LogShort(senderName, LM.CategorySYSTEM, LM.LevelINFO, LM.MessageNameSTARTUP, `Register this ICCC command in to the database.`, `channel=`+channel, `command=`+command, `IPAddressPort=`+ipAddressPort, fmt.Sprintf("isActive=%v", isActive), `Hostname=`+ConfigurationDB.Read(`PublicWebServerHostname`))
entry := Scheme.Listener{}
entry.Channel = channel entry := Scheme.Listener{}
entry.Command = command entry.Channel = channel
entry.IsActive = isActive entry.Command = command
entry.IPAddressPort = ipAddressPort entry.IsActive = isActive
entry.Kind = kind entry.IPAddressPort = ipAddressPort
entry.Kind = kind
// entry.Hostname = ConfigurationDB.Read(`PublicWebServerHostname`)
// Case: Exists?
// //
selection := bson.D{{`Channel`, channel}, {`Command`, command}, {`IPAddressPort`, ipAddressPort}} // Case: Exists?
count1, _ := collectionListener.Find(selection).Count() //
if count1 == 1 { selection := bson.D{{`Channel`, channel}, {`Command`, command}, {`IPAddressPort`, ipAddressPort}, {`Hostname`, entry.Hostname}}
// count1, _ := collectionListener.Find(selection).Count()
// Case: Exist but maybe not active if count1 == 1 {
// //
collectionListener.Update(selection, entry) // Case: Exist but maybe not active
Log.LogShort(senderName, LM.CategorySYSTEM, LM.LevelINFO, LM.MessageNameCONFIGURATION, `Updating the existing ICCC command.`, `channel=`+channel, `command=`+command, `IPAddressPort=`+ipAddressPort) //
return collectionListener.Update(selection, entry)
} Log.LogShort(senderName, LM.CategorySYSTEM, LM.LevelINFO, LM.MessageNameCONFIGURATION, `Updating the existing ICCC command.`, `channel=`+channel, `command=`+command, `IPAddressPort=`+ipAddressPort, `Hostname=`+ConfigurationDB.Read(`PublicWebServerHostname`))
return
// }
// Case: Not exist
// //
Log.LogFull(senderName, LM.CategorySYSTEM, LM.LevelWARN, LM.SeverityCritical, LM.ImpactNone, LM.MessageNameCONFIGURATION, `This ICCC command is not known.`, `Create now a new entry!`, `channel=`+channel, `command=`+command, `IPAddressPort=`+ipAddressPort) // Case: Not exist
if err := collectionListener.Insert(entry); err != nil { //
Log.LogFull(senderName, LM.CategorySYSTEM, LM.LevelERROR, LM.SeverityCritical, LM.ImpactCritical, LM.MessageNameDATABASE, `It was not possible to add this ICCC command!`, err.Error(), `channel=`+channel, `command=`+command, `IPAddressPort=`+ipAddressPort) Log.LogFull(senderName, LM.CategorySYSTEM, LM.LevelWARN, LM.SeverityCritical, LM.ImpactNone, LM.MessageNameCONFIGURATION, `This ICCC command is not known.`, `Create now a new entry!`, `channel=`+channel, `command=`+command, `IPAddressPort=`+ipAddressPort, `Hostname=`+ConfigurationDB.Read(`PublicWebServerHostname`))
} else { if err := collectionListener.Insert(entry); err != nil {
Log.LogShort(senderName, LM.CategorySYSTEM, LM.LevelINFO, LM.MessageNameCONFIGURATION, `This ICCC command is now known and active.`, `channel=`+channel, `command=`+command, `IPAddressPort=`+ipAddressPort) Log.LogFull(senderName, LM.CategorySYSTEM, LM.LevelERROR, LM.SeverityCritical, LM.ImpactCritical, LM.MessageNameDATABASE, `It was not possible to add this ICCC command!`, err.Error(), `channel=`+channel, `command=`+command, `IPAddressPort=`+ipAddressPort, `Hostname=`+ConfigurationDB.Read(`PublicWebServerHostname`))
} } else {
} Log.LogShort(senderName, LM.CategorySYSTEM, LM.LevelINFO, LM.MessageNameCONFIGURATION, `This ICCC command is now known and active.`, `channel=`+channel, `command=`+command, `IPAddressPort=`+ipAddressPort, `Hostname=`+ConfigurationDB.Read(`PublicWebServerHostname`))
}
}

View File

@ -7,4 +7,5 @@ type Listener struct {
IsActive bool `bson:"IsActive"` IsActive bool `bson:"IsActive"`
IPAddressPort string `bson:"IPAddressPort"` IPAddressPort string `bson:"IPAddressPort"`
Kind byte `bson:"Kind"` Kind byte `bson:"Kind"`
Hostname string `bson:"Hostname"`
} }

View File

@ -16,7 +16,7 @@ func sendMessage(listener Scheme.Listener, data map[string][]string) (result map
valuesHTTP := signMessage(data) valuesHTTP := signMessage(data)
// Try to deliver the message: // Try to deliver the message:
if response, err := http.PostForm(`http://`+listener.IPAddressPort+`/ICCC`, valuesHTTP); err != nil { if response, err := http.PostForm(activeProtocol+listener.Hostname+`/ICCC`, valuesHTTP); err != nil {
// Case: Was not possible to deliver. // Case: Was not possible to deliver.
Log.LogFull(senderName, LM.CategorySYSTEM, LM.LevelERROR, LM.SeverityCritical, LM.ImpactUnknown, LM.MessageNameNETWORK, `Was not able to send the ICCC message.`, err.Error()) Log.LogFull(senderName, LM.CategorySYSTEM, LM.LevelERROR, LM.SeverityCritical, LM.ImpactUnknown, LM.MessageNameNETWORK, `Was not able to send the ICCC message.`, err.Error())
} else { } else {

View File

@ -37,4 +37,5 @@ var (
startCacheTimerLock sync.Mutex = sync.Mutex{} // Mutex for the start timer startCacheTimerLock sync.Mutex = sync.Mutex{} // Mutex for the start timer
cacheTimerRunning bool = false // Is the timer running? cacheTimerRunning bool = false // Is the timer running?
correctAddressWithPort string = `` // The IP address and port of the this local server correctAddressWithPort string = `` // The IP address and port of the this local server
activeProtocol string = `http://`
) )

View File

@ -1,5 +1,5 @@
package Version package Version
var ( var (
oceansVersion string = `2.1.0` // Ocean's current version oceansVersion string = `2.1.1` // Ocean's current version
) )