How to use the API when using a proxy server
Hi, I am trying to use the API with my galaxy server running behind a proxy server. How do I pass username/password information to the API so it can actually run? If I use the regular API calls I get a access denied... Thanks Thon
Hello Anthonius, Can you elaborate on how you're invoking the API? How are you calling it? Thanks, Carl On Wed, Jan 30, 2013 at 6:30 PM, Anthonius deBoer <thondeboer@me.com> wrote:
Hi,
I am trying to use the API with my galaxy server running behind a proxy server. How do I pass username/password information to the API so it can actually run? If I use the regular API calls I get a access denied...
Thanks
Thon
___________________________________________________________ Please keep all replies on the list by using "reply all" in your mail client. To manage your subscriptions to this and other Galaxy lists, please use the interface at:
I don't know how to speak intelligently about this, so excuse my imprecise language. The idea is that you need to still pass session information (REMOTE_USER) along so JavaScript can access the API, but for /api you need to make that optional. I have an Apache server using TKTAuth. For that server I added this at the end of my VirtualHost file to accomplish this. <Location "/api"> TKTAuthGuestLogin on </Location> For my cloud images, I use nginx + ldap and there I added this block: location /api { proxy_set_header REMOTE_USER $remote_user; proxy_pass http://galaxy_app; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } Which looks a lot like my "location /" block but doesn't have an auth_ldap_require statement. Hope this helps. -John On Thu, Jan 31, 2013 at 1:44 PM, Carl Eberhard <carlfeberhard@gmail.com> wrote:
Hello Anthonius,
Can you elaborate on how you're invoking the API? How are you calling it?
Thanks, Carl
On Wed, Jan 30, 2013 at 6:30 PM, Anthonius deBoer <thondeboer@me.com> wrote:
Hi,
I am trying to use the API with my galaxy server running behind a proxy server. How do I pass username/password information to the API so it can actually run? If I use the regular API calls I get a access denied...
Thanks
Thon
___________________________________________________________ Please keep all replies on the list by using "reply all" in your mail client. To manage your subscriptions to this and other Galaxy lists, please use the interface at:
___________________________________________________________ Please keep all replies on the list by using "reply all" in your mail client. To manage your subscriptions to this and other Galaxy lists, please use the interface at:
On Thu, Jan 31, 2013 at 1:44 PM, Carl Eberhard <carlfeberhard@gmail.com> wrote:
Hello Anthonius,
Can you elaborate on how you're invoking the API? How are you calling it?
Thanks, Carl
On Wed, Jan 30, 2013 at 6:30 PM, Anthonius deBoer <thondeboer@me.com> wrote:
Hi,
I am trying to use the API with my galaxy server running behind a proxy server. How do I pass username/password information to the API so it can actually run? If I use the regular API calls I get a access denied...
Thanks
Thon
___________________________________________________________ Please keep all replies on the list by using "reply all" in your mail client. To manage your subscriptions to this and other Galaxy lists, please use the interface at:
___________________________________________________________ Please keep all replies on the list by using "reply all" in your mail client. To manage your subscriptions to this and other Galaxy lists, please use the interface at:
Hi Carl, I am using the submit and get functions from the scripts/api/common.py.... I actually found that I just need to add authentication to the calls, so I added this <code> def authenticate(url, u, p): auth_handler = urllib2.HTTPBasicAuthHandler() auth_handler.add_password(realm='GALAXY@GHI. Please log in with your Windows account', uri=url, user=u, passwd=p) opener = urllib2.build_opener(auth_handler) # ...and install it globally so it can be used with urlopen. urllib2.install_opener(opener) def make_url( api_key, url, args=None ): # Adds the API Key to the URL if it's not already there. if args is None: args = [] argsep = '&' if '?' not in url: argsep = '?' if '?key=' not in url and '&key=' not in url: args.insert( 0, ( 'key', api_key ) ) return url + argsep + '&'.join( [ '='.join( t ) for t in args ] ) def get( api_key, url, user, pw ): # Do the actual GET. url = make_url( api_key, url ) authenticate(url, user, pw) try: return simplejson.loads( urllib2.urlopen( url ).read() ) except simplejson.decoder.JSONDecodeError, e: print "URL did not return JSON data" sys.exit(1) . . . </code> This will authenticate for each call and it seems to work nicely (if you add the authenticate step to each of the functions, like I did here for get.... Thon On Jan 31, 2013, at 11:44 AM, Carl Eberhard <carlfeberhard@gmail.com> wrote: Hello Anthonius, Can you elaborate on how you're invoking the API? How are you calling it? Thanks, Carl On Wed, Jan 30, 2013 at 6:30 PM, Anthonius deBoer <thondeboer@me.com> wrote: Hi, I am trying to use the API with my galaxy server running behind a proxy server. How do I pass username/password information to the API so it can actually run? If I use the regular API calls I get a access denied... Thanks Thon ___________________________________________________________ Please keep all replies on the list by using "reply all" in your mail client. To manage your subscriptions to this and other Galaxy lists, please use the interface at: http://lists.bx.psu.edu/
I'm glad that worked, Thon. Let us know if you run into any other problems with the API in a proxy set up. Carl On Thu, Jan 31, 2013 at 7:58 PM, Anthonius deBoer <thondeboer@me.com> wrote:
Hi Carl,
I am using the submit and get functions from the scripts/api/common.py....
I actually found that I just need to add authentication to the calls, so I added this
<code> def authenticate(url, u, p): auth_handler = urllib2.HTTPBasicAuthHandler() auth_handler.add_password(realm='GALAXY@GHI. Please log in with your Windows account', uri=url, user=u, passwd=p) opener = urllib2.build_opener(auth_handler) # ...and install it globally so it can be used with urlopen. urllib2.install_opener(opener)
def make_url( api_key, url, args=None ): # Adds the API Key to the URL if it's not already there. if args is None: args = [] argsep = '&' if '?' not in url: argsep = '?' if '?key=' not in url and '&key=' not in url: args.insert( 0, ( 'key', api_key ) ) return url + argsep + '&'.join( [ '='.join( t ) for t in args ] )
def get( api_key, url, user, pw ): # Do the actual GET. url = make_url( api_key, url ) authenticate(url, user, pw) try: return simplejson.loads( urllib2.urlopen( url ).read() ) except simplejson.decoder.JSONDecodeError, e: print "URL did not return JSON data" sys.exit(1) . . .
</code>
This will authenticate for each call and it seems to work nicely (if you add the authenticate step to each of the functions, like I did here for get....
Thon
On Jan 31, 2013, at 11:44 AM, Carl Eberhard <carlfeberhard@gmail.com> wrote:
Hello Anthonius,
Can you elaborate on how you're invoking the API? How are you calling it?
Thanks, Carl
On Wed, Jan 30, 2013 at 6:30 PM, Anthonius deBoer <thondeboer@me.com>wrote:
Hi,
I am trying to use the API with my galaxy server running behind a proxy server. How do I pass username/password information to the API so it can actually run? If I use the regular API calls I get a access denied...
Thanks
Thon
___________________________________________________________ Please keep all replies on the list by using "reply all" in your mail client. To manage your subscriptions to this and other Galaxy lists, please use the interface at:
participants (3)
-
Anthonius deBoer
-
Carl Eberhard
-
John Chilton