FAForever Forums
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Login
    The current pre-release of the client ("pioneer" in the version) is only compatible to itself. So you can only play with other testers. Please be aware!

    Neroxis-Map-Generator 403 FORBIDDEN

    Scheduled Pinned Locked Moved FAF support (client and account issues)
    15 Posts 6 Posters 199 Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Y Offline
      Yandex_Support
      last edited by Yandex_Support

      When clicking the “Generate Map” button in the FAF launcher (version 2025.11.3), the operation fails with a 403 Forbidden error. The launcher attempts to fetch data from the GitHub API endpoint:
      https://api.github.com/repos/FAForever/Neroxis-Map-Generator/releases
      but receives a “403 Forbidden” response.
      In a sample of 7 friends from russia, 4 have this problem =(

      Client Version: 2025.11.3
      org.springframework.web.reactive.function.client.WebClientResponseException$Forbidden: 403 Forbidden from GET https://api.github.com/repos/FAForever/Neroxis-Map-Generator/releases
      	at org.springframework.web.reactive.function.client.WebClientResponseException.create(WebClientResponseException.java:323)
      	Suppressed: The stacktrace has been enhanced by Reactor, refer to additional information below: 
      Error has been observed at the following site(s):
      	*__checkpoint ⇢ 403 FORBIDDEN from GET https://api.github.com/repos/FAForever/Neroxis-Map-Generator/releases [DefaultWebClient]
      Original Stack Trace:
      		at org.springframework.web.reactive.function.client.WebClientResponseException.create(WebClientResponseException.java:323)
      		at org.springframework.web.reactive.function.client.DefaultClientResponse.lambda$createException$1(DefaultClientResponse.java:214)
      		at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:106)
      		at reactor.core.publisher.FluxOnErrorReturn$ReturnSubscriber.onNext(FluxOnErrorReturn.java:162)
      		at reactor.core.publisher.FluxDefaultIfEmpty$DefaultIfEmptySubscriber.onNext(FluxDefaultIfEmpty.java:122)
      		at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:129)
      		at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onNext(FluxContextWrite.java:107)
      		at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.onNext(FluxMapFuseable.java:299)
      		at reactor.core.publisher.FluxFilterFuseable$FilterFuseableConditionalSubscriber.onNext(FluxFilterFuseable.java:337)
      		at reactor.core.publisher.Operators$BaseFluxToMonoOperator.completePossiblyEmpty(Operators.java:2096)
      		at reactor.core.publisher.MonoCollect$CollectSubscriber.onComplete(MonoCollect.java:145)
      		at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:144)
      		at reactor.core.publisher.FluxPeek$PeekSubscriber.onComplete(FluxPeek.java:260)
      		at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:144)
      		at reactor.netty.channel.FluxReceive.onInboundComplete(FluxReceive.java:413)
      		at reactor.netty.channel.ChannelOperations.onInboundComplete(ChannelOperations.java:464)
      		at reactor.netty.channel.ChannelOperations.terminate(ChannelOperations.java:518)
      		at reactor.netty.http.client.HttpClientOperations.onInboundNext(HttpClientOperations.java:925)
      		at reactor.netty.channel.ChannelOperationsHandler.channelRead(ChannelOperationsHandler.java:115)
      		at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)
      		at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
      		at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
      		at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436)
      		at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:346)
      		at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:318)
      		at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251)
      		at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)
      		at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
      		at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
      		at io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1519)
      		at io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1377)
      		at io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1428)
      		at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:530)
      		at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:469)
      		at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:290)
      		at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)
      		at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
      		at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
      		at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357)
      		at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440)
      		at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
      		at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868)
      		at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)
      		at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:796)
      		at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:732)
      		at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:658)
      		at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562)
      		at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:998)
      		at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
      		at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
      		at java.base/java.lang.Thread.run(Thread.java:1474)
      

      57b0d273-271a-4e7f-8a9b-2e33b4d88c98-image.png

      I also duplicated it in the technical channel in the discord, because I'm not sure where to write it more correctly.

      1 Reply Last reply Reply Quote 1
      • S Offline
        Sheikah
        last edited by

        This means that either github or someone between you and github are blocking you. Can you get to https://github.com/FAForever/Neroxis-Map-Generator
        at all? Maybe with a VPN?

        Y 1 Reply Last reply Reply Quote 0
        • Y Offline
          Yandex_Support @Sheikah
          last edited by

          @Sheikah I forgot to mention this in the post, thanks for good point. I have access to GitHub both with and without a VPN; it isn’t blocked in Russia. However, the generator still doesn’t work, regardless of whether the VPN is on or off.

          1 Reply Last reply Reply Quote 1
          • S Offline
            Sheikah
            last edited by

            The only other thing I could think of is that your ip reached the github api rate limit. But I am not sure how the client by itself could do that

            1 Reply Last reply Reply Quote 0
            • Y Offline
              Yandex_Support
              last edited by

              I’m changing my IP address using a VPN, but the problem still persists. I think roughly a third of the Russian-speaking community is experiencing the same issue right now — possibly not only Russian-speaking users, but I don’t really have anyone else to ask.

              Does anyone have any advice on how this can be worked around? A friend tried installing a generator from GitHub and generating the maps locally, but for some reason it didn’t work.

              1 Reply Last reply Reply Quote 0
              • maggeM Offline
                magge Moderator FAF Association Board
                last edited by

                To clarify: the VPN exit is located in a different country, correct? (Optionally within the EU)

                AFAIK, even VPN connections may encounter issues, as the RU state uses advanced techniques (e.g. deep packet inspection (DPI)) to analyze/interfere with network traffic.

                Join a FAFtastic Team | Join the FAForever Association

                Y 1 Reply Last reply Reply Quote 0
                • Y Offline
                  Yandex_Support
                  last edited by Yandex_Support

                  Yes, I’ve tried German, Dutch, and US VPNs (and, just in case, a Moscow-based VPN xd)
                  The issue started about two weeks ago and seems to be intermittent — very rarely, but occasionally, I’m able to create a map without encountering this error.

                  I’m not very knowledgeable in this area, but it seems to me that the problem is not related to blocking or restrictions on our side.

                  FYI: We bypass DPI checks using third-party tools (not VPNs), but they don’t affect the generator either.

                  If I can provide any additional logs that might help resolve the issue, please let me know!

                  1 Reply Last reply Reply Quote 0
                  • Y Offline
                    Yandex_Support
                    last edited by

                    When I visit the link https://api.github.com/repos/FAForever/Neroxis-Map-Generator/releases, I get the message:
                    {"message":"API rate limit exceeded for 144.31.14.104. (But here's the good news: Authenticated requests get a higher rate limit. Check out the documentation for more details.)","documentation_url":"https://docs.github.com/rest/overview/resources-in-the-rest-api#rate-limiting"}
                    The IP is Dutch, which I assume belongs to the launcher servers. So, if I understand correctly, the launcher has exceeded the GitHub API rate limit.

                    1 Reply Last reply Reply Quote 0
                    • maggeM Offline
                      magge Moderator FAF Association Board
                      last edited by

                      Indeed, you encounter API limiting on your VPN IPs. Most likely the VPNs are already used by lot of other people and cause significant traffic. (Or it gets limited due security concerns)

                      To resolve this, you need to find a higher quality VPN service, where its servers are not getting limited.

                      Join a FAFtastic Team | Join the FAForever Association

                      1 Reply Last reply Reply Quote 1
                      • Brutus5000B Offline
                        Brutus5000 FAF Server Admin
                        last edited by

                        VPNs use one ip address for many many users. Most rate limiting techniques assumes one ip = one user. So the overall Github usage of all VPN users can cause the rate limit to trigger.

                        He said, "I've been to the year 3000
                        Not much has changed, but they live underwater
                        And your great-great-great-granddaughter
                        Is playin' FAF, playin' FAF"

                        1 Reply Last reply Reply Quote 1
                        • Y Offline
                          Yandex_Support @magge
                          last edited by Yandex_Support

                          @magge But my friends are getting exactly the same error with the same IP address, and he dont use VPN. Likewise, I also get the same error without using a VPN, from that same Dutch IP (144.31.14.104), which is not associated with me or my friends in any way.

                          1 Reply Last reply Reply Quote 0
                          • P Offline
                            plum-
                            last edited by

                            • same error
                            1 Reply Last reply Reply Quote 0
                            • V Offline
                              Vesel4aK
                              last edited by

                              +same error
                              {"message":"API rate limit exceeded for 144.31.14.104. (But here's the good news: Authenticated requests get a higher rate limit. Check out the documentation for more details.)","documentation_url":"https://docs.github.com/rest/overview/resources-in-the-rest-api#rate-limiting"}

                              1 Reply Last reply Reply Quote 0
                              • Y Offline
                                Yandex_Support
                                last edited by

                                so:

                                Without a VPN, my IP address is 123.
                                With a US VPN, my IP address is 321.
                                With another VPN, it’s 222.

                                Four of my friends, under the same conditions, have even more IP combinations.

                                However, when accessing the API
                                https://api.github.com/repos/FAForever/Neroxis-Map-Generator/releases,
                                we all get the same error:

                                {"message":"API rate limit exceeded for 144.31.14.104"}

                                We don’t know what the IP address 144.31.14.104 is, as it doesn’t belong to any of us.

                                1 Reply Last reply Reply Quote 0
                                • Y Offline
                                  Yandex_Support
                                  last edited by

                                  The issue was on our side ( xd ) — we needed to remove the GitHub Copilot entries from the hosts file
                                  thank you all!

                                  /thread

                                  1 Reply Last reply Reply Quote 3

                                  Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                                  Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                                  With your input, this post could be even better 💗

                                  Register Login
                                  • First post
                                    Last post