Skip to content

Commit

Permalink
Apply fixes from StyleCI
Browse files Browse the repository at this point in the history
  • Loading branch information
KABBOUCHI authored and StyleCIBot committed May 22, 2019
1 parent 5a386ac commit c8670e7
Show file tree
Hide file tree
Showing 6 changed files with 218 additions and 227 deletions.
24 changes: 12 additions & 12 deletions config/nova-impersonate.php
Original file line number Diff line number Diff line change
@@ -1,42 +1,42 @@
<?php

return [
/**
/*
* To inject the 'nova-impersonate::reverse' view in every route when impersonating
*/
'enable_middleware' => true,
/**
/*
* false (nova path), true or <url>
*/
'redirect_back' => true,
/**
/*
* Redirect path
*/
'redirect_to' => '/',
/**
/*
* Set true to record impersonation actions in Nova's action_events table
* Attach the `Laravel\Nova\Actions\Actionable` trait to the `User` Eloquent model
*/
'actionable' => env('NOVA_IMPERSONATE_ACTIONABLE', false),
/**
/*
* Bind on key press to impersonate user in details page
*/
'key_down' => 'i',
/**
/*
* Middleware used for nova-impersonate routes
*/
'middleware' => [
/**
/*
* Middleware used for nova-impersonate routes
*/
'base' => 'web',
/**
/*
* Extra middleware used for leave route
*/
'leave' => 'auth',
],
/**
* Leave impersonate before impersonating a user
*/
'leave_before_impersonate' => false,
/*
* Leave impersonate before impersonating a user
*/
'leave_before_impersonate' => false,
];
4 changes: 2 additions & 2 deletions routes/api.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,6 @@
|
*/

Route::get('users/{id}', ImpersonateController::class . '@take')->middleware(['nova']);
Route::get('users/{id}', ImpersonateController::class.'@take')->middleware(['nova']);

Route::get('leave', ImpersonateController::class . '@leave')->middleware([config('nova-impersonate.middleware.leave')]);
Route::get('leave', ImpersonateController::class.'@leave')->middleware([config('nova-impersonate.middleware.leave')]);
160 changes: 79 additions & 81 deletions src/Http/Controllers/ImpersonateController.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,92 +2,90 @@

namespace KABBOUCHI\NovaImpersonate\Http\Controllers;

use Illuminate\Support\Str;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Illuminate\Support\Str;
use Laravel\Nova\Actions\ActionEvent;
use Lab404\Impersonate\Services\ImpersonateManager;

