~sircmpwn/aerc

550ef0bc1f21dfaeb1bf216b28c3fce9a816cb73 — Frode Aannevik 1 year, 3 months ago 48a88fe
Fix: oauthbearer runtime error

Configure an oauthbearer source without a token_endpoint
parameter would panic due to nil pointer dereference

  Example
    source=imaps+oauthbearer://frode.aa%40gmail.com@imap.gmail.com:993
    source-cred-cmd=pass oatuh2 frode.aa@gmail.com

token_endpoint is not required as it will use the provided
password as access_token when it is not set
1 files changed, 7 insertions(+), 6 deletions(-)

M worker/imap/worker.go
M worker/imap/worker.go => worker/imap/worker.go +7 -6
@@ 85,14 85,15 @@ func (w *IMAPWorker) handleMessage(msg types.WorkerMessage) error {
			w.config.scheme = strings.TrimSuffix(w.config.scheme, "+oauthbearer")
			w.config.oauthBearer.Enabled = true
			q := u.Query()

			oauth2 := &oauth2.Config{}
			if q.Get("token_endpoint") != "" {
				w.config.oauthBearer.OAuth2 = &oauth2.Config{
					ClientID:     q.Get("client_id"),
					ClientSecret: q.Get("client_secret"),
					Scopes:       []string{q.Get("scope")},
				}
				w.config.oauthBearer.OAuth2.Endpoint.TokenURL = q.Get("token_endpoint")
				oauth2.ClientID = q.Get("client_id")
				oauth2.ClientSecret = q.Get("client_secret")
				oauth2.Scopes = []string{q.Get("scope")}
				oauth2.Endpoint.TokenURL = q.Get("token_endpoint")
			}
			w.config.oauthBearer.OAuth2 = oauth2
		}

		w.config.addr = u.Host