Re: Cyrus Jmap support question

2018-05-22 Thread Zhivko Vasilev

Thanks a lot, Ken,

Both hints work perfectly :)

Regards,
Zhivko


On Tue, May 22, 2018, at 8:36 AM, Ken Murchison wrote:
> You're getting a 301 because the JMAP endpoint is actually /jmap/ and
> not /jmap (note the trailing '/').  I'm not sure why our
> implementation requires this.  That would be a question for Robert S.> This 
> request works fine on my laptop using the current Cyrus code
> from Git:> curl --verbose --http2 -X POST -H "Content-Type: application/json" 
> -H
> "Accept: application/json" --user ken>  -d 
> '{"using":["ietf:jmap","ietf:jmapmail"],"methodCalls":[["Mailbox/-
>  get",{"accountId":null,"ids":null},"#1"]]}' https://localhost/jmap> 


> 
> On 05/21/2018 01:47 PM, Zhivko Vasilev wrote:
>> curl --verbose --http2 -X POST \
>>  -H "Content-Type: application/json" \
>>  -H "Accept: application/json" \
>>  --user u...@cyrus.mailtemi.com:q \
>>  -d '[["Mailbox/get", {}, "#1"],"using":["jmap-core","jmap-
>>  mail"]]' \>>  http://[1]35.192.121.94:443[2]/jmap[3]";
> 
> -- Ken Murchison Cyrus Development Team FastMail US LLC
> Email had 1 attachment:


>  * murch.vcf
>   1k (text/x-vcard)


Links:

  1. http://35.192.121.94/jmap
  2. https://my.ip.address:443/jmap
  3. http://35.192.121.94/jmap


Re: Cyrus Jmap support question

2018-05-22 Thread Ken Murchison
You're getting a 301 because the JMAP endpoint is actually /jmap/ and 
not /jmap (note the trailing '/').  I'm not sure why our implementation 
requires this.  That would be a question for Robert S.


This request works fine on my laptop using the current Cyrus code from Git:

curl --verbose --http2 -X POST -H "Content-Type: application/json" -H 
"Accept: application/json" --user ken
-d 
'{"using":["ietf:jmap","ietf:jmapmail"],"methodCalls":[["Mailbox/get",{"accountId":null,"ids":null},"#1"]]}' 
https://localhost/jmap



On 05/21/2018 01:47 PM, Zhivko Vasilev wrote:

curl --verbose --http2 -X POST \
 -H "Content-Type: application/json" \
 -H "Accept: application/json" \
 --user u...@cyrus.mailtemi.com :q \
 -d '[["Mailbox/get", {}, "#1"],"using":["jmap-core","jmap-mail"]]' \
http:// 35.192.121.94:443 
/jmap "


--
Ken Murchison
Cyrus Development Team
FastMail US LLC

<>

Re: Cyrus Jmap support question

2018-05-22 Thread Ken Murchison
Set the 'debug' option in imapd.conf to 'on' and make sure that your 
syslog config is  logging 'local6' at the debug level.



On 05/22/2018 10:49 AM, Zhivko Vasilev wrote:


Hello Bron, Ken,

To clarify, that I do not use official FastMail server.
I've built Cyrus sever from https://github.com/cyrusimap/cyrus-imapd
With JMAP and HTTP/2 support enabled. Assume this is the closest 
implementation to the JMAP RFC?


Seem the problem is with HTTP/2 settings frame. Client and server 
exchange their settings frame, but on the first data frame, the server 
reset the stream with PROTOCOL_ERROR  0x1.
From the source, I saw that Cyrus uses nghttp2 and they provide sample 
http/2 server, so I'll try to use it to see what happens.

So most probably it is a http/2 compatibility issue.

After dig the Cyrus code seems HTTP/2 callback code is located in 
http_h2.c and there are syslog calls , but cannot make it log.


Thanks a lot,
Zhivko Vasilev

On Tue, May 22, 2018, at 7:19 AM, Ken Murchison wrote:


I am just back home after a holiday.  I will look into this sometime 
today or tomorrow after I catch up on other items.




On 05/21/2018 01:47 PM, Zhivko Vasilev wrote:

Hello Everyone,

I hope you can help me.

