go-shield/server/itchart/intchart.go
2024-02-16 23:37:45 +02:00

183 lines
4.8 KiB
Go
Executable File

//package itchart
//
//import (
// "encoding/base64"
// "fmt"
// "github.com/techoner/gophp"
// "log"
// "net/netip"
// "server/internal"
// "strconv"
// "strings"
//)
//
//var (
// isDebugITChart bool
// SelfITChartMessage string
// SelfITChartSitename string
// SelfITChartRedirectPage string
// SelfNetworksExcludeLine string
//)
//
//func IntITChart(debug bool) {
// isDebugITChart = debug
// SelfITChartRedirectPage = internal.GetSocketInfoString("ITChartRedirectURL")
// SelfITChartRedirectPage = strings.ToLower(SelfITChartRedirectPage)
// SelfNetworksExcludeLine = internal.GetSocketInfoString("ITChartNetworkExclude")
//}
//
//func ChartThis(ipaddr, mac, username, protocol, sitename string) bool {
// SelfITChartSitename = sitename
// if strings.Index(SelfITChartRedirectPage, sitename) > -1 {
// if isDebugITChart {
// log.Printf("%s: [DEBUG]: <%s> is the redirected page, no sense to block it", ipaddr, sitename)
// }
// return false
// }
// if protocol == "CONNECT" {
// if isDebugITChart {
// log.Printf("%s: %s: [DEBUG] [%s] method excluded, PASS", ipaddr, sitename, protocol)
// }
// return false
// }
// if isNetExcluded(SelfNetworksExcludeLine, ipaddr, mac) {
// log.Printf("%s: [DEBUG] isNetExcluded report True, PASS", ipaddr)
// return false
// }
// keyAccount := findKeyAccount(username, ipaddr, mac)
// if isDebugITChart {
// log.Printf("%s: [DEBUG] [%s]: username=%s ipaddr=%s mac=%s sitename=%s method=%s ->get_itcharts_ids()", sitename, keyAccount, username, ipaddr, mac, sitename, protocol)
// }
//
// itChartIDs := getITChartIDs()
// if len(itChartIDs) == 0 {
// if isDebugITChart {
// log.Printf("%s: [DEBUG] [%s] PASS: No IT Chart available in configuration", sitename, keyAccount)
// }
// return false
// }
// for id, _ := range itChartIDs {
// keyMem := fmt.Sprintf("%s|%s", keyAccount, id)
// keyAD := fmt.Sprintf("itchart.activedirtectory.%s", id)
// keyToError := base64.StdEncoding.EncodeToString([]byte(fmt.Sprintf("%s|%s|%s|%s", keyAccount, id, protocol, sitename)))
// timestamp, _ := strconv.Atoi(internal.RedisGet(keyMem))
// if timestamp > 0 {
// continue
// }
// if len(username) > 0 {
// adFilters := internal.RedisGet(keyAD)
// if len(adFilters) > 0 {
// if isDebugITChart {
// log.Printf("%s: [DEBUG] Checking ITCharter AD filters [%s] = %s", keyAccount, keyAD, len(adFilters))
// }
// }
//
// }
//
// }
// return false
//}
//
//func getITChartIDs() map[string]bool {
// //TODO finish it
// results := map[string]bool{}
// data, _ := base64.StdEncoding.DecodeString(internal.RedisGet("itcharts.ids"))
// if len(data) < 3 {
// if isDebugITChart {
// log.Printf("%s: [DEBUG]: get_itcharts_ids no more data [SKIP]", SelfITChartSitename)
// }
// return results
// }
// out, err := gophp.Unserialize([]byte(data))
// if err != nil {
// if isDebugITChart {
// log.Printf("error Unserialize itcharts.ids: ", err)
// }
// return results
// }
// if mout, ok := out.(map[string]interface{}); ok {
// for x, data := range mout {
// results[x] = data.(bool)
// }
// } else {
// if isDebugITChart {
// log.Printf("%s: [DEBUG] ERROR <%s>", SelfITChartSitename, err)
// }
// return results
// }
// if isDebugITChart {
// log.Printf("%s: [DEBUG]: get_itcharts_ids array of %d items", SelfITChartSitename, len(results))
// }
// return results
//}
//
//func findKeyAccount(username, ipaddr, mac string) string {
// if username == "-" {
// username = ""
// }
// if ipaddr == "-" {
// ipaddr = ""
// }
// if ipaddr == "127.0.0.1" {
// ipaddr = ""
// }
// if mac == "-" {
// mac = ""
// }
// if mac == "00:00:00:00:00:00" {
// mac = ""
// }
// if len(username) > 3 {
// return username
// }
// if len(mac) > 3 {
// return mac
// }
// if len(ipaddr) > 3 {
// return ipaddr
// }
// return ""
//}
//
//func isNetExcluded(network, ipaddr, mac string) bool {
// if network == "" {
// if isDebugITChart {
// log.Printf("%s: [DEBUG]: isNetExcluded None, aborting", SelfITChartSitename)
// }
// return false
// }
// if len(network) < 3 {
// if isDebugITChart {
// log.Printf("%s: [DEBUG]: isNetExcluded Not configured, aborting", SelfITChartSitename)
// }
// return false
// }
// net := strings.Split(network, "\n")
// for _, cdir := range net {
// if isDebugITChart {
// log.Printf("%s: [DEBUG]: isNetExcluded checking %s against %s %s", SelfITChartSitename, cdir, ipaddr, mac)
// }
// if mac == cdir {
// return true
// }
// if ipaddr == cdir {
// return true
// }
// network, err := netip.ParsePrefix(cdir)
// if err != nil {
// panic(err)
// }
// ip, err := netip.ParseAddr(ipaddr)
// if err != nil {
// panic(err)
// }
// if network.Contains(ip) {
// if isDebugITChart {
// log.Printf("%s: [DEBUG]: isNetExcluded checking %s matches %s", SelfITChartSitename, cdir, ipaddr)
// }
// return true
// }
// }
// return false
//}