Guillermo Espinoza пре 8 година
родитељ
комит
a1b7f8adc0

+ 58 - 0
Admin/AccessTokenAdmin.php

@@ -0,0 +1,58 @@
+<?php
+
+namespace Base\OAuthServerBundle\Admin;
+
+use Base\AdminBundle\Admin\BaseAdmin;
+use Sonata\AdminBundle\Datagrid\ListMapper;
+use Sonata\AdminBundle\Datagrid\DatagridMapper;
+use Sonata\AdminBundle\Form\FormMapper;
+
+class AccessTokenAdmin extends BaseAdmin
+{
+
+    /**
+     * @param FormMapper $formMapper
+     */
+    protected function configureFormFields(FormMapper $formMapper)
+    {
+        $formMapper
+            ->add('client')
+            ->add('user')
+            ->add('token')
+            ->add('expiresAt')
+            ->add('scope')
+        ;
+    }
+
+    /**
+     * @param DatagridMapper $datagridMapper
+     */
+    protected function configureDatagridFilters(DatagridMapper $datagridMapper)
+    {
+        $datagridMapper
+            ->add('id')
+            ->add('client')
+            ->add('user')
+            ->add('token')
+            ->add('expiresAt')
+            ->add('scope')
+        ;
+    }
+
+    /**
+     * @param ListMapper $listMapper
+     */
+    protected function configureListFields(ListMapper $listMapper)
+    {
+        unset($this->listModes['mosaic']);
+        $listMapper
+            ->addIdentifier('id')
+            ->add('client')
+            ->add('user')
+            ->add('token')
+            ->add('expiresAt')
+            ->add('scope')
+        ;
+    }
+
+}

+ 61 - 0
Admin/AuthCodeAdmin.php

@@ -0,0 +1,61 @@
+<?php
+
+namespace Base\OAuthServerBundle\Admin;
+
+use Base\AdminBundle\Admin\BaseAdmin;
+use Sonata\AdminBundle\Datagrid\ListMapper;
+use Sonata\AdminBundle\Datagrid\DatagridMapper;
+use Sonata\AdminBundle\Form\FormMapper;
+
+class AuthCodeAdmin extends BaseAdmin
+{
+
+    /**
+     * @param FormMapper $formMapper
+     */
+    protected function configureFormFields(FormMapper $formMapper)
+    {
+        $formMapper
+            ->add('client')
+            ->add('user')
+            ->add('token')
+            ->add('redirectUri')
+            ->add('expiresAt')
+            ->add('scope')
+        ;
+    }
+
+    /**
+     * @param DatagridMapper $datagridMapper
+     */
+    protected function configureDatagridFilters(DatagridMapper $datagridMapper)
+    {
+        $datagridMapper
+            ->add('id')
+            ->add('client')
+            ->add('user')
+            ->add('token')
+            ->add('redirectUri')
+            ->add('expiresAt')
+            ->add('scope')
+        ;
+    }
+
+    /**
+     * @param ListMapper $listMapper
+     */
+    protected function configureListFields(ListMapper $listMapper)
+    {
+        unset($this->listModes['mosaic']);
+        $listMapper
+            ->addIdentifier('id')
+            ->add('client')
+            ->add('user')
+            ->add('token')
+            ->add('redirectUri')
+            ->add('expiresAt')
+            ->add('scope')
+        ;
+    }
+
+}

+ 88 - 0
Admin/OAuthClientAdmin.php

