commit
bfb05b2406
@ -0,0 +1,28 @@ |
||||
<?php |
||||
/** |
||||
* Authserver, an OAuth2-based single-signon authentication provider written in PHP. |
||||
* |
||||
* Copyright (C) $today.date Lars Vierbergen |
||||
* |
||||
* his program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License as |
||||
* published by the Free Software Foundation, either version 3 of the |
||||
* License, or (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
*/ |
||||
|
||||
namespace vierbergenlars\AuthserverExternalAccountBundle; |
||||
|
||||
use Symfony\Component\HttpKernel\Bundle\Bundle; |
||||
use vierbergenlars\AuthserverExternalAccountBundle\DependencyInjection\AuthserverExternalAccountExtension; |
||||
|
||||
class AuthserverExternalAccountBundle extends Bundle |
||||
{ |
||||
} |
@ -0,0 +1,45 @@ |
||||
<?php |
||||
/** |
||||
* Authserver, an OAuth2-based single-signon authentication provider written in PHP. |
||||
* |
||||
* Copyright (C) $today.date Lars Vierbergen |
||||
* |
||||
* his program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License as |
||||
* published by the Free Software Foundation, either version 3 of the |
||||
* License, or (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
*/ |
||||
|
||||
namespace vierbergenlars\AuthserverExternalAccountBundle\DependencyInjection; |
||||
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder; |
||||
use Symfony\Component\Config\FileLocator; |
||||
use Symfony\Component\HttpKernel\DependencyInjection\Extension; |
||||
use Symfony\Component\DependencyInjection\Loader; |
||||
|
||||
/** |
||||
* This is the class that loads and manages your bundle configuration |
||||
* |
||||
* To learn more see {@link http://symfony.com/doc/current/cookbook/bundles/extension.html} |
||||
*/ |
||||
class AuthserverExternalAccountExtension extends Extension |
||||
{ |
||||
/** |
||||
* {@inheritDoc} |
||||
*/ |
||||
public function load(array $configs, ContainerBuilder $container) |
||||
{ |
||||
$servicesDirectory = __DIR__.'/../Resources/config'; |
||||
$fileLocator = new FileLocator($servicesDirectory); |
||||
$loader = new Loader\XmlFileLoader($container, $fileLocator); |
||||
$loader->load('services.xml'); |
||||
} |
||||
} |
@ -0,0 +1,127 @@ |
||||
<?php |
||||
/** |
||||
* Authserver, an OAuth2-based single-signon authentication provider written in PHP. |
||||
* |
||||
* Copyright (C) $today.date Lars Vierbergen |
||||
* |
||||
* his program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License as |
||||
* published by the Free Software Foundation, either version 3 of the |
||||
* License, or (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
*/ |
||||
|
||||
namespace vierbergenlars\AuthserverExternalAccountBundle\Entity; |
||||
|
||||
use App\Entity\User; |
||||
use Doctrine\ORM\Mapping as ORM; |
||||
use Gedmo\Mapping\Annotation as Gedmo; |
||||
|
||||
/** |
||||
* @ORM\Entity |
||||
* @ORM\Table(name="vierbergenlars_external_account_external_user") |
||||
* @Gedmo\Loggable |
||||
*/ |
||||
class ExternalUser |
||||
{ |
||||
/** |
||||
* @ORM\Column(type="integer") |
||||
* @ORM\Id |
||||
* @ORM\GeneratedValue(strategy="AUTO") |
||||
* @var integer |
||||
*/ |
||||
private $id; |
||||
|
||||
/** |
||||
* @ORM\ManyToOne(targetEntity="App\Entity\User", fetch="EAGER") |
||||
* @Gedmo\Versioned |
||||
* @var User |
||||
*/ |
||||
private $user; |
||||
|
||||
/** |
||||
* @ORM\Column(type="string") |
||||
* @Gedmo\Versioned |
||||
* @var string |
||||
*/ |
||||
private $provider; |
||||
|
||||
/** |
||||
* @ORM\Column(type="string") |
||||
* @Gedmo\Versioned |
||||
* @var string |
||||
*/ |
||||
private $provider_ref; |
||||
|
||||
/** |
||||
* @return int |
||||
*/ |
||||
public function getId() |
||||
{ |
||||
return $this->id; |
||||
} |
||||
|
||||
/** |
||||
* @return User |
||||
*/ |
||||
public function getUser() |
||||
{ |
||||
return $this->user; |
||||
} |
||||
|
||||
/** |
||||
* @param User $user |
||||
* @return ExternalUser |
||||
*/ |
||||
public function setUser($user) |
||||
{ |
||||
$this->user = $user; |
||||
|
||||
return $this; |
||||
} |
||||
|
||||
/** |
||||
* @return string |
||||
*/ |
||||
public function getProvider() |
||||
{ |
||||
return $this->provider; |
||||
} |
||||
|
||||
/** |
||||
* @param string $provider |
||||
* @return ExternalUser |
||||
*/ |
||||
public function setProvider($provider) |
||||
{ |
||||
$this->provider = $provider; |
||||
|
||||
return $this; |
||||
} |
||||
|
||||
/** |
||||
* @return string |
||||
*/ |
||||
public function getProviderRef() |
||||
{ |
||||
return $this->provider_ref; |
||||
} |
||||
|
||||
/** |
||||
* @param string $provider_ref |
||||
* @return ExternalUser |
||||
*/ |
||||
public function setProviderRef($provider_ref) |
||||
{ |
||||
$this->provider_ref = $provider_ref; |
||||
|
||||
return $this; |
||||
} |
||||
} |
@ -0,0 +1,44 @@ |
||||
<?php |
||||
/** |
||||
* Authserver, an OAuth2-based single-signon authentication provider written in PHP. |
||||
* |
||||
* Copyright (C) $today.date Lars Vierbergen |
||||
* |
||||
* his program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License as |
||||
* published by the Free Software Foundation, either version 3 of the |
||||
* License, or (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
*/ |
||||
|
||||
namespace vierbergenlars\AuthserverExternalAccountBundle\Event; |
||||
|
||||
|
||||
use Symfony\Component\EventDispatcher\Event; |
||||
|
||||
class LoginButtonEvent extends Event |
||||
{ |
||||
private $buttons = []; |
||||
|
||||
public function addButton($text, $linkTarget, $style = 'default', $icon = null) |
||||
{ |
||||
$this->buttons[] = [ |
||||
'text' => $text, |
||||
'target' => $linkTarget, |
||||
'style' => $style, |
||||
'icon' => $icon, |
||||
]; |
||||
} |
||||
|
||||
public function getButtons() |
||||
{ |
||||
return $this->buttons; |
||||
} |
||||
} |
@ -0,0 +1,69 @@ |
||||
<?php |
||||
/** |
||||
* Authserver, an OAuth2-based single-signon authentication provider written in PHP. |
||||
* |
||||
* Copyright (C) $today.date Lars Vierbergen |
||||
* |
||||
* his program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License as |
||||
* published by the Free Software Foundation, either version 3 of the |
||||
* License, or (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
*/ |
||||
|
||||
namespace vierbergenlars\AuthserverExternalAccountBundle\EventListener; |
||||
|
||||
|
||||
use App\AppEvents; |
||||
use App\Event\TemplateEvent; |
||||
use Symfony\Bundle\FrameworkBundle\Templating\TemplateReference; |
||||
use Symfony\Component\EventDispatcher\EventDispatcherInterface; |
||||
use Symfony\Component\EventDispatcher\EventSubscriberInterface; |
||||
use vierbergenlars\AuthserverExternalAccountBundle\Event\LoginButtonEvent; |
||||
use vierbergenlars\AuthserverExternalAccountBundle\ExternalAccountEvents; |
||||
|
||||
class LoginTemplateEventListener implements EventSubscriberInterface |
||||
{ |
||||
/** |
||||
* @var EventDispatcherInterface |
||||
*/ |
||||
private $eventDispatcher; |
||||
|
||||
public function __construct(EventDispatcherInterface $eventDispatcher) |
||||
{ |
||||
|
||||
$this->eventDispatcher = $eventDispatcher; |
||||
} |
||||
|
||||
public static function getSubscribedEvents() |
||||
{ |
||||
return [ |
||||
AppEvents::LOGIN_VIEW_BODY => ['onLoginViewBody', 1], |
||||
]; |
||||
} |
||||
|
||||
public function onLoginViewBody(TemplateEvent $event) |
||||
{ |
||||
$loginButtonEvent = new LoginButtonEvent(); |
||||
$this->eventDispatcher->dispatch(ExternalAccountEvents::LOGIN_BUTTON, $loginButtonEvent); |
||||
|
||||
$buttons = $loginButtonEvent->getButtons(); |
||||
|
||||
if(count($buttons) > 0) { |
||||
$event->setArgument('hiddenPasswordLogin', true); |
||||
$event->addTemplate(new TemplateReference('AuthserverExternalAccountBundle', 'Login', 'buttons', 'html', 'twig'), [ |
||||
'buttons' => $buttons, |
||||
]); |
||||
} |
||||
|
||||
|
||||
} |
||||
|
||||
} |
@ -0,0 +1,31 @@ |
||||
<?php |
||||
/** |
||||
* Authserver, an OAuth2-based single-signon authentication provider written in PHP. |
||||
* |
||||
* Copyright (C) $today.date Lars Vierbergen |
||||
* |
||||
* his program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License as |
||||
* published by the Free Software Foundation, either version 3 of the |
||||
* License, or (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
*/ |
||||
|
||||
namespace vierbergenlars\AuthserverExternalAccountBundle; |
||||
|
||||
|
||||
final class ExternalAccountEvents |
||||
{ |
||||
const LOGIN_BUTTON = 'vierbergenlars.authserver_external_account.login_button'; |
||||
|
||||
private function __construct() |
||||
{ |
||||
} |
||||
} |
@ -0,0 +1,31 @@ |
||||
<?xml version="1.0" ?> |
||||
|
||||
<!-- |
||||
~ Authserver, an OAuth2-based single-signon authentication provider written in PHP. |
||||
~ |
||||
~ Copyright (C) $today.date Lars Vierbergen |
||||
~ |
||||
~ his program is free software: you can redistribute it and/or modify |
||||
~ it under the terms of the GNU Affero General Public License as |
||||
~ published by the Free Software Foundation, either version 3 of the |
||||
~ License, or (at your option) any later version. |
||||
~ |
||||
~ This program is distributed in the hope that it will be useful, |
||||
~ but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
~ GNU Affero General Public License for more details. |
||||
~ |
||||
~ You should have received a copy of the GNU Affero General Public License |
||||
~ along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
--> |
||||
|
||||
<container xmlns="http://symfony.com/schema/dic/services" |
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd"> |
||||
<services> |
||||
<service class="vierbergenlars\AuthserverExternalAccountBundle\EventListener\LoginTemplateEventListener"> |
||||
<argument type="service" id="event_dispatcher" /> |
||||
<tag name="kernel.event_subscriber" /> |
||||
</service> |
||||
</services> |
||||
</container> |
@ -0,0 +1,46 @@ |
||||
<?php |
||||
/** |
||||
* Authserver, an OAuth2-based single-signon authentication provider written in PHP. |
||||
* |
||||
* Copyright (C) $today.date Lars Vierbergen |
||||
* |
||||
* his program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License as |
||||
* published by the Free Software Foundation, either version 3 of the |
||||
* License, or (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
*/ |
||||
|
||||
namespace Application\Migrations; |
||||
|
||||
use Doctrine\DBAL\Migrations\AbstractMigration; |
||||
use Doctrine\DBAL\Schema\Schema; |
||||
|
||||
class VersionAuthserverExternalAccount20170824135051 extends AbstractMigration |
||||
{ |
||||
public function up(Schema $schema) |
||||
{ |
||||
$externalUser = $schema->createTable('vierbergenlars_external_account_external_user'); |
||||
|
||||
$externalUser->addColumn('id', 'integer')->setAutoincrement(true); |
||||
$externalUser->addColumn('user_id', 'integer'); |
||||
$externalUser->addColumn('provider', 'string'); |
||||
$externalUser->addColumn('provider_ref', 'string'); |
||||
|
||||
$externalUser->setPrimaryKey(['id']); |
||||
$externalUser->addForeignKeyConstraint('auth_users', ['user_id'], ['id']); |
||||
} |
||||
|
||||
public function down(Schema $schema) |
||||
{ |
||||
$schema->dropTable('vierbergenlars_external_account_external_user'); |
||||
} |
||||
} |
||||
|
@ -0,0 +1,10 @@ |
||||
<div class="panel-body"> |
||||
{% for button in buttons %} |
||||
<a class="btn btn-{{ button.style }} btn-block" href="{{ url(button.target) }}"> |
||||
{% if icon %} |
||||
{{ icon(icon) }} |
||||
{% endif %} |
||||
{{ button.text }} |
||||
</a> |
||||
{% endfor %} |
||||
</div> |
@ -0,0 +1,26 @@ |
||||
<?php |
||||
/** |
||||
* Authserver, an OAuth2-based single-signon authentication provider written in PHP. |
||||
* |
||||
* Copyright (C) $today.date Lars Vierbergen |
||||
* |
||||
* his program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License as |
||||
* published by the Free Software Foundation, either version 3 of the |
||||
* License, or (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
*/ |
||||
|
||||
$loader = new \Composer\Autoload\ClassLoader; |
||||
|
||||
$loader->addPsr4('vierbergenlars\\AuthserverExternalAccountBundle\\', __DIR__); |
||||
|
||||
$loader->register(); |
||||
|
Reference in new issue