From fce231dcf6cffa490af15186c2ec1bfef459da35 Mon Sep 17 00:00:00 2001 From: Mariano Carrasco Date: Mon, 17 Mar 2025 12:20:28 +0100 Subject: [PATCH 1/3] Fix decryption to handle serialized ClickUp tokens Previously, the decrypted ClickUp tokens were not being unserialized, causing potential issues when accessing the stored values. This update ensures the tokens are properly unserialized after decryption to maintain functionality. --- src/Concerns/HasClickUp.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Concerns/HasClickUp.php b/src/Concerns/HasClickUp.php index 794e872..17a5661 100644 --- a/src/Concerns/HasClickUp.php +++ b/src/Concerns/HasClickUp.php @@ -62,7 +62,7 @@ public function getClickupAttribute(): ClickUp public function getClickupTokenAttribute(): ?string { if (! is_null($this->attributes['clickup_token'])) { - return Crypt::decryptString($this->attributes['clickup_token']); + return unserialize(Crypt::decryptString($this->attributes['clickup_token'])); } return null; From 1cbc5d5689f0ac87b6099e1c71c6b5541274b8a2 Mon Sep 17 00:00:00 2001 From: Mariano Carrasco Date: Tue, 18 Mar 2025 14:03:30 +0100 Subject: [PATCH 2/3] Rename `Builder` to `ClickUpBuilder` for clarity and specificity This change renames the `Builder` class to `ClickUpBuilder` to better reflect its purpose and role within the codebase. Adjustments were made across all usages, including tests and dependent classes, to ensure consistency and maintain functionality. --- src/Concerns/HasClickUp.php | 18 +++++++++--------- src/Providers/ClientServiceProvider.php | 8 ++++---- .../{Builder.php => ClickUpBuilder.php} | 4 ++-- src/Support/Model.php | 12 ++++++------ src/Support/Relations/BelongsTo.php | 6 +++--- src/Support/Relations/Relation.php | 10 +++++----- tests/Concerns/HasClickUpTest.php | 6 +++--- tests/Concerns/Stubs/User.php | 2 +- tests/Support/BuilderTest.php | 8 ++++---- tests/Support/Relations/BelongsToTest.php | 4 ++-- tests/Support/Relations/RelationCase.php | 4 ++-- 11 files changed, 41 insertions(+), 41 deletions(-) rename src/Support/{Builder.php => ClickUpBuilder.php} (99%) diff --git a/src/Concerns/HasClickUp.php b/src/Concerns/HasClickUp.php index 17a5661..eca3c4b 100644 --- a/src/Concerns/HasClickUp.php +++ b/src/Concerns/HasClickUp.php @@ -7,7 +7,7 @@ use Illuminate\Support\Facades\Crypt; use Spinen\ClickUp\Api\Client as ClickUp; use Spinen\ClickUp\Exceptions\NoClientException; -use Spinen\ClickUp\Support\Builder; +use Spinen\ClickUp\Support\ClickUpBuilder; /** * Trait HasClickUp @@ -20,18 +20,18 @@ trait HasClickUp /** * ClickUp Builder instance */ - protected ?Builder $builder = null; + protected ?ClickUpBuilder $clickUpBuilder = null; /** * Return cached version of the ClickUp Builder for the user * * @throws BindingResolutionException */ - public function clickup(): Builder + public function clickup(): ClickUpBuilder { - if (is_null($this->builder)) { - $this->builder = Container::getInstance() - ->make(Builder::class) + if (is_null($this->clickUpBuilder)) { + $this->clickUpBuilder = Container::getInstance() + ->make(ClickUpBuilder::class) ->setClient( Container::getInstance() ->make(ClickUp::class) @@ -39,7 +39,7 @@ public function clickup(): Builder ); } - return $this->builder; + return $this->clickUpBuilder; } /** @@ -86,8 +86,8 @@ public function initializeHasClickUp(): void public function setClickupTokenAttribute(?string $clickup_token): void { // If setting the password & already have a client, then empty the client to use new password in client - if (! is_null($this->builder)) { - $this->builder = null; + if (! is_null($this->clickUpBuilder)) { + $this->clickUpBuilder = null; } $this->attributes['clickup_token'] = is_null($clickup_token) diff --git a/src/Providers/ClientServiceProvider.php b/src/Providers/ClientServiceProvider.php index 618fd32..690fde6 100644 --- a/src/Providers/ClientServiceProvider.php +++ b/src/Providers/ClientServiceProvider.php @@ -8,7 +8,7 @@ use Illuminate\Support\Facades\Config; use Illuminate\Support\ServiceProvider as LaravelServiceProvider; use Spinen\ClickUp\Api\Client as ClickUp; -use Spinen\ClickUp\Support\Builder; +use Spinen\ClickUp\Support\ClickUpBuilder; /** * Class ClientServiceProvider @@ -47,7 +47,7 @@ public function register() public function provides() { return [ - Builder::class, + ClickUpBuilder::class, ClickUp::class, ]; } @@ -60,8 +60,8 @@ public function provides() protected function registerClient(): void { $this->app->bind( - Builder::class, - fn (Application $app): Builder => new Builder($app->make(ClickUp::class)) + ClickUpBuilder::class, + fn (Application $app): ClickUpBuilder => new ClickUpBuilder($app->make(ClickUp::class)) ); $this->app->bind( diff --git a/src/Support/Builder.php b/src/Support/ClickUpBuilder.php similarity index 99% rename from src/Support/Builder.php rename to src/Support/ClickUpBuilder.php index b530099..af972ac 100644 --- a/src/Support/Builder.php +++ b/src/Support/ClickUpBuilder.php @@ -17,7 +17,7 @@ use Spinen\ClickUp\User; /** - * Class Builder + * Class ClickUpBuilder * * @property Collection $spaces * @property Collection $tasks @@ -30,7 +30,7 @@ * @method teams * @method workspaces */ -class Builder +class ClickUpBuilder { use HasClient; diff --git a/src/Support/Model.php b/src/Support/Model.php index c273e8b..99f1581 100644 --- a/src/Support/Model.php +++ b/src/Support/Model.php @@ -223,10 +223,10 @@ public function belongsTo($related, $foreignKey = null): BelongsTo { $foreignKey = $foreignKey ?? $this->assumeForeignKey($related); - $builder = (new Builder())->setClass($related) + $clickUpBuilder = (new ClickUpBuilder())->setClass($related) ->setClient($this->getClient()); - return new BelongsTo($builder, $this, $foreignKey); + return new BelongsTo($clickUpBuilder, $this, $foreignKey); } /** @@ -243,11 +243,11 @@ public function childOf($related, $foreignKey = null): ChildOf { $foreignKey = $foreignKey ?? $this->assumeForeignKey($related); - $builder = (new Builder())->setClass($related) + $builder = (new ClickUpBuilder())->setClass($related) ->setClient($this->getClient()) ->setParent($this); - return new ChildOf($builder, $this, $foreignKey); + return new ChildOf($clickUpBuilder, $this, $foreignKey); } /** @@ -452,11 +452,11 @@ public function givenOne($related, $attributes, $reset = false): Model */ public function hasMany($related): HasMany { - $builder = (new Builder())->setClass($related) + $clickUpBuilder = (new ClickUpBuilder())->setClass($related) ->setClient($this->getClient()) ->setParent($this); - return new HasMany($builder, $this); + return new HasMany($clickUpBuilder, $this); } /** diff --git a/src/Support/Relations/BelongsTo.php b/src/Support/Relations/BelongsTo.php index 406f156..aafbef9 100644 --- a/src/Support/Relations/BelongsTo.php +++ b/src/Support/Relations/BelongsTo.php @@ -6,7 +6,7 @@ use Spinen\ClickUp\Exceptions\InvalidRelationshipException; use Spinen\ClickUp\Exceptions\NoClientException; use Spinen\ClickUp\Exceptions\TokenException; -use Spinen\ClickUp\Support\Builder; +use Spinen\ClickUp\Support\ClickUpBuilder; use Spinen\ClickUp\Support\Model; /** @@ -21,14 +21,14 @@ class BelongsTo extends Relation * * @throws InvalidRelationshipException */ - public function __construct(protected Builder $builder, protected Model $child, protected $foreignKey) + public function __construct(protected ClickUpBuilder $clickUpBuilder, protected Model $child, protected $foreignKey) { // In the underlying base relationship class, the "child" variable is // referred to as the "parentModel" since most relationships are not // inversed. But, since this one is we will create a "child" variable // for much better readability. - parent::__construct($builder->whereId($this->getForeignKey()), $this->getChild()); + parent::__construct($clickUpBuilder->whereId($this->getForeignKey()), $this->getChild()); } /** diff --git a/src/Support/Relations/Relation.php b/src/Support/Relations/Relation.php index a771754..0e06628 100644 --- a/src/Support/Relations/Relation.php +++ b/src/Support/Relations/Relation.php @@ -5,7 +5,7 @@ use Illuminate\Support\Traits\ForwardsCalls; use Illuminate\Support\Traits\Macroable; use Spinen\ClickUp\Exceptions\InvalidRelationshipException; -use Spinen\ClickUp\Support\Builder; +use Spinen\ClickUp\Support\ClickUpBuilder; use Spinen\ClickUp\Support\Model; /** @@ -30,9 +30,9 @@ abstract class Relation * * @throws InvalidRelationshipException */ - public function __construct(protected Builder $builder, protected Model $parent) + public function __construct(protected ClickUpBuilder $clickUpBuilder, protected Model $parent) { - $this->related = $builder->getModel(); + $this->related = $clickUpBuilder->getModel(); } /** @@ -56,9 +56,9 @@ public function __call(string $method, array $parameters) /** * Get the Builder instance */ - public function getBuilder(): Builder + public function getBuilder(): ClickUpBuilder { - return $this->builder; + return $this->clickUpBuilder; } /** diff --git a/tests/Concerns/HasClickUpTest.php b/tests/Concerns/HasClickUpTest.php index aa1cec0..a5f53e7 100644 --- a/tests/Concerns/HasClickUpTest.php +++ b/tests/Concerns/HasClickUpTest.php @@ -9,7 +9,7 @@ use ReflectionClass; use Spinen\ClickUp\Api\Client as ClickUp; use Spinen\ClickUp\Concerns\Stubs\User; -use Spinen\ClickUp\Support\Builder; +use Spinen\ClickUp\Support\ClickUpBuilder; use Spinen\ClickUp\TestCase; class HasClickUpTest extends TestCase @@ -47,7 +47,7 @@ protected function setUp(): void ) ->andReturnSelf(); - $this->builder_mock = Mockery::mock(Builder::class); + $this->builder_mock = Mockery::mock(ClickUpBuilder::class); $this->builder_mock->shouldReceive('getClient') ->withNoArgs() ->andReturn($this->client_mock); @@ -60,7 +60,7 @@ protected function setUp(): void ->andReturnSelf(); Container::getInstance() - ->instance(Builder::class, $this->builder_mock); + ->instance(ClickUpBuilder::class, $this->builder_mock); Container::getInstance() ->instance(ClickUp::class, $this->client_mock); diff --git a/tests/Concerns/Stubs/User.php b/tests/Concerns/Stubs/User.php index 5824e92..facc725 100644 --- a/tests/Concerns/Stubs/User.php +++ b/tests/Concerns/Stubs/User.php @@ -23,6 +23,6 @@ class User public function getBuilder() { - return $this->builder; + return $this->clickUpBuilder; } } diff --git a/tests/Support/BuilderTest.php b/tests/Support/BuilderTest.php index 0da3985..528bdba 100644 --- a/tests/Support/BuilderTest.php +++ b/tests/Support/BuilderTest.php @@ -21,9 +21,9 @@ class BuilderTest extends TestCase { /** - * @var Builder + * @var ClickUpBuilder */ - protected $builder; + protected $clickUpBuilder; /** * @var Mock @@ -50,8 +50,8 @@ protected function setUp(): void { $this->client_mock = Mockery::mock(Client::class); - $this->builder = new Builder(); - $this->builder->setClient($this->client_mock); + $this->clickUpBuilder = new ClickUpBuilder(); + $this->clickUpBuilder->setClient($this->client_mock); } /** diff --git a/tests/Support/Relations/BelongsToTest.php b/tests/Support/Relations/BelongsToTest.php index e4c2dae..d57b043 100644 --- a/tests/Support/Relations/BelongsToTest.php +++ b/tests/Support/Relations/BelongsToTest.php @@ -3,7 +3,7 @@ namespace Spinen\ClickUp\Support\Relations; use Mockery; -use Spinen\ClickUp\Support\Builder; +use Spinen\ClickUp\Support\ClickUpBuilder; use Spinen\ClickUp\Support\Collection; use Spinen\ClickUp\Support\Stubs\Model; @@ -96,7 +96,7 @@ public function it_gets_the_first_value_from_the_results_of_the_builder() */ public function it_returns_null_if_foreign_key_is_null() { - $builder_mock = Mockery::mock(Builder::class); + $builder_mock = Mockery::mock(ClickUpBuilder::class); $builder_mock->shouldReceive('getModel') ->andReturn($this->parent_mock); $builder_mock->shouldReceive('whereId') diff --git a/tests/Support/Relations/RelationCase.php b/tests/Support/Relations/RelationCase.php index a31132e..73baeb5 100644 --- a/tests/Support/Relations/RelationCase.php +++ b/tests/Support/Relations/RelationCase.php @@ -4,7 +4,7 @@ use Mockery; use Mockery\Mock; -use Spinen\ClickUp\Support\Builder; +use Spinen\ClickUp\Support\ClickUpBuilder; use Spinen\ClickUp\Support\Model; use Spinen\ClickUp\TestCase; @@ -29,7 +29,7 @@ protected function setUp(): void { $this->parent_mock = Mockery::mock(Model::class); - $this->builder_mock = Mockery::mock(Builder::class); + $this->builder_mock = Mockery::mock(ClickUpBuilder::class); $this->builder_mock->shouldReceive('getModel') ->andReturn($this->parent_mock); From 0135b91f8fd335c580ca1e5d902948bfeef0f257 Mon Sep 17 00:00:00 2001 From: Mariano Carrasco Date: Thu, 20 Mar 2025 11:04:41 +0100 Subject: [PATCH 3/3] Update Laravel version constraint to include ^12 Extended the supported Laravel versions in composer.json to include version 12. This change ensures compatibility with the latest Laravel release while maintaining support for older versions. --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index f6f06b4..0e6c104 100644 --- a/composer.json +++ b/composer.json @@ -22,7 +22,7 @@ "php": "^8.0.2", "ext-json": "*", "guzzlehttp/guzzle": "^7.0", - "laravel/framework": "^9.19|^10|^11", + "laravel/framework": "^9.19|^10|^11|^12", "nesbot/carbon": "^2.62.1|^3" }, "require-dev": {