Passed
Pull Request — master (#77)
by
unknown
04:43
created
tests/ShareDraftContentSiteTreeExtensionTest.php 1 patch
Indentation   +52 added lines, -52 removed lines patch added patch discarded remove patch
@@ -15,81 +15,81 @@
 block discarded – undo
15 15
  */
16 16
 class ShareDraftContentSiteTreeExtensionTest extends FunctionalTest
17 17
 {
18
-    /**
19
-     * @var string
20
-     */
21
-    protected static $fixture_file = 'ShareDraftContentSiteTreeExtensionTest.yml';
18
+	/**
19
+	 * @var string
20
+	 */
21
+	protected static $fixture_file = 'ShareDraftContentSiteTreeExtensionTest.yml';
22 22
 
23
-    public function testShareTokenLink()
24
-    {
25
-        /**
26
-         * First we check if both pages generate new ShareTokenSalt values. Then we check that
27
-         * these values are not the same.
28
-         */
23
+	public function testShareTokenLink()
24
+	{
25
+		/**
26
+		 * First we check if both pages generate new ShareTokenSalt values. Then we check that
27
+		 * these values are not the same.
28
+		 */
29 29
 
30
-        Page::add_extension(ShareDraftContentSiteTreeExtension::class);
30
+		Page::add_extension(ShareDraftContentSiteTreeExtension::class);
31 31
 
32
-        /**
33
-         * @var Page $firstSharedPage
34
-         */
35
-        $firstSharedPage = $this->objFromFixture(Page::class, 'FirstSharedPage');
32
+		/**
33
+		 * @var Page $firstSharedPage
34
+		 */
35
+		$firstSharedPage = $this->objFromFixture(Page::class, 'FirstSharedPage');
36 36
 
37
-        $firstShareLink = $firstSharedPage->ShareTokenLink();
37
+		$firstShareLink = $firstSharedPage->ShareTokenLink();
38 38
 
39
-        $this->assertNotEmpty($firstSharedPage->ShareTokenSalt);
39
+		$this->assertNotEmpty($firstSharedPage->ShareTokenSalt);
40 40
 
41
-        /**
42
-         * @var page $secondSharedPage
43
-         */
44
-        $secondSharedPage = $this->objFromFixture(Page::class, 'SecondSharedPage');
41
+		/**
42
+		 * @var page $secondSharedPage
43
+		 */
44
+		$secondSharedPage = $this->objFromFixture(Page::class, 'SecondSharedPage');
45 45
 
46
-        $secondShareLink = $secondSharedPage->ShareTokenLink();
46
+		$secondShareLink = $secondSharedPage->ShareTokenLink();
47 47
 
48
-        $this->assertNotEmpty($secondSharedPage->ShareTokenSalt);
48
+		$this->assertNotEmpty($secondSharedPage->ShareTokenSalt);
49 49
 
50
-        $this->assertNotEquals($firstShareLink, $secondShareLink);
50
+		$this->assertNotEquals($firstShareLink, $secondShareLink);
51 51
 
52
-        /**
53
-         * Then we get the underlying token and send a preview request. With a valid key and token,
54
-         * this will return a draft page. With an invalid key or token, this will return an expired
55
-         * link page.
56
-         */
52
+		/**
53
+		 * Then we get the underlying token and send a preview request. With a valid key and token,
54
+		 * this will return a draft page. With an invalid key or token, this will return an expired
55
+		 * link page.
56
+		 */
57 57
 
58
-        $firstSharedPageToken = $firstSharedPage->ShareTokens()->first();
58
+		$firstSharedPageToken = $firstSharedPage->ShareTokens()->first();
59 59
 
60
-        $this->assertNotEmpty($firstSharedPageToken);
60
+		$this->assertNotEmpty($firstSharedPageToken);
61 61
 
62
-        $parts = explode('/', $firstShareLink);
62
+		$parts = explode('/', $firstShareLink);
63 63
 
64
-        $token = array_pop($parts);
65
-        $key = array_pop($parts);
64
+		$token = array_pop($parts);
65
+		$key = array_pop($parts);
66 66
 
67
-        $this->assertEquals($token, $firstSharedPageToken->Token);
67
+		$this->assertEquals($token, $firstSharedPageToken->Token);
68 68
 
69
-        $request = new HTTPRequest('GET', $firstShareLink);
69
+		$request = new HTTPRequest('GET', $firstShareLink);
70 70
 
71
-        $request->setRouteParams(array(
72
-            'Token' => $token,
73
-            'Key' => $key,
74
-        ));
71
+		$request->setRouteParams(array(
72
+			'Token' => $token,
73
+			'Key' => $key,
74
+		));
75 75
 
76
-        $controller = new ShareDraftController($firstSharedPage);
76
+		$controller = new ShareDraftController($firstSharedPage);
77 77
 
78
-        $response = $controller->preview($request);
78
+		$response = $controller->preview($request);
79 79
 
80
-        $this->assertContains('share-draft-content-message', $response);
80
+		$this->assertContains('share-draft-content-message', $response);
81 81
 
82
-        $request = new HTTPRequest('GET', $firstShareLink);
82
+		$request = new HTTPRequest('GET', $firstShareLink);
83 83
 
84
-        $request->setRouteParams(array(
85
-            'Token' => $token,
86
-            'Key' => '',
87
-        ));
84
+		$request->setRouteParams(array(
85
+			'Token' => $token,
86
+			'Key' => '',
87
+		));
88 88
 
89
-        $controller = new ShareDraftController($firstSharedPage);
89
+		$controller = new ShareDraftController($firstSharedPage);
90 90
 
91
-        $response = $controller->preview($request);
91
+		$response = $controller->preview($request);
92 92
 
93
-        $this->assertContains('share-draft-error-page', $response);
94
-    }
93
+		$this->assertContains('share-draft-error-page', $response);
94
+	}
95 95
 }
Please login to merge, or discard this patch.
tests/ShareTokenTest.php 1 patch
Indentation   +18 added lines, -18 removed lines patch added patch discarded remove patch
@@ -13,27 +13,27 @@
 block discarded – undo
13 13
  */
14 14
 class ShareTokenTest extends FunctionalTest
15 15
 {
16
-    /**
17
-     * @var string
18
-     */
19
-    protected static $fixture_file = 'ShareTokenTest.yml';
16
+	/**
17
+	 * @var string
18
+	 */
19
+	protected static $fixture_file = 'ShareTokenTest.yml';
20 20
 
21
-    public function testValidForDays()
22
-    {
23
-        DBDatetime::set_mock_now('2015-03-15 00:00:00');
21
+	public function testValidForDays()
22
+	{
23
+		DBDatetime::set_mock_now('2015-03-15 00:00:00');
24 24
 
25
-        /**
26
-         * @var ShareToken $validToken
27
-         */
28
-        $validToken = $this->objFromFixture(ShareToken::class, 'ValidToken');
25
+		/**
26
+		 * @var ShareToken $validToken
27
+		 */
28
+		$validToken = $this->objFromFixture(ShareToken::class, 'ValidToken');
29 29
 
30
-        $this->assertFalse($validToken->isExpired());
30
+		$this->assertFalse($validToken->isExpired());
31 31
 
32
-        /**
33
-         * @var ShareToken $invalidToken
34
-         */
35
-        $invalidToken = $this->objFromFixture(ShareToken::class, 'InvalidToken');
32
+		/**
33
+		 * @var ShareToken $invalidToken
34
+		 */
35
+		$invalidToken = $this->objFromFixture(ShareToken::class, 'InvalidToken');
36 36
 
37
-        $this->assertTrue($invalidToken->isExpired());
38
-    }
37
+		$this->assertTrue($invalidToken->isExpired());
38
+	}
39 39
 }
Please login to merge, or discard this patch.
src/Models/ShareToken.php 1 patch
Indentation   +35 added lines, -35 removed lines patch added patch discarded remove patch
@@ -14,39 +14,39 @@
 block discarded – undo
14 14
  */
15 15
 class ShareToken extends DataObject
16 16
 {
17
-    /**
18
-     * @var array
19
-     */
20
-    private static $db = array(
21
-        'Token' => 'Varchar(16)',
22
-        'ValidForDays' => 'Int',
23
-    );
24
-
25
-    /**
26
-     * @var array
27
-     */
28
-    private static $has_one = array(
29
-        'Page' => Page::class
30
-    );
31
-
32
-    /**
33
-     * @var string
34
-     */
35
-    private static $table_name = 'ShareToken';
36
-
37
-    /**
38
-     * Determines whether the token is still valid (from days since it was created).
39
-     *
40
-     * @return bool
41
-     */
42
-    public function isExpired()
43
-    {
44
-        $createdSeconds = strtotime($this->Created);
45
-
46
-        $validForSeconds = (int) $this->ValidForDays * 24 * 60 * 60;
47
-
48
-        $nowSeconds = DBDatetime::now()->getTimestamp();
49
-
50
-        return ($createdSeconds + $validForSeconds) <= $nowSeconds;
51
-    }
17
+	/**
18
+	 * @var array
19
+	 */
20
+	private static $db = array(
21
+		'Token' => 'Varchar(16)',
22
+		'ValidForDays' => 'Int',
23
+	);
24
+
25
+	/**
26
+	 * @var array
27
+	 */
28
+	private static $has_one = array(
29
+		'Page' => Page::class
30
+	);
31
+
32
+	/**
33
+	 * @var string
34
+	 */
35
+	private static $table_name = 'ShareToken';
36
+
37
+	/**
38
+	 * Determines whether the token is still valid (from days since it was created).
39
+	 *
40
+	 * @return bool
41
+	 */
42
+	public function isExpired()
43
+	{
44
+		$createdSeconds = strtotime($this->Created);
45
+
46
+		$validForSeconds = (int) $this->ValidForDays * 24 * 60 * 60;
47
+
48
+		$nowSeconds = DBDatetime::now()->getTimestamp();
49
+
50
+		return ($createdSeconds + $validForSeconds) <= $nowSeconds;
51
+	}
52 52
 }
Please login to merge, or discard this patch.
src/Tasks/RemoveExpiredShareTokensTask.php 1 patch
Indentation   +15 added lines, -15 removed lines patch added patch discarded remove patch
@@ -14,24 +14,24 @@
 block discarded – undo
14 14
  */
15 15
 class RemoveExpiredShareTokens extends BuildTask
16 16
 {
17
-    private static $segment = 'RemoveExpiredShareTokens';
17
+	private static $segment = 'RemoveExpiredShareTokens';
18 18
 
19
-    protected $title = 'Remove expired share tokens';
19
+	protected $title = 'Remove expired share tokens';
20 20
 
21
-    protected $description = 'Remove all expired ShareTokens from the database';
21
+	protected $description = 'Remove all expired ShareTokens from the database';
22 22
 
23
-    public function run($request)
24
-    {
25
-        $shareTokens = ShareToken::get();
26
-        $removeCount = 0;
23
+	public function run($request)
24
+	{
25
+		$shareTokens = ShareToken::get();
26
+		$removeCount = 0;
27 27
 
28
-        foreach ($shareTokens as $token) {
29
-            if ($token->isExpired()) {
30
-                $token->delete();
31
-                $removeCount++;
32
-            }
33
-        }
28
+		foreach ($shareTokens as $token) {
29
+			if ($token->isExpired()) {
30
+				$token->delete();
31
+				$removeCount++;
32
+			}
33
+		}
34 34
 
35
-        echo "Removed $removeCount expired share tokens.\n";
36
-    }
35
+		echo "Removed $removeCount expired share tokens.\n";
36
+	}
37 37
 }
Please login to merge, or discard this patch.
src/Controllers/ShareDraftController.php 2 patches
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -83,7 +83,7 @@  discard block
 block discarded – undo
83 83
             // Temporarily un-secure the draft site and switch to draft
84 84
             $oldSecured = $session->get('unsecuredDraftSite');
85 85
             $oldMode = Versioned::get_reading_mode();
86
-            $restore = function () use ($oldSecured, $oldMode, $session) {
86
+            $restore = function() use ($oldSecured, $oldMode, $session) {
87 87
                 $session->set('unsecuredDraftSite', $oldSecured);
88 88
                 Versioned::set_reading_mode($oldMode);
89 89
             };
@@ -114,7 +114,7 @@  discard block
 block discarded – undo
114 114
             }
115 115
             $restore();
116 116
 
117
-            return str_replace('</body>', $include . '</body>', (string) $rendered->getBody());
117
+            return str_replace('</body>', $include.'</body>', (string) $rendered->getBody());
118 118
         } else {
119 119
             return $this->errorPage();
120 120
         }