I'm implementing a JMAP client and try to use Cyrus as reference server.
Send and Receive via IMAP/SMTP work fine.
But when I try to connect via HTTP/2 , connection is reset by HTTP/2 
reset stream command.


imapd.log file show only  "starttls: TLSv1.2 with cipher 
ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits new) no authentication"


My http2 call is POST https:// 
cyrus.mailtemi.com 
:443/jmap 

HEADERS:
"accept", "application/json"
"content-type", "application/json"
"Authorization", "base64 encoded user name:pass"
BODY:
{"methodCalls":[["Mailbox/get",{},"#1"]],"using":["jmap-core","jmap-mail"]}

Is there a way to turn on HTTP log to track what I do incorrectly.

I tried to track with curl  the server allways reponded with HTTP 
error 301.

The  command I've tried was
"curl --verbose --http2 -X POST \
 -H "Content-Type: application/json" \
 -H "Accept: application/json" \
 --user u...@cyrus.mailtemi.com :q \
 -d '[["Mailbox/get", {}, 
"#1"],"using":["jmap-core","jmap-mail"]]' \
http:// 35.192.121.94:443 
/jmap "

returned
* Connected to 35.192.121.94 (35.192.121.94) port 80 (#0)
* Server auth using Basic with user 'u...@cyrus.mailtemi.com 
'

> POST /jmap HTTP/1.1
> Host: 35.192.121.94
> Authorization: Basic dTFAY3lydXMubWFpbHRlbWkuY29tOnE=
> User-Agent: curl/7.58.0
> Connection: Upgrade, HTTP2-Settings
> Upgrade: h2c
> HTTP2-Settings: AAMAAABkAARAAAIA
> Content-Type: application/json
> Accept: application/json
> Content-Length: 61
>
* upload completely sent off: 61 out of 61 bytes
< HTTP/1.1 101 Switching Protocols
< Connection: Upgrade
< Upgrade: h2c
* Received 101
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after 
upgrade: len=0

* Connection state changed (MAX_CONCURRENT_STREAMS updated)!
< HTTP/2 301
< date: Mon, 21 May 2018 17:36:58 GMT
< location: /jmap/
< vary: Accept-Encoding
< content-length: 0
<
* Connection #0 to host 35.192.121.94 left intact

Please give me some advice or clue how to track what is the problem.
I'm stuck at this point for two days :(

Thanks ,
Zhivko Vasilev



--
Ken Murchison
Cyrus Development Team
FastMail US LLC

Email had 1 attachment:

 *
|murch.vcf|
  1k (text/x-vcard)





--
Ken Murchison
Cyrus Development Team
FastMail US LLC

<>

Re: Cyrus Jmap support question

2018-05-22 Thread Zhivko Vasilev

Hello Bron, Ken,

To clarify, that I do not use official FastMail server.
I've built Cyrus sever from https://github.com/cyrusimap/cyrus-imapd
With JMAP and HTTP/2 support enabled. Assume this is the closest
implementation to the JMAP RFC?
Seem the problem is with HTTP/2 settings frame. Client and server
exchange their settings frame, but on the first data frame, the server
reset the stream with PROTOCOL_ERROR  0x1.From the source, I saw that Cyrus 
uses nghttp2 and they provide sample
http/2 server, so I'll try to use it to see what happens.So most probably it is 
a http/2 compatibility issue.

After dig the Cyrus code seems HTTP/2 callback code is located in
http_h2.c and there are syslog calls , but cannot make it log.
Thanks a lot,
Zhivko Vasilev

On Tue, May 22, 2018, at 7:19 AM, Ken Murchison wrote:
> I am just back home after a holiday.  I will look into this sometime
> today or tomorrow after I catch up on other items.> 


> 
> On 05/21/2018 01:47 PM, Zhivko Vasilev wrote:
>> Hello Everyone,
>> 
>> I hope you can help me.
>> 
>> I'm implementing a JMAP client and try to use Cyrus as reference
>> server.>> Send and Receive via IMAP/SMTP work fine.
>> But when I try to connect via HTTP/2 , connection is reset by HTTP/2
>> reset stream command.>> 
>> imapd.log file show only  "starttls: TLSv1.2 with cipher 
>> ECDHE-RSA-AES256-GCM-
>> SHA384 (256/256 bits new) no authentication">> 
>> My http2 call is POST https://[1]cyrus.mailtemi.com[2]:443/jmap[3]
>> HEADERS:
>> "accept", "application/json"
>> "content-type", "application/json"
>> "Authorization", "base64 encoded user name:pass"
>> BODY:
>> {"methodCalls":[["Mailbox/get",{},"#1"]],"using":["jmap-core","jmap-
>> mail"]}>> 
>> Is there a way to turn on HTTP log to track what I do incorrectly.
>> 
>> I tried to track with curl  the server allways reponded with HTTP
>> error 301.>> The  command I've tried was
>> "curl --verbose --http2 -X POST \
>>  -H "Content-Type: application/json" \
>>  -H "Accept: application/json" \
>>  --user u...@cyrus.mailtemi.com:q \
>>  -d '[["Mailbox/get", {}, "#1"],"using":["jmap-core","jmap-
>>  mail"]]' \>>  http://[4]35.192.121.94:443[5]/jmap[6]";
>> returned
>> * Connected to 35.192.121.94 (35.192.121.94) port 80 (#0)
>> * Server auth using Basic with user 'u...@cyrus.mailtemi.com'
>> > POST /jmap HTTP/1.1
>> > Host: 35.192.121.94
>> > Authorization: Basic dTFAY3lydXMubWFpbHRlbWkuY29tOnE=
>> > User-Agent: curl/7.58.0
>> > Connection: Upgrade, HTTP2-Settings
>> > Upgrade: h2c
>> > HTTP2-Settings: AAMAAABkAARAAAIA
>> > Content-Type: application/json
>> > Accept: application/json
>> > Content-Length: 61
>> >
>> * upload completely sent off: 61 out of 61 bytes
>> < HTTP/1.1 101 Switching Protocols
>> < Connection: Upgrade
>> < Upgrade: h2c
>> * Received 101
>> * Using HTTP2, server supports multi-use
>> * Connection state changed (HTTP/2 confirmed)
>> * Copying HTTP/2 data in stream buffer to connection buffer after
>>   upgrade: len=0>> * Connection state changed (MAX_CONCURRENT_STREAMS 
>> updated)!
>> < HTTP/2 301
>> < date: Mon, 21 May 2018 17:36:58 GMT
>> < location: /jmap/
>> < vary: Accept-Encoding
>> < content-length: 0
>> <
>> * Connection #0 to host 35.192.121.94 left intact
>> 
>> Please give me some advice or clue how to track what is the problem.>> I'm 
>> stuck at this point for two days :(
>> 
>> Thanks ,
>> Zhivko Vasilev
>> 
> 
> -- Ken Murchison Cyrus Development Team FastMail US LLC
> Email had 1 attachment:


>  * murch.vcf
>   1k (text/x-vcard)


Links:

  1. https://my.ip.address:443/jmap
  2. mailto:u...@cyrus.mailtemi.com
  3. https://my.ip.address:443/jmap
  4. http://35.192.121.94/jmap
  5. https://my.ip.address:443/jmap
  6. http://35.192.121.94/jmap


Re: Cyrus Jmap support question

2018-05-22 Thread Ken Murchison
I am just back home after a holiday.  I will look into this sometime 
today or tomorrow after I catch up on other items.




On 05/21/2018 01:47 PM, Zhivko Vasilev wrote:

Hello Everyone,

I hope you can help me.

I'm implementing a JMAP client and try to use Cyrus as reference server.
Send and Receive via IMAP/SMTP work fine.
But when I try to connect via HTTP/2 , connection is reset by HTTP/2 
reset stream command.


imapd.log file show only  "starttls: TLSv1.2 with cipher 
ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits new) no authentication"


My http2 call is POST https:// 
cyrus.mailtemi.com 
:443/jmap 

HEADERS:
"accept", "application/json"
"content-type", "application/json"
"Authorization", "base64 encoded user name:pass"
BODY:
{"methodCalls":[["Mailbox/get",{},"#1"]],"using":["jmap-core","jmap-mail"]}

Is there a way to turn on HTTP log to track what I do incorrectly.

I tried to track with curl  the server allways reponded with HTTP 
error 301.

The  command I've tried was
"curl --verbose --http2 -X POST \
 -H "Content-Type: application/json" \
 -H "Accept: application/json" \
 --user u...@cyrus.mailtemi.com :q \
 -d '[["Mailbox/get", {}, "#1"],"using":["jmap-core","jmap-mail"]]' \
http:// 35.192.121.94:443 
/jmap "

returned
* Connected to 35.192.121.94 (35.192.121.94) port 80 (#0)
* Server auth using Basic with user 'u...@cyrus.mailtemi.com 
'

> POST /jmap HTTP/1.1
> Host: 35.192.121.94
> Authorization: Basic dTFAY3lydXMubWFpbHRlbWkuY29tOnE=
> User-Agent: curl/7.58.0
> Connection: Upgrade, HTTP2-Settings
> Upgrade: h2c
> HTTP2-Settings: AAMAAABkAARAAAIA
> Content-Type: application/json
> Accept: application/json
> Content-Length: 61
>
* upload completely sent off: 61 out of 61 bytes
< HTTP/1.1 101 Switching Protocols
< Connection: Upgrade
< Upgrade: h2c
* Received 101
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after 
upgrade: len=0

* Connection state changed (MAX_CONCURRENT_STREAMS updated)!
< HTTP/2 301
< date: Mon, 21 May 2018 17:36:58 GMT
< location: /jmap/
< vary: Accept-Encoding
< content-length: 0
<
* Connection #0 to host 35.192.121.94 left intact

Please give me some advice or clue how to track what is the problem.
I'm stuck at this point for two days :(

Thanks ,
Zhivko Vasilev



--
Ken Murchison
Cyrus Development Team
FastMail US LLC

<>

Re: Cyrus Jmap support question

2018-05-22 Thread Bron Gondwana
Hi,

I'm really sorry you've had such difficulty!  We're using Cyrus with
http/1.1 at FastMail, so I don't have any direct experience with http/2.
We're also not using TLS directly in Cyrus, because we use an nginx
proxy in front which terminates the TLS connections.
You can enable regular telemetry logging to get http logs:

https://cyrusimap.org/imap/reference/faqs/o-telemetry.html

Ken (CC'd) is our expert on the http/2 code, so hopefully he can help
you.
Bron.


On Tue, May 22, 2018, at 03:47, Zhivko Vasilev wrote:
> Hello Everyone,
> 
> I hope you can help me.
> 
> I'm implementing a JMAP client and try to use Cyrus as
> reference server.> Send and Receive via IMAP/SMTP work fine.
> But when I try to connect via HTTP/2 , connection is reset by HTTP/2
> reset stream command.> 
> imapd.log file show only  "starttls: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-
> SHA384 (256/256 bits new) no authentication"> 
> My http2 call is POST https://[1]cyrus.mailtemi.com[2]:443/jmap[3]
> HEADERS:
> "accept", "application/json"
> "content-type", "application/json"
> "Authorization", "base64 encoded user name:pass"
> BODY:
> {"methodCalls":[["Mailbox/get",{},"#1"]],"using":["jmap-
> core","jmap-mail"]}> 
> Is there a way to turn on HTTP log to track what I do incorrectly.
> 
> I tried to track with curl  the server allways reponded with HTTP
> error 301.> The  command I've tried was
> "curl --verbose --http2 -X POST \
>  -H "Content-Type: application/json" \
>  -H "Accept: application/json" \
>  --user u...@cyrus.mailtemi.com:q \
>  -d '[["Mailbox/get", {}, "#1"],"using":["jmap-core","jmap-
>  mail"]]' \>  http://[4]35.192.121.94:443[5]/jmap[6]";
> returned
> * Connected to 35.192.121.94 (35.192.121.94) port 80 (#0)
> * Server auth using Basic with user 'u...@cyrus.mailtemi.com'
> > POST /jmap HTTP/1.1
> > Host: 35.192.121.94
> > Authorization: Basic dTFAY3lydXMubWFpbHRlbWkuY29tOnE=
> > User-Agent: curl/7.58.0
> > Connection: Upgrade, HTTP2-Settings
> > Upgrade: h2c
> > HTTP2-Settings: AAMAAABkAARAAAIA
> > Content-Type: application/json
> > Accept: application/json
> > Content-Length: 61
> >
> * upload completely sent off: 61 out of 61 bytes
> < HTTP/1.1 101 Switching Protocols
> < Connection: Upgrade
> < Upgrade: h2c
> * Received 101
> * Using HTTP2, server supports multi-use
> * Connection state changed (HTTP/2 confirmed)
> * Copying HTTP/2 data in stream buffer to connection buffer after
>   upgrade: len=0> * Connection state changed (MAX_CONCURRENT_STREAMS updated)!
> < HTTP/2 301
> < date: Mon, 21 May 2018 17:36:58 GMT
> < location: /jmap/
> < vary: Accept-Encoding
> < content-length: 0
> <
> * Connection #0 to host 35.192.121.94 left intact
> 
> Please give me some advice or clue how to track what is the problem.
> I'm stuck at this point for two days :(
> 
> Thanks ,
> Zhivko Vasilev
> 

--
  Bron Gondwana, CEO, FastMail Pty Ltd
  br...@fastmailteam.com



Links:

  1. https://my.ip.address:443/jmap
  2. mailto:u...@cyrus.mailtemi.com
  3. https://my.ip.address:443/jmap
  4. http://35.192.121.94/jmap
  5. https://my.ip.address:443/jmap
  6. http://35.192.121.94/jmap


Cyrus Jmap support question

2018-05-21 Thread Zhivko Vasilev
Hello Everyone,

I hope you can help me.

I'm implementing a JMAP client and try to use Cyrus as reference server.Send 
and Receive via IMAP/SMTP work fine.
But when I try to connect via HTTP/2 , connection is reset by HTTP/2
reset stream command.
imapd.log file show only  "starttls: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-
SHA384 (256/256 bits new) no authentication"
My http2 call is POST https://[1]cyrus.mailtemi.com[2]:443/jmap[3]
HEADERS:
"accept", "application/json"
"content-type", "application/json"
"Authorization", "base64 encoded user name:pass"
BODY:
{"methodCalls":[["Mailbox/get",{},"#1"]],"using":["jmap-
core","jmap-mail"]}
Is there a way to turn on HTTP log to track what I do incorrectly.

I tried to track with curl  the server allways reponded with HTTP
error 301.The  command I've tried was
"curl --verbose --http2 -X POST \
 -H "Content-Type: application/json" \
 -H "Accept: application/json" \
 --user u...@cyrus.mailtemi.com:q \
 -d '[["Mailbox/get", {}, "#1"],"using":["jmap-core","jmap-
 mail"]]' \ http://[4]35.192.121.94:443[5]/jmap[6]";
returned
* Connected to 35.192.121.94 (35.192.121.94) port 80 (#0)
* Server auth using Basic with user 'u...@cyrus.mailtemi.com'
> POST /jmap HTTP/1.1
> Host: 35.192.121.94
> Authorization: Basic dTFAY3lydXMubWFpbHRlbWkuY29tOnE=
> User-Agent: curl/7.58.0
> Connection: Upgrade, HTTP2-Settings
> Upgrade: h2c
> HTTP2-Settings: AAMAAABkAARAAAIA
> Content-Type: application/json
> Accept: application/json
> Content-Length: 61
>
* upload completely sent off: 61 out of 61 bytes
< HTTP/1.1 101 Switching Protocols
< Connection: Upgrade
< Upgrade: h2c
* Received 101
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after
  upgrade: len=0* Connection state changed (MAX_CONCURRENT_STREAMS updated)!
< HTTP/2 301
< date: Mon, 21 May 2018 17:36:58 GMT
< location: /jmap/
< vary: Accept-Encoding
< content-length: 0
<
* Connection #0 to host 35.192.121.94 left intact

Please give me some advice or clue how to track what is the problem.
I'm stuck at this point for two days :(

Thanks ,
Zhivko Vasilev


Links:

  1. https://my.ip.address:443/jmap
  2. mailto:u...@cyrus.mailtemi.com
  3. https://my.ip.address:443/jmap
  4. http://35.192.121.94/jmap
  5. https://my.ip.address:443/jmap
  6. http://35.192.121.94/jmap