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
7 changes: 5 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ It's possible to use directly the hookReceiver to build the event object, but yo
How does it work
----------------

The middleware checks the header named HTTP_X_GITLAB_TOKEN and builds an event object. The object is dispatched to a listener
The middleware checks the header named X-GITLAB-TOKEN and builds an event object. The object is dispatched to a listener
that you must implement.

The middleware takes care of unserializing the payload and provides you with nice PHP objects instead of raw JSON data.
Expand Down Expand Up @@ -112,10 +112,13 @@ $listener = new Test\Listerner();
// Register your listener in the main HookReceiver instance
$hookReceiver = new TheCodingMachine\GitlabHook\HookReceiver([$listener]);

// Create a PSR-3 logger
$logger = new Psr\Log\NullLogger();

// Inject hookReceiver in Gitlab middleware
// You must inject this middleware in the middleware pipe of your favorite framework.
// See your framework documentation on how to do that.
$middleware = new TheCodingMachine\GitlabHook\GitlabHookMiddleware($hookReceiver);
$middleware = new TheCodingMachine\GitlabHook\GitlabHookMiddleware($hookReceiver, 'secret', $logger);
```


Expand Down
11 changes: 10 additions & 1 deletion src/GitlabHookMiddleware.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
use Psr\Log\LoggerInterface;
use function var_export;
use Zend\Diactoros\Response;

class GitlabHookMiddleware implements MiddlewareInterface
Expand All @@ -20,10 +22,16 @@ class GitlabHookMiddleware implements MiddlewareInterface
*/
private $gitlabSecret;

public function __construct(HookReceiver $hookReceiver, string $gitlabSecret)
/**
* @var LoggerInterface
*/
private $logger;

public function __construct(HookReceiver $hookReceiver, string $gitlabSecret, LoggerInterface $logger)
{
$this->hookReceiver = $hookReceiver;
$this->gitlabSecret = $gitlabSecret;
$this->logger = $logger;
}

/**
Expand All @@ -40,6 +48,7 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface
if (($error = json_last_error()) != JSON_ERROR_NONE) {
throw new GitlabHookException("Error parsing json data with code: ".$error);
}
$this->logger->debug('[Gitlab hook middleware] Received payload: '.var_export($payload, true));
$this->hookReceiver->handle($payload, $request->getHeader('x-gitlab-event')[0]);
return new Response();
}
Expand Down
9 changes: 5 additions & 4 deletions tests/GitlabHookMiddlewareTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
use Psr\Log\NullLogger;
use TheCodingMachine\GitlabHook\Model\Base\Branch;
use TheCodingMachine\GitlabHook\Model\Base\Change;
use TheCodingMachine\GitlabHook\Model\Base\Commit;
Expand Down Expand Up @@ -37,7 +38,7 @@ public function handle(ServerRequestInterface $request): ResponseInterface
};

$hookReceiver = new HookReceiver([]);
$gitlabHookReceiver = new GitlabHookMiddleware($hookReceiver, 'test');
$gitlabHookReceiver = new GitlabHookMiddleware($hookReceiver, 'test', new NullLogger());
$response = $gitlabHookReceiver->process($request, $handler);

$this->assertInstanceOf(Response::class, $response);
Expand All @@ -57,7 +58,7 @@ public function handle(ServerRequestInterface $request): ResponseInterface
};

$hookReceiver = new HookReceiver([]);
$gitlabHookReceiver = new GitlabHookMiddleware($hookReceiver, 'test');
$gitlabHookReceiver = new GitlabHookMiddleware($hookReceiver, 'test', new NullLogger());

$this->expectException(GitlabHookException::class);
$response = $gitlabHookReceiver->process($request, $handler);
Expand All @@ -74,7 +75,7 @@ public function handle(ServerRequestInterface $request): ResponseInterface
};

$hookReceiver = new HookReceiver([]);
$gitlabHookReceiver = new GitlabHookMiddleware($hookReceiver, 'test');
$gitlabHookReceiver = new GitlabHookMiddleware($hookReceiver, 'test', new NullLogger());
$response = $gitlabHookReceiver->process($request, $handler);

$this->assertInstanceOf(Response::class, $response);
Expand All @@ -91,7 +92,7 @@ public function handle(ServerRequestInterface $request): ResponseInterface
};

$hookReceiver = new HookReceiver([]);
$gitlabHookReceiver = new GitlabHookMiddleware($hookReceiver, 'test');
$gitlabHookReceiver = new GitlabHookMiddleware($hookReceiver, 'test', new NullLogger());
$response = $gitlabHookReceiver->process($request, $handler);

$this->assertInstanceOf(Response::class, $response);
Expand Down