@@ -0,0 +1,88 @@
+<?php
+
+namespace Base\OAuthServerBundle\Admin;
+
+use Base\AdminBundle\Admin\BaseAdmin;
+use \Base\OAuthServerBundle\Entity\OAuthClient;
+use Sonata\AdminBundle\Datagrid\ListMapper;
+use Sonata\AdminBundle\Datagrid\DatagridMapper;
+use Sonata\AdminBundle\Form\FormMapper;
+use Symfony\Component\Form\Extension\Core\Type\CollectionType;
+use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
+
+class OAuthClientAdmin extends BaseAdmin
+{
+
+    /**
+     * @param FormMapper $formMapper
+     */
+    protected function configureFormFields(FormMapper $formMapper)
+    {
+        $formMapper
+            ->add('randomId')
+            ->add('redirectUris', CollectionType::class, array(
+                'entry_type' => null,
+                'allow_add' => true,
+                'allow_delete' => true,
+                'required' => true,
+            ))
+            ->add('secret')
+            ->add('allowedGrantTypes', ChoiceType::class, array(
+                'choices' => OAuthClient::getGrantTypesChoices(),
+                'multiple' => true,
+                'expanded' => true,
+                'required' => true,
+            ))
+        ;
+    }
+
+    /**
+     * @param DatagridMapper $datagridMapper
+     */
+    protected function configureDatagridFilters(DatagridMapper $datagridMapper)
+    {
+        $datagridMapper
+            ->add('id')
+            ->add('randomId')
+            ->add('redirectUris')
+            ->add('secret')
+            ->add('allowedGrantTypes')
+        ;
+    }
+
+    /**
+     * @param ListMapper $listMapper
+     */
+    protected function configureListFields(ListMapper $listMapper)
+    {
+        unset($this->listModes['mosaic']);
+        $listMapper
+            ->add('id')
+            ->addIdentifier('randomId')
+            ->add('redirectUris', 'array', array(
+                'template' => 'BaseOAuthServerBundle:OAuthClient:list_field_redirect_uris.html.twig',
+            ))
+            ->add('secret')
+            ->add('allowedGrantTypes', 'array', array(
+                'template' => 'BaseOAuthServerBundle:OAuthClient:list_field_allowed_grant_types.html.twig',
+            ))
+        ;
+    }
+
+    /**
+     * @param OauthClient $oauthclient
+     */
+    public function preUpdate($oauthclient)
+    {
+        // Reindexar array de URIs
+        $uris = $oauthclient->getRedirectUris();
+        $uris = array_values($uris);
+        $oauthclient->setRedirectUris($uris);
+
+        // Reindexar array de allowedGrantTypes
+        $algt = $oauthclient->getAllowedGrantTypes();
+        $algt = array_values($algt);
+        $oauthclient->setAllowedGrantTypes($algt);
+    }
+
+}

+ 58 - 0
Admin/RefreshTokenAdmin.php

@@ -0,0 +1,58 @@
+<?php
+
+namespace Base\OAuthServerBundle\Admin;
+
+use Base\AdminBundle\Admin\BaseAdmin;
+use Sonata\AdminBundle\Datagrid\ListMapper;
+use Sonata\AdminBundle\Datagrid\DatagridMapper;
+use Sonata\AdminBundle\Form\FormMapper;
+
+class RefreshTokenAdmin extends BaseAdmin
+{
+
+    /**
+     * @param FormMapper $formMapper
+     */
+    protected function configureFormFields(FormMapper $formMapper)
+    {
+        $formMapper
+            ->add('client')
+            ->add('user')
+            ->add('token')
+            ->add('expiresAt')
+            ->add('scope')
+        ;
+    }
+
+    /**
+     * @param DatagridMapper $datagridMapper
+     */
+    protected function configureDatagridFilters(DatagridMapper $datagridMapper)
+    {
+        $datagridMapper
+            ->add('id')
+            ->add('client')
+            ->add('user')
+            ->add('token')
+            ->add('expiresAt')
+            ->add('scope')
+        ;
+    }
+
+    /**
+     * @param ListMapper $listMapper
+     */
+    protected function configureListFields(ListMapper $listMapper)
+    {
+        unset($this->listModes['mosaic']);
+        $listMapper
+            ->addIdentifier('id')
+            ->add('client')
+            ->add('user')
+            ->add('token')
+            ->add('expiresAt')
+            ->add('scope')
+        ;
+    }
+
+}

+ 5 - 2
Command/OAuthClientCreateCommand.php

@@ -2,6 +2,7 @@
 
 namespace Base\OAuthServerBundle\Command;
 
+use \Base\OAuthServerBundle\Entity\OAuthClient;
 use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Output\OutputInterface;
@@ -34,8 +35,10 @@ class OAuthClientCreateCommand extends ContainerAwareCommand
         $clientManager = $this->getContainer()->get('fos_oauth_server.client_manager.default');
         
         $client = $clientManager->createClient();
-        $client->setRedirectUris(array($input->getOption('redirect_uri')));
-        $client->setAllowedGrantTypes(array('password', 'refresh_token', 'token', 'authorization_code'));
+        $client->setRedirectUris(array(
+            $input->getOption('redirect_uri'),
+        ));
+        $client->setAllowedGrantTypes(array_keys(OAuthClient::getGrantTypesChoices()));
         $clientManager->updateClient($client);
         
         $output->writeln('OAuth client successfully generated!');

+ 1 - 1
Controller/OAuthController.php

@@ -3,7 +3,6 @@
 namespace Base\OAuthServerBundle\Controller;
 
 use Symfony\Bundle\FrameworkBundle\Controller\Controller;
-use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpFoundation\JsonResponse;
 use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
 