Please login to merge, or discard this patch.
Indentation   +121 added lines, -121 removed lines patch added patch discarded remove patch
@@ -18,125 +18,125 @@
 block discarded – undo
18 18
 
19 19
 class ShareDraftController extends Controller
20 20
 {
21
-    /**
22
-     * Controller for rendering draft pages.
23
-     *
24
-     * @config
25
-     *
26
-     * @var string
27
-     */
28
-    private static $controller = PageController::class;
29
-
30
-    /**
31
-     * @var array
32
-     */
33
-    private static $allowed_actions = array(
34
-        'preview'
35
-    );
36
-
37
-    /**
38
-     * @var array
39
-     */
40
-    private static $url_handlers = array(
41
-        '$Key/$Token' => 'preview'
42
-    );
43
-
44
-    /**
45
-     * @param HTTPRequest $request
46
-     *
47
-     * @return string|HTMLText
48
-     */
49
-    public function preview(HTTPRequest $request)
50
-    {
51
-        $key = $request->param('Key');
52
-        $token = $request->param('Token');
53
-        try {
54
-            $session = $this->getRequest()->getSession();
55
-        } catch (BadMethodCallException $e) {
56
-            // Create a new session
57
-            $session = $this->getRequest()
58
-                ->setSession(Injector::inst()->create(Session::class, []))
59
-                ->getSession();
60
-        }
61
-        /**
62
-         * @var ShareToken $shareToken
63
-         */
64
-        $shareToken = ShareToken::get()->filter('Token', $token)->first();
65
-
66
-        if (!$shareToken) {
67
-            return $this->errorPage();
68
-        }
69
-
70
-        $page = Versioned::get_one_by_stage(
71
-            SiteTree::class,
72
-            'Stage',
73
-            sprintf('"SiteTree"."ID" = \'%d\'', $shareToken->PageID)
74
-        );
75
-
76
-        $latest = Versioned::get_latest_version(SiteTree::class, $shareToken->PageID);
77
-
78
-        $controller = $this->getControllerFor($page);
79
-
80
-        if (!$shareToken->isExpired() && $page->generateKey($shareToken->Token) === $key) {
81
-            Requirements::css('silverstripe/sharedraftcontent: client/dist/styles/top-bar.css');
82
-
83
-            // Temporarily un-secure the draft site and switch to draft
84
-            $oldSecured = $session->get('unsecuredDraftSite');
85
-            $oldMode = Versioned::get_reading_mode();
86
-            $restore = function () use ($oldSecured, $oldMode, $session) {
87
-                $session->set('unsecuredDraftSite', $oldSecured);
88
-                Versioned::set_reading_mode($oldMode);
89
-            };
90
-
91
-            // Process page inside an unsecured draft container
92
-            try {
93
-                $session->set('unsecuredDraftSite', true);
94
-                Versioned::set_stage('Stage');
95
-
96
-                // Hack to get around ContentController::init() redirecting on home page
97
-                $_FILES = array(array());
98
-
99
-                // Create mock request; Simplify request to single top level request
100
-                $pageRequest = new HTTPRequest('GET', $page->URLSegment);
101
-                $pageRequest->match('$URLSegment//$Action/$ID/$OtherID', true);
102
-                $pageRequest->setSession($session);
103
-                $rendered = $controller->handleRequest($pageRequest, $this->model);
104
-
105
-                // Render draft heading
106
-                $data = new ArrayData(array(
107
-                    'Page' => $page,
108
-                    'Latest' => $latest,
109
-                ));
110
-                $include = (string) $data->renderWith('Includes/TopBar');
111
-            } catch (Exception $ex) {
112
-                $restore();
113
-                throw $ex;
114
-            }
115
-            $restore();
116
-
117
-            return str_replace('</body>', $include . '</body>', (string) $rendered->getBody());
118
-        } else {
119
-            return $this->errorPage();
120
-        }
121
-    }
122
-
123
-    /**
124
-     * @return HTMLText
125
-     */
126
-    protected function errorPage()
127
-    {
128
-        Requirements::css('silverstripe/sharedraftcontent: client/dist/styles/error-page.css');
129
-
130
-        return $this->renderWith('ShareDraftContentError');
131
-    }
132
-
133
-    /**
134
-     * @param mixed $page
135
-     *
136
-     * @return mixed
137
-     */
138
-    protected function getControllerFor($page)
139
-    {
140
-        return ModelAsController::controller_for($page);
141
-    }
21
+	/**
22
+	 * Controller for rendering draft pages.
23
+	 *
24
+	 * @config
25
+	 *
26
+	 * @var string
27
+	 */
28
+	private static $controller = PageController::class;
29
+
30
+	/**
31
+	 * @var array
32
+	 */
33
+	private static $allowed_actions = array(
34
+		'preview'
35
+	);
36
+
37
+	/**
38
+	 * @var array
39
+	 */
40
+	private static $url_handlers = array(
41
+		'$Key/$Token' => 'preview'
42
+	);
43
+
44
+	/**
45
+	 * @param HTTPRequest $request
46
+	 *
47
+	 * @return string|HTMLText
48
+	 */
49
+	public function preview(HTTPRequest $request)
50
+	{
51
+		$key = $request->param('Key');
52
+		$token = $request->param('Token');
53
+		try {
54
+			$session = $this->getRequest()->getSession();
55
+		} catch (BadMethodCallException $e) {
56
+			// Create a new session
57
+			$session = $this->getRequest()
58
+				->setSession(Injector::inst()->create(Session::class, []))
59
+				->getSession();
60
+		}
61
+		/**
62
+		 * @var ShareToken $shareToken
63
+		 */
64
+		$shareToken = ShareToken::get()->filter('Token', $token)->first();
65
+
66
+		if (!$shareToken) {
67
+			return $this->errorPage();
68
+		}
69
+
70
+		$page = Versioned::get_one_by_stage(
71
+			SiteTree::class,
72
+			'Stage',
73
+			sprintf('"SiteTree"."ID" = \'%d\'', $shareToken->PageID)
74
+		);
75
+
76
+		$latest = Versioned::get_latest_version(SiteTree::class, $shareToken->PageID);
77
+
78
+		$controller = $this->getControllerFor($page);
79
+
80
+		if (!$shareToken->isExpired() && $page->generateKey($shareToken->Token) === $key) {
81
+			Requirements::css('silverstripe/sharedraftcontent: client/dist/styles/top-bar.css');
82
+
83
+			// Temporarily un-secure the draft site and switch to draft
84
+			$oldSecured = $session->get('unsecuredDraftSite');
85
+			$oldMode = Versioned::get_reading_mode();
86
+			$restore = function () use ($oldSecured, $oldMode, $session) {
87
+				$session->set('unsecuredDraftSite', $oldSecured);
88
+				Versioned::set_reading_mode($oldMode);
89
+			};
90
+
91
+			// Process page inside an unsecured draft container
92
+			try {
93
+				$session->set('unsecuredDraftSite', true);
94
+				Versioned::set_stage('Stage');
95
+
96
+				// Hack to get around ContentController::init() redirecting on home page
97
+				$_FILES = array(array());
98
+
99
+				// Create mock request; Simplify request to single top level request
100
+				$pageRequest = new HTTPRequest('GET', $page->URLSegment);
101
+				$pageRequest->match('$URLSegment//$Action/$ID/$OtherID', true);
102
+				$pageRequest->setSession($session);
103
+				$rendered = $controller->handleRequest($pageRequest, $this->model);
104
+
105
+				// Render draft heading
106
+				$data = new ArrayData(array(
107
+					'Page' => $page,
108
+					'Latest' => $latest,
109
+				));
110
+				$include = (string) $data->renderWith('Includes/TopBar');
111
+			} catch (Exception $ex) {
112
+				$restore();
113
+				throw $ex;
114
+			}
115
+			$restore();
116
+
117
+			return str_replace('</body>', $include . '</body>', (string) $rendered->getBody());
118
+		} else {
119
+			return $this->errorPage();
120
+		}
121
+	}
122
+
123
+	/**
124
+	 * @return HTMLText
125
+	 */
126
+	protected function errorPage()
127
+	{
128
+		Requirements::css('silverstripe/sharedraftcontent: client/dist/styles/error-page.css');
129
+
130
+		return $this->renderWith('ShareDraftContentError');
131
+	}
132
+
133
+	/**
134
+	 * @param mixed $page
135
+	 *
136
+	 * @return mixed
137
+	 */
138
+	protected function getControllerFor($page)
139
+	{
140
+		return ModelAsController::controller_for($page);
141
+	}
142 142
 }
