Accept IP addresses in ban commands
parent
d3c3e36b36
commit
c37cbba06b
26
ban.go
26
ban.go
|
@ -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 {
|
||||
|
|
27
igutils.go
27
igutils.go
|
@ -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
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue