Skip to content

Commit ac9056f

Browse files
feat: Add FTP, RCON, ban file sync, and server list options to GameServer model and views
1 parent 6b78918 commit ac9056f

10 files changed

Lines changed: 150 additions & 6 deletions

File tree

src/XtremeIdiots.Portal.Integrations.Forums/XtremeIdiots.Portal.Integrations.Forums.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
<PackageReference Include="Azure.Identity" Version="1.17.1" />
1313
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="10.0.3" />
1414
<PackageReference Include="MX.InvisionCommunity.Api.Client" Version="1.0.18" />
15-
<PackageReference Include="XtremeIdiots.Portal.Repository.Api.Client.V1" Version="2.1.167" />
15+
<PackageReference Include="XtremeIdiots.Portal.Repository.Api.Client.V1" Version="2.1.179" />
1616
</ItemGroup>
1717

1818
</Project>

src/XtremeIdiots.Portal.Web.Tests/Extensions/GameServerDtoExtensionsTests.cs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ namespace XtremeIdiots.Portal.Web.Tests.Extensions;
66

77
public class GameServerDtoExtensionsTests
88
{
9-
private static GameServerDto CreateGameServerDto(bool botEnabled = false, bool agentEnabled = false)
9+
private static GameServerDto CreateGameServerDto(bool botEnabled = false, bool agentEnabled = false,
10+
bool ftpEnabled = false, bool rconEnabled = false, bool banFileSyncEnabled = false, bool serverListEnabled = false)
1011
{
1112
// GameServerDto uses internal setters, so we serialize/deserialize to set values
1213
var json = System.Text.Json.JsonSerializer.Serialize(new
@@ -21,7 +22,11 @@ private static GameServerDto CreateGameServerDto(bool botEnabled = false, bool a
2122
AgentEnabled = agentEnabled,
2223
BannerServerListEnabled = true,
2324
PortalServerListEnabled = true,
24-
LiveTrackingEnabled = true
25+
LiveTrackingEnabled = true,
26+
FtpEnabled = ftpEnabled,
27+
RconEnabled = rconEnabled,
28+
BanFileSyncEnabled = banFileSyncEnabled,
29+
ServerListEnabled = serverListEnabled
2530
});
2631

2732
return Newtonsoft.Json.JsonConvert.DeserializeObject<GameServerDto>(json)!;
@@ -31,7 +36,8 @@ private static GameServerDto CreateGameServerDto(bool botEnabled = false, bool a
3136
public void ToViewModel_MapsAllProperties()
3237
{
3338
// Arrange
34-
var dto = CreateGameServerDto(botEnabled: true, agentEnabled: true);
39+
var dto = CreateGameServerDto(botEnabled: true, agentEnabled: true,
40+
ftpEnabled: true, rconEnabled: true, banFileSyncEnabled: true, serverListEnabled: true);
3541

3642
// Act
3743
var viewModel = dto.ToViewModel();
@@ -48,6 +54,10 @@ public void ToViewModel_MapsAllProperties()
4854
Assert.Equal(dto.LiveTrackingEnabled, viewModel.LiveTrackingEnabled);
4955
Assert.Equal(dto.BotEnabled, viewModel.BotEnabled);
5056
Assert.Equal(dto.AgentEnabled, viewModel.AgentEnabled);
57+
Assert.Equal(dto.FtpEnabled, viewModel.FtpEnabled);
58+
Assert.Equal(dto.RconEnabled, viewModel.RconEnabled);
59+
Assert.Equal(dto.BanFileSyncEnabled, viewModel.BanFileSyncEnabled);
60+
Assert.Equal(dto.ServerListEnabled, viewModel.ServerListEnabled);
5161
}
5262

5363
[Theory]

src/XtremeIdiots.Portal.Web/Controllers/GameServersController.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,10 @@ public async Task<IActionResult> Create(GameServerViewModel model, CancellationT
125125
createGameServerDto.PortalServerListEnabled = model.PortalServerListEnabled;
126126
createGameServerDto.BotEnabled = model.BotEnabled;
127127
createGameServerDto.AgentEnabled = model.AgentEnabled;
128+
createGameServerDto.FtpEnabled = model.FtpEnabled;
129+
createGameServerDto.RconEnabled = model.RconEnabled;
130+
createGameServerDto.BanFileSyncEnabled = model.BanFileSyncEnabled;
131+
createGameServerDto.ServerListEnabled = model.ServerListEnabled;
128132

129133
var createResult = await repositoryApiClient.GameServers.V1.CreateGameServer(createGameServerDto, cancellationToken).ConfigureAwait(false);
130134

@@ -303,6 +307,10 @@ public async Task<IActionResult> Edit(GameServerViewModel model, CancellationTok
303307
editGameServerDto.PortalServerListEnabled = model.PortalServerListEnabled;
304308
editGameServerDto.BotEnabled = model.BotEnabled;
305309
editGameServerDto.AgentEnabled = model.AgentEnabled;
310+
editGameServerDto.FtpEnabled = model.FtpEnabled;
311+
editGameServerDto.RconEnabled = model.RconEnabled;
312+
editGameServerDto.BanFileSyncEnabled = model.BanFileSyncEnabled;
313+
editGameServerDto.ServerListEnabled = model.ServerListEnabled;
306314

307315
var updateResult = await repositoryApiClient.GameServers.V1.UpdateGameServer(editGameServerDto, cancellationToken).ConfigureAwait(false);
308316

src/XtremeIdiots.Portal.Web/Extensions/GameServerDtoExtensions.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,11 @@ public static GameServerViewModel ToViewModel(this GameServerDto gameServerDto)
2525
HtmlBanner = gameServerDto.HtmlBanner,
2626
PortalServerListEnabled = gameServerDto.PortalServerListEnabled,
2727
BotEnabled = gameServerDto.BotEnabled,
28-
AgentEnabled = gameServerDto.AgentEnabled
28+
AgentEnabled = gameServerDto.AgentEnabled,
29+
FtpEnabled = gameServerDto.FtpEnabled,
30+
RconEnabled = gameServerDto.RconEnabled,
31+
BanFileSyncEnabled = gameServerDto.BanFileSyncEnabled,
32+
ServerListEnabled = gameServerDto.ServerListEnabled
2933
};
3034

3135
return viewModel;

src/XtremeIdiots.Portal.Web/ViewModels/GameServerViewModel.cs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,4 +113,28 @@ public class GameServerViewModel
113113
/// </summary>
114114
[DisplayName("Agent Enabled")]
115115
public bool AgentEnabled { get; set; }
116+
117+
/// <summary>
118+
/// Gets or sets whether FTP integration is enabled for this server
119+
/// </summary>
120+
[DisplayName("FTP")]
121+
public bool FtpEnabled { get; set; }
122+
123+
/// <summary>
124+
/// Gets or sets whether RCON integration is enabled for this server
125+
/// </summary>
126+
[DisplayName("RCON")]
127+
public bool RconEnabled { get; set; }
128+
129+
/// <summary>
130+
/// Gets or sets whether ban file synchronization is enabled for this server
131+
/// </summary>
132+
[DisplayName("Ban File Sync")]
133+
public bool BanFileSyncEnabled { get; set; }
134+
135+
/// <summary>
136+
/// Gets or sets whether this server appears in server lists
137+
/// </summary>
138+
[DisplayName("Server List")]
139+
public bool ServerListEnabled { get; set; }
116140
}

src/XtremeIdiots.Portal.Web/Views/GameServers/Create.cshtml

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,31 @@
156156
@Html.DisplayNameFor(model => model.AgentEnabled)
157157
</label>
158158
</div>
159+
<hr />
160+
<div class="form-check mb-3">
161+
<label class="form-check-label">
162+
<input class="form-check-input" asp-for="FtpEnabled" />
163+
@Html.DisplayNameFor(model => model.FtpEnabled)
164+
</label>
165+
</div>
166+
<div class="form-check mb-3">
167+
<label class="form-check-label">
168+
<input class="form-check-input" asp-for="RconEnabled" />
169+
@Html.DisplayNameFor(model => model.RconEnabled)
170+
</label>
171+
</div>
172+
<div class="form-check mb-3">
173+
<label class="form-check-label">
174+
<input class="form-check-input" asp-for="BanFileSyncEnabled" />
175+
@Html.DisplayNameFor(model => model.BanFileSyncEnabled)
176+
</label>
177+
</div>
178+
<div class="form-check mb-3">
179+
<label class="form-check-label">
180+
<input class="form-check-input" asp-for="ServerListEnabled" />
181+
@Html.DisplayNameFor(model => model.ServerListEnabled)
182+
</label>
183+
</div>
159184
</div>
160185
</div>
161186
</div>

src/XtremeIdiots.Portal.Web/Views/GameServers/Details.cshtml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,30 @@
115115
<dd class="col-sm-10">
116116
@Html.DisplayFor(model => model.AgentEnabled)
117117
</dd>
118+
<dt class="col-sm-2">
119+
@Html.DisplayNameFor(model => model.FtpEnabled)
120+
</dt>
121+
<dd class="col-sm-10">
122+
@Html.DisplayFor(model => model.FtpEnabled)
123+
</dd>
124+
<dt class="col-sm-2">
125+
@Html.DisplayNameFor(model => model.RconEnabled)
126+
</dt>
127+
<dd class="col-sm-10">
128+
@Html.DisplayFor(model => model.RconEnabled)
129+
</dd>
130+
<dt class="col-sm-2">
131+
@Html.DisplayNameFor(model => model.BanFileSyncEnabled)
132+
</dt>
133+
<dd class="col-sm-10">
134+
@Html.DisplayFor(model => model.BanFileSyncEnabled)
135+
</dd>
136+
<dt class="col-sm-2">
137+
@Html.DisplayNameFor(model => model.ServerListEnabled)
138+
</dt>
139+
<dd class="col-sm-10">
140+
@Html.DisplayFor(model => model.ServerListEnabled)
141+
</dd>
118142
</dl>
119143
</div>
120144
<div class="ibox-footer">

src/XtremeIdiots.Portal.Web/Views/GameServers/Edit.cshtml

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,31 @@
159159
@Html.DisplayNameFor(model => model.AgentEnabled)
160160
</label>
161161
</div>
162+
<hr />
163+
<div class="form-check mb-3">
164+
<label class="form-check-label">
165+
<input class="form-check-input" asp-for="FtpEnabled" />
166+
@Html.DisplayNameFor(model => model.FtpEnabled)
167+
</label>
168+
</div>
169+
<div class="form-check mb-3">
170+
<label class="form-check-label">
171+
<input class="form-check-input" asp-for="RconEnabled" />
172+
@Html.DisplayNameFor(model => model.RconEnabled)
173+
</label>
174+
</div>
175+
<div class="form-check mb-3">
176+
<label class="form-check-label">
177+
<input class="form-check-input" asp-for="BanFileSyncEnabled" />
178+
@Html.DisplayNameFor(model => model.BanFileSyncEnabled)
179+
</label>
180+
</div>
181+
<div class="form-check mb-3">
182+
<label class="form-check-label">
183+
<input class="form-check-input" asp-for="ServerListEnabled" />
184+
@Html.DisplayNameFor(model => model.ServerListEnabled)
185+
</label>
186+
</div>
162187
</div>
163188
</div>
164189
</div>

src/XtremeIdiots.Portal.Web/Views/GameServers/Index.cshtml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,18 @@
5656
<th>
5757
@Html.DisplayNameFor(model => model.AgentEnabled)
5858
</th>
59+
<th>
60+
@Html.DisplayNameFor(model => model.FtpEnabled)
61+
</th>
62+
<th>
63+
@Html.DisplayNameFor(model => model.RconEnabled)
64+
</th>
65+
<th>
66+
@Html.DisplayNameFor(model => model.BanFileSyncEnabled)
67+
</th>
68+
<th>
69+
@Html.DisplayNameFor(model => model.ServerListEnabled)
70+
</th>
5971
<th></th>
6072
</tr>
6173
</thead>
@@ -90,6 +102,18 @@
90102
<td>
91103
@Html.DisplayFor(modelItem => item.AgentEnabled)
92104
</td>
105+
<td>
106+
@Html.DisplayFor(modelItem => item.FtpEnabled)
107+
</td>
108+
<td>
109+
@Html.DisplayFor(modelItem => item.RconEnabled)
110+
</td>
111+
<td>
112+
@Html.DisplayFor(modelItem => item.BanFileSyncEnabled)
113+
</td>
114+
<td>
115+
@Html.DisplayFor(modelItem => item.ServerListEnabled)
116+
</td>
93117
<td>
94118
<div class="btn-group btn-group-sm" role="group">
95119
@if ((await AuthorizationService.AuthorizeAsync(User, item.GameType,

src/XtremeIdiots.Portal.Web/XtremeIdiots.Portal.Web.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
<PackageReference Include="MX.Api.Abstractions" Version="2.3.31" />
4848
<PackageReference Include="MX.Api.Client" Version="2.3.31" />
4949
<PackageReference Include="XtremeIdiots.Portal.Integrations.Servers.Api.Client.V1" Version="2.1.137" />
50-
<PackageReference Include="XtremeIdiots.Portal.Repository.Api.Client.V1" Version="2.1.178" />
50+
<PackageReference Include="XtremeIdiots.Portal.Repository.Api.Client.V1" Version="2.1.179" />
5151
<PackageReference Include="MX.GeoLocation.Api.Client.V1" Version="1.2.39" />
5252
</ItemGroup>
5353

0 commit comments

Comments
 (0)