Skip to content

Commit 95d721b

Browse files
committed
PlayerBan: Add field for player who set the ban
1 parent 226318e commit 95d721b

File tree

4 files changed

+35
-36
lines changed

4 files changed

+35
-36
lines changed

controllers/admin/ban.go

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212

1313
"github.com/Sirupsen/logrus"
1414
"github.com/TF2Stadium/Helen/config"
15+
chelpers "github.com/TF2Stadium/Helen/controllers/controllerhelpers"
1516
"github.com/TF2Stadium/Helen/models/player"
1617
"golang.org/x/net/xsrftoken"
1718
)
@@ -72,7 +73,10 @@ func BanPlayer(w http.ResponseWriter, r *http.Request) {
7273
return
7374
}
7475

75-
err = player.BanUntil(until, ban, reason)
76+
jwt, _ := chelpers.GetToken(r)
77+
bannedByPlayer := chelpers.GetPlayer(jwt)
78+
79+
err = player.BanUntil(until, ban, reason, bannedByPlayer.ID)
7680
if err != nil {
7781
http.Error(w, err.Error(), http.StatusBadRequest)
7882
return
@@ -81,19 +85,13 @@ func BanPlayer(w http.ResponseWriter, r *http.Request) {
8185
fmt.Fprintf(w, "Player %s (%s) has been banned (%s) till %v", player.Name, player.SteamID, ban.String(), until)
8286
}
8387

84-
type BanData struct {
85-
Player *player.Player
86-
Ban *player.PlayerBan
87-
}
88-
8988
func GetBanLogs(w http.ResponseWriter, r *http.Request) {
9089
values := r.URL.Query()
9190
if !xsrftoken.Valid(values.Get("xsrf-token"), config.Constants.CookieStoreSecret, "admin", "POST") {
9291
http.Error(w, "invalid xsrf token", http.StatusBadRequest)
9392
return
9493
}
9594

96-
var banData []BanData
9795
var bans []*player.PlayerBan
9896

9997
all := values.Get("all")
@@ -106,10 +104,6 @@ func GetBanLogs(w http.ResponseWriter, r *http.Request) {
106104
bans = player.GetAllBans()
107105
}
108106

109-
for _, ban := range bans {
110-
p, _ := player.GetPlayerByID(ban.PlayerID)
111-
banData = append(banData, BanData{p, ban})
112-
}
113107
} else {
114108
player, err := player.GetPlayerBySteamID(steamid)
115109
if err != nil {
@@ -123,12 +117,9 @@ func GetBanLogs(w http.ResponseWriter, r *http.Request) {
123117
bans, _ = player.GetAllBans()
124118
}
125119

126-
for _, ban := range bans {
127-
banData = append(banData, BanData{player, ban})
128-
}
129120
}
130121

131-
err := banlogsTempl.Execute(w, banData)
122+
err := banlogsTempl.Execute(w, bans)
132123
if err != nil {
133124
logrus.Error(err)
134125
}

models/player/player_bans.go

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,16 @@ const (
2020
//PlayerBan represents a player ban
2121
type PlayerBan struct {
2222
gorm.Model
23-
PlayerID uint // ID of the player banned
24-
Type BanType // Ban type
25-
Until time.Time // Time until which the ban is valid
26-
Reason string // Reason for the ban
27-
Active bool `sql:"default:true"` // Whether the ban is active
23+
PlayerID uint // ID of the player banned
24+
Player Player `gorm:"ForeignKey:PlayerID"`
25+
26+
BannedByPlayerID uint // ID of the admin/mod who set ban
27+
BannedByPlayer Player `gorm:"ForeignKey:BannedByPlayerID"`
28+
29+
Type BanType // Ban type
30+
Until time.Time // Time until which the ban is valid
31+
Reason string // Reason for the ban
32+
Active bool `sql:"default:true"` // Whether the ban is active
2833
}
2934

3035
func (t BanType) String() string {
@@ -52,17 +57,18 @@ func (player *Player) IsBanned(t BanType) bool {
5257
return res
5358
}
5459

55-
func (player *Player) BanUntil(tim time.Time, t BanType, reason string) error {
60+
func (player *Player) BanUntil(tim time.Time, t BanType, reason string, bannedBy uint) error {
5661
// first check if player is already banned
5762
if banned := player.IsBanned(t); banned {
5863
db.DB.Model(&PlayerBan{}).Where("player_id = ? AND type = ? AND active = TRUE AND until > now()", player.ID, t).Update("until", tim)
5964
return nil
6065
}
6166
ban := PlayerBan{
62-
PlayerID: player.ID,
63-
Type: t,
64-
Until: tim,
65-
Reason: reason,
67+
PlayerID: player.ID,
68+
Type: t,
69+
Until: tim,
70+
Reason: reason,
71+
BannedByPlayerID: bannedBy,
6672
}
6773

6874
return db.DB.Create(&ban).Error
@@ -88,25 +94,25 @@ func (player *Player) GetActiveBan(banType BanType) (*PlayerBan, error) {
8894

8995
func (player *Player) GetActiveBans() ([]*PlayerBan, error) {
9096
var bans []*PlayerBan
91-
err := db.DB.Where("player_id = ? AND active = TRUE AND until > now()", player.ID).Find(&bans).Error
97+
err := db.DB.Preload("Player").Preload("BannedByPlayer").Where("player_id = ? AND active = TRUE AND until > now()", player.ID).Find(&bans).Error
9298
return bans, err
9399
}
94100

95101
func (player *Player) GetAllBans() ([]*PlayerBan, error) {
96102
var bans []*PlayerBan
97-
err := db.DB.Where("player_id = ?", player.ID).Find(&bans).Error
103+
err := db.DB.Preload("Player").Preload("BannedByPlayer").Where("player_id = ?", player.ID).Find(&bans).Error
98104
return bans, err
99105

100106
}
101107

102108
func GetAllActiveBans() []*PlayerBan {
103109
var bans []*PlayerBan
104-
db.DB.Where("active = TRUE AND until > now()").Find(&bans)
110+
db.DB.Preload("Player").Preload("BannedByPlayer").Where("active = TRUE AND until > now()").Find(&bans)
105111
return bans
106112
}
107113

108114
func GetAllBans() []*PlayerBan {
109115
var bans []*PlayerBan
110-
db.DB.Model(&PlayerBan{}).Find(&bans)
116+
db.DB.Preload("Player").Preload("BannedByPlayer").Model(&PlayerBan{}).Find(&bans)
111117
return bans
112118
}

models/player/player_report.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,15 @@ func (player *Player) NewReport(rtype ReportType, lobbyid uint) {
3232
switch rtype {
3333
case Substitute:
3434
if count == 1 {
35-
player.BanUntil(time.Now().Add(30*time.Minute), BanJoin, "For !subbing twice in the last 30 minutes")
35+
player.BanUntil(time.Now().Add(30*time.Minute), BanJoin, "For !subbing twice in the last 30 minutes", 0)
3636
}
3737
case Vote:
3838
if count != 0 {
39-
player.BanUntil(time.Now().Add(30*time.Minute), BanJoin, "For getting !repped from a lobby multiple times in the last 30 minutes")
39+
player.BanUntil(time.Now().Add(30*time.Minute), BanJoin, "For getting !repped from a lobby multiple times in the last 30 minutes", 0)
4040
}
4141
case RageQuit:
4242
if count != 0 {
43-
player.BanUntil(time.Now().Add(30*time.Minute), BanJoin, "For ragequitting a lobby multiple times in the last 30 minutes")
43+
player.BanUntil(time.Now().Add(30*time.Minute), BanJoin, "For ragequitting a lobby multiple times in the last 30 minutes", 0)
4444
}
4545

4646
}

views/admin/templates/ban_logs.html

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,18 @@
1212
<td>Reason</td>
1313
<td>On</td>
1414
<td>Until</td>
15+
<td>By</td>
1516
</tr>
1617
</thead>
1718
<tbody>
1819
{{range .}}
1920
<tr>
2021
<td>{{.Player.Name}} ({{.Player.SteamID}})</td>
21-
<td>{{.Ban.Type.String}}</td>
22-
<td>{{.Ban.Reason}}</td>
23-
<td>{{.Ban.CreatedAt.Format "Mon Jan _2 15:04:05 2006"}}</td>
24-
<td>{{.Ban.Until.Format "Mon Jan _2 15:04:05 2006"}}</td>
22+
<td>{{.Type.String}}</td>
23+
<td>{{.Reason}}</td>
24+
<td>{{.CreatedAt.Format "Mon Jan _2 15:04:05 2006"}}</td>
25+
<td>{{.Until.Format "Mon Jan _2 15:04:05 2006"}}</td>
26+
<td>{{if .BannedByPlayerID}} {{.BannedByPlayer.Name}} ({{.BannedByPlayer.SteamID}}) {{else}} automatic {{end}}</td>
2527
</tr>
2628
{{end}}
2729
</tbody>

0 commit comments

Comments
 (0)