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 ErrAlreadyBanned = errors.New("ip address is already banned")
var ErrInvalidAddress = errors.New("invalid ip address format")
// addBanItem inserts a ban DB entry // addBanItem inserts a ban DB entry
func addBanItem(db *sql.DB, addr, name string) error { 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 // deleteBanItem deletes a ban DB entry
func deleteBanItem(db *sql.DB, name string) error { 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) stmt, err := db.Prepare(sql_deleteBanItem)
if err != nil { if err != nil {
@ -71,7 +72,7 @@ func deleteBanItem(db *sql.DB, name string) error {
} }
defer stmt.Close() defer stmt.Close()
_, err = stmt.Exec(name) _, err = stmt.Exec(name, name)
if err != nil { if err != nil {
return err return err
} }
@ -146,6 +147,27 @@ func (p *Peer) Ban() error {
return nil 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 { func Unban(name string) error {
db, err := initAuthDB() db, err := initAuthDB()
if err != nil { if err != nil {

View File

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