diff --git a/app/AppKernel.php b/app/AppKernel.php
index a19c9c1..77a89ca 100644
--- a/app/AppKernel.php
+++ b/app/AppKernel.php
@@ -5,34 +5,41 @@
class AppKernel extends Kernel
{
- public function registerBundles()
- {
- $bundles = array(
- new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
- new Symfony\Bundle\SecurityBundle\SecurityBundle(),
- new Symfony\Bundle\TwigBundle\TwigBundle(),
- new Symfony\Bundle\MonologBundle\MonologBundle(),
- new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
- new Symfony\Bundle\AsseticBundle\AsseticBundle(),
- new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
- new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
- new JMS\AopBundle\JMSAopBundle(),
- new JMS\DiExtraBundle\JMSDiExtraBundle($this),
- new JMS\SecurityExtraBundle\JMSSecurityExtraBundle(),
- );
- if (in_array($this->getEnvironment(), array('dev', 'test'))) {
- $bundles[] = new Acme\DemoBundle\AcmeDemoBundle();
- $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
- $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
- $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
- }
+ public function registerBundles()
+ {
+ $bundles = array(
+ new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
+ new Symfony\Bundle\SecurityBundle\SecurityBundle(),
+ new Symfony\Bundle\TwigBundle\TwigBundle(),
+ new Symfony\Bundle\MonologBundle\MonologBundle(),
+ new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
+ new Symfony\Bundle\AsseticBundle\AsseticBundle(),
+ new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
+ new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
+ new JMS\AopBundle\JMSAopBundle(),
+ new JMS\DiExtraBundle\JMSDiExtraBundle( $this ),
+ new JMS\SecurityExtraBundle\JMSSecurityExtraBundle(),
+ new Google\OauthBundle\GoogleOauthBundle(),
+ new Knp\Bundle\OAuthBundle\KnpOAuthBundle(),
+ new Sensio\Bundle\BuzzBundle\SensioBuzzBundle(),
+ new Fp\OpenIdBundle\FpOpenIdBundle(),
+ );
- return $bundles;
- }
+ if (in_array( $this->getEnvironment(), array('dev', 'test') ))
+ {
+ $bundles[] = new Acme\DemoBundle\AcmeDemoBundle();
+ $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
+ $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
+ $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
+ }
+
+ return $bundles;
+ }
+
+ public function registerContainerConfiguration(LoaderInterface $loader)
+ {
+ $loader->load( __DIR__ . '/config/config_' . $this->getEnvironment() . '.yml' );
+ }
- public function registerContainerConfiguration(LoaderInterface $loader)
- {
- $loader->load(__DIR__.'/config/config_'.$this->getEnvironment().'.yml');
- }
}
diff --git a/app/config/config.yml b/app/config/config.yml
index 4dd6560..33476ff 100644
--- a/app/config/config.yml
+++ b/app/config/config.yml
@@ -1,6 +1,7 @@
imports:
- { resource: parameters.yml }
- { resource: security.yml }
+# - { resource: @GoogleOauthBundle/Resources/config/services.yml }
framework:
#esi: ~
@@ -56,3 +57,7 @@ swiftmailer:
username: %mailer_user%
password: %mailer_password%
spool: { type: memory }
+
+fp_open_id:
+ db_driver: orm
+ identity_class: Google\OauthBundle\Entity\OpenIdIdentity
diff --git a/app/config/routing.yml b/app/config/routing.yml
index 684d364..1bb17c3 100644
--- a/app/config/routing.yml
+++ b/app/config/routing.yml
@@ -1,3 +1,11 @@
+GoogleOauthBundle:
+ resource: "@GoogleOauthBundle/Controller/"
+ type: annotation
+ prefix: /
+
+fp_openid_security:
+ resource: "@FpOpenIdBundle/Resources/config/routing/security.xml"
+
# Internal routing configuration to handle ESI
#_internal:
# resource: "@FrameworkBundle/Resources/config/routing/internal.xml"
diff --git a/app/config/security.yml b/app/config/security.yml
index e01c1c2..4334bca 100644
--- a/app/config/security.yml
+++ b/app/config/security.yml
@@ -4,40 +4,88 @@ jms_security_extra:
security:
encoders:
- Symfony\Component\Security\Core\User\User: plaintext
+# Symfony\Component\Security\Core\User\User: plaintext
+ Google\OauthBundle\Entity\User: md5
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
providers:
- in_memory:
- memory:
- users:
- user: { password: userpass, roles: [ 'ROLE_USER' ] }
- admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] }
+# secured_area:
+# oauth_entity:
+# class: GoogleOauthBundle:User
+# property: name
+ administrators:
+ entity: {class: GoogleOauthBundle:User, property: username}
+ openid_user_manager:
+ id: google.oauth.openid_user_manager
+
+# in_memory:
+# memory:
+# users:
+# user: { password: userpass, roles: [ 'ROLE_USER' ] }
+# admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] }
firewalls:
- dev:
- pattern: ^/(_(profiler|wdt)|css|images|js)/
- security: false
+ main:
+ pattern: ^/
+ logout: true
+ anonymous: true
+
+ fp_openid:
+ create_user_if_not_exists: true
+ required_attributes: [namePerson/friendly,contact/email,namePerson,birthDate,pref/language,contact/country/home,person/gender]
+ optional_attributes: []
+ # options come with abstract listener
+ check_path: /login_check
+ default_target_path: /hello/wtf
+ provider: openid_user_manager
- login:
- pattern: ^/demo/secured/login$
- security: false
- secured_area:
- pattern: ^/demo/secured/
- form_login:
- check_path: /demo/secured/login_check
- login_path: /demo/secured/login
- logout:
- path: /demo/secured/logout
- target: /demo/
+
+# dev:
+# pattern: ^/(_(profiler|wdt)|css|images|js)/
+# security: false
+#
+# login:
+# pattern: ^/demo/secured/login$
+# security: false
+#
+# secured_area:
+## pattern: ^/secured/
+## oauth:
+## oauth_provider: google
+## authorization_url: https://accounts.google.com/o/oauth2/auth
+## access_token_url: https://accounts.google.com/o/oauth2/token
+## infos_url: https://www.googleapis.com/oauth2/v1/userinfo
+## username_path: name
+## client_id: 66772032914.apps.googleusercontent.com
+## secret: 6ITw8qAL--zt34nzAPodEAgW
+## scope: userinfo.profile
+## check_path: /secured/login_check
+## login_path: /secured/login
+## failure_path: /
+#
+# pattern: ^/demo/secured/
+#
+# form_login:
+# check_path: /demo/secured/login_check
+# login_path: /demo/secured/login
+# logout:
+# path: /secured/logout
+# target: /
#anonymous: ~
#http_basic:
# realm: "Secured Demo Area"
access_control:
+ - { path: ^/login_openid$, role: IS_AUTHENTICATED_ANONYMOUSLY }
+ - { path: ^/hello, role: IS_AUTHENTICATED_OPENID }
+
#- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }
#- { path: ^/_internal/secure, roles: IS_AUTHENTICATED_ANONYMOUSLY, ip: 127.0.0.1 }
+
+#fp_open_id:
+# db_driver: orm
+# identity_class: Google\OauthBundle\Entity\OpenIdIdentity
diff --git a/composer.json b/composer.json
index 483de4d..d1d2785 100644
--- a/composer.json
+++ b/composer.json
@@ -18,7 +18,10 @@
"sensio/generator-bundle": "dev-master",
"jms/security-extra-bundle": "1.1.*",
"jms/di-extra-bundle": "1.0.*",
- "doctrine/data-fixtures": "*"
+ "doctrine/data-fixtures": "*",
+ "zend/gdata": "*",
+ "knplabs/knp-oauth-bundle": "*",
+ "fp/openid-bundle": "dev-master"
},
"scripts": {
"post-install-cmd": [
diff --git a/composer.lock b/composer.lock
index 7306f0b..489d0bb 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1,5 +1,5 @@
{
- "hash": "64ef8edd92e0a1c3c3afc3d0c7f32697",
+ "hash": "645f8055d141ef7a26b816addeedd19b",
"packages": [
{
"package": "doctrine/common",
@@ -8,21 +8,32 @@
{
"package": "doctrine/data-fixtures",
"version": "dev-master",
- "source-reference": "f201391349f3dc6bd9c9c698927ea7c78104c461"
+ "source-reference": "d233d05437c1a10034867f22069b4bb0f7dc96b6"
},
{
"package": "doctrine/dbal",
- "version": "2.2.2"
+ "version": "2.2.x-dev",
+ "source-reference": "8cc129aa64a8de6447056bce20f0a274fe2a340b"
},
{
"package": "doctrine/doctrine-bundle",
"version": "dev-master",
- "source-reference": "5dad4a6ae187c6d345ec2b02be20ccc33779f53e"
+ "source-reference": "f100a7727b89ab5519ed68a72d29e75eb2c85d8b"
},
{
"package": "doctrine/orm",
"version": "2.2.x-dev",
- "source-reference": "202e675d2bf25ce980acc2db69bb971beb8936b9"
+ "source-reference": "5f66c65c9a8d984899903b54215d0249a45b92d6"
+ },
+ {
+ "package": "fp/lightopenid",
+ "version": "dev-master",
+ "source-reference": "ad14146f9c93e90699888e150427aca431dc3c18"
+ },
+ {
+ "package": "fp/openid-bundle",
+ "version": "dev-master",
+ "source-reference": "1.3.0"
},
{
"package": "jms/aop-bundle",
@@ -44,6 +55,16 @@
"package": "jms/security-extra-bundle",
"version": "1.1.0"
},
+ {
+ "package": "knplabs/knp-oauth-bundle",
+ "version": "dev-master",
+ "source-reference": "307baaa564ed41a9fe666e358ec6d4dcf0294ccc"
+ },
+ {
+ "package": "kriswallsmith/assetic",
+ "version": "dev-master",
+ "source-reference": "1a1b5f963db158a1065343fab617d25ce351a2dc"
+ },
{
"package": "kriswallsmith/assetic",
"version": "dev-master",
@@ -52,47 +73,45 @@
"alias-version": "1.1.9999999.9999999-dev"
},
{
- "package": "kriswallsmith/assetic",
+ "package": "kriswallsmith/buzz",
"version": "dev-master",
- "source-reference": "1a1b5f963db158a1065343fab617d25ce351a2dc"
+ "source-reference": "5c7d0523501f02c766166b08ac98613bde0254b5"
},
{
"package": "monolog/monolog",
"version": "1.1.0"
},
{
- "package": "sensio/distribution-bundle",
+ "package": "sensio/buzz-bundle",
"version": "dev-master",
- "source-reference": "6517345b6b28021efad311123413000792e892ee"
+ "source-reference": "0754d7dd155efc4f85de60993571b0b6a5aaccb9"
},
{
- "package": "sensio/framework-extra-bundle",
+ "package": "sensio/distribution-bundle",
"version": "dev-master",
- "source-reference": "ab3130462a01437f4f748a778100e010c6d91ed3"
+ "source-reference": "7d75b222c8e4ead64ff82e5c9b2fa3ba71c70cf0"
},
{
- "package": "sensio/generator-bundle",
+ "package": "sensio/framework-extra-bundle",
"version": "dev-master",
- "source-reference": "423f505811307185eeea38a0a396bede32713497"
+ "source-reference": "e00b525b14784ea4f21c14945e58b4a76a530a6a"
},
{
- "package": "swiftmailer/swiftmailer",
+ "package": "sensio/generator-bundle",
"version": "dev-master",
- "source-reference": "9895567cec5a13d1a43db5053defbaad260c1b87",
- "alias-pretty-version": "4.1.x-dev",
- "alias-version": "4.1.9999999.9999999-dev"
+ "source-reference": "0813379920dcaa4b06361501f654379383d75f16"
},
{
"package": "swiftmailer/swiftmailer",
"version": "dev-master",
- "source-reference": "57789082d1d53529dcf8cd3ca132d9787a59afee",
+ "source-reference": "d33d54cc8a081b0b85734744936ede1ba230dd64",
"alias-pretty-version": "4.1.x-dev",
"alias-version": "4.1.9999999.9999999-dev"
},
{
"package": "swiftmailer/swiftmailer",
"version": "dev-master",
- "source-reference": "9895567cec5a13d1a43db5053defbaad260c1b87"
+ "source-reference": "d33d54cc8a081b0b85734744936ede1ba230dd64"
},
{
"package": "symfony/assetic-bundle",
@@ -102,60 +121,72 @@
{
"package": "symfony/monolog-bundle",
"version": "dev-master",
- "source-reference": "51a25acc57f4c027b28f0305976b887e2da6250a"
- },
- {
- "package": "symfony/swiftmailer-bridge",
- "version": "dev-master",
- "source-reference": "463536de4b149e1560bd764582cbf50dc9936ebd",
- "alias-pretty-version": "2.1.x-dev",
- "alias-version": "2.1.9999999.9999999-dev"
+ "source-reference": "1231105826078c117e07e57d7f658141d6147d35"
},
{
"package": "symfony/swiftmailer-bridge",
"version": "dev-master",
- "source-reference": "509901cb13f43a6319a55804f787d206aa649ab4",
+ "source-reference": "408eb09f5799d393ddc3d916ec3667857fb3a20d",
"alias-pretty-version": "2.1.x-dev",
"alias-version": "2.1.9999999.9999999-dev"
},
{
"package": "symfony/swiftmailer-bridge",
"version": "dev-master",
- "source-reference": "509901cb13f43a6319a55804f787d206aa649ab4"
+ "source-reference": "408eb09f5799d393ddc3d916ec3667857fb3a20d"
},
{
"package": "symfony/swiftmailer-bundle",
"version": "dev-master",
- "source-reference": "7a7ab8ec2dd6ec381eed5be999164095ef757bdf"
+ "source-reference": "71e1789868665cf94dc7831f645625fd0f70aac6"
},
{
"package": "symfony/symfony",
"version": "dev-master",
- "source-reference": "18132c18b41637a05a3a13990651a4054cf0ce59"
+ "source-reference": "49e213ce7c6b9957433c2a64a0144c9ee4b61266",
+ "alias-pretty-version": "2.1.x-dev",
+ "alias-version": "2.1.9999999.9999999-dev"
},
{
"package": "symfony/symfony",
"version": "dev-master",
- "source-reference": "18132c18b41637a05a3a13990651a4054cf0ce59",
+ "source-reference": "adf07f1e539193ae1975348afc34ed37e1382e0a",
"alias-pretty-version": "2.1.x-dev",
"alias-version": "2.1.9999999.9999999-dev"
},
+ {
+ "package": "symfony/symfony",
+ "version": "dev-master",
+ "source-reference": "49e213ce7c6b9957433c2a64a0144c9ee4b61266"
+ },
{
"package": "twig/extensions",
"version": "dev-master",
- "source-reference": "446d870272cd87a720e95242eade38a2acf56eaa"
+ "source-reference": "feb6d3f10c411e2631997c0a905aa581c80305c1"
+ },
+ {
+ "package": "twig/twig",
+ "version": "dev-master",
+ "source-reference": "82e73f6bf26b2301c8d7b51807660bf9ccd43020"
},
{
"package": "twig/twig",
"version": "dev-master",
- "source-reference": "875fa010ce597edf97c04ce6490be950068e9372"
+ "source-reference": "78a935b6ffbcbd8f4e740df895f87a93347b551c",
+ "alias-pretty-version": "1.8.x-dev",
+ "alias-version": "1.8.9999999.9999999-dev"
},
{
"package": "twig/twig",
"version": "dev-master",
- "source-reference": "875fa010ce597edf97c04ce6490be950068e9372",
+ "source-reference": "82e73f6bf26b2301c8d7b51807660bf9ccd43020",
"alias-pretty-version": "1.8.x-dev",
"alias-version": "1.8.9999999.9999999-dev"
+ },
+ {
+ "package": "zend/gdata",
+ "version": "dev-master",
+ "source-reference": "827dc8696f1e5b70a4c507355877cdbab60fb3fa"
}
],
"packages-dev": null,
@@ -171,6 +202,7 @@
"symfony/monolog-bundle": 20,
"sensio/distribution-bundle": 20,
"sensio/framework-extra-bundle": 20,
- "sensio/generator-bundle": 20
+ "sensio/generator-bundle": 20,
+ "fp/openid-bundle": 20
}
}
diff --git a/nbproject/project.properties b/nbproject/project.properties
deleted file mode 100644
index 94429c9..0000000
--- a/nbproject/project.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-include.path=${php.global.include.path}
-php.version=PHP_53
-source.encoding=UTF-8
-src.dir=.
-tags.asp=false
-tags.short=true
-web.root=.
diff --git a/nbproject/project.xml b/nbproject/project.xml
deleted file mode 100644
index 50d6887..0000000
--- a/nbproject/project.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
- org.netbeans.modules.php.project
-
-
- monSymfony2
-
-
-
diff --git a/php_error_log b/php_error_log
new file mode 100644
index 0000000..8aab109
--- /dev/null
+++ b/php_error_log
@@ -0,0 +1,2 @@
+[29-May-2012 09:23:44] PHP Fatal error: Declaration of Google\OauthBundle\Entity\OpenIdIdentity::setUser() must be compatible with that of Fp\OpenIdBundle\Model\UserIdentityInterface::setUser() in C:\wamp\www\monSymfony2\src\Google\OauthBundle\Entity\OpenIdIdentity.php on line 15
+[29-May-2012 09:23:47] PHP Fatal error: Declaration of Google\OauthBundle\Entity\OpenIdIdentity::setUser() must be compatible with that of Fp\OpenIdBundle\Model\UserIdentityInterface::setUser() in C:\wamp\www\monSymfony2\src\Google\OauthBundle\Entity\OpenIdIdentity.php on line 15
diff --git a/src/Google/OauthBundle/Controller/DefaultController.php b/src/Google/OauthBundle/Controller/DefaultController.php
new file mode 100644
index 0000000..749fa84
--- /dev/null
+++ b/src/Google/OauthBundle/Controller/DefaultController.php
@@ -0,0 +1,65 @@
+ 'Zend_Http_Client_Adapter_Proxy',
+// 'proxy' => 'localhost',
+// 'proxy_port' => 3128
+// );
+// $proxiedHttpClient = new \Zend_Http_Client( 'http://www.google.com:443/', $config );
+
+ $client = \Zend_Gdata_ClientLogin::getHttpClient( $this->email, $this->password, \Zend_Gdata_Gapps::AUTH_SERVICE_NAME );
+ $gdata = new \Zend_Gdata_Gapps( $client, self::domain );
+// $service->createUser( $this->username, $this->givenname, $this->familyname, $this->password_c, $passwordHashFunction = null, $quota = null );
+ $users = $gdata->getUserFeed();
+
+ foreach ($users as $user)
+ {
+ echo " * " . $user->login->username . ' (' . $user->name->givenName .
+ ' ' . $user->name->familyName . ")\n";
+ }
+
+ var_dump( $gdata->isOwner( 'gotcha@teamlogin.com', 'hr' ) );
+
+ var_dump( $this->get( 'request' )->request );
+ var_dump ($this->get( 'security.context' )->getToken()->getAttributes());
+ $this->getRequest()->getSession()->set( 'ca', 'ca ni ma' );
+ var_dump( $this->getRequest()->getSession()->get( 'gaga' ) );
+
+
+// $openid = $this->getDoctrine()->getRepository( 'GoogleOauthBundle:OpenIdIdentity' );
+// $open_result = $openid->find(2);
+// var_dump($open_result);
+
+
+ return array('name' => $name);
+ }
+
+
+}
diff --git a/src/Google/OauthBundle/DependencyInjection/Configuration.php b/src/Google/OauthBundle/DependencyInjection/Configuration.php
new file mode 100644
index 0000000..98d1cf8
--- /dev/null
+++ b/src/Google/OauthBundle/DependencyInjection/Configuration.php
@@ -0,0 +1,29 @@
+root('google_oauth');
+
+ // Here you should define the parameters that are allowed to
+ // configure your bundle. See the documentation linked above for
+ // more information on that topic.
+
+ return $treeBuilder;
+ }
+}
diff --git a/src/Google/OauthBundle/DependencyInjection/GoogleOauthExtension.php b/src/Google/OauthBundle/DependencyInjection/GoogleOauthExtension.php
new file mode 100644
index 0000000..2ab524a
--- /dev/null
+++ b/src/Google/OauthBundle/DependencyInjection/GoogleOauthExtension.php
@@ -0,0 +1,28 @@
+processConfiguration($configuration, $configs);
+
+ $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
+ $loader->load('services.yml');
+ }
+}
diff --git a/src/Google/OauthBundle/Entity/OpenIdIdentity.php b/src/Google/OauthBundle/Entity/OpenIdIdentity.php
new file mode 100644
index 0000000..ee86b35
--- /dev/null
+++ b/src/Google/OauthBundle/Entity/OpenIdIdentity.php
@@ -0,0 +1,70 @@
+id;
+// }
+
+// /**
+// * Set user
+// *
+// * @param Google\OauthBundle\Entity\User $user
+// * @return OpenIdIdentity
+// */
+// public function setUser(\Google\OauthBundle\Entity\User $user = null)
+// {
+// $this->user = $user;
+// return $this;
+// }
+//
+// /**
+// * Get user
+// *
+// * @return Google\OauthBundle\Entity\User
+// */
+// public function getUser()
+// {
+// return $this->user;
+// }
+
+}
\ No newline at end of file
diff --git a/src/Google/OauthBundle/Entity/OpenIdIdentity.php~ b/src/Google/OauthBundle/Entity/OpenIdIdentity.php~
new file mode 100644
index 0000000..2dc6cbc
--- /dev/null
+++ b/src/Google/OauthBundle/Entity/OpenIdIdentity.php~
@@ -0,0 +1,40 @@
+
\ No newline at end of file
diff --git a/src/Google/OauthBundle/Entity/OpenIdUserManager.php b/src/Google/OauthBundle/Entity/OpenIdUserManager.php
new file mode 100644
index 0000000..3f7abf9
--- /dev/null
+++ b/src/Google/OauthBundle/Entity/OpenIdUserManager.php
@@ -0,0 +1,51 @@
+identityManager = $identityManager;
+ $this->em = $em;
+ }
+
+ public function createUserFromIdentity($identity, array $attributes = array())
+ {
+ //put your user creation logic here
+ $user = new User();
+ $user->setEmail( isset( $attributes['contact/email'] ) ? $attributes['contact/email'] : '' );
+// $factory = $this->get( 'security.encoder_factory' );
+// $encoder = $factory->getEncoder( $user );
+// $password = $encoder->encodePassword( 'lichenpass', $user->getSalt() );
+ $user->setPassword( 'haha' );
+ if ($attributes['contact/email'])
+ {
+ $username = explode( "@", $attributes['contact/email'] );
+ }
+ $user->setUsername( $username[0] );
+
+
+ $openid = new OpenIdIdentity();
+ $openid->setIdentity( $identity );
+ $openid->setAttributes( $attributes );
+ $openid->setUser( $user );
+ $this->em->persist( $user );
+ $this->em->persist( $openid );
+ $this->em->flush();
+ return $user; // must always return UserInterface instance or throw an exception.
+ }
+
+}
+
+?>
\ No newline at end of file
diff --git a/src/Google/OauthBundle/Entity/User.php b/src/Google/OauthBundle/Entity/User.php
new file mode 100644
index 0000000..0c0ed63
--- /dev/null
+++ b/src/Google/OauthBundle/Entity/User.php
@@ -0,0 +1,191 @@
+isActive = true;
+ $this->salt = md5( uniqid( null, true ) );
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function getUsername()
+ {
+ return $this->username;
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function getSalt()
+ {
+ return $this->salt;
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function getPassword()
+ {
+ return $this->password;
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function getRoles()
+ {
+ return array('ROLE_USER');
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function eraseCredentials()
+ {
+
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function equals(UserInterface $user)
+ {
+ return $this->username === $user->getUsername();
+ }
+
+ /**
+ * Get id
+ *
+ * @return integer
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ /**
+ * Set username
+ *
+ * @param string $username
+ * @return User
+ */
+ public function setUsername($username)
+ {
+ $this->username = $username;
+ return $this;
+ }
+
+ /**
+ * Set salt
+ *
+ * @param string $salt
+ * @return User
+ */
+ public function setSalt($salt)
+ {
+ $this->salt = $salt;
+ return $this;
+ }
+
+ /**
+ * Set password
+ *
+ * @param string $password
+ * @return User
+ */
+ public function setPassword($password)
+ {
+ $this->password = $password;
+ return $this;
+ }
+
+ /**
+ * Set email
+ *
+ * @param string $email
+ * @return User
+ */
+ public function setEmail($email)
+ {
+ $this->email = $email;
+ return $this;
+ }
+
+ /**
+ * Get email
+ *
+ * @return string
+ */
+ public function getEmail()
+ {
+ return $this->email;
+ }
+
+ /**
+ * Set isActive
+ *
+ * @param boolean $isActive
+ * @return User
+ */
+ public function setIsActive($isActive)
+ {
+ $this->isActive = $isActive;
+ return $this;
+ }
+
+ /**
+ * Get isActive
+ *
+ * @return boolean
+ */
+ public function getIsActive()
+ {
+ return $this->isActive;
+ }
+
+}
\ No newline at end of file
diff --git a/src/Google/OauthBundle/Entity/User.php~ b/src/Google/OauthBundle/Entity/User.php~
new file mode 100644
index 0000000..148a5f6
--- /dev/null
+++ b/src/Google/OauthBundle/Entity/User.php~
@@ -0,0 +1,101 @@
+isActive = true;
+ $this->salt = md5( uniqid( null, true ) );
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function getUsername()
+ {
+ return $this->username;
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function getSalt()
+ {
+ return $this->salt;
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function getPassword()
+ {
+ return $this->password;
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function getRoles()
+ {
+ return array('ROLE_USER');
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function eraseCredentials()
+ {
+
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function equals(UserInterface $user)
+ {
+ return $this->username === $user->getUsername();
+ }
+
+}
\ No newline at end of file
diff --git a/src/Google/OauthBundle/GoogleOauthBundle.php b/src/Google/OauthBundle/GoogleOauthBundle.php
new file mode 100644
index 0000000..a78e8ee
--- /dev/null
+++ b/src/Google/OauthBundle/GoogleOauthBundle.php
@@ -0,0 +1,9 @@
+
+
+
+
+
+
diff --git a/src/Google/OauthBundle/Resources/config/services.yml b/src/Google/OauthBundle/Resources/config/services.yml
new file mode 100644
index 0000000..d89742c
--- /dev/null
+++ b/src/Google/OauthBundle/Resources/config/services.yml
@@ -0,0 +1,17 @@
+parameters:
+ google_oauth.example.class: Google\OauthBundle\Example
+ doctrine_orm_entity_manager: Doctrine\ORM\EntityManager
+
+services:
+# google_oauth.example:
+# class: %google_oauth.example.class%
+# arguments: [@service_id, plain_value, %parameter_name%]
+
+# entity_manager:
+# class: Doctrine\ORM\EntityManager
+
+ google.oauth.openid_user_manager:
+ class: Google\OauthBundle\Entity\OpenIdUserManager
+ arguments: [@doctrine.orm.default_entity_manager, @fp_openid.identity_manager]
+
+
diff --git a/src/Google/OauthBundle/Resources/views/Default/index.html.twig b/src/Google/OauthBundle/Resources/views/Default/index.html.twig
new file mode 100644
index 0000000..4ce626e
--- /dev/null
+++ b/src/Google/OauthBundle/Resources/views/Default/index.html.twig
@@ -0,0 +1 @@
+Hello {{ name }}!
diff --git a/src/Google/OauthBundle/Tests/Controller/DefaultControllerTest.php b/src/Google/OauthBundle/Tests/Controller/DefaultControllerTest.php
new file mode 100644
index 0000000..da7bb1b
--- /dev/null
+++ b/src/Google/OauthBundle/Tests/Controller/DefaultControllerTest.php
@@ -0,0 +1,17 @@
+request('GET', '/hello/Fabien');
+
+ $this->assertTrue($crawler->filter('html:contains("Hello Fabien")')->count() > 0);
+ }
+}