3
0
mirror of https://github.com/ergochat/ergo.git synced 2024-11-10 22:19:31 +01:00

DLINE: Save name of the banning oper

This commit is contained in:
Daniel Oaks 2017-11-19 10:27:40 +10:00
parent 8036df92fc
commit dedb029272
2 changed files with 25 additions and 11 deletions

View File

@ -49,6 +49,8 @@ type IPBanInfo struct {
Reason string `json:"reason"` Reason string `json:"reason"`
// OperReason is an oper ban reason. // OperReason is an oper ban reason.
OperReason string `json:"oper_reason"` OperReason string `json:"oper_reason"`
// OperName is the oper who set the ban.
OperName string `json:"oper_name"`
// Time holds details about the duration, if it exists. // Time holds details about the duration, if it exists.
Time *IPRestrictTime `json:"time"` Time *IPRestrictTime `json:"time"`
} }
@ -113,7 +115,7 @@ func (dm *DLineManager) AllBans() map[string]IPBanInfo {
} }
// AddNetwork adds a network to the blocked list. // AddNetwork adds a network to the blocked list.
func (dm *DLineManager) AddNetwork(network net.IPNet, length *IPRestrictTime, reason string, operReason string) { func (dm *DLineManager) AddNetwork(network net.IPNet, length *IPRestrictTime, reason, operReason, operName string) {
netString := network.String() netString := network.String()
dln := dLineNet{ dln := dLineNet{
Network: network, Network: network,
@ -121,6 +123,7 @@ func (dm *DLineManager) AddNetwork(network net.IPNet, length *IPRestrictTime, re
Time: length, Time: length,
Reason: reason, Reason: reason,
OperReason: operReason, OperReason: operReason,
OperName: operName,
}, },
} }
dm.Lock() dm.Lock()
@ -137,7 +140,7 @@ func (dm *DLineManager) RemoveNetwork(network net.IPNet) {
} }
// AddIP adds an IP address to the blocked list. // AddIP adds an IP address to the blocked list.
func (dm *DLineManager) AddIP(addr net.IP, length *IPRestrictTime, reason string, operReason string) { func (dm *DLineManager) AddIP(addr net.IP, length *IPRestrictTime, reason, operReason, operName string) {
addrString := addr.String() addrString := addr.String()
dla := dLineAddr{ dla := dLineAddr{
Address: addr, Address: addr,
@ -145,6 +148,7 @@ func (dm *DLineManager) AddIP(addr net.IP, length *IPRestrictTime, reason string
Time: length, Time: length,
Reason: reason, Reason: reason,
OperReason: operReason, OperReason: operReason,
OperName: operName,
}, },
} }
dm.Lock() dm.Lock()
@ -232,7 +236,7 @@ func dlineHandler(server *Server, client *Client, msg ircmsg.IrcMessage) bool {
} }
for key, info := range bans { for key, info := range bans {
client.Notice(fmt.Sprintf("Ban - %s - %s", key, info.BanMessage("%s"))) client.Notice(fmt.Sprintf("Ban - %s - added by %s - %s", key, info.OperName, info.BanMessage("%s")))
} }
return false return false
@ -319,6 +323,10 @@ func dlineHandler(server *Server, client *Client, msg ircmsg.IrcMessage) bool {
} }
} }
} }
operName := client.operName
if operName == "" {
operName = server.name
}
// assemble ban info // assemble ban info
var banTime *IPRestrictTime var banTime *IPRestrictTime
@ -332,6 +340,7 @@ func dlineHandler(server *Server, client *Client, msg ircmsg.IrcMessage) bool {
info := IPBanInfo{ info := IPBanInfo{
Reason: reason, Reason: reason,
OperReason: operReason, OperReason: operReason,
OperName: operName,
Time: banTime, Time: banTime,
} }
@ -356,18 +365,18 @@ func dlineHandler(server *Server, client *Client, msg ircmsg.IrcMessage) bool {
} }
if hostNet == nil { if hostNet == nil {
server.dlines.AddIP(hostAddr, banTime, reason, operReason) server.dlines.AddIP(hostAddr, banTime, reason, operReason, operName)
} else { } else {
server.dlines.AddNetwork(*hostNet, banTime, reason, operReason) server.dlines.AddNetwork(*hostNet, banTime, reason, operReason, operName)
} }
var snoDescription string var snoDescription string
if durationIsUsed { if durationIsUsed {
client.Notice(fmt.Sprintf("Added temporary (%s) D-Line for %s", duration.String(), hostString)) client.Notice(fmt.Sprintf("Added temporary (%s) D-Line for %s", duration.String(), hostString))
snoDescription = fmt.Sprintf(ircfmt.Unescape("%s$r added temporary (%s) D-Line for %s"), client.nick, duration.String(), hostString) snoDescription = fmt.Sprintf(ircfmt.Unescape("%s [%s]$r added temporary (%s) D-Line for %s"), client.nick, operName, duration.String(), hostString)
} else { } else {
client.Notice(fmt.Sprintf("Added D-Line for %s", hostString)) client.Notice(fmt.Sprintf("Added D-Line for %s", hostString))
snoDescription = fmt.Sprintf(ircfmt.Unescape("%s$r added D-Line for %s"), client.nick, hostString) snoDescription = fmt.Sprintf(ircfmt.Unescape("%s [%s]$r added D-Line for %s"), client.nick, operName, hostString)
} }
server.snomasks.Send(sno.LocalXline, snoDescription) server.snomasks.Send(sno.LocalXline, snoDescription)
@ -405,7 +414,7 @@ func dlineHandler(server *Server, client *Client, msg ircmsg.IrcMessage) bool {
// send snomask // send snomask
sort.Strings(killedClientNicks) sort.Strings(killedClientNicks)
server.snomasks.Send(sno.LocalKills, fmt.Sprintf(ircfmt.Unescape("%s killed %d clients with a DLINE $c[grey][$r%s$c[grey]]"), client.nick, len(killedClientNicks), strings.Join(killedClientNicks, ", "))) server.snomasks.Send(sno.LocalKills, fmt.Sprintf(ircfmt.Unescape("%s [%s] killed %d clients with a DLINE $c[grey][$r%s$c[grey]]"), client.nick, operName, len(killedClientNicks), strings.Join(killedClientNicks, ", ")))
} }
return killClient return killClient
@ -495,11 +504,16 @@ func (s *Server) loadDLines() {
var info IPBanInfo var info IPBanInfo
json.Unmarshal([]byte(value), &info) json.Unmarshal([]byte(value), &info)
// set opername if it isn't already set
if info.OperName == "" {
info.OperName = s.name
}
// add to the server // add to the server
if hostNet == nil { if hostNet == nil {
s.dlines.AddIP(hostAddr, info.Time, info.Reason, info.OperReason) s.dlines.AddIP(hostAddr, info.Time, info.Reason, info.OperReason, info.OperName)
} else { } else {
s.dlines.AddNetwork(*hostNet, info.Time, info.Reason, info.OperReason) s.dlines.AddNetwork(*hostNet, info.Time, info.Reason, info.OperReason, info.OperName)
} }
return true // true to continue I guess? return true // true to continue I guess?

View File

@ -321,7 +321,7 @@ func (server *Server) checkBans(ipaddr net.IP) (banned bool, message string) {
Duration: duration, Duration: duration,
Expires: time.Now().Add(duration), Expires: time.Now().Add(duration),
} }
server.dlines.AddIP(ipaddr, length, server.connectionThrottler.BanMessage(), "Exceeded automated connection throttle") server.dlines.AddIP(ipaddr, length, server.connectionThrottler.BanMessage(), "Exceeded automated connection throttle", "auto.connection.throttler")
// they're DLINE'd for 15 minutes or whatever, so we can reset the connection throttle now, // they're DLINE'd for 15 minutes or whatever, so we can reset the connection throttle now,
// and once their temporary DLINE is finished they can fill up the throttler again // and once their temporary DLINE is finished they can fill up the throttler again