hackjutsu / Lepton

💻 Democratizing Snippet Management (macOS/Win/Linux)
https://hackjutsu.com/Lepton
MIT License
10.13k stars 475 forks source link

Infinite loop caused by Github not no longer supporting authentication through query parameters #490

Closed aitor closed 3 years ago

aitor commented 3 years ago

Environment info

Description of the problem / feature request / question:

This deprecation https://developer.github.com/changes/2020-02-10-deprecating-auth-through-query-param/ causes a 400 error and that, in turn, creates an infinite loop.

Today has been the first brownout of the deprecation:

During a brownout, authentication using query parameters will temporarily fail. The goal is to trigger alerts (assuming there are any) on our customers' services to help them find unmigrated authentication calls.

The brownouts are scheduled for:

May 5, 2021: For 12 hours starting at 14:00 UTC

June 9, 2021: For 24 hours starting at 14:00 UTC

August 11, 2021: For 48 hours starting at 14:00 UTC

The feature will be eventually removed on September 8 2021 at 14:00 UTC but I've been unlucky enough to find this on my first launch of Lepton xD.

If possible, provide the log files

Gtk-Message: 19:31:18.261: Failed to load module "appmenu-gtk-module"
info: [conf] Looking for .leptonrc at /home/aitor/snap/lepton/10/.leptonrc
info:

----- Lepton v1.9.0 linux-----

