Quantcast
Channel: ImapX 2
Viewing all articles
Browse latest Browse all 1952

New Post: SendAndReceive OAuth2 hangs

$
0
0
Hi Pavel,
unfortunately it still doesn't work:

ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;SendAndReceive; Command=CAPABILITY
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;SendAndReceive; text=IMAPX1 CAPABILITY

ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;SendAndReceive; loop; before Readline
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;SendAndReceive; loop; tmp=* CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 XYZZY SASL-IR AUTH=XOAUTH AUTH=XOAUTH2 AUTH=PLAIN AUTH=PLAIN-CLIENTTOKEN
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;SendAndReceive; loop; before Readline
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;SendAndReceive; loop; tmp=IMAPX1 OK Thats all she wrote! w17if9951860eei.18
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;user=myuser
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;auth=Bearer
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;token=ya29.AHES6ZQigOJ9JWdw7hEBAxk7Y3gvlC4aWCLCaH01iLrf3fmaPQn_NtY
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;Write System.Byte[]
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;Write System.Byte[]
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;Write System.Byte[]
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;SendAndReceive AUTHENTICATE XOAUTH2 "dXNlcj1zb2xpZC5jcm0BYXV0aD1CZWFyZXIgeWEyOS5BSEVTNlpRaWdPSjlKV2R3N2hFQkF4azdZM2d2bEM0YVdDTENhSDAxaUxyZjNmbWFQUW5fTnRZCgEB"
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;user=myuser
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;auth=Bearer
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;token=ya29.AHES6ZQigOJ9JWdw7hEBAxk7Y3gvlC4aWCLCaH01iLrf3fmaPQn_NtY
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;Write System.Byte[]
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;Write System.Byte[]
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;Write System.Byte[]
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;SendAndReceive; Command=AUTHENTICATE XOAUTH2 "dXNlcj1zb2xpZC5jcm0BYXV0aD1CZWFyZXIgeWEyOS5BSEVTNlpRaWdPSjlKV2R3N2hFQkF4azdZM2d2bEM0YVdDTENhSDAxaUxyZjNmbWFQUW5fTnRZCgEB"
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;SendAndReceive; text=IMAPX2 AUTHENTICATE XOAUTH2 "dXNlcj1zb2xpZC5jcm0BYXV0aD1CZWFyZXIgeWEyOS5BSEVTNlpRaWdPSjlKV2R3N2hFQkF4azdZM2d2bEM0YVdDTENhSDAxaUxyZjNmbWFQUW5fTnRZCgEB"

ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;SendAndReceive; loop; before Readline
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;SendAndReceive; loop; tmp=+ eyJzdGF0dXMiOiI0MDAiLCJzY2hlbWVzIjoiQmVhcmVyIiwic2NvcGUiOiJodHRwczovL21haWwuZ29vZ2xlLmNvbS8ifQ==
ImapX Information: 2000 : Monday, August 26, 2013 10:53 AM;IBS_TraceSource.cs;TraceEvent;LineNo 30;SendAndReceive; loop; before Readline

it hangs on the last line.
Here is your traced code:
    public bool Login(IImapCredentials credentials)
    {
        Credentials = credentials;
        IList<string> data = new List<string>();
        ImapClient.ts.TraceEvent("SendAndReceive " + credentials.ToCommand(Capabilities));
        IsAuthenticated = SendAndReceive(credentials.ToCommand(Capabilities), ref data);
        ImapClient.ts.TraceEvent("SendAndReceive is finished");
        return IsAuthenticated;
    }


    private string PrepareOAuthCredentials(string login, string token)
    {
        ImapClient.ts.TraceEvent("user=" + login);
        byte[] userData = Encoding.UTF8.GetBytes("user=" + login);
        ImapClient.ts.TraceEvent("auth=Bearer ");
        byte[] tokenLabelData = Encoding.UTF8.GetBytes("auth=Bearer ");
        ImapClient.ts.TraceEvent("token=" + token);
        byte[] tokenData = Encoding.UTF8.GetBytes(token + "\n");

        using (var stream = new MemoryStream())
        {
            ImapClient.ts.TraceEvent("Write " + userData);
            stream.Write(userData, 0, userData.Length);
            stream.WriteByte(1);
            ImapClient.ts.TraceEvent("Write " + tokenLabelData);
            stream.Write(tokenLabelData, 0, tokenLabelData.Length);
            ImapClient.ts.TraceEvent("Write " + tokenData);
            stream.Write(tokenData, 0, tokenData.Length);
            stream.WriteByte(1);
            stream.WriteByte(1);
            return Convert.ToBase64String(stream.ToArray());
        }
    }


    public bool SendAndReceive(string command, ref IList<string> data)
    {
        ImapClient.ts.TraceEvent("SendAndReceive; Command=" + command); 

        const string tmpl = "IMAPX{0} {1}";
        _counter++;

        var parts = new Queue<string>(new Regex(@"\r\n").Split(command).Where(_ => !string.IsNullOrEmpty(_)));

        string text = string.Format(tmpl, _counter, parts.Dequeue().Trim()) + "\r\n";
        ImapClient.ts.TraceEvent("SendAndReceive; text=" + text); 
        byte[] bytes = Encoding.UTF8.GetBytes(text.ToCharArray());

        try
        {
            _ioStream.Write(bytes, 0, bytes.Length);

            while (true)
            {
                ImapClient.ts.TraceEvent("SendAndReceive; loop; before Readline"); 
                string tmp = _streamReader.ReadLine();
                ImapClient.ts.TraceEvent("SendAndReceive; loop; tmp=" + tmp); 

                if (IsDebug)
                    Console.WriteLine(tmp);

                data.Add(tmp);

                if (tmp.StartsWith("+ ") && parts.Count > 0)
                {
                    ImapClient.ts.TraceEvent("SendAndReceive; loop; tmp.StartsWith(\" + \") && parts.Count > 0");
                    bytes = Encoding.UTF8.GetBytes((parts.Dequeue().Trim() + "\r\n").ToCharArray());
                    _ioStream.Write(bytes, 0, bytes.Length);
                    continue;
                }

                if (tmp.StartsWith(string.Format(tmpl, _counter, ResponseType.Ok)))
                    return true;

                if (tmp.StartsWith(string.Format(tmpl, _counter, ResponseType.PreAuth)))
                    return true;

                if (tmp.StartsWith(string.Format(tmpl, _counter, ResponseType.NO)) ||
                    tmp.StartsWith(string.Format(tmpl, _counter, ResponseType.Bad)))
                    return false;
            }
        }
        catch (AuthenticationException ex)
        {
            throw;
        }
        catch (Exception ex)
        {
            ex.ToString();
        }

        return false;
    }

Viewing all articles
Browse latest Browse all 1952

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>