class ImpersonateController extends Controller
{
/** @var ImpersonateManager */
protected $manager;

/**
* ImpersonateController constructor.
*/
public function __construct()
{
$this->manager = app()->make(ImpersonateManager::class);
}

public function take(Request $request, $id)
{

if (method_exists($request->user(), 'canImpersonate') && !$request->user()->canImpersonate()) {
abort(403);
}

$user_to_impersonate = $this->manager->findUserById($id);


if (method_exists($user_to_impersonate, 'canBeImpersonated') && !$user_to_impersonate->canBeImpersonated()) {
abort(403);
}

if (config('nova-impersonate.actionable')) {
$this->recordAction($request->user()->getKey(), $user_to_impersonate, 'Impersonate');
}

if (config('nova-impersonate.leave_before_impersonate') && $this->manager->isImpersonating()) {
if (config('nova-impersonate.actionable')) {
$this->recordAction($this->manager->getImpersonatorId(), auth()->user(), 'Leave Impersonation');
}

$this->manager->leave();
}

$this->manager->take($request->user(), $user_to_impersonate);

$redirectBack = config('nova-impersonate.redirect_back');

if ($redirectBack)
session()->put('leave_redirect_to', $redirectBack === true ? url()->previous() : $redirectBack);

return redirect()->to($request->get('redirect_to', config('nova-impersonate.redirect_to')));
}

public function leave()
{

if ($this->manager->isImpersonating()) {
if (config('nova-impersonate.actionable')) {
$this->recordAction($this->manager->getImpersonatorId(), auth()->user(), 'Leave Impersonation');
}

$this->manager->leave();

return redirect()->to(session()->pull('leave_redirect_to') ?? config('nova.path'));
}

return redirect()->to('/');
}

protected function recordAction($userId, $user_to_impersonate, $actionName)
{
ActionEvent::create([
'batch_id' => (string)Str::orderedUuid(),
'user_id' => $userId,
'name' => $actionName,
'actionable_type' => $user_to_impersonate->getMorphClass(),
'actionable_id' => $user_to_impersonate->getKey(),
'target_type' => $user_to_impersonate->getMorphClass(),
'target_id' => $user_to_impersonate->getKey(),
'model_type' => $user_to_impersonate->getMorphClass(),
'model_id' => $user_to_impersonate->getKey(),
'fields' => '',
'status' => 'finished',
'exception' => '',
]);
}
/** @var ImpersonateManager */
protected $manager;

/**
* ImpersonateController constructor.
*/
public function __construct()
{
$this->manager = app()->make(ImpersonateManager::class);
}

public function take(Request $request, $id)
{
if (method_exists($request->user(), 'canImpersonate') && ! $request->user()->canImpersonate()) {
abort(403);
}

$user_to_impersonate = $this->manager->findUserById($id);

if (method_exists($user_to_impersonate, 'canBeImpersonated') && ! $user_to_impersonate->canBeImpersonated()) {
abort(403);
}

if (config('nova-impersonate.actionable')) {
$this->recordAction($request->user()->getKey(), $user_to_impersonate, 'Impersonate');
}

if (config('nova-impersonate.leave_before_impersonate') && $this->manager->isImpersonating()) {
if (config('nova-impersonate.actionable')) {
$this->recordAction($this->manager->getImpersonatorId(), auth()->user(), 'Leave Impersonation');
}

$this->manager->leave();
}

$this->manager->take($request->user(), $user_to_impersonate);

$redirectBack = config('nova-impersonate.redirect_back');

if ($redirectBack) {
session()->put('leave_redirect_to', $redirectBack === true ? url()->previous() : $redirectBack);
}

return redirect()->to($request->get('redirect_to', config('nova-impersonate.redirect_to')));
}

public function leave()
{
if ($this->manager->isImpersonating()) {
if (config('nova-impersonate.actionable')) {
$this->recordAction($this->manager->getImpersonatorId(), auth()->user(), 'Leave Impersonation');
}

$this->manager->leave();

return redirect()->to(session()->pull('leave_redirect_to') ?? config('nova.path'));
}

return redirect()->to('/');
}

protected function recordAction($userId, $user_to_impersonate, $actionName)
{
ActionEvent::create([
'batch_id' => (string) Str::orderedUuid(),
'user_id' => $userId,
'name' => $actionName,
'actionable_type' => $user_to_impersonate->getMorphClass(),
'actionable_id' => $user_to_impersonate->getKey(),
'target_type' => $user_to_impersonate->getMorphClass(),
'target_id' => $user_to_impersonate->getKey(),
'model_type' => $user_to_impersonate->getMorphClass(),
'model_id' => $user_to_impersonate->getKey(),
'fields' => '',
'status' => 'finished',
'exception' => '',
]);
}
}
69 changes: 34 additions & 35 deletions src/Http/Middleware/Impersonate.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,58 +2,57 @@

namespace KABBOUCHI\NovaImpersonate\Http\Middleware;

use Illuminate\Http\Response;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Response;
use Lab404\Impersonate\Services\ImpersonateManager;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpFoundation\StreamedResponse;
use Symfony\Component\HttpFoundation\BinaryFileResponse;

class Impersonate
{
/**
* Handle the incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return \Illuminate\Http\Response
*/
public function handle($request, $next)
{
/**
* Handle the incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return \Illuminate\Http\Response
*/
public function handle($request, $next)
{
$response = $next($request);

/** @var ImpersonateManager $manager */
$manager = app()->make(ImpersonateManager::class);

if (
$manager->isImpersonating() &&

$response = $next($request);
auth()->check() &&

/** @var ImpersonateManager $manager */
$manager = app()->make(ImpersonateManager::class);
! ($response instanceof RedirectResponse) &&

if (
$manager->isImpersonating() &&

auth()->check() &&
! ($response instanceof BinaryFileResponse) &&

!($response instanceof RedirectResponse) &&
! ($response instanceof StreamedResponse) &&

!($response instanceof BinaryFileResponse) &&

!($response instanceof StreamedResponse) &&

!($response instanceof JsonResponse) &&
! ($response instanceof JsonResponse) &&

!$request->expectsJson() &&
! $request->expectsJson() &&

starts_with($response->headers->get('Content-Type'), 'text/html') &&
starts_with($response->headers->get('Content-Type'), 'text/html') &&

!str_contains($request->path(), 'nova-api')
) {
! str_contains($request->path(), 'nova-api')
) {

/** @var Response $response * */
$content = $response->getContent();
/** @var Response $response * */
$content = $response->getContent();

$content .= view('nova-impersonate::reverse')->render();
$content .= view('nova-impersonate::reverse')->render();

$response->setContent($content);
}
$response->setContent($content);
}

return $response;
}
return $response;
}
}
Loading

0 comments on commit c8670e7

Please sign in to comment.