Skip to content

Commit

Permalink
Merge pull request #3 from jakxnz/proposal/SS4-compatibility
Browse files Browse the repository at this point in the history
Update module to SS4 conventions
  • Loading branch information
IanSimpson authored Jun 7, 2018
2 parents 09372fb + 73ccba4 commit bf647b6
Show file tree
Hide file tree
Showing 23 changed files with 632 additions and 726 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ chmod 600 public.key
And put these on your web server, somewhere outside the web root. Add the following lines in your `mysite/_config/config.yml`, updating the privateKey and publicKey to point to the key file (relative to the Silverstripe root), and adding an encryption key (which you might generate with `php -r 'echo base64_encode(random_bytes(32)), PHP_EOL;'`).

```
IanSimpson\OauthServerController:
IanSimpson\OAuth2\OauthServerController:
privateKey: '../private.key'
publicKey: '../public.key'
encryptionKey: ''
Expand All @@ -48,7 +48,7 @@ Finally, after doing a `/dev/build/` go into your site settings and on the OAuth
To verify the Authorization header being submitted is correct, add this to your Controller:

```
$member = IanSimpson\OauthServerController::getMember($this);
$member = IanSimpson\OAuth2\OauthServerController::getMember($this);
```

it will return a Member object if the Authorization header is correct, or false if there's an error. Simple!
2 changes: 0 additions & 2 deletions _config.php
Original file line number Diff line number Diff line change
@@ -1,3 +1 @@
<?php
Object::add_extension('SiteConfig', 'IanSimpson\Admin\ClientAdmin');
Object::add_extension('SiteConfig', 'IanSimpson\Admin\ScopeAdmin');
10 changes: 7 additions & 3 deletions _config/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,14 @@
Name: IanSimpson
After: framework/routes#coreroutes
---
Director:
Silverstripe\Control\Director:
rules:
'oauth': 'IanSimpson\OauthServerController'
IanSimpson\OauthServerController:
'oauth': IanSimpson\OAuth2\OauthServerController
IanSimpson\OAuth2\OauthServerController:
privateKey: '../private.key'
publicKey: '../public.key'
encryptionKey: ''
SilverStripe\SiteConfig\SiteConfig:
extensions:
- IanSimpson\OAuth2\Admin\ClientAdmin
- IanSimpson\OAuth2\Admin\ScopeAdmin
59 changes: 40 additions & 19 deletions code/Admin/Clients.php
Original file line number Diff line number Diff line change
@@ -1,29 +1,50 @@
<?php

namespace IanSimpson\Admin;
namespace IanSimpson\OAuth2\Admin;

class ClientAdmin extends \DataExtension {
use IanSimpson\OAuth2\Entities\ClientEntity;
use SilverStripe\Forms\FieldList;
use SilverStripe\Forms\GridField\GridField;
use SilverStripe\Forms\GridField\GridFieldAddNewButton;
use SilverStripe\Forms\GridField\GridFieldConfig;
use SilverStripe\Forms\GridField\GridFieldDataColumns;
use SilverStripe\Forms\GridField\GridFieldDeleteAction;
use SilverStripe\Forms\GridField\GridFieldDetailForm;
use SilverStripe\Forms\GridField\GridFieldEditButton;
use SilverStripe\Forms\GridField\GridFieldToolbarHeader;
use SilverStripe\ORM\DataExtension;

private static $has_many = array(
'Clients' => 'IanSimpson\Entities\ClientEntity',
);
class ClientAdmin extends DataExtension
{

public function updateCMSFields(\FieldList $fields) {
private static $has_many = [
'Clients' => ClientEntity::class,
];

$gridFieldConfig = \GridFieldConfig::create();
$button = new \GridFieldAddNewButton('toolbar-header-right');
$button->setButtonName('Add New OAuth Client');
$gridFieldConfig->addComponents(
new \GridFieldToolbarHeader(''),
public function updateCMSFields(FieldList $fields)
{
$gridFieldConfig = GridFieldConfig::create();
$button = new GridFieldAddNewButton('toolbar-header-right');
$button->setButtonName('Add New OAuth Client');
$gridFieldConfig->addComponents(
new GridFieldToolbarHeader(''),
$button,
new \GridFieldDataColumns(),
new \GridFieldEditButton(),
new \GridFieldDeleteAction(''),
new \GridFieldDetailForm()
);
new GridFieldDataColumns(),
new GridFieldEditButton(),
new GridFieldDeleteAction(''),
new GridFieldDetailForm()
);

$fields->addFieldToTab("Root.OAuthConfiguration", new \GridField('Clients', 'Clients', $this->owner->Clients(), $gridFieldConfig));
$fields->addFieldToTab(
"Root.OAuthConfiguration",
new GridField(
'Clients',
'Clients',
$this->owner->Clients(),
$gridFieldConfig
)
);

return $fields;
}
return $fields;
}
}
59 changes: 40 additions & 19 deletions code/Admin/Scopes.php
Original file line number Diff line number Diff line change
@@ -1,29 +1,50 @@
<?php

namespace IanSimpson\Admin;
namespace IanSimpson\OAuth2\Admin;

class ScopeAdmin extends \DataExtension {
use IanSimpson\OAuth2\Entities\ScopeEntity;
use SilverStripe\Forms\FieldList;
use SilverStripe\Forms\GridField\GridField;
use SilverStripe\Forms\GridField\GridFieldAddNewButton;
use SilverStripe\Forms\GridField\GridFieldConfig;
use SilverStripe\Forms\GridField\GridFieldDataColumns;
use SilverStripe\Forms\GridField\GridFieldDeleteAction;
use SilverStripe\Forms\GridField\GridFieldDetailForm;
use SilverStripe\Forms\GridField\GridFieldEditButton;
use SilverStripe\Forms\GridField\GridFieldToolbarHeader;
use SilverStripe\ORM\DataExtension;

private static $has_many = array(
'Scopes' => 'IanSimpson\Entities\ScopeEntity',
);
class ScopeAdmin extends DataExtension
{

public function updateCMSFields(\FieldList $fields) {
private static $has_many = [
'Scopes' => ScopeEntity::class,
];

$gridFieldConfig = \GridFieldConfig::create();
$button = new \GridFieldAddNewButton('toolbar-header-right');
$button->setButtonName('Add New OAuth Scope');
$gridFieldConfig->addComponents(
new \GridFieldToolbarHeader(''),
public function updateCMSFields(FieldList $fields)
{
$gridFieldConfig = GridFieldConfig::create();
$button = new GridFieldAddNewButton('toolbar-header-right');
$button->setButtonName('Add New OAuth Scope');
$gridFieldConfig->addComponents(
new GridFieldToolbarHeader(''),
$button,
new \GridFieldDataColumns(),
new \GridFieldEditButton(),
new \GridFieldDeleteAction(''),
new \GridFieldDetailForm()
);
new GridFieldDataColumns(),
new GridFieldEditButton(),
new GridFieldDeleteAction(''),
new GridFieldDetailForm()
);

$fields->addFieldToTab("Root.OAuthConfiguration", new \GridField('Scopes', 'Scopes', $this->owner->Scopes(), $gridFieldConfig));
$fields->addFieldToTab(
"Root.OAuthConfiguration",
new GridField(
'Scopes',
'Scopes',
$this->owner->Scopes(),
$gridFieldConfig
)
);

return $fields;
}
return $fields;
}
}
118 changes: 69 additions & 49 deletions code/Entities/AccessTokenEntity.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,79 +4,99 @@
* @copyright Copyright (c) Ian Simpson
*/

namespace IanSimpson\Entities;
namespace IanSimpson\OAuth2\Entities;

use DateTime;
use League\OAuth2\Server\Entities\AccessTokenEntityInterface;
use League\OAuth2\Server\Entities\ClientEntityInterface;
use League\OAuth2\Server\Entities\ScopeEntityInterface;
use League\OAuth2\Server\Entities\Traits\AccessTokenTrait;
use League\OAuth2\Server\Entities\Traits\EntityTrait;
use League\OAuth2\Server\Entities\Traits\TokenEntityTrait;
use SilverStripe\ORM\FieldType\DBDateTime;
use SilverStripe\ORM\ArrayList;
use SilverStripe\ORM\DataObject;
use SilverStripe\Security\Member;

class AccessTokenEntity extends \DataObject implements AccessTokenEntityInterface
class AccessTokenEntity extends DataObject implements AccessTokenEntityInterface
{
use AccessTokenTrait, TokenEntityTrait, EntityTrait;

public static $db = array(
'Code' => 'Text',
'Expiry' => 'SS_Datetime',
'Revoked' => 'Boolean',
);
private static $table_name = 'OAuth_AccessTokenEntity';

public static $has_one = array(
'Client' => 'IanSimpson\Entities\ClientEntity',
'Member' => 'Member',
);
private static $db = [
'Code' => 'Text',
'Expiry' => 'Datetime',
'Revoked' => 'Boolean'
];

public static $many_many = array(
'ScopeEntities' => 'IanSimpson\Entities\ScopeEntity',
);
private static $has_one = [
'Client' => ClientEntity::class,
'Member' => Member::class
];

public function getIdentifier() {
return $this->Code;
}
private static $many_many = [
'ScopeEntities' => ScopeEntity::class
];

public function getExpiryDateTime() {
return new \DateTime( (string) $this->Expiry );
}
public function getIdentifier()
{
return $this->Code;
}

public function getUserIdentifier() {
return $this->MemberID;
}
public function getExpiryDateTime()
{
return new DateTime(date('Y-m-d H:i:s', $this->Expiry));
}

public function getScopes() {
return $this->ScopeEntities()->toArray();
}
public function getUserIdentifier()
{
return $this->MemberID;
}

public function getClient() {
return ClientEntity::get()->filter(array(
'ID' => $this->ClientID
))->first();
}
public function getScopes()
{
return $this->ScopeEntities()->toArray();
}

public function getClient()
{
return ClientEntity::get()->filter([
'ID' => $this->ClientID
])->first();
}

public function setIdentifier($code) {
$this->Code = $code;
}

public function setExpiryDateTime(\DateTime $expiry) {
$this->Expiry = new \SS_Datetime;
$this->Expiry->setValue( $expiry->getTimestamp() );
}
public function setIdentifier($code)
{
$this->Code = $code;
}

public function setUserIdentifier($id) {
$this->MemberID = $id;
}
public function setExpiryDateTime(DateTime $expiry)
{
$this->Expiry = $expiry->getTimestamp();
}

public function addScope(ScopeEntityInterface $scope) {
$this->ScopeEntities->push($scope);
public function setUserIdentifier($id)
{
$this->MemberID = $id;
}

public function setScopes($scopes) {
$this->ScopeEntities = new \ArrayList($scopes);;
}
public function addScope(ScopeEntityInterface $scope)
{
$this->ScopeEntities()->add($scope);
}

public function setClient(ClientEntityInterface $client) {
$this->ClientID = $client->ID;
}
public function setScopes($scopes)
{
$this->ScopeEntities()->removeall();
foreach ($scopes as $scope) {
$this->addScope($scope);
}
}

public function setClient(ClientEntityInterface $client)
{
$this->ClientID = $client->ID;
}
}
Loading

0 comments on commit bf647b6

Please sign in to comment.