update models + added social network account services

This commit is contained in:
Antonio Ramirez
2016-12-06 00:24:24 +01:00
parent be80b12a03
commit c5279eb13c
22 changed files with 1324 additions and 62 deletions

View File

@ -0,0 +1,15 @@
<?php
namespace Da\User\Service;
/**
*
* PasswordRecoveryService.php
*
* Date: 5/12/16
* Time: 14:18
* @author Antonio Ramirez <hola@2amigos.us>
*/
class PasswordRecoveryService
{
}

View File

@ -0,0 +1,15 @@
<?php
namespace Da\User\Service;
/**
*
* ResetPasswordService.php
*
* Date: 5/12/16
* Time: 14:17
* @author Antonio Ramirez <hola@2amigos.us>
*/
class ResetPasswordService
{
}

View File

@ -0,0 +1,85 @@
<?php
namespace Da\User\Service;
use Da\User\Contracts\AuthClientInterface;
use Da\User\Contracts\ServiceInterface;
use Da\User\Model\SocialNetworkAccount;
use Da\User\Model\User;
use Da\User\Query\UserQuery;
use Yii;
class SocialNetworkAccountCreateService implements ServiceInterface
{
protected $client;
protected $query;
/**
* SocialNetworkAccountUserLinkService constructor.
*
* @param AuthClientInterface $client
* @param UserQuery $query
*/
public function __construct(
AuthClientInterface $client,
UserQuery $query
) {
$this->client = $client;
$this->query = $query;
}
/**
* @return object
*/
public function run()
{
$data = $this->client->getUserAttributes();
/** @var SocialNetworkAccount $account */
$account = Yii::createObject(
[
'class' => SocialNetworkAccount::class,
'provider' => $this->client->getId(),
'client_id' => $data['id'],
'data' => json_encode($data),
'username' => $this->client->getUserName(),
'email' => $this->client->getEmail()
]
);
if (($user = $this->getUser($account)) instanceof User) {
$account->user_id = $user->id;
}
$account->save(false);
return $account;
}
protected function getUser(SocialNetworkAccount $account)
{
$user = $this->query->whereEmail($account->email)->one();
if (null !== $user) {
return $user;
}
/** @var User $user */
$user = Yii::createObject(
'User',
[
'scenario' => 'connect',
'username' => $account->username,
'email' => $account->email
]
);
if (!$user->validate(['email'])) {
$user->email = null;
}
if (!$user->validate(['username'])) {
$user->username = null;
}
return Yii::$container->get(UserCreateService::class, [$user])->run() ? $user : false;
}
}

View File

@ -0,0 +1,68 @@
<?php
namespace Da\User\Service;
use Da\User\Contracts\AuthClientInterface;
use Da\User\Contracts\ServiceInterface;
use Da\User\Model\SocialNetworkAccount;
use Da\User\Model\User;
use Da\User\Query\SocialNetworkAccountQuery;
use Yii;
class SocialNetworkAccountUserLinkService implements ServiceInterface
{
protected $client;
protected $query;
/**
* SocialNetworkAccountUserLinkService constructor.
*
* @param AuthClientInterface $client
* @param SocialNetworkAccountQuery $query
*/
public function __construct(
AuthClientInterface $client,
SocialNetworkAccountQuery $query
) {
$this->client = $client;
$this->query = $query;
}
public function run()
{
$account = $this->getSocialNetworkAccount();
if ($account->user === null) {
/** @var User $user */
$user = Yii::$app->user->identity;
$account->link('user', $user);
return true;
}
return false;
}
protected function getSocialNetworkAccount()
{
$account = $this->query->whereClient($this->client)->one();
if (null === $account) {
$data = $this->client->getUserAttributes();
$account = Yii::createObject(
[
'class' => SocialNetworkAccount::class,
'provider' => $this->client->getId(),
'client_id' => $data['id'],
'data' => json_encode($data)
]
);
$account->save(false);
}
return $account;
}
}