Please login to merge, or discard this patch.
src/Extensions/ShareDraftContentControllerExtension.php 1 patch
Indentation   +30 added lines, -30 removed lines patch added patch discarded remove patch
@@ -7,37 +7,37 @@
 block discarded – undo
7 7
 
8 8
 class ShareDraftContentControllerExtension extends Extension
9 9
 {
10
-    /**
11
-     * @var array
12
-     */
13
-    private static $allowed_actions = array(
14
-        'MakeShareDraftLink',
15
-    );
10
+	/**
11
+	 * @var array
12
+	 */
13
+	private static $allowed_actions = array(
14
+		'MakeShareDraftLink',
15
+	);
16 16
 
17
-    /**
18
-     * @return mixed
19
-     */
20
-    public function MakeShareDraftLink()
21
-    {
22
-        if ($member = Security::getCurrentUser()) {
23
-            if ($this->owner->hasMethod('CurrentPage') && $this->owner->CurrentPage()->canEdit($member)) {
24
-                return $this->owner->CurrentPage()->ShareTokenLink();
25
-            } elseif ($this->owner->hasMethod('canEdit') && $this->owner->canEdit($member)) {
26
-                return $this->owner->ShareTokenLink();
27
-            }
28
-        }
17
+	/**
18
+	 * @return mixed
19
+	 */
20
+	public function MakeShareDraftLink()
21
+	{
22
+		if ($member = Security::getCurrentUser()) {
23
+			if ($this->owner->hasMethod('CurrentPage') && $this->owner->CurrentPage()->canEdit($member)) {
24
+				return $this->owner->CurrentPage()->ShareTokenLink();
25
+			} elseif ($this->owner->hasMethod('canEdit') && $this->owner->canEdit($member)) {
26
+				return $this->owner->ShareTokenLink();
27
+			}
28
+		}
29 29
 
30
-        return Security::permissionFailure();
31
-    }
30
+		return Security::permissionFailure();
31
+	}
32 32
 
33
-    /**
34
-     * @return string
35
-     */
36
-    public function getShareDraftLinkAction()
37
-    {
38
-        if ($this->owner->config()->get('url_segment')) {
39
-            return $this->owner->Link('MakeShareDraftLink');
40
-        }
41
-        return '';
42
-    }
33
+	/**
34
+	 * @return string
35
+	 */
36
+	public function getShareDraftLinkAction()
37
+	{
38
+		if ($this->owner->config()->get('url_segment')) {
39
+			return $this->owner->Link('MakeShareDraftLink');
40
+		}
41
+		return '';
42
+	}
43 43
 }
