Ruby Forum Ruby on Rails > ActiveResource & Authenticating with Emails

Posted by Ryan Bigg (ryan-bigg)
on 12.05.2008 09:35
(Received via mailing list)
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://the@email.com:thepassword@myplace.zendesk.com"

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?
Posted by Frederick Cheung (Guest)
on 12.05.2008 09:48
(Received via mailing list)
On 12 May 2008, at 08:34, Ryan Bigg (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://the@email.com:thepassword@myplace.zendesk.com"
>
> 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
Posted by Ryan Bigg (ryan-bigg)
on 12.05.2008 10:02
(Received via mailing list)
Just as

self.site = "http://user%40site.com:password@myplace.zendesk.com"

?

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 Cheung <
frederick.cheung@gmail.com> 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 Bigg
http://www.frozenplague.net
Feel free to add me to MSN and/or GTalk as this email.
Posted by Vidya Ramachandren (vidya1111)
on 12.05.2008 10:53
Even I am facing the same issue :(
Any help?

Thanks in advance.
Posted by Frederick Cheung (Guest)
on 12.05.2008 11:15
(Received via mailing list)
On 12 May 2008, at 09:01, Ryan Bigg (Radar) wrote:

> Just as
>
> self.site = "http://user%40site.com:password@myplace.zendesk.com"
>
Worth a go :-) Definitely works with some clients/libraries (and I
believe it what the rfcs say you should do)
Posted by Ryan Bigg (ryan-bigg)
on 12.05.2008 12:20
(Received via mailing list)
That didn't work. I already tried it before making my post.

On Mon, May 12, 2008 at 6:44 PM, Frederick Cheung <
frederick.cheung@gmail.com> 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 Bigg
http://www.frozenplague.net
Feel free to add me to MSN and/or GTalk as this email.
Posted by Frederick Cheung (Guest)
on 12.05.2008 12:43
(Received via mailing list)
On 12 May 2008, at 11:20, Ryan Bigg (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
Posted by Ryan Bigg (ryan-bigg)
on 12.05.2008 14:31
(Received via mailing list)
As in URI.parse? That fails too, with an identical error.

On Mon, May 12, 2008 at 8:12 PM, Frederick Cheung <
frederick.cheung@gmail.com> 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 Bigg
> > http://www.frozenplague.net
> > Feel free to add me to MSN and/or GTalk as this email.
> > >
>
>
> >
>


--
Ryan Bigg
http://www.frozenplague.net
Feel free to add me to MSN and/or GTalk as this email.
Posted by Frederick Cheung (Guest)
on 12.05.2008 15:02
(Received via mailing list)
On 12 May 2008, at 13:21, Ryan Bigg (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
Posted by Ryan Bigg (ryan-bigg)
on 12.05.2008 23:53
(Received via mailing list)
irb(main):005:0> uri.user = 'my@email.com'
URI::InvalidComponentError: bad component(expected userinfo component or
user component): daniel@email.com
        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 Cheung <
frederick.cheung@gmail.com> 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 Bigg
http://www.frozenplague.net
Feel free to add me to MSN and/or GTalk as this email.
Posted by Frederick Cheung (Guest)
on 13.05.2008 00:11
(Received via mailing list)
On 12 May 2008, at 22:52, Ryan Bigg (Radar) wrote:

> irb(main):005:0> uri.user = 'my@email.com'
> URI::InvalidComponentError: bad component(expected userinfo  
> component or user component): daniel@email.com
>         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
     'foo@bar.com'
   end
   def (self.site).password
     'xxx'
   end
end

X.site.user => "foo@bar.com"

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

Fred
Posted by Ryan Bigg (ryan-bigg)
on 13.05.2008 01:44
(Received via mailing list)
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.
Posted by Frederick Cheung (Guest)
on 13.05.2008 01:52
(Received via mailing list)
On 13 May 2008, at 00:43, Ryan Bigg (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 :-)

Fred
Posted by Ryan Bigg (ryan-bigg)
on 13.05.2008 01:55
(Received via mailing list)
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 Cheung <
frederick.cheung@gmail.com> wrote:

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


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