@@ -12,6 +11,7 @@ class OAuthController extends Controller
 
     /**
      * @Route("/api/user/me", name="user_data_json")
+     * 
      * @return JsonResponse
      */
     public function getUserDataJsonAction()

+ 6 - 12
Controller/SecurityController.php

@@ -1,14 +1,5 @@
 <?php
 
-/*
- * This file is part of the FOSUserBundle package.
- *
- * (c) FriendsOfSymfony <http://friendsofsymfony.github.com/>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
 namespace Base\OAuthServerBundle\Controller;
 
 use Symfony\Bundle\FrameworkBundle\Controller\Controller;
@@ -20,8 +11,10 @@ use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
 
 class SecurityController extends Controller
 {
+
     /**
      * @Route("/oauth/v2/auth/login", name="oauth_login")
+     * 
      * @param Request $request
      *
      * @return Response
@@ -56,9 +49,9 @@ class SecurityController extends Controller
             : null;
 
         return $this->renderLogin(array(
-            'last_username' => $lastUsername,
-            'error' => $error,
-            'csrf_token' => $csrfToken,
+                    'last_username' => $lastUsername,
+                    'error' => $error,
+                    'csrf_token' => $csrfToken,
         ));
     }
 
@@ -90,4 +83,5 @@ class SecurityController extends Controller
     {
         throw new \RuntimeException('You must activate the logout in your security firewall configuration.');
     }
+
 }

+ 21 - 0
Entity/OAuthClient.php

@@ -11,6 +11,11 @@ use Doctrine\ORM\Mapping as ORM;
 class OAuthClient extends BaseClient
 {
 
+    const GRANT_TYPE_PASSWORD = 'password';
+    const GRANT_TYPE_REFRESH_TOKEN = 'refresh_token';
+    const GRANT_TYPE_TOKEN = 'token';
+    const GRANT_TYPE_AUTHORIZATION_CODE = 'authorization_code';
+    
     /**
      * @ORM\Id
      * @ORM\Column(type="integer")
@@ -24,9 +29,25 @@ class OAuthClient extends BaseClient
         parent::__construct();
     }
 
+    /**
+     * @return array
+     */
     public function __toString()
     {
         return strval($this->id);
     }
+    
+    /**
+     * @return array
+     */
+    public static function getGrantTypesChoices()
+    {
+        return array(
+            self::GRANT_TYPE_AUTHORIZATION_CODE => self::GRANT_TYPE_AUTHORIZATION_CODE,
+            self::GRANT_TYPE_PASSWORD => self::GRANT_TYPE_PASSWORD,
+            self::GRANT_TYPE_REFRESH_TOKEN => self::GRANT_TYPE_REFRESH_TOKEN,
+            self::GRANT_TYPE_TOKEN => self::GRANT_TYPE_TOKEN,
+        );
+    }
 
 }

+ 29 - 3
Resources/config/services.yml

@@ -1,5 +1,31 @@
 services:
-    oauth.user.mapping.listener:
-        class: Base\OAuthServerBundle\EventListener\DynamicRelationSubscriber
+    baseuserbundle.admin.auth_code:
+        class: Base\OAuthServerBundle\Admin\AuthCodeAdmin
         tags:
-            - { name: doctrine.event_listener, event: loadClassMetadata }
+            - { name: sonata.admin, manager_type: orm, group: OAuth, label: Authentication Codes, label_catalogue: Oauth, label_translator_strategy: sonata.admin.label.strategy.underscore }
+        arguments: ['', Base\OAuthServerBundle\Entity\AuthCode, 'SonataAdminBundle:CRUD']
+        calls:
+            - [setTranslationDomain, [Oauth]]
+        roles:
+            - [ ROLE_SUPER_ADMIN ]
+    baseuserbundle.admin.oauth_client:
+        class: Base\OAuthServerBundle\Admin\OAuthClientAdmin
+        tags:
+            - { name: sonata.admin, manager_type: orm, group: OAuth, label: OAuth Clients, label_catalogue: Oauth, label_translator_strategy: sonata.admin.label.strategy.underscore }
+        arguments: ['', Base\OAuthServerBundle\Entity\OAuthClient, 'SonataAdminBundle:CRUD']
+        calls:
+            - [setTranslationDomain, [Oauth]]
+    baseuserbundle.admin.access_token:
+        class: Base\OAuthServerBundle\Admin\AccessTokenAdmin
+        tags:
+            - { name: sonata.admin, manager_type: orm, group: OAuth, label: Access Tokens, label_catalogue: Oauth, label_translator_strategy: sonata.admin.label.strategy.underscore }
+        arguments: ['', Base\OAuthServerBundle\Entity\AccessToken, 'SonataAdminBundle:CRUD']
+        calls:
+            - [setTranslationDomain, [Oauth]]
+    baseuserbundle.admin.refresh_token:
+        class: Base\OAuthServerBundle\Admin\RefreshTokenAdmin
+        tags:
+            - { name: sonata.admin, manager_type: orm, group: OAuth, label: Refresh Tokens, label_catalogue: Oauth, label_translator_strategy: sonata.admin.label.strategy.underscore }
+        arguments: ['', Base\OAuthServerBundle\Entity\RefreshToken, 'SonataAdminBundle:CRUD']
+        calls:
+            - [setTranslationDomain, [Oauth]]

