package network
import (
"fmt"
"net/http"
"github.com/xssed/owlcache/cache"
owlconfig "github.com/xssed/owlcache/config"
owllog "github.com/xssed/owlcache/log"
owlsystem "github.com/xssed/owlcache/system"
)
func startHTTP() {
addr := owlconfig.OwlConfigModel.Host + ":" + owlconfig.OwlConfigModel.Httpport
http.HandleFunc("/data/", Exe)
http.HandleFunc("/group_data/", GroupExe)
if owlconfig.OwlConfigModel.Open_Urlcache == "1" {
fmt.Println("owlcache url cache service running...")
http.HandleFunc("/uc/", UCExe)
}
http.HandleFunc("/server/", Server)
if owlconfig.OwlConfigModel.Open_Urlcache == "1" && owlconfig.OwlConfigModel.Urlcache_Request_Easy == "1" {
fmt.Println("owlcache url cache easy access running...")
http.HandleFunc("/", UCExe)
} else {
http.HandleFunc("/", IndexPage)
}
if owlconfig.OwlConfigModel.Open_Websocket_Server == "1" {
fmt.Println("owlcache websocket server running...")
http.HandleFunc("/ws", serveWS)
if owlconfig.OwlConfigModel.GroupData_Mode == "Websocket" {
BaseWSCGroupCache = cache.NewCache("WSCGroup")
fmt.Println("owlcache websocket client running...")
startWebSocketClient()
}
}
var err error
if owlconfig.OwlConfigModel.Open_Https == "1" {
owllog.OwlLogRun.Info("Creating HTTPS server with address:" + addr)
err = http.ListenAndServeTLS(addr, owlconfig.OwlConfigModel.Https_CertFile, owlconfig.OwlConfigModel.Https_KeyFile, &ServerEntity{handler: http.DefaultServeMux})
} else if owlconfig.OwlConfigModel.Open_Https == "0" {
owllog.OwlLogRun.Info("Creating HTTP server with address:" + addr)
err = http.ListenAndServe(addr, &ServerEntity{handler: http.DefaultServeMux})
} else {
err = ErrorOpenHttpsSelected
}
if err != nil {
owllog.OwlLogRun.Fatal("Error starting HTTP server.", err)
}
}
func Exe(w http.ResponseWriter, r *http.Request) {
owlhandler := NewOwlHandler()
owlhandler.owlrequest.HTTPReceive(w, r)
owlhandler.HTTPHandle(w, r)
var print []byte
w, print = owlhandler.ToHttp(w)
w.WriteHeader(int(owlhandler.owlresponse.Status))
w.Write(print)
}
func GroupExe(w http.ResponseWriter, r *http.Request) {
owlhandler := NewOwlHandler()
owlhandler.owlrequest.HTTPReceive(w, r)
owlhandler.HTTPGroupDataHandle(w, r)
var print []byte
w, print = owlhandler.ToGroupHttp(w, r)
w.WriteHeader(int(owlhandler.owlresponse.Status))
w.Write(print)
}
func UCExe(w http.ResponseWriter, r *http.Request) {
owlhandler := NewOwlHandler()
owlhandler.owlrequest.HTTPReceive(w, r)
var print []byte
w, print = owlhandler.UCDataHandle(w, r)
w.Write(print)
}
func Server(w http.ResponseWriter, r *http.Request) {
owlservergrouphandler := NewOwlServerGroupHandler()
owlservergrouphandler.owlservergrouprequest.HTTPReceive(w, r)
if r.FormValue("group_type") == "gossip" {
owlservergrouphandler.HTTPServerGroupHandle(w, r)
} else {
owlservergrouphandler.HTTPServerHandle(w, r)
}
var print []byte
w, print = owlservergrouphandler.HttpGroupGetKeyInfoToString(w)
w.Write(print)
}
func IndexPage(w http.ResponseWriter, r *http.Request) {
owlsystem.HttpSayHello(w, r)
}