ActiveResource & Authenticating with Emails

I’m trying to use a site called zendesk.com and you authenticate to the
site
using an email address and a password, so that the self.site definition
in
the model looks like this:

self.site = “http://[email protected]:[email protected]

The problem with this is, because we have the @ sign in our username,
Ruby
thinks this to be an invalid URL so throws a big hissy fit:
URI::InvalidURIError: bad URI(is not URI?):
from /usr/lib/ruby/1.8/uri/common.rb:436:in split' from /usr/lib/ruby/1.8/uri/common.rb:485:in parse’
from
/usr/lib/ruby/gems/1.8/gems/activeresource-2.0.2/lib/active_resource/base.rb:477:in
create_site_uri_from' from /usr/lib/ruby/gems/1.8/gems/activeresource-2.0.2/lib/active_resource/base.rb:167:in site=’
from /home/ryan/projects/site/app/models/user.rb:2
from
/usr/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:203:in
load_without_new_constant_marking' from /usr/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:203:in load_file’
from
/usr/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:342:in
new_constants_in' from /usr/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:202:in load_file’
from
/usr/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:94:in
require_or_load' from /usr/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:248:in load_missing_constant’
from
/usr/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:453:in
const_missing' from /usr/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:465:in const_missing’
from (irb):1

The command line curl has no such complaint however.

Suggestions?

On 12 May 2008, at 08:34, Ryan B. (Radar) wrote:

I’m trying to use a site called zendesk.com and you authenticate to
the site using an email address and a password, so that the
self.site definition in the model looks like this:

self.site = “http://[email protected]:[email protected]

The problem with this is, because we have the @ sign in our
username, Ruby thinks this to be an invalid URL so throws a big
hissy fit:
URL Encode the @ (%40) ?

Fred

Just as

self.site = “http://user%40site.com:[email protected]

?

That returns a 401. I think it may be passing in the %40 as part of the
username.

On Mon, May 12, 2008 at 5:17 PM, Frederick C. <
[email protected]> wrote:

The problem with this is, because we have the @ sign in our
active_resource/base.rb:477:in `create_site_uri_from’
from /usr/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/

The command line curl has no such complaint however.

Suggestions?


Ryan B.

Feel free to add me to MSN and/or GTalk as this email.

On 12 May 2008, at 09:01, Ryan B. (Radar) wrote:

Just as

self.site = “http://user%40site.com:[email protected]

Worth a go :slight_smile: Definitely works with some clients/libraries (and I
believe it what the rfcs say you should do)

Even I am facing the same issue :frowning:
Any help?

Thanks in advance.

On 12 May 2008, at 11:20, Ryan B. (Radar) wrote:

That didn’t work. I already tried it before making my post.

It appears that you can set site to either a string or an instance of
URI. If rails’/ruby’s parsing of a url string is tripping up in this
case maybe the latter option is worth exploring?

Fred

As in URI.parse? That fails too, with an identical error.

On Mon, May 12, 2008 at 8:12 PM, Frederick C. <
[email protected]> wrote:

Fred

The problem with this is, because we have the @ sign in our
active_resource/base.rb:477:in `create_site_uri_from’
from /usr/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/


Ryan B.
http://www.frozenplague.net
Feel free to add me to MSN and/or GTalk as this email.


Ryan B.

Feel free to add me to MSN and/or GTalk as this email.

That didn’t work. I already tried it before making my post.

On Mon, May 12, 2008 at 6:44 PM, Frederick C. <
[email protected]> wrote:

?

    from /usr/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/
    from /usr/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/

Feel free to add me to MSN and/or GTalk as this email.


Ryan B.

Feel free to add me to MSN and/or GTalk as this email.

On 12 May 2008, at 13:21, Ryan B. (Radar) wrote:

As in URI.parse? That fails too, with an identical error.

No, I was thinking along the lings of
some_uri = URI.parse(‘http://myplace.zendesk.com’)
some_uri.user = ‘xxx’
some_uri.password = ‘zzz’
self.site = some_uri

Fred

irb(main):005:0> uri.user = ‘[email protected]
URI::InvalidComponentError: bad component(expected userinfo component or
user component): [email protected]
from c:/ruby/lib/ruby/1.8/uri/generic.rb:269:in check_user' from c:/ruby/lib/ruby/1.8/uri/generic.rb:311:in user=’
from (irb):5

On Mon, May 12, 2008 at 10:31 PM, Frederick C. <
[email protected]> wrote:

self.site = some_uri

That didn’t work. I already tried it before making my post.

That returns a 401. I think it may be passing in the %40 as part

I’m trying to use a site called zendesk.com and you authenticate
URL Encode the @ (%40) ?
lib/
lib/
from /usr/lib/ruby/gems/1.8/gems/activesupport-2.0.2/

Feel free to add me to MSN and/or GTalk as this email.
Feel free to add me to MSN and/or GTalk as this email.
Feel free to add me to MSN and/or GTalk as this email.


Ryan B.

Feel free to add me to MSN and/or GTalk as this email.

Definitely skanky, but it works! Shame you have to do such a hack to get
it
working.

You are bloody brilliant Fred. I would’ve never thought of doing that.

On 12 May 2008, at 22:52, Ryan B. (Radar) wrote:

irb(main):005:0> uri.user = ‘[email protected]
URI::InvalidComponentError: bad component(expected userinfo
component or user component): [email protected]
from c:/ruby/lib/ruby/1.8/uri/generic.rb:269:in check_user' from c:/ruby/lib/ruby/1.8/uri/generic.rb:311:in user=’
from (irb):5

Beginning to look like you’re walking down an unfrequently used
path :-). If URI is expecting @ to be encoded as %40, then I suppose
its rails’ responsability to convert the %40 into a @ when
constructing the authorization header.

Override authorization_header so that the correct header is produced ?
This might even work:

class X < ActiveResource::Base
self.site = “http://myplace.zendesk.com
def (self.site).user
[email protected]
end
def (self.site).password
‘xxx’
end
end

X.site.user => “[email protected]

Pretty skanky though. I think the right thing is probably for
authorization_header (in connection.rb) to unescape the username &
password.

Fred

Yeah definitely. I’ve got a model inheriting from ActiveResource::Base
called ZenDesk, and all the models I need the ugly code in just inherit
from
that one model.

On Tue, May 13, 2008 at 9:22 AM, Frederick C. <
[email protected]> wrote:

Fred

You are bloody brilliant Fred. I would’ve never thought of doing that.


Ryan B.

Feel free to add me to MSN and/or GTalk as this email.

On 13 May 2008, at 00:43, Ryan B. (Radar) wrote:

Definitely skanky, but it works! Shame you have to do such a hack to
get it working.

When I get a moment I might ask over at rails core for less dirty
solutions :slight_smile:

Fred