Please login to merge, or discard this patch.
src/Extensions/ShareDraftContentSiteTreeExtension.php 1 patch
Indentation   +111 added lines, -111 removed lines patch added patch discarded remove patch
@@ -14,115 +14,115 @@
 block discarded – undo
14 14
  */
15 15
 class ShareDraftContentSiteTreeExtension extends DataExtension
16 16
 {
17
-    /**
18
-     * The number of days a shared link should be valid for, before expiring.
19
-     *
20
-     * @config
21
-     *
22
-     * @var int
23
-     */
24
-    private static $valid_for_days = 30;
25
-
26
-    /**
27
-     * @var array
28
-     */
29
-    private static $db = array(
30
-        'ShareTokenSalt' => 'Varchar(16)',
31
-    );
32
-
33
-    /**
34
-     * @var array
35
-     */
36
-    private static $has_many = array(
37
-        'ShareTokens' => ShareToken::class,
38
-    );
39
-
40
-    /**
41
-     * @var array
42
-     */
43
-    private static $allowed_actions = array(
44
-        'MakeShareDraftLink'
45
-    );
46
-
47
-    /**
48
-     * @return string
49
-     */
50
-    public function ShareTokenLink()
51
-    {
52
-        $shareToken = $this->getNewShareToken();
53
-
54
-        return Controller::join_links(
55
-            Director::absoluteBaseURL(),
56
-            'preview',
57
-            $this->generateKey($shareToken->Token),
58
-            $shareToken->Token
59
-        );
60
-    }
61
-
62
-    /**
63
-     * @return ShareToken
64
-     */
65
-    protected function getNewShareToken()
66
-    {
67
-        if (!$this->owner->ShareTokenSalt) {
68
-            $this->owner->ShareTokenSalt = $this->getNewToken();
69
-            $this->owner->write();
70
-        }
71
-
72
-        $found = null;
73
-        $token = null;
74
-        $tries = 1;
75
-        $limit = 5;
76
-
77
-        while (!$found && ($tries++ < $limit)) {
78
-            $token = $this->getNewToken();
79
-
80
-            $found = ShareToken::get()->filter(array(
81
-                "Token" => $token,
82
-                "PageID" => $this->owner->ID,
83
-            ))->first();
84
-        }
85
-
86
-        $config = Config::forClass(__CLASS__);
87
-
88
-        $validForDays = $config->valid_for_days;
89
-
90
-        $token = ShareToken::create(array(
91
-            "Token" => $token,
92
-            "ValidForDays" => $validForDays,
93
-            "PageID" => $this->owner->ID,
94
-        ));
95
-
96
-        $token->write();
97
-
98
-        return $token;
99
-    }
100
-
101
-    /**
102
-     * @return string
103
-     */
104
-    protected function getNewToken()
105
-    {
106
-        $generator = new RandomGenerator();
107
-
108
-        return substr($generator->randomToken('sha256'), 0, 16);
109
-    }
110
-
111
-    /**
112
-     * @param string $salt
113
-     *
114
-     * @return string
115
-     */
116
-    public function generateKey($salt)
117
-    {
118
-        return hash_pbkdf2('sha256', $salt, $this->owner->SharedTokenSalt, 1000, 16);
119
-    }
120
-
121
-    /**
122
-     * @return string
123
-     */
124
-    public function getShareDraftLinkAction()
125
-    {
126
-        return $this->owner->Link('MakeShareDraftLink');
127
-    }
17
+	/**
18
+	 * The number of days a shared link should be valid for, before expiring.
19
+	 *
20
+	 * @config
21
+	 *
22
+	 * @var int
23
+	 */
24
+	private static $valid_for_days = 30;
25
+
26
+	/**
27
+	 * @var array
28
+	 */
29
+	private static $db = array(
30
+		'ShareTokenSalt' => 'Varchar(16)',
31
+	);
32
+
33
+	/**
34
+	 * @var array
35
+	 */
36
+	private static $has_many = array(
37
+		'ShareTokens' => ShareToken::class,
38
+	);
39
+
40
+	/**
41
+	 * @var array
42
+	 */
43
+	private static $allowed_actions = array(
44
+		'MakeShareDraftLink'
45
+	);
46
+
47
+	/**
48
+	 * @return string
49
+	 */
50
+	public function ShareTokenLink()
51
+	{
52
+		$shareToken = $this->getNewShareToken();
53
+
54
+		return Controller::join_links(
55
+			Director::absoluteBaseURL(),
56
+			'preview',
57
+			$this->generateKey($shareToken->Token),
58
+			$shareToken->Token
59
+		);
60
+	}
61
+
62
+	/**
63
+	 * @return ShareToken
64
+	 */
65
+	protected function getNewShareToken()
66
+	{
67
+		if (!$this->owner->ShareTokenSalt) {
68
+			$this->owner->ShareTokenSalt = $this->getNewToken();
69
+			$this->owner->write();
70
+		}
71
+
72
+		$found = null;
73
+		$token = null;
74
+		$tries = 1;
75
+		$limit = 5;
76
+
77
+		while (!$found && ($tries++ < $limit)) {
78
+			$token = $this->getNewToken();
79
+
80
+			$found = ShareToken::get()->filter(array(
81
+				"Token" => $token,
82
+				"PageID" => $this->owner->ID,
83
+			))->first();
84
+		}
85
+
86
+		$config = Config::forClass(__CLASS__);
87
+
88
+		$validForDays = $config->valid_for_days;
89
+
90
+		$token = ShareToken::create(array(
91
+			"Token" => $token,
92
+			"ValidForDays" => $validForDays,
93
+			"PageID" => $this->owner->ID,
94
+		));
95
+
96
+		$token->write();
97
+
98
+		return $token;
99
+	}
100
+
101
+	/**
102
+	 * @return string
103
+	 */
104
+	protected function getNewToken()
105
+	{
106
+		$generator = new RandomGenerator();
107
+
108
+		return substr($generator->randomToken('sha256'), 0, 16);
109
+	}
110
+
111
+	/**
112
+	 * @param string $salt
113
+	 *
114
+	 * @return string
115
+	 */
116
+	public function generateKey($salt)
117
+	{
118
+		return hash_pbkdf2('sha256', $salt, $this->owner->SharedTokenSalt, 1000, 16);
119
+	}
120
+
121
+	/**
122
+	 * @return string
123
+	 */
124
+	public function getShareDraftLinkAction()
125
+	{
126
+		return $this->owner->Link('MakeShareDraftLink');
127
+	}
128 128
 }
Please login to merge, or discard this patch.
src/Extensions/ShareDraftContentRequirementsExtension.php 1 patch
Indentation   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -7,9 +7,9 @@
 block discarded – undo
7 7
 
8 8
 class ShareDraftContentRequirementsExtension extends DataExtension
9 9
 {
10
-    public function init()
11
-    {
12
-        Requirements::css('silverstripe/sharedraftcontent: client/dist/styles/share-component.css');
13
-        Requirements::javascript('silverstripe/sharedraftcontent: client/dist/js/main.js');
14
-    }
10
+	public function init()
11
+	{
12
+		Requirements::css('silverstripe/sharedraftcontent: client/dist/styles/share-component.css');
13
+		Requirements::javascript('silverstripe/sharedraftcontent: client/dist/js/main.js');
14
+	}
15 15
 }
Please login to merge, or discard this patch.