Skip to content

Commit 3cdc30a

Browse files
authored
Add vac and password checkboxes when adding/editing servers (#33)
1 parent 7d82fc5 commit 3cdc30a

3 files changed

Lines changed: 87 additions & 24 deletions

File tree

src/api/offstylesApi.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@ export interface ServerActivityResponse {
4848
export interface ServerDataDocument {
4949
_id?: string;
5050
name: string;
51-
servers: ServerInfo[];
52-
user: ServerActivityOwner;
51+
servers?: ServerInfo[];
52+
user?: ServerActivityOwner;
5353
permissions?: number;
5454
active?: boolean;
5555
}
@@ -58,6 +58,8 @@ export interface ServerInfo {
5858
name: string;
5959
ip: string;
6060
whitelist: boolean;
61+
password: boolean;
62+
vac_secure: boolean;
6163
}
6264

6365
export interface KeyReturnJson {

src/components/ServerModal.vue

Lines changed: 72 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -250,8 +250,8 @@
250250
>
251251
<div class="flex items-center justify-between">
252252
<div class="flex-1">
253-
<div class="flex items-center mb-2">
254-
<h4 class="text-base font-medium text-gray-100 mr-3">{{ server.name }}</h4>
253+
<div class="flex items-center mb-2 flex-wrap gap-2">
254+
<h4 class="text-base font-medium text-gray-100">{{ server.name }}</h4>
255255
<span
256256
:class="[
257257
'px-2 py-1 text-xs font-medium rounded-full',
@@ -262,6 +262,20 @@
262262
>
263263
{{ server.whitelist ? 'Whitelist' : 'Public' }}
264264
</span>
265+
<span
266+
v-if="server.password"
267+
class="px-2 py-1 text-xs font-medium rounded-full bg-orange-900 text-orange-400"
268+
title="Password Protected"
269+
>
270+
Password
271+
</span>
272+
<span
273+
v-if="server.vac_secure"
274+
class="px-2 py-1 text-xs font-medium rounded-full bg-blue-900 text-blue-400"
275+
title="VAC Secure"
276+
>
277+
VAC
278+
</span>
265279
</div>
266280
<div class="flex items-center">
267281
<span
@@ -340,15 +354,43 @@
340354
</div>
341355

342356
<div class="mb-6">
343-
<label class="flex items-center">
344-
<input
345-
v-model="serverForm.whitelist"
346-
type="checkbox"
347-
class="rounded border-main-600 text-green-500 bg-main-900 focus:outline-none focus:ring-0"
348-
/>
349-
<span class="ml-2 text-sm text-gray-200">Whitelist Only</span>
350-
</label>
351-
<p class="text-xs text-gray-400 mt-1">If enabled, only whitelisted players can access this server</p>
357+
<div class="space-y-3">
358+
<div>
359+
<label class="flex items-center">
360+
<input
361+
v-model="serverForm.whitelist"
362+
type="checkbox"
363+
class="rounded border-main-600 text-green-500 bg-main-900 focus:outline-none focus:ring-0"
364+
/>
365+
<span class="ml-2 text-sm text-gray-200">Whitelist Only</span>
366+
</label>
367+
<p class="text-xs text-gray-400 mt-1 ml-6">If enabled, only whitelisted players can access this server</p>
368+
</div>
369+
370+
<div>
371+
<label class="flex items-center">
372+
<input
373+
v-model="serverForm.password"
374+
type="checkbox"
375+
class="rounded border-main-600 text-green-500 bg-main-900 focus:outline-none focus:ring-0"
376+
/>
377+
<span class="ml-2 text-sm text-gray-200">Password Protected</span>
378+
</label>
379+
<p class="text-xs text-gray-400 mt-1 ml-6">Server requires a password to join</p>
380+
</div>
381+
382+
<div>
383+
<label class="flex items-center">
384+
<input
385+
v-model="serverForm.vac_secure"
386+
type="checkbox"
387+
class="rounded border-main-600 text-green-500 bg-main-900 focus:outline-none focus:ring-0"
388+
/>
389+
<span class="ml-2 text-sm text-gray-200">VAC Secure</span>
390+
</label>
391+
<p class="text-xs text-gray-400 mt-1 ml-6">Server has Valve Anti-Cheat enabled</p>
392+
</div>
393+
</div>
352394
</div>
353395

354396
<div class="flex justify-end space-x-3">
@@ -451,7 +493,7 @@ const { user } = useAuth();
451493
const canEdit = computed(() => {
452494
if (!user.value) return false;
453495
// Check if user is the owner or has admin permissions
454-
return user.value.steam_id === props.server.user.steam_id || user.value.permissions > 0;
496+
return (props.server.user && user.value.steam_id === props.server.user.steam_id) || user.value.permissions > 0;
455497
});
456498
457499
// Check if user has admin permissions for API key management
@@ -460,7 +502,7 @@ const canManageKeys = computed(() => {
460502
});
461503
462504
// Reactive data
463-
const localServers = ref<ServerInfo[]>([...(props.server.servers || [])]);
505+
const localServers = ref<ServerInfo[]>(Array.isArray(props.server.servers) ? [...props.server.servers] : []);
464506
const editing = ref({
465507
name: false,
466508
owner: false
@@ -483,7 +525,9 @@ const editingServerIndex = ref(-1);
483525
const serverForm = ref({
484526
name: '',
485527
ip: '',
486-
whitelist: false
528+
whitelist: false,
529+
password: false,
530+
vac_secure: false
487531
});
488532
489533
// Toast state
@@ -508,9 +552,11 @@ const editKeyForm = ref({
508552
509553
// Watch for server prop changes
510554
watch(() => props.server, (newServer) => {
511-
localServers.value = [...(newServer.servers || [])];
512-
editForm.value.name = newServer.name;
513-
editForm.value.owner = newServer.user?.steam_id || '';
555+
if (newServer) {
556+
localServers.value = Array.isArray(newServer.servers) ? [...newServer.servers] : [];
557+
editForm.value.name = newServer.name || '';
558+
editForm.value.owner = newServer.user?.steam_id || '';
559+
}
514560
}, { deep: true });
515561
516562
// Methods
@@ -570,7 +616,9 @@ const addServer = () => {
570616
serverForm.value = {
571617
name: '',
572618
ip: '',
573-
whitelist: false
619+
whitelist: false,
620+
password: false,
621+
vac_secure: false
574622
};
575623
showServerModal.value = true;
576624
};
@@ -581,7 +629,9 @@ const editServer = (index: number) => {
581629
serverForm.value = {
582630
name: server.name,
583631
ip: server.ip,
584-
whitelist: server.whitelist
632+
whitelist: server.whitelist,
633+
password: server.password,
634+
vac_secure: server.vac_secure
585635
};
586636
showServerModal.value = true;
587637
};
@@ -592,7 +642,9 @@ const closeServerModal = () => {
592642
serverForm.value = {
593643
name: '',
594644
ip: '',
595-
whitelist: false
645+
whitelist: false,
646+
password: false,
647+
vac_secure: false
596648
};
597649
};
598650

src/types/Server.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,21 @@ export interface ServerInfo {
1313
name: string;
1414
ip: string;
1515
whitelist: boolean;
16+
password: boolean;
17+
vac_secure: boolean;
1618
}
1719

1820
export interface ServerDataDocument {
1921
_id?: string; // Optional since it can be None in Rust
20-
key_ref: string;
22+
key_ref?: string;
2123
owner_ref?: string; // Optional since it can be None in Rust
2224
name: string;
23-
servers: ServerInfo[];
25+
servers?: ServerInfo[];
26+
user?: {
27+
steam_id: string;
28+
username?: string;
29+
avatar_url?: string;
30+
};
31+
permissions?: number;
32+
active?: boolean;
2433
}

0 commit comments

Comments
 (0)