From 50856885893dd8af996195429f7122a681fe2f01 Mon Sep 17 00:00:00 2001 From: Micah Date: Sun, 5 Jul 2026 22:31:22 -0700 Subject: [PATCH] Add check for if you've denied the plugin permission to access api.github.com --- plugin/src/App/StatusPages/Settings/init.lua | 3 +++ plugin/src/Version.lua | 24 ++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/plugin/src/App/StatusPages/Settings/init.lua b/plugin/src/App/StatusPages/Settings/init.lua index b63d30e5..b93eba3e 100644 --- a/plugin/src/App/StatusPages/Settings/init.lua +++ b/plugin/src/App/StatusPages/Settings/init.lua @@ -8,6 +8,7 @@ local Log = require(Packages.Log) local Assets = require(Plugin.Assets) local Settings = require(Plugin.Settings) local Theme = require(Plugin.App.Theme) +local Version = require(Plugin.Version) local IconButton = require(Plugin.App.Components.IconButton) local ScrollingFrame = require(Plugin.App.Components.ScrollingFrame) @@ -193,6 +194,8 @@ function SettingsPage:render() id = "checkForUpdates", name = "Check For Updates", description = "Notify about newer compatible Rojo releases", + locked = Version.isApiBlocked(), + lockedTooltip = "(HTTP requests to api.github.com are blocked, Rojo cannot fetch what the latest version is.)", transparency = self.props.transparency, layoutOrder = layoutIncrement(), }), diff --git a/plugin/src/Version.lua b/plugin/src/Version.lua index 197de133..8a43ba49 100644 --- a/plugin/src/Version.lua +++ b/plugin/src/Version.lua @@ -111,6 +111,23 @@ Version._cachedLatestCompatible = nil :: { timestamp: number, }? +--[[ + A user may choose to reject requests to api.github.com. If they do, we want + to disable the option to enable checks altogether. +]] +Version._apiBlocked = nil :: boolean? + +function Version.isApiBlocked(): boolean + if Version._apiBlocked == nil then + local isLocalInstall = string.find(debug.traceback(), "\n[^\n]-user_.-$") ~= nil + Version.retrieveLatestCompatible({ + version = Config.version, + includePrereleases = isLocalInstall and Settings:get("checkForPrereleases"), + }) + end + return Version._apiBlocked +end + function Version.retrieveLatestCompatible(options: { version: { number }, includePrereleases: boolean?, @@ -136,8 +153,15 @@ function Version.retrieveLatestCompatible(options: { :await() if success == false or type(releases) ~= "table" or next(releases) ~= 1 then + -- Roblox's HTTP errors are weird! + if string.find(tostring(releases), "^Unknown HTTP error: HttpService permission denied") then + Log.debug("Requests to api.github were denied by user, disabling update check") + Settings:set("checkForUpdates", false) + Version._apiBlocked = true + end return nil end + Version._apiBlocked = false -- Iterate through releases, looking for the latest compatible version local latestCompatible: LatestReleaseInfo? = nil