+ 50 - 0
Resources/translations/Oauth.es.yml

@@ -0,0 +1,50 @@
+Authentication Codes: Códigos de Autenticación
+OAuth Clients: Clientes OAuth
+Access Tokens: Tokens de Acceso
+Refresh Tokens: Refresco de Tokens
+OAuth: OAuth
+breadcrumb:
+    link_auth_code_list: Códigos de Autenticación
+    link_o_auth_client_list: Clientes OAuth
+    link_access_token_list: Tokens de Acceso
+    link_refresh_token_list: Tokens de Acceso
+    link_auth_code_create: Crear Código de Autenticación
+    link_o_auth_client_create: Crear Cliente OAuth
+    link_access_token_create: Crear Token de Acceso
+    link_refresh_token_create: Crear Token de Acceso
+list:
+    label_id: ID
+    label_random_id: ID Aleatorio
+    label_redirect_uri: URI de Redirección
+    label_redirect_uris: URIs de Redirección
+    label_secret: Secreto
+    label_allowed_grant_types: Concesiones Permitidas
+    label_client: Cliente
+    label_user: Usuario
+    label_token: Token
+    label_expires_at: Expiración
+    label_scope: Alcance
+form:
+    label_id: ID
+    label_random_id: ID Aleatorio
+    label_redirect_uri: URI de Redirección
+    label_redirect_uris: URIs de Redirección
+    label_secret: Secreto
+    label_allowed_grant_types: Concesiones Permitidas
+    label_client: Cliente
+    label_user: Usuario
+    label_token: Token
+    label_expires_at: Expiración
+    label_scope: Alcance
+filter:
+    label_id: ID
+    label_random_id: ID Aleatorio
+    label_redirect_uri: URI de Redirección
+    label_redirect_uris: URIs de Redirección
+    label_secret: Secreto
+    label_allowed_grant_types: Concesiones Permitidas
+    label_client: Cliente
+    label_user: Usuario
+    label_token: Token
+    label_expires_at: Expiración
+    label_scope: Alcance

+ 9 - 0
Resources/views/OAuthClient/list_field_allowed_grant_types.html.twig

@@ -0,0 +1,9 @@
+{% extends 'SonataAdminBundle:CRUD:base_list_field.html.twig' %}
+
+{% block field %}
+    <div style="text-align: center">
+        {% for algt in object.allowedGrantTypes %}
+        <span class="badge bg-green">{{ algt }}</span>
+        {% endfor %}
+    </div>
+{% endblock %}

+ 9 - 0
Resources/views/OAuthClient/list_field_redirect_uris.html.twig

@@ -0,0 +1,9 @@
+{% extends 'SonataAdminBundle:CRUD:base_list_field.html.twig' %}
+
+{% block field %}
+    <div style="text-align: center">
+        {% for uri in object.redirectUris %}
+        <span class="badge bg-blue">{{ uri }}</span>
+        {% endfor %}
+    </div>
+{% endblock %}

+ 9 - 2
composer.json

@@ -1,9 +1,16 @@
 {
-    "name": "base-oauth-server-bundle",
+    "name": "ik/base-oauth-server-bundle",
     "description": "Flowdat 3 Base OAuth Server Bundle",
     "keywords": ["Admin Generator", "admin", "oauth", "bundle"],
+    "repositories": [
+        {
+            "type": "vcs",
+            "url":  "ssh://git@200.50.168.30:222/VendorSoftwareFlowdat3/BaseAdmin.git"
+        }
+    ],
     "require": {
-        "friendsofsymfony/oauth-server-bundle": "^1.5"
+        "friendsofsymfony/oauth-server-bundle": "^1.5",
+        "base-admin": "dev-master"
     },
     "autoload": {
         "psr-4": { "Base\\OAuthServerBundle\\": "" }