glogin Component

Available in Camel 2.3

The glogin component is used by Camel applications outside Google App Engine (GAE) for programmatic login to GAE applications. It is part of the Camel Components for Google App Engine. Security-enabled GAE applications normally redirect the user to a login page. After submitting username and password for authentication, the user is redirected back to the application. That works fine for applications where the client is a browser. For all other applications, the login process must be done programmatically. All the necessary steps for programmatic login are implemented by the glogin component. These are

  1. Get an authentication token from Google Accounts via the ClientLogin API.
  2. Get an authorization cookie from Google App Engine's login API.

The authorization cookie must then be send with subsequent HTTP requests to the GAE application. It expires after 24 hours and must then be renewed.

URI format

glogin://hostname[:port][?options]

The hostname is either the internet hostname of a GAE application (e.g. camelcloud.appspot.com) or the name of the host where the development server is running (e.g. localhost). The port is only used when connecting to a development server (i.e. when devMode=true, see options) and defaults to 8080.

Options

Name

Default Value

Required

Description

clientName

apache-camel-2.x

false

A client name with recommended (but not required) format <organization>-<appname>-<version>.

userName

null

true (can alternatively be set via GLoginBinding.GLOGIN_USER_NAME message header)

Login username (an email address).

password

null

true (can alternatively be set via GLoginBinding.GLOGIN_PASSWORD message header)

Login password.

devMode

false

false

If set to true a login to a development server is attempted.

devAdmin

false

false

If set to true a login to a development server in admin role is attempted.

Message headers

Name

Type

Message

Description

GLoginBinding.GLOGIN_HOST_NAME

String

in

Overrides the hostname defined in the endpoint URI.

GLoginBinding.GLOGIN_USER_NAME

String

in

Overrides the userName option.

GLoginBinding.GLOGIN_PASSWORD

String

in

Overrides the password option.

GLoginBinding.GLOGIN_TOKEN

String

out

Contains the authentication token obtained from Google Accounts. Login to a development server does not set this header.

GLoginBinding.GLOGIN_COOKIE

String

out

Contains the application-specific authorization cookie obtained from Google App Engine (or a development server).

Message body

The glogin component doesn't read or write message bodies.

Usage

The following JUnit test show an example how to login to a development server as well as to a deployed GAE application located at http://camelcloud.appspot.com.

import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.ProducerTemplate;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import static org.apache.camel.component.gae.login.GLoginBinding.*;
import static org.junit.Assert.*;

public class GLoginTest {

    private ProducerTemplate template = ...

    @Test
    public void testDevLogin() {
        Exchange result = template.request("glogin://localhost:8888?userName=test@example.org&devMode=true", null);
        assertNotNull(result.getOut().getHeader(GLOGIN_COOKIE));
    }

    @Test
    public void testRemoteLogin() {
        Exchange result = template.request("glogin://camelcloud.appspot.com", new Processor() {
            public void process(Exchange exchange) throws Exception {
                exchange.getIn().setHeader(GLOGIN_USER_NAME, "replaceme@gmail.com");
                exchange.getIn().setHeader(GLOGIN_PASSWORD, "replaceme");
            }
        });
        assertNotNull(result.getOut().getHeader(GLOGIN_COOKIE));
    }

}

The resulting authorization cookie from login to a development server looks like

ahlogincookie=test@example.org:false:11223191102230730701;Path=/

The resulting authorization cookie from login to a deployed GAE application looks (shortened) like

ACSID=AJKiYcE...XxhH9P_jR_V3; expires=Sun, 07-Feb-2010 15:14:51 GMT; path=/

Dependencies

Maven users will need to add the following dependency to their pom.xml.

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-gae</artifactId>
    <version>x.x.x</version>
</dependency>