Accept IP addresses in ban commands

master
HimbeerserverDE 2021-02-28 13:33:30 +01:00
parent d3c3e36b36
commit c37cbba06b
No known key found for this signature in database
GPG Key ID: 1A651504791E6A8B
2 changed files with 39 additions and 14 deletions

26
ban.go
View File

@ -11,6 +11,7 @@ import (
)
var ErrAlreadyBanned = errors.New("ip address is already banned")
var ErrInvalidAddress = errors.New("invalid ip address format")
// addBanItem inserts a ban DB entry
func addBanItem(db *sql.DB, addr, name string) error {
@ -63,7 +64,7 @@ func readBanItem(db *sql.DB, addr string) (string, error) {
// deleteBanItem deletes a ban DB entry
func deleteBanItem(db *sql.DB, name string) error {
sql_deleteBanItem := `DELETE FROM ban WHERE name = ?;`
sql_deleteBanItem := `DELETE FROM ban WHERE name = ? OR addr = ?;`
stmt, err := db.Prepare(sql_deleteBanItem)
if err != nil {
@ -71,7 +72,7 @@ func deleteBanItem(db *sql.DB, name string) error {
}
defer stmt.Close()
_, err = stmt.Exec(name)
_, err = stmt.Exec(name, name)
if err != nil {
return err
}
@ -146,6 +147,27 @@ func (p *Peer) Ban() error {
return nil
}
func Ban(addr string) error {
db, err := initAuthDB()
if err != nil {
return err
}
defer db.Close()
name := "not known"
if net.ParseIP(addr) == nil {
return ErrInvalidAddress
}
err = addBanItem(db, addr, name)
if err != nil {
return err
}
return nil
}
func Unban(name string) error {
db, err := initAuthDB()
if err != nil {

View File

@ -310,30 +310,33 @@ func init() {
})
RegisterChatCommand("ban", privs("ban"),
func (p *Peer, param string) {
func(p *Peer, param string) {
if param == "" {
p.SendChatMsg("Usage: #ban <playername>")
p.SendChatMsg("Usage: #ban <playername | IP address>")
return
}
p2 := GetListener().GetPeerByUsername(param)
if p2 == nil {
p.SendChatMsg(param + " is not online.")
return
}
err := Ban(param)
if err != nil {
p2 := GetListener().GetPeerByUsername(param)
if p2 == nil {
p.SendChatMsg(param + " is not online.")
return
}
if err := p2.Ban(); err != nil {
p.SendChatMsg("An internal error occured while attempting to ban the player.")
return
if err := p2.Ban(); err != nil {
p.SendChatMsg("An internal error occured while attempting to ban the player.")
return
}
}
p.SendChatMsg("Banned " + param)
})
RegisterChatCommand("unban", privs("ban"),
func (p *Peer, param string) {
func(p *Peer, param string) {
if param == "" {
p.SendChatMsg("Usage: #unban <playername>")
p.SendChatMsg("Usage: #unban <playername | IP address>")
return
}