Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
71 commits
Select commit Hold shift + click to select a range
5d4d5be
Reject reward path traversal names
BenCodez Aug 24, 2026
1da8dd9
Fix reward file name validation
BenCodez Aug 24, 2026
8255a6d
Do not expose reward-file sub-sections as standalone rewards
BenCodez Aug 24, 2026
7e27e77
Require UUID match for permission name fallback
BenCodez Aug 24, 2026
a17d8fd
Add reward path traversal regression tests
BenCodez Aug 24, 2026
580e806
Add permission identity regression tests
BenCodez Aug 24, 2026
b326bdd
Fix isolated static mock setup in permission security test
BenCodez Aug 24, 2026
b02d96b
Keep file sub-rewards internal to dispatch
BenCodez Aug 24, 2026
6c9ab5d
Dispatch file sub-rewards without exposing lookup
BenCodez Aug 24, 2026
9261525
Test internal file-backed sub-reward discovery
BenCodez Aug 24, 2026
58d8385
Keep internal sub-reward lookup null-safe
BenCodez Aug 24, 2026
9742af8
Fix PlayerManager security test isolation
BenCodez Aug 24, 2026
c8bf25b
Quarantine stale generated sub-reward files
BenCodez Aug 24, 2026
53bfa8d
Test stale sub-reward quarantine
BenCodez Aug 24, 2026
072892c
Quarantine generated direct rewards during loading
BenCodez Aug 24, 2026
e082e36
Test stale generated reward quarantine during load
BenCodez Aug 24, 2026
398dff7
Fix AdvancedRewards internal dispatch naming
BenCodez Aug 24, 2026
28a334d
Restrict queued generated rewards to referenced users
BenCodez Aug 24, 2026
0c08030
Preserve queued generated rewards without public bypass
BenCodez Aug 24, 2026
e2ea1b6
Test queued generated reward preservation
BenCodez Aug 24, 2026
5f87d56
Test AdvancedRewards dispatch naming
BenCodez Aug 24, 2026
2a954a3
Fix queued reward security test fixture
BenCodez Aug 24, 2026
cf64719
Avoid revalidating queued reward snapshots
BenCodez Aug 24, 2026
fa1cf0f
Remove plugin singleton dependency from loader tests
BenCodez Aug 24, 2026
1e7cb90
Keep generated rewards queue-only without user scans
BenCodez Aug 24, 2026
1c7d936
Expose queue-only generated reward resolver
BenCodez Aug 24, 2026
cf7d75b
Resolve generated snapshots only during queue replay
BenCodez Aug 24, 2026
ed27115
Test queue-only generated reward snapshots
BenCodez Aug 24, 2026
e194321
Test queue-only generated reward dispatch
BenCodez Aug 24, 2026
0df49af
Use safe lookup rules for queued reward names
BenCodez Aug 24, 2026
6dfb241
Keep generated reward snapshots out of public registry
BenCodez Aug 25, 2026
8d8c8dd
Resolve queued snapshots before normal reward fallback
BenCodez Aug 25, 2026
c052358
Resolve timed queued snapshots through restricted loader
BenCodez Aug 25, 2026
2d72076
Test queued snapshot precedence for offline and timed replay
BenCodez Aug 25, 2026
b9bb9bd
Test generated snapshots stay out of public registry
BenCodez Aug 25, 2026
bc128a1
Qualify AdvancedPriority generated reward names
BenCodez Aug 25, 2026
a37279e
Apply queued reward replay and registration fixes
BenCodez Aug 25, 2026
112ae9d
Keep generated queue snapshots out of public lookup
github-actions[bot] Aug 25, 2026
db16731
Keep generated snapshot registry guard null-safe
BenCodez Aug 25, 2026
2373d9a
Apply Codex queue provenance fixes for PR 295
BenCodez Aug 25, 2026
0258b21
Bind queued snapshots to persisted provenance
github-actions[bot] Aug 25, 2026
be39e33
Extend reward filename security regression coverage
BenCodez Aug 25, 2026
9186bfa
Align queued reward tests with persisted provenance
BenCodez Aug 25, 2026
d2f28b9
Fix queue provenance security test setup
BenCodez Aug 25, 2026
056c06e
Test exact generated filename suppression directly
BenCodez Aug 25, 2026
87491f7
Parse snapshot provenance only for queue replay
BenCodez Aug 25, 2026
0ad6989
Test normal reward names containing snapshot marker
BenCodez Aug 25, 2026
f51a06c
Add versioned queued reward reference envelope
BenCodez Aug 25, 2026
e36bd7b
Apply versioned queue-envelope fix for PR 295
BenCodez Aug 25, 2026
cb18df5
Remove temporary queue-envelope patch workflow
BenCodez Aug 25, 2026
a973f81
Remove unused queue envelope experiment
BenCodez Aug 25, 2026
74d0509
Add focused Codex 295 queue envelope patch
BenCodez Aug 25, 2026
b17f0a1
Use unambiguous persisted reward queue references
github-actions[bot] Aug 25, 2026
b213626
Apply queued reward envelope cleanup
BenCodez Aug 25, 2026
df4ea88
Remove stale queued reward marker reference
github-actions[bot] Aug 25, 2026
61af682
Test versioned queued reward references
BenCodez Aug 25, 2026
cf3f2b2
Preserve queued file-backed sub rewards
BenCodez Aug 25, 2026
76748fd
Preserve generated snapshot provenance on requeue
BenCodez Aug 25, 2026
bac6a72
Test queued snapshot requeue provenance
BenCodez Aug 25, 2026
684451d
Track internal file subreward queue provenance
BenCodez Aug 25, 2026
61d5494
Test deferred file-backed sub reward snapshots
BenCodez Aug 25, 2026
668fa6f
Remove unused queue marker class
BenCodez Aug 25, 2026
f725011
Add one-shot queue provenance fix
BenCodez Aug 25, 2026
0b12e2b
Require persisted queue provenance for snapshot replay
github-actions[bot] Aug 25, 2026
f364a07
Test forged timed queue options stay public
BenCodez Aug 25, 2026
a7d534c
Update queue replay user tests
BenCodez Aug 25, 2026
ab75b25
Apply snapshot replacement fix
BenCodez Aug 25, 2026
44ce975
Replace reused generated reward snapshots
github-actions[bot] Aug 25, 2026
0d49297
Strengthen reused snapshot regression
BenCodez Aug 25, 2026
48d7e4d
Isolate snapshot replacement regression
BenCodez Aug 25, 2026
9be2860
Test generated snapshot replacement semantics
BenCodez Aug 25, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ public boolean hasServerPermission(UUID playerUUID, String playername, String pe
return player.hasPermission(perm);
} else {
player = Bukkit.getPlayer(playername);
if (player != null) {
if (player != null && playerUUID.equals(player.getUniqueId())) {
return player.hasPermission(perm);
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package com.bencodez.advancedcore.api.rewards;

import java.io.File;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

import com.bencodez.advancedcore.api.user.AdvancedCoreUser;

/**
* A generated directly-defined reward that is still referenced by a persisted
* offline or timed queue. These rewards are intentionally restricted to the
* users whose persisted queue references the generated reward name.
*/
final class QueuedGeneratedReward extends Reward {

private final Set<String> allowedUserUuids;

QueuedGeneratedReward(File folder, String reward, Set<String> allowedUserUuids) {
super(folder, reward);
this.allowedUserUuids = Collections.unmodifiableSet(new HashSet<>(allowedUserUuids));
}

@Override
public void giveReward(AdvancedCoreUser user, RewardOptions rewardOptions) {
if (user == null || user.getUUID() == null || !allowedUserUuids.contains(user.getUUID())) {
plugin.getLogger().warning("Blocked generated queued reward " + getRewardName()
+ " for a user without a matching persisted queue entry");
return;
}
super.giveReward(user, rewardOptions);
}

@Override
public boolean isGeneratedSnapshotCreated() {
// A loaded generated snapshot must retain snapshot provenance if execution is
// deferred again (paused rewards, vanish-as-offline, or another offline retry).
return true;
}

@Override
public void validate() {
// This file is a persisted snapshot created from a reward that was already
// validated before it was queued. Revalidating requires the live injected
// registries and adds no security boundary; execution is instead restricted
// to UUIDs with a matching persisted queue reference.
}

Set<String> getAllowedUserUuids() {
return allowedUserUuids;
}
}
Loading
Loading