Conversation
#398) * Launcher: add config option to disabling automatically adding cert to game's store and consolidated cert info in 'Config.Certificate' * Update launcher/internal/cmd/root.go Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Signed-off-by: David Fernández Aldana <luskaner@users.noreply.github.com> --------- Signed-off-by: David Fernández Aldana <luskaner@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
#399) * Launcher: add Server.StartWithoutCorfirmation (default false) to user input is not needed when Start is auto and no server is found * Update launcher/resources/config.toml Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Signed-off-by: David Fernández Aldana <luskaner@users.noreply.github.com> --------- Signed-off-by: David Fernández Aldana <luskaner@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
#400) * Launcher: try reverting changes for all games at the start if revert args cannot be read
* Server: Added support for auth. Fixed persistent data reading Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Signed-off-by: David Fernández Aldana <luskaner@users.noreply.github.com> --------- Signed-off-by: David Fernández Aldana <luskaner@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Contributor
There was a problem hiding this comment.
Pull request overview
This PR updates the project to “v1.13” by upgrading the Go toolchain baseline to 1.26 and expanding the LAN server ecosystem to support Age of Empires IV (age4) end-to-end (server APIs/resources, launcher workflow, battle-server-manager integration), along with introducing configurable authentication behavior.
Changes:
- Bump Go/toolchain references to Go 1.26 across modules, Dockerfiles, workspace, CI and build tasks.
- Add AoE IV (age4) support across server routes/models/resources and update launcher + battle-server-manager to handle AoE4-specific paths/cert/battle-server behavior.
- Introduce Authentication configuration (required/cached/adaptive/disabled) and connectivity detection, plus new item/presence/profile-property endpoints used by newer clients.
Reviewed changes
Copilot reviewed 185 out of 204 changed files in this pull request and generated 10 comments.
Show a summary per file
| File | Description |
|---|---|
| tools/server-replay/go.sum | Removes server-replay module sums (module dependency tracking changes). |
| tools/server-replay/go.mod | Bumps server-replay Go version to 1.26. |
| tools/server-docker/server/go.work.template | Bumps workspace Go/toolchain versions to 1.26. |
| tools/server-docker/server/Dockerfile | Uses golang:1.26 alpine image for server docker build. |
| tools/server-docker/genCert/go.work.template | Bumps workspace Go/toolchain versions to 1.26. |
| tools/server-docker/genCert/Dockerfile | Uses golang:1.26 alpine image for genCert docker build. |
| tools/scripts/internal/goreleaser/project.go | Adjusts macOS target detection to use Goos(). |
| tools/scripts/internal/goreleaser/os.go | Splits Windows targets into legacy/modern; introduces toolchain selection hook. |
| tools/scripts/internal/goreleaser/constants.go | Updates OS target set to include Windows legacy/modern. |
| tools/scripts/internal/goreleaser/config.go | Adjusts Windows naming override + OS keying for script ignore rules. |
| tools/scripts/internal/goreleaser/binary.go | Refactors BinaryTargets initialization (currently broken per review comments). |
| tools/scripts/go.mod | Bumps Go version; updates/extends indirect dependencies. |
| server/resources/windows/start_age4.bat | Adds AoE4 server start script for Windows. |
| server/resources/unix/start_age4.sh | Adds AoE4 server start script for Unix. |
| server/resources/responses/athens/itemLocations.json | Adds item location responses for athens. |
| server/resources/responses/age4/presenceData.json | Adds AoE4 presence definitions data. |
| server/resources/responses/age4/levelRewardsTable.json | Adds AoE4 level rewards table asset. |
| server/resources/responses/age4/itemLocations.json | Adds AoE4 item locations responses. |
| server/resources/responses/age3/itemLocations.json | Adds AoE3 item locations responses. |
| server/resources/responses/age2/itemLocations.json | Adds AoE2 item locations responses. |
| server/resources/config/config.toml | Adds Authentication config + age4 game hosts section; updates supported games list. |
| server/resources/config/age4/login.json | Adds AoE4 login/config key-value data. |
| server/internal/runtime.go | Adds runtime flags for connectivity/authentication. |
| server/internal/routes/wss/wss.go | Adjusts comm logging and error handling (currently broken per review comments). |
| server/internal/routes/router/playfabapiMiddleware.go | Supports AoE4 auth header differences (X-Sessionticket vs X-Entitytoken). |
| server/internal/routes/router/playfabapi.go | Enables PlayFab API for AoE4 and gates routes by game type. |
| server/internal/routes/router/loginMiddleware.go | Adds middleware to bind login request and create user prior to handlers. |
| server/internal/routes/router/authMiddleware.go | Adds upstream-auth/cached-auth middleware with CA pinning and item refresh. |
| server/internal/routes/router/apiAgeOfEmpires.go | Simplifies proxy initializer closure args. |
| server/internal/routes/playfab/Client/LoginWithSteam.go | Refactors login flow into shared helper and supports multiple games/sessions. |
| server/internal/routes/playfab/Client/LoginWithCustomID.go | Adds AoE4 LoginWithCustomID handler. |
| server/internal/routes/playfab/Client/GetUserData.go | Adds AoE4 GetUserData handler exposing RLinkProfileID. |
| server/internal/routes/game/relationship/setPresenceProperty.go | Implements SetPresenceProperty with presence notifications. |
| server/internal/routes/game/relationship/setPresence.go | Refactors presence change notifications + adds presence data encoding. |
| server/internal/routes/game/relationship/ignore.go | Switches to EncodeProfileInfo. |
| server/internal/routes/game/relationship/getRelationships.go | Adds AoE4 relationship response handling + presence-aware profile encoding. |
| server/internal/routes/game/relationship/clearRelationship.go | Changes return code for ClearRelationship. |
| server/internal/routes/game/relationship/addfriend.go | Switches to EncodeProfileInfo. |
| server/internal/routes/game/party/updateHost.go | Enforces host-only host-update with locking and success/error codes. |
| server/internal/routes/game/party/peerUpdate.go | Uses UnsafeGetHostId for host check under lock. |
| server/internal/routes/game/party/peerAdd.go | Extends peer creation to include party id. |
| server/internal/routes/game/login/platformlogin.go | Moves request/user creation to middleware; presence + relationships now presence-aware. |
| server/internal/routes/game/login/logout.go | Adds AoE4 handling for logout notifications + presence definitions usage. |
| server/internal/routes/game/leaderboard/shared/leaderboard.go | Switches to EncodeProfileInfo / EncodeExtraProfileInfo. |
| server/internal/routes/game/leaderboard/setAvatarStatValues.go | Adds TODO regarding AoE4 fixed stats. |
| server/internal/routes/game/leaderboard/getStatGroupsByProfileIDs.go | Changes include-extra-profile-info logic to AoE2 only. |
| server/internal/routes/game/leaderboard/getRecentMatchSinglePlayerHistory.go | Adds stub handler for recent single-player match history. |
| server/internal/routes/game/item/updateItemLoadout.go | Adds item loadout update endpoint. |
| server/internal/routes/game/item/updateItemAttributes.go | Adds endpoint to update item metadata attributes and versions. |
| server/internal/routes/game/item/moveItem.go | Adds endpoint to move items between locations/slots. |
| server/internal/routes/game/item/getScheduledSaleAndItems.go | Adds stub endpoint for scheduled sale. |
| server/internal/routes/game/item/getPersonalizedSaleItems.go | Adds stub endpoint for personalized sale items. |
| server/internal/routes/game/item/getLevelRewardsTableJson.go | Adds signed asset serving for levelRewardsTable.json. |
| server/internal/routes/game/item/getItemPrices.go | Adds stub endpoint for item prices. |
| server/internal/routes/game/item/getItemLoadouts.go | Implements retrieval of persisted item loadouts. |
| server/internal/routes/game/item/getInventoryByProfileIDs.go | Implements inventory + item locations response plumbing. |
| server/internal/routes/game/item/equipItemLoadout.go | Adds equip item loadout endpoint. |
| server/internal/routes/game/item/detachItems.go | Adds detach items endpoint updating item state. |
| server/internal/routes/game/item/createItemLoadout.go | Adds create item loadout endpoint with validation. |
| server/internal/routes/game/invitation/replyToInvitation.go | Switches to EncodeProfileInfo. |
| server/internal/routes/game/invitation/extendInvitation.go | Switches to EncodeProfileInfo. |
| server/internal/routes/game/invitation/cancelInvitation.go | Switches to EncodeProfileInfo. |
| server/internal/routes/game/communityEvent/getAvailableCommunityEvents.go | Adds AoE4 handling for community event response shape. |
| server/internal/routes/game/cloud/getTempCredentials.go | Adds TODO for AoE4 replay download behavior. |
| server/internal/routes/game/cloud/getFileURL.go | Improves multi-name behavior + error aggregation; handles nil cloudFiles. |
| server/internal/routes/game/chat/sendWhisper.go | Extends AoE4 to AoM-style whisper payload shape + EncodeProfileInfo usage. |
| server/internal/routes/game/chat/leaveChannel.go | Switches to EncodeProfileInfo. |
| server/internal/routes/game/chat/joinChannel.go | Switches to EncodeProfileInfo. |
| server/internal/routes/game/advertisement/updateTags.go | Uses UnsafeGetHostId under write lock. |
| server/internal/routes/game/advertisement/updatePlatformLobbyID.go | Adjusts metadata source + message shape for AoE2/AoE4/AoM. |
| server/internal/routes/game/advertisement/update.go | Alters per-game joinable/platform-session behavior and response encoding set. |
| server/internal/routes/game/advertisement/shared/advertisementRequest.go | Adds ServiceType field. |
| server/internal/routes/game/advertisement/join.go | Adds AoE4 “party” constraints and peer party propagation. |
| server/internal/routes/game/advertisement/host.go | Adds AoE4 semantics (matchmaking allow, party linking, response shape changes). |
| server/internal/routes/game/advertisement/findAdvertisements.go | Enables tag filtering for AoE4. |
| server/internal/routes/game/account/setAvatarMetadata.go | Switches to EncodeProfileInfo. |
| server/internal/routes/game/account/getProfileProperty.go | Implements property fetch by profile + key. |
| server/internal/routes/game/account/getProfileName.go | Switches to users.EncodeProfileInfo API. |
| server/internal/routes/game/account/findProfilesByPlatformID.go | Adds presence-aware profile encoding. |
| server/internal/routes/game/account/findProfiles.go | Adds presence-aware profile encoding. |
| server/internal/routes/game/account/clearProfileProperty.go | Adds endpoint to delete a profile property. |
| server/internal/routes/game/account/addProfileProperty.go | Adds endpoint to set a profile property. |
| server/internal/models/resources.go | Refactors resources initialization opts; adds SignedAssets; improves signature parsing. |
| server/internal/models/profileProperty.go | Adds persistent default data type for profile properties. |
| server/internal/models/profileMetadata.go | Adds AoE4 default avatar metadata format. |
| server/internal/models/presence.go | Adds presence definitions model (currently broken per review comments). |
| server/internal/models/playfab/static.go | Updates PlayFab static id value. |
| server/internal/models/playfab/session.go | Refactors session token fields and adds CreateWithUserId; Token() accessor. |
| server/internal/models/playfab/game.go | Adds PlayFab-capable Game interface/base wrapper. |
| server/internal/models/playfab/data/data.go | Adjusts marshaling format (currently broken per review comments). |
| server/internal/models/persistentJsonData.go | Refactors wrapper read path for persistent string JSON map metadata. |
| server/internal/models/peer.go | Adds party to peers and updates constructor signature. |
| server/internal/models/mainGame.go | Removes old MainGame implementation (moved/refactored elsewhere). |
| server/internal/models/itemLoadout.go | Adds item loadout model + persistence defaults. |
| server/internal/models/initializer/initializer.go | Wires age4 game initialization. |
| server/internal/models/game.go | Reintroduces/refactors MainGame with opts; adds Items + PresenceDefinitions into Game interface. |
| server/internal/models/chatChannel.go | Switches channel user encoding to EncodeProfileInfo. |
| server/internal/models/battleServerLoader.go | Requires battle servers for AoE4/AoM; simplifies error message. |
| server/internal/models/battleServer.go | Refactors battle server init into opts struct. |
| server/internal/models/avatarStats.go | Adds TODO note regarding AoE4 benefits. |
| server/internal/models/auth.go | Adds persistent auth-cache timestamp model. |
| server/internal/models/athens/user/user.go | Updates user generation signature to include item definitions. |
| server/internal/models/athens/game.go | Refactors athens game to use PlayFab BaseGame and new CreateMainGame opts. |
| server/internal/models/age4/game.go | Adds AoE4 game wiring (PlayFab + resources + battle-server opts). |
| server/internal/models/age3/game.go | Refactors AoE3 CreateGame to new CreateMainGame opts. |
| server/internal/models/age2/game.go | Refactors AoE2 CreateGame to new CreateMainGame opts. |
| server/internal/models/age1/game.go | Refactors AoE1 CreateGame to new CreateMainGame opts. |
| server/internal/logger/commLog.go | Changes uptime calculation (currently broken per review comments). |
| server/internal/http.go | Filters schema decode errors via typed matching helper usage. |
| server/internal/errors.go | Adds ErrInvalidAuthentication exit code. |
| server/internal/config.go | Adds age4 config + Authentication config field. |
| server/internal/cmd/root.go | Adds Authentication config validation + connectivity detection; fixes viper binding call. |
| server/internal/boolInt.go | Adds generic bool<->number mapping helper type for JSON. |
| server/internal/Map.go | Adds SafeOrderedMap.First and refactors ro map store (currently broken per review comments). |
| server/go.mod | Bumps Go version; dependency updates; adds x/exp version. |
| server/README.md | Updates docs for Go 1.26 and AoE4 resources/cert behavior. |
| server/BattleServers.md | Adds AoE4 battle server guidance + port examples; fixes game list. |
| server-genCert/go.sum | Updates sums after Go/toolchain changes. |
| server-genCert/go.mod | Bumps Go version to 1.26. |
| launcher/resources/windows/start_age4.bat | Adds AoE4 launcher start script for Windows. |
| launcher/resources/unix/start_age4.sh | Adds AoE4 launcher start script for Unix. |
| launcher/resources/config.toml | Restructures certificate config; adds StartWithoutConfirmation and other server start controls. |
| launcher/resources/config.game.toml | Updates config comments to new cert config keys + AoE4 path rules. |
| launcher/internal/server/ssl.go | Adds User-Agent header to CA cert fetch request (leaves stale TODO). |
| launcher/internal/server/server.go | Adds User-Agent header when probing server. |
| launcher/internal/config.go | Adds nested certificate config + StartWithoutConfirmation. |
| launcher/internal/cmdUtils/game.go | Updates message pointing to new certificate config key. |
| launcher/internal/cmdUtils/cert.go | Simplifies manual-trust warning message. |
| launcher/internal/cmdUtils/caCert.go | Threads “canAddCert” flag through game CA-store update logic. |
| launcher/internal/cmd/root.go | Adds AoE4 in CLI behavior; config restructure; AoE4-specific constraints and auto-start prompt control. |
| launcher/go.sum | Updates sums after Go/toolchain/dependency changes. |
| launcher/go.mod | Bumps Go version; dependency updates. |
| launcher/README.md | Updates doc wording for certificate-store exceptions (AoE4). |
| launcher-config/internal/cmd/setUp.go | Adds AoE4 CA-store restore exception logic + help text update. |
| launcher-config/internal/cmd/root.go | Updates help text for AoE4 CA-store behavior. |
| launcher-config/internal/cmd/revert.go | Adds AoE4 CA-store restore exception logic + help text update. |
| launcher-config/go.sum | Updates sums after Go/toolchain changes. |
| launcher-config/go.mod | Bumps Go version to 1.26. |
| launcher-config/README.md | Updates supported games list to include age4/athens. |
| launcher-config-admin/go.sum | Updates sums after Go/toolchain changes. |
| launcher-config-admin/go.mod | Bumps Go version to 1.26. |
| launcher-config-admin-agent/go.sum | Updates sums after Go/toolchain changes. |
| launcher-config-admin-agent/go.mod | Bumps Go version to 1.26. |
| launcher-common/userData/userData.go | Adds AoE4 user-data root path differences (My Games) and path prefix rules. |
| launcher-common/userData/profiles.go | Treats AoE4 like AoE1 for profile folder naming. |
| launcher-common/userData/metadata.go | Adds AoE4 metadata folder path. |
| launcher-common/userData/backup_windows.go | Adds AoE4 base-path resolution using KnownFolder(Documents). |
| launcher-common/serverKill/serverKill_windows.go | Adds User-Agent to shutdown calls; modifies wait logic (currently broken per review comments). |
| launcher-common/go.sum | Updates sums after Go/toolchain changes. |
| launcher-common/go.mod | Bumps Go version to 1.26. |
| launcher-common/configRevert.go | Refactors revert flow to support “all games” and unified flag generation. |
| launcher-agent/main.go | Excludes AoE4 from Windows broadcast-battleserver behavior. |
| launcher-agent/internal/gameLogs/gameLogs.go | Adds AoE4 game log copying; refactors glob constants. |
| launcher-agent/internal/gameLogs/age4.go | Implements AoE4 log discovery/copying. |
| launcher-agent/internal/gameLogs/age1.go | Simplifies error handling for glob results. |
| launcher-agent/go.sum | Adds missing go.mod sum entry. |
| launcher-agent/go.mod | Bumps Go version to 1.26. |
| go.work | Bumps workspace Go/toolchain to 1.26 and reorders modules. |
| common/resolve.go | Adds DNSConnectivity() helper for auth/connectivity decisions. |
| common/http.go | Adds common User-Agent helper. |
| common/go.sum | Updates sums after Go/toolchain/dependency changes. |
| common/go.mod | Bumps Go version; updates x/mod and x/tools versions. |
| common/game/steam/steam.go | Adds Steam AppID for AoE4. |
| common/game/appx/appx_windows.go | Adds AoE4 AppX suffix; adjusts install location resolution flow. |
| common/game.go | Adds AoE4 to SupportedGames. |
| common/executor/exec/executor.go | Switches to typed error matching helper usage. |
| common/domain.go | Adds AoE4 domains + host resolution; updates release domain patterns; adjusts self-signed cert rules. |
| common/announce.go | Minor comment wording update. |
| battle-server-manager/resources/windows/start_age4.bat | Adds AoE4 battle-server-manager start script for Windows. |
| battle-server-manager/resources/unix/start_age4.sh | Adds AoE4 battle-server-manager start script for Unix. |
| battle-server-manager/resources/config.game.toml | Documents AoE4 battle-server exe sourcing and SSL file rules. |
| battle-server-manager/internal/cmdUtils/ssl.go | Uses default cert/key for AoE4 like AoM. |
| battle-server-manager/internal/cmdUtils/executor.go | Uses AoE2 BattleServer.exe for AoE4; adjusts simulation period. |
| battle-server-manager/internal/cmd/start.go | Fixes config-not-found detection and conditional config logging. |
| battle-server-manager/go.sum | Updates sums after Go/toolchain/dependency changes. |
| battle-server-manager/go.mod | Bumps Go version; dependency updates. |
| Taskfile.yml | Passes legacy GOROOT argument to goreleaser config generator. |
| Taskfile.debug.yml | Adds debug task dependencies/build steps for battle-server-manager. |
| README.md | Updates top-level docs for AoE4 support, Go 1.26, and revised launcher behavior. |
| DEVELOPMENT.md | Updates dev requirements and env setup for legacy GOROOT; adds CGO guidance. |
| .gitignore | Stops ignoring go.work; ignores tools/**/go.sum; minor formatting. |
| .github/workflows/releaser.yml | Updates Go version; uses go.work.sum cache path; adds legacy Go setup step; runs goreleaser config generator with argument. |
| .github/workflows/codeql.yml | Adds build of generateGoreleaserConfig tool in manual build script. |
| .github/ISSUE_TEMPLATE/bug_report.md | Adds AoE4 checkbox; clarifies OS field wording. |
| .env.example | Adds GOROOT_LEGACY env var placeholder. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.