Guillermo Espinoza 8 rokov pred
rodič
commit
6c6210af8f

+ 3 - 3
Controller/OAuthController.php

@@ -4,7 +4,7 @@ namespace Base\OAuthBundle\Controller;
 
 use Symfony\Bundle\FrameworkBundle\Controller\Controller;
 use Symfony\Component\HttpFoundation\Request;
-use Symfony\Component\HttpFoundation\Response;
+use Symfony\Component\HttpFoundation\JsonResponse;
 use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
 
 class OAuthController extends Controller
@@ -22,7 +22,7 @@ class OAuthController extends Controller
 
     /**
      * @Route("/api/user/me", name="user_data_json")
-     * @return Response
+     * @return JsonResponse
      */
     public function getUserDataJsonAction()
     {
@@ -36,7 +36,7 @@ class OAuthController extends Controller
             $data['roles'] = $user->getRoles();
         }
 
-        return new Response(json_encode($data));
+        return new JsonResponse($data);
     }
 
 }

+ 30 - 0
OAuth/Response/PathUserResponse.php

@@ -0,0 +1,30 @@
+<?php
+
+namespace Base\OAuthBundle\OAuth\Response;
+
+class PathUserResponse extends \HWI\Bundle\OAuthBundle\OAuth\Response\PathUserResponse
+{
+
+    /**
+     * @var array
+     */
+    protected $paths = array(
+        'identifier' => null,
+        'nickname' => null,
+        'firstname' => null,
+        'lastname' => null,
+        'realname' => null,
+        'email' => null,
+        'profilepicture' => null,
+        'roles' => null,
+    );
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getRoles()
+    {
+        return $this->getValueForPath('roles');
+    }
+
+}

+ 19 - 0
Resources/config/hwioauthbundle/config.yml

@@ -0,0 +1,19 @@
+hwi_oauth:
+    resource_owners:
+        login:
+            type:                oauth2
+            client_id:           "%client_id%"
+            client_secret:       "%client_secret%"
+            access_token_url:    "%access_token_url%"
+            authorization_url:   "%authorization_url%"
+            infos_url:           "%infos_url%"
+            scope:               "user"
+            user_response_class: Base\OAuthBundle\OAuth\Response\PathUserResponse
+            paths:
+                identifier: id
+                nickname: username
+                realname: firstname
+                firstname: firstname
+                lastname: lastname
+                roles: roles
+    firewall_names: [secured_area]

+ 16 - 0
Resources/config/hwioauthbundle/routing.yml

@@ -0,0 +1,16 @@
+hwi_oauth_redirect:
+    resource: "@HWIOAuthBundle/Resources/config/routing/redirect.xml"
+    prefix:   /connect
+
+hwi_oauth_connect:
+    resource: "@HWIOAuthBundle/Resources/config/routing/connect.xml"
+    prefix:   /connect
+
+hwi_oauth_login:
+    resource: "@HWIOAuthBundle/Resources/config/routing/login.xml"
+    prefix:   /login
+
+base_o_auth:
+    resource: "@BaseOAuthBundle/Controller/"
+    type:     annotation    
+    prefix:   /

+ 4 - 0
Resources/config/hwioauthbundle/services.yml

@@ -0,0 +1,4 @@
+services:
+    base_oauth_bundle.oauth_user_provider:
+        class: Base\OAuthBundle\Security\Core\User\CustomOAuthUserProvider
+        arguments: ["@security.token_storage"]

+ 4 - 0
Resources/config/routing.yml

@@ -0,0 +1,4 @@
+base_o_auth:
+    resource: "@BaseOAuthBundle/Controller/"
+    type:     annotation    
+    prefix:   /

+ 1 - 4
Resources/config/services.yml

@@ -1,4 +1 @@
-services:
-#    base_o_auth.example:
-#        class: Base\OAuthBundle\Example
-#        arguments: ["@service_id", "plain_value", "%parameter%"]
+services:

+ 5 - 0
Resources/views/Core/oauth_user_block.html.twig

@@ -0,0 +1,5 @@
+{% extends "SonataAdminBundle:Core:user_block.html.twig" %}
+
+{% block user_block %}
+    <li><a href="{{ path('logout') }}">{{ 'link.user_logout'|trans({}, 'BaseUserBundle') }}</a></li>
+{% endblock %}

+ 31 - 0
Security/Core/User/CustomOAuthUser.php

@@ -0,0 +1,31 @@
+<?php
+
+namespace Base\OAuthBundle\Security\Core\User;
+
+use HWI\Bundle\OAuthBundle\Security\Core\User\OAuthUser;
+
+class CustomOAuthUser extends OAuthUser
+{
+
+    /**
+     * @var array
+     */
+    protected $roles = array('ROLE_USER');
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getRoles()
+    {
+        return $this->roles;
+    }
+
+    /**
+     * @param array $roles
+     */
+    public function setRoles($roles)
+    {
+        $this->roles = $roles;
+    }
+
+}

+ 49 - 0
Security/Core/User/CustomOAuthUserProvider.php

@@ -0,0 +1,49 @@
+<?php
+
+namespace Base\OAuthBundle\Security\Core\User;
+
+use HWI\Bundle\OAuthBundle\OAuth\Response\UserResponseInterface;
+use HWI\Bundle\OAuthBundle\Security\Core\User\OAuthUserProvider;
+use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
+
+class CustomOAuthUserProvider extends OAuthUserProvider
+{
+
+    protected $securityTokenStorage;
+
+    
+    public function __construct($securityTokenStorage)
+    {
+        $this->securityTokenStorage = $securityTokenStorage;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function loadUserByUsername($username)
+    {
+        return new CustomOAuthUser($username);
+    }
+    
+    /**
+     * {@inheritdoc}
+     */
+    public function loadUserByOAuthUserResponse(UserResponseInterface $response)
+    {
+        $user = $this->loadUserByUsername($response->getNickname());
+        $user->setRoles($response->getRoles());
+        $token = new UsernamePasswordToken($user, null, "secured_area", $user->getRoles());
+        $this->securityTokenStorage->setToken($token);
+        
+        return $user;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function supportsClass($class)
+    {
+        return $class === 'Base\\OAuthBundle\\Security\\Core\\User\\CustomOAuthUser';
+    }
+
+}