Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@
"description": "SilverStripe module to allow you to masquerade as other users",
"type": "silverstripe-vendormodule",
"require": {
"silverstripe/framework": "^5"
"silverstripe/framework": "^6"
},
"require-dev": {
"phpunit/phpunit": "*",
"squizlabs/php_codesniffer": "^3.7"
"squizlabs/php_codesniffer": "*"
},
"config": {
"allow-plugins": {
Expand Down
2 changes: 2 additions & 0 deletions src/Control/MasqueradeMiddleware.php
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
<?php

declare(strict_types=1);

namespace DHensby\SilverStripeMasquerade\Control;

use SilverStripe\Control\HTTPRequest;
Expand Down
14 changes: 8 additions & 6 deletions src/Extensions/LogoutHandlerExtension.php
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
<?php

declare(strict_types=1);

namespace DHensby\SilverStripeMasquerade\Extensions;

use SilverStripe\Control\Controller;
Expand All @@ -11,10 +13,10 @@

class LogoutHandlerExtension extends Extension
{
public function beforeLogout()
public function beforeLogout(): void
{
/** @var HTTPRequest $request */
$request = $this->owner->getRequest();
$request = $this->getOwner()->getRequest();
$session = $request->getSession();

// If we're currently masquerading, we only want to stop masquerading, not *actually* log out
Expand All @@ -34,19 +36,19 @@ public function beforeLogout()
*/
protected function redirectAfterLogout()
{
$backURL = $this->owner->getBackURL();
$backURL = $this->getOwner()->getBackURL();
if ($backURL) {
return $this->owner->redirect($backURL);
return $this->getOwner()->redirect($backURL);
}

$link = Security::config()->get('login_url');
$referer = $this->owner->getReturnReferer();
$referer = $this->getOwner()->getReturnReferer();
if ($referer) {
$link = Controller::join_links($link, '?' . http_build_query([
'BackURL' => Director::makeRelative($referer)
]));
}

return $this->owner->redirect($link);
return $this->getOwner()->redirect($link);
}
}
6 changes: 4 additions & 2 deletions src/Extensions/MemberExtension.php
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
<?php

declare(strict_types=1);

namespace DHensby\SilverStripeMasquerade\Extensions;

use SilverStripe\ORM\DataExtension;
use SilverStripe\Core\Extension;
use SilverStripe\Security\Member;
use SilverStripe\Security\Permission;
use SilverStripe\Security\Security;

class MemberExtension extends DataExtension
class MemberExtension extends Extension
{
/**
* @param mixed $member
Expand Down
5 changes: 4 additions & 1 deletion src/Extensions/SecurityAdminExtension.php
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
<?php

declare(strict_types=1);

namespace DHensby\SilverStripeMasquerade\Extensions;

use DHensby\SilverStripeMasquerade\Forms\GridField\GridFieldMasqueradeButton;
Expand All @@ -9,13 +11,14 @@

class SecurityAdminExtension extends Extension
{
public function updateEditForm(Form $form)
public function updateEditForm(Form $form): void
{
/** @var GridField $gridField */
$gridField = $form->Fields()->dataFieldByName('users');
if (!$gridField) {
return;
}

$gridField->getConfig()
->addComponent(new GridFieldMasqueradeButton());
}
Expand Down
24 changes: 12 additions & 12 deletions src/Forms/GridField/GridFieldMasqueradeButton.php
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
<?php

declare(strict_types=1);

namespace DHensby\SilverStripeMasquerade\Forms\GridField;

use SilverStripe\Model\ArrayData;
use SilverStripe\Core\Validation\ValidationException;
use SilverStripe\Control\Controller;
use SilverStripe\Control\Director;
use SilverStripe\Control\HTTPRequest;
Expand All @@ -13,9 +17,7 @@
use SilverStripe\Forms\GridField\GridField_URLHandler;
use SilverStripe\ORM\DataObject;
use SilverStripe\ORM\FieldType\DBHTMLText;
use SilverStripe\ORM\ValidationException;
use SilverStripe\Security\Member;
use SilverStripe\View\ArrayData;
use SilverStripe\View\SSViewer;

class GridFieldMasqueradeButton implements GridField_ColumnProvider, GridField_ActionMenuLink, GridField_URLHandler
Expand All @@ -29,7 +31,7 @@ public function getTitle($gridField, $record, $columnName)
* @param GridField $gridField
* @param array $columns
*/
public function augmentColumns($gridField, &$columns)
public function augmentColumns($gridField, &$columns): void
{
if (!in_array('Actions', $columns)) {
$columns[] = 'Actions';
Expand Down Expand Up @@ -61,6 +63,7 @@ public function getColumnMetadata($gridField, $columnName)
if ($columnName == 'Actions') {
return ['title' => ''];
}

return [];
}

Expand All @@ -79,9 +82,8 @@ public function getColumnsHandled($gridField)
* Which GridField actions are this component handling.
*
* @param $gridField
* @return array
*/
public function getActions($gridField)
public function getActions($gridField): array
{
return ['masquerade'];
}
Expand Down Expand Up @@ -110,7 +112,7 @@ protected function getMasqueradeAction($gridField, $record, $columnName)
return null;
}

$data = new ArrayData([
$data = ArrayData::create([
'Link' => $this->getUrl($gridField, $record, $columnName),
'ExtraClass' => 'grid-field__icon-action--hidden-on-hover font-icon-eye btn--icon-large action-menu--handled'
]);
Expand All @@ -132,18 +134,16 @@ public function getGroup($gridField, $record, $columnName)
return $action ? GridField_ActionMenuItem::DEFAULT_GROUP: null;
}

public function handleMasquerade(GridField $gridField, HTTPRequest $request)
public function handleMasquerade(GridField $gridField, HTTPRequest $request): ?HTTPResponse
{
/** @var DataObject $item */
$item = $gridField->getList()->byID($request->param('ID'));
if (!$item) {
return;
return null;
}

if (!$item->canMasquerade()) {
throw new ValidationException(
_t(__CLASS__ . '.MasqueradePermissionsFailure', 'No masquerade permissions')
);
throw ValidationException::create(_t(__CLASS__ . '.MasqueradePermissionsFailure', 'No masquerade permissions'));
}

if (Member::config()->get('session_regenerate_id') && !Director::is_cli() && !headers_sent()) {
Expand All @@ -152,7 +152,7 @@ public function handleMasquerade(GridField $gridField, HTTPRequest $request)

$request->getSession()->set('masqueradingAs', $item->ID);

$response = new HTTPResponse();
$response = HTTPResponse::create();
$response->addHeader('X-Reload', true);
$response->addHeader('X-ControllerURL', Director::absoluteBaseURL());
return $response;
Expand Down
10 changes: 6 additions & 4 deletions tests/MasqueradeMemberTest.php
Original file line number Diff line number Diff line change
@@ -1,17 +1,19 @@
<?php

declare(strict_types=1);

namespace DHensby\SilverStripeMasquerade\Test;

use SilverStripe\Dev\FunctionalTest;
use SilverStripe\Security\Member;
use SilverStripe\Security\Security;

class MasqueradeMemberTest extends FunctionalTest
final class MasqueradeMemberTest extends FunctionalTest
{

protected static $fixture_file = 'MasqueradeMemberTest.yml';

public function testCanMasquerade()
public function testCanMasquerade(): void
{
$this->logInWithPermission('ADMIN');
$admin = Security::getCurrentUser();
Expand All @@ -26,7 +28,7 @@ public function testCanMasquerade()
//admin can't masquerade as themselves
$this->assertFalse($admin->canMasquerade());

Security::setCurrentUser(null);
Security::setCurrentUser();

// no logged in user can't masquerade
$this->assertFalse($member->canMasquerade());
Expand All @@ -45,7 +47,7 @@ public function testCanMasquerade()
$this->assertFalse($admin->canMasquerade());
}

public function testMasquerade()
public function testMasquerade(): void
{
$this->logInWithPermission('ADMIN');
$admin = Security::getCurrentUser();
Expand Down
6 changes: 4 additions & 2 deletions tests/MasqueradeSecurityControllerTest.php
Original file line number Diff line number Diff line change
@@ -1,18 +1,20 @@
<?php

declare(strict_types=1);

namespace DHensby\SilverStripeMasquerade\Test;

use SilverStripe\Control\Director;
use SilverStripe\Security\Member;
use SilverStripe\Dev\FunctionalTest;
use SilverStripe\Security\Security;

class MasqueradeSecurityControllerTest extends FunctionalTest
final class MasqueradeSecurityControllerTest extends FunctionalTest
{

protected static $fixture_file = 'MasqueradeMemberTest.yml';

public function testLogout()
public function testLogout(): void
{
$this->markTestSkipped('not currently working');

Expand Down