Permalink
Browse files

Added Xing oAuth1 login support and test

  • Loading branch information...
1 parent 815b2db commit 0efe4a9c29e4938b743ab35348043399aa8a4feb @Gelembjuk Gelembjuk committed Aug 19, 2015
Showing with 447 additions and 0 deletions.
  1. +11 −0 README.md
  2. +91 −0 resources/examples/xing.php
  3. +91 −0 src/Client/Server/Xing.php
  4. +254 −0 tests/XingServerTest.php
View
@@ -15,6 +15,7 @@ It has built in support for:
- Trello
- Tumblr
- Twitter
+- Xing
Adding support for other providers is trivial. The library requires PHP 5.3+ and is PSR-2 compatible.
@@ -136,6 +137,16 @@ $server = new League\OAuth1\Client\Server\Twitter(array(
));
```
+### Xing
+
+```php
+$server = new League\OAuth1\Client\Server\Xing(array(
+ 'identifier' => 'your-consumer-key',
+ 'secret' => 'your-consumer-secret',
+ 'callback_uri' => "http://your-callback-uri/",
+));
+```
+
### Showing a Login Button
To begin, it's advisable that you include a login button on your website. Most servers (Twitter, Tumblr etc) have resources available for making buttons that are familiar to users. Some servers actually require you use their buttons as part of their terms.
@@ -0,0 +1,91 @@
+<?php
+
+require_once __DIR__.'/../../vendor/autoload.php';
+
+// Create server
+$server = new League\OAuth1\Client\Server\Xing(array(
+ 'identifier' => 'your-identifier',
+ 'secret' => 'your-secret',
+ 'callback_uri' => "http://your-callback-uri/",
+));
+
+// Start session
+session_start();
+
+// Step 4
+if (isset($_GET['user'])) {
+
+ // Check somebody hasn't manually entered this URL in,
+ // by checking that we have the token credentials in
+ // the session.
+ if ( ! isset($_SESSION['token_credentials'])) {
+ echo 'No token credentials.';
+ exit(1);
+ }
+
+ // Retrieve our token credentials. From here, it's play time!
+ $tokenCredentials = unserialize($_SESSION['token_credentials']);
+
+ // // Below is an example of retrieving the identifier & secret
+ // // (formally known as access token key & secret in earlier
+ // // OAuth 1.0 specs).
+ // $identifier = $tokenCredentials->getIdentifier();
+ // $secret = $tokenCredentials->getSecret();
+
+ // Some OAuth clients try to act as an API wrapper for
+ // the server and it's API. We don't. This is what you
+ // get - the ability to access basic information. If
+ // you want to get fancy, you should be grabbing a
+ // package for interacting with the APIs, by using
+ // the identifier & secret that this package was
+ // designed to retrieve for you. But, for fun,
+ // here's basic user information.
+ $user = $server->getUserDetails($tokenCredentials);
+ var_dump($user);
+
+// Step 3
+} elseif (isset($_GET['oauth_token']) && isset($_GET['oauth_verifier'])) {
+
+ // Retrieve the temporary credentials from step 2
+ $temporaryCredentials = unserialize($_SESSION['temporary_credentials']);
+
+ // Third and final part to OAuth 1.0 authentication is to retrieve token
+ // credentials (formally known as access tokens in earlier OAuth 1.0
+ // specs).
+ $tokenCredentials = $server->getTokenCredentials($temporaryCredentials, $_GET['oauth_token'], $_GET['oauth_verifier']);
+
+ // Now, we'll store the token credentials and discard the temporary
+ // ones - they're irrelevant at this stage.
+ unset($_SESSION['temporary_credentials']);
+ $_SESSION['token_credentials'] = serialize($tokenCredentials);
+ session_write_close();
+
+ // Redirect to the user page
+ header("Location: http://{$_SERVER['HTTP_HOST']}/?user=user");
+ exit;
+
+// Step 2.5 - denied request to authorize client
+} elseif (isset($_GET['denied'])) {
+ echo 'Hey! You denied the client access to your Xing account! If you did this by mistake, you should <a href="?go=go">try again</a>.';
+
+// Step 2
+} elseif (isset($_GET['go'])) {
+
+ // First part of OAuth 1.0 authentication is retrieving temporary credentials.
+ // These identify you as a client to the server.
+ $temporaryCredentials = $server->getTemporaryCredentials();
+
+ // Store the credentials in the session.
+ $_SESSION['temporary_credentials'] = serialize($temporaryCredentials);
+ session_write_close();
+
+ // Second part of OAuth 1.0 authentication is to redirect the
+ // resource owner to the login screen on the server.
+ $server->authorize($temporaryCredentials);
+
+// Step 1
+} else {
+
+ // Display link to start process
+ echo '<a href="?go=go">Login</a>';
+}
@@ -0,0 +1,91 @@
+<?php
+
+namespace League\OAuth1\Client\Server;
+
+use League\OAuth1\Client\Credentials\TokenCredentials;
+
+class Xing extends Server {
+ const XING_API_ENDPOINT = 'https://api.xing.com';
+
+ /**
+ * {@inheritDoc}
+ */
+ public function urlTemporaryCredentials()
+ {
+ return self::XING_API_ENDPOINT . '/v1/request_token';
+ }
+ /**
+ * {@inheritDoc}
+ */
+ public function urlAuthorization()
+ {
+ return self::XING_API_ENDPOINT . '/v1/authorize';
+ }
+ /**
+ * {@inheritDoc}
+ */
+ public function urlTokenCredentials()
+ {
+ return self::XING_API_ENDPOINT . '/v1/access_token';
+ }
+ /**
+ * {@inheritDoc}
+ */
+ public function urlUserDetails()
+ {
+ return self::XING_API_ENDPOINT . '/v1/users/me';
+ }
+ /**
+ * {@inheritDoc}
+ */
+ public function userDetails($data, TokenCredentials $tokenCredentials)
+ {
+ if (!isset($data['users'][0])) {
+ throw new \Exception('Not possible to get user info');
+ }
+ $data = $data['users'][0];
+
+ $user = new User();
+ $user->uid = $data['id'];
+ $user->nickname = $data['display_name'];
+ $user->name = $data['display_name'];
+ $user->firstName = $data['first_name'];
+ $user->lastName = $data['last_name'];
+ $user->location = $data['private_address']['country'];
+
+ if ($user->location == '') {
+ $user->location = $data['business_address']['country'];
+ }
+ $user->description = $data['employment_status'];
+ $user->imageUrl = $data['photo_urls']['maxi_thumb'];
+ $user->email = $data['active_email'];
+
+ $user->urls['permalink'] = $data['permalink'];
+
+ return $user;
+ }
+ /**
+ * {@inheritDoc}
+ */
+ public function userUid($data, TokenCredentials $tokenCredentials)
+ {
+ $data = $data['users'][0];
+ return $data['id'];
+ }
+ /**
+ * {@inheritDoc}
+ */
+ public function userEmail($data, TokenCredentials $tokenCredentials)
+ {
+ $data = $data['users'][0];
+ return $data['active_email'];
+ }
+ /**
+ * {@inheritDoc}
+ */
+ public function userScreenName($data, TokenCredentials $tokenCredentials)
+ {
+ $data = $data['users'][0];
+ return $data['display_name'];
+ }
+}
Oops, something went wrong.

0 comments on commit 0efe4a9

Please sign in to comment.