info: [conf] Looking for .leptonrc at /home/aitor/snap/lepton/10/.leptonrc
info: [conf] The resolved configuration is ...
info: "theme": "light"
info: "autoUpdate": false
info: "userPanel": {"hideProfilePhoto":false}
info: "logger": {"level":"debug"}
info: "proxy": {"enable":false,"address":"socks://localhost:1080"}
info: "snippet": {"sorting":"updated_at","sortingReverse":true,"expanded":true,"newSnippetPrivate":false}
info: "editor": {"tabSize":4}
info: "enterprise": {"enable":false,"host":"","token":"","avatarUrl":""}
info: "disableNotification": false
info: "shortcuts": {"keyShortcutForSearch":"Shift+Space","keyNewGist":"CommandOrControl+N","keyEditGist":"CommandOrControl+E","keySubmitGist":"CommandOrControl+S","keyImmersiveMode":"CommandOrControl+I","keyAboutPage":"CommandOrControl+,","keyDashboard":"CommandOrControl+D","keyEditorExit":"CommandOrControl+Escape","keySyncGists":"CommandOrControl+R"}
info: "type": "literal"
info: SNAP env is defined, updater is disabled
debug: -----> registering login-page-ready listener
debug: -----> Inside getCachedUserInfo
debug: -----> [false] cachedProfile is undefined
debug: -----> [false] cachedToken is undefined
debug: -----> Inside LoginPage componentWillMount with loggedInUserInfonull
debug: -----> Registering listener for auto-login signal
debug: -----> sending login-page-ready signal
info: [signal] sending auto-login signal
debug: -----> Received "auto-login" signal with loggedInUserInfo null
init: 1776.540ms
info: Checking for update
error: Error: Error: ENOENT: no such file or directory, open '/snap/lepton/10/resources/app-update.yml'
debug: [autoUpdater] error {"errno":-2,"code":"ENOENT","syscall":"open","path":"/snap/lepton/10/resources/app-update.yml"}
(node:106332) UnhandledPromiseRejectionWarning: Error: ENOENT: no such file or directory, open '/snap/lepton/10/resources/app-update.yml'
(node:106332) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:106332) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
debug: -----> Inside launchAuthWindow with token undefined
debug: loading authUrl https://github.com/login/oauth/authorize?client_id=9e42611bb02db4547abf&scope=gistinfo: [Dispatch] updateAuthWindowStatus ON
info: [Dispatch] updateAuthWindowStatus OFF
info: [Dispatch] updateUserSession IN_PROGRESS
debug: [REST] Exchanging authCode with access token
debug: -----> calling initUserSession with new token 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
debug: -----> Inside initUserSession with access token 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
info: [Dispatch] updateAccessToken
debug: [REST] Getting user profile with token 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
debug: -----> from GET_USER_PROFILE with profile {"login":"aitor","id":4295,"node_id":"MDQ6VXNlcjQyOTU=","avatar_url":"https://avatars.githubusercontent.com/u/4295?v=4","gravatar_i
d":"","url":"https://api.github.com/users/aitor","html_url":"https://github.com/aitor","followers_url":"https://api.github.com/users/aitor/followers","following_url":"https://api.g
ithub.com/users/aitor/following{/other_user}","gists_url":"https://api.github.com/users/aitor/gists{/gist_id}","starred_url":"https://api.github.com/users/aitor/starred{/owner}{/re
po}","subscriptions_url":"https://api.github.com/users/aitor/subscriptions","organizations_url":"https://api.github.com/users/aitor/orgs","repos_url":"https://api.github.com/users/
aitor/repos","events_url":"https://api.github.com/users/aitor/events{/privacy}","received_events_url":"https://api.github.com/users/aitor/received_events","type":"User","site_admin
":false,"name":"Aitor García Rey","company":"@linkingpaths ","blog":"http://aitor.is","location":"Reykjavík","email":"hello@aitor.is","hireable":true,"bio":null,"twitter_username":null,"public_repos":67,"public_gists":97,"followers":85,"following":33,"created_at":"2008-04-02T18:50:34Z","updated_at":"2021-05-05T17:31:36Z"}
debug: [REST] [V2] Getting all gists of aitor with token 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
debug: [REST] [V2] Requesting gists with page 1
error:  name=StatusCodeError, statusCode=400, message=400 - {"message":"Must specify access token via Authorization header. https://developer.github.com/changes/2020-02-10-deprecat
ing-auth-through-query-param","documentation_url":"https://docs.github.com/v3/#oauth2-token-sent-in-a-header"}, message=Must specify access token via Authorization header. https://
developer.github.com/changes/2020-02-10-deprecating-auth-through-query-param, documentation_url=https://docs.github.com/v3/#oauth2-token-sent-in-a-header, uri=https://api.github.co
m/users/aitor/gists, agent=null, User-Agent=hackjutsu-lepton-app, method=GET, access_token=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, per_page=100, page=1, json=true, timeout=20000,
 resolveWithFullResponse=true, callback=function (...args) {          if (!sender.isDestroyed()) {
            sender._sendInternal('ELECTRON_RENDERER_CALLBACK', contextId, meta.id, valueToMeta(sender, contextId, args))
          } else {
            removeRemoteListenersAndLogWarning(this, callIntoRenderer)
          }
        }, transform=undefined, simple=true, transform2xxOnly=false, objectMode=false, highWaterMark=16384, head=null, tail=null, length=0, length=0, pipes=null, pipesCount=0, flowing=true, ended=true, endEmitted=true, reading=false, sync=true, needReadable=false, emittedReadable=false, readableListening=false, resumeScheduled=false, emitClose=true, destroyed=false, defaultEncoding=utf8, awaitDrain=0, readingMore=true, decoder=null, encoding=null, readable=false, end=[function (...args) {
          if (!sender.isDestroyed()) {
            sender._sendInternal('ELECTRON_RENDERER_CALLBACK', contextId, meta.id, valueToMeta(sender, contextId, args))
          } else {
            removeRemoteListenersAndLogWarning(this, callIntoRenderer)
          }
        }, function (...args) {
          if (!sender.isDestroyed()) {
            sender._sendInternal('ELECTRON_RENDERER_CALLBACK', contextId, meta.id, valueToMeta(sender, contextId, args))
          } else {
            removeRemoteListenersAndLogWarning(this, callIntoRenderer)
          }
        }], close=[function (...args) {
          if (!sender.isDestroyed()) {
            sender._sendInternal('ELECTRON_RENDERER_CALLBACK', contextId, meta.id, valueToMeta(sender, contextId, args))
          } else {
            removeRemoteListenersAndLogWarning(this, callIntoRenderer)
          }
        }, function (...args) {
          if (!sender.isDestroyed()) {
            sender._sendInternal('ELECTRON_RENDERER_CALLBACK', contextId, meta.id, valueToMeta(sender, contextId, args))
          } else {
            removeRemoteListenersAndLogWarning(this, callIntoRenderer)
          }
        }], data=function (...args) {
          if (!sender.isDestroyed()) {
            sender._sendInternal('ELECTRON_RENDERER_CALLBACK', contextId, meta.id, valueToMeta(sender, contextId, args))
          } else {
            removeRemoteListenersAndLogWarning(this, callIntoRenderer)
          }
        }, error=function (...args) {
          if (!sender.isDestroyed()) {
            sender._sendInternal('ELECTRON_RENDERER_CALLBACK', contextId, meta.id, valueToMeta(sender, contextId, args))
          } else {
            removeRemoteListenersAndLogWarning(this, callIntoRenderer)
          }
        }, _eventsCount=4, _maxListeners=undefined, pipe=false, init=function (...args) {

[loops hundreds of times  on the same error and finally starts the infinite loop]

(node:106332) UnhandledPromiseRejectionWarning: undefined
(node:106332) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 409)
(node:106332) UnhandledPromiseRejectionWarning: undefined
(node:106332) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 410)
(node:106332) UnhandledPromiseRejectionWarning: undefined
(node:106332) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 411)
(node:106332) UnhandledPromiseRejectionWarning: undefined
(node:106332) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 412)
(node:106332) UnhandledPromiseRejectionWarning: undefined
(node:106332) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 413)
(node:106332) UnhandledPromiseRejectionWarning: undefined
(node:106332) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 414)
(node:106332) UnhandledPromiseRejectionWarning: undefined
(node:106332) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 415)
(node:106332) UnhandledPromiseRejectionWarning: undefined
(node:106332) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 416)
(node:106332) UnhandledPromiseRejectionWarning: undefined
(node:106332) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 417)
(node:106332) UnhandledPromiseRejectionWarning: undefined
(node:106332) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 418)
(node:106332) UnhandledPromiseRejectionWarning: undefined
(node:106332) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 419)
(node:106332) UnhandledPromiseRejectionWarning: undefined
(node:106332) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 420)
(node:106332) UnhandledPromiseRejectionWarning: undefined
(node:106332) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 421)
(node:106332) UnhandledPromiseRejectionWarning: undefined
(node:106332) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 422)
(node:106332) UnhandledPromiseRejectionWarning: undefined
(node:106332) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 423)
(node:106332) UnhandledPromiseRejectionWarning: undefined
(node:106332) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 424)
(node:106332) UnhandledPromiseRejectionWarning: undefined
(node:106332) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 425)
(node:106332) UnhandledPromiseRejectionWarning: undefined
(node:106332) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 426)
(node:106332) UnhandledPromiseRejectionWarning: undefined
(node:106332) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 427)
(node:106332) UnhandledPromiseRejectionWarning: undefined
(node:106332) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 428)
(node:106332) UnhandledPromiseRejectionWarning: undefined
(node:106332) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 429)
(node:106332) UnhandledPromiseRejectionWarning: undefined
(node:106332) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 430)
(node:106332) UnhandledPromiseRejectionWarning: undefined
(node:106332) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 431)
(node:106332) UnhandledPromiseRejectionWarning: undefined
(node:106332) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 432)
(node:106332) UnhandledPromiseRejectionWarning: undefined
(node:106332) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 433)
(node:106332) UnhandledPromiseRejectionWarning: undefined
(node:106332) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 434)
(node:106332) UnhandledPromiseRejectionWarning: undefined
(node:106332) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 435)
(node:106332) UnhandledPromiseRejectionWarning: undefined
(node:106332) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 436)
(node:106332) UnhandledPromiseRejectionWarning: undefined
(node:106332) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 437)
(node:106332) UnhandledPromiseRejectionWarning: undefined
(node:106332) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 438)
(node:106332) UnhandledPromiseRejectionWarning: undefined
(node:106332) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 439)
(node:106332) UnhandledPromiseRejectionWarning: undefined
(node:106332) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 440)
(node:106332) UnhandledPromiseRejectionWarning: undefined
(node:106332) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 441)

[...]
hackjutsu commented 3 years ago

Fixed in the v1.9.2