Skip to content

Commit

Permalink
Make dynamic resolvers
Browse files Browse the repository at this point in the history
 + Deprecate specific resolver contracts
 + move user resolver to user config
 + rename resolver array to resolvers in config
  • Loading branch information
MortenDHansen committed Feb 4, 2022
1 parent 06ca0fd commit c6b06dd
Show file tree
Hide file tree
Showing 9 changed files with 42 additions and 69 deletions.
6 changes: 3 additions & 3 deletions config/audit.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,13 @@
|
*/

'user' => [
'user' => [
'morph_prefix' => 'user',
'guards' => [
'web',
'api',
],
'resolver' => OwenIt\Auditing\Resolvers\UserResolver::class
],

/*
Expand All @@ -40,8 +41,7 @@
| Define the User, IP Address, User Agent and URL resolver implementations.
|
*/
'resolver' => [
'user' => OwenIt\Auditing\Resolvers\UserResolver::class,
'resolvers' => [
'ip_address' => OwenIt\Auditing\Resolvers\IpAddressResolver::class,
'user_agent' => OwenIt\Auditing\Resolvers\UserAgentResolver::class,
'url' => OwenIt\Auditing\Resolvers\UrlResolver::class,
Expand Down
67 changes: 11 additions & 56 deletions src/Auditable.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,14 @@

namespace OwenIt\Auditing;

use Dotenv\Loader\Resolver;
use Illuminate\Database\Eloquent\Relations\MorphMany;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Config;
use OwenIt\Auditing\Contracts\AttributeEncoder;
use OwenIt\Auditing\Contracts\AttributeRedactor;
use OwenIt\Auditing\Contracts\IpAddressResolver;
use OwenIt\Auditing\Contracts\UrlResolver;
use OwenIt\Auditing\Contracts\UserAgentResolver;
use OwenIt\Auditing\Contracts\UserResolver;
use OwenIt\Auditing\Exceptions\AuditableTransitionException;
use OwenIt\Auditing\Exceptions\AuditingException;
Expand Down Expand Up @@ -278,19 +276,16 @@ public function toAudit(): array

$user = $this->resolveUser();

return $this->transformAudit([
return $this->transformAudit(array_merge([
'old_values' => $old,
'new_values' => $new,
'event' => $this->auditEvent,
'auditable_id' => $this->getKey(),
'auditable_type' => $this->getMorphClass(),
$morphPrefix . '_id' => $user ? $user->getAuthIdentifier() : null,
$morphPrefix . '_type' => $user ? $user->getMorphClass() : null,
'url' => $this->resolveUrl(),
'ip_address' => $this->resolveIpAddress(),
'user_agent' => $this->resolveUserAgent(),
'tags' => empty($tags) ? null : $tags,
]);
], $this->runResolvers()));
}

/**
Expand Down Expand Up @@ -319,58 +314,18 @@ protected function resolveUser()
throw new AuditingException('Invalid UserResolver implementation');
}

/**
* Resolve the URL.
*
* @return string
* @throws AuditingException
*
*/
protected function resolveUrl(): string
{
$urlResolver = Config::get('audit.resolver.url');

if (is_subclass_of($urlResolver, UrlResolver::class)) {
return call_user_func([$urlResolver, 'resolve']);
}

throw new AuditingException('Invalid UrlResolver implementation');
}

/**
* Resolve the IP Address.
*
* @return string
* @throws AuditingException
*
*/
protected function resolveIpAddress(): string
protected function runResolvers(): array
{
$ipAddressResolver = Config::get('audit.resolver.ip_address');

if (is_subclass_of($ipAddressResolver, IpAddressResolver::class)) {
return call_user_func([$ipAddressResolver, 'resolve']);
}

throw new AuditingException('Invalid IpAddressResolver implementation');
}

/**
* Resolve the User Agent.
*
* @return string|null
* @throws AuditingException
*
*/
protected function resolveUserAgent()
{
$userAgentResolver = Config::get('audit.resolver.user_agent');
$resolved = [];
foreach (Config::get('audit.resolvers', []) as $name => $implementation) {
if (is_subclass_of($implementation, Resolver::class)) {
$resolved[$name] = call_user_func([$implementation, 'resolve']);
}

if (is_subclass_of($userAgentResolver, UserAgentResolver::class)) {
return call_user_func([$userAgentResolver, 'resolve']);
throw new AuditingException('Invalid Resolver implementation for: ' . $name);
}

throw new AuditingException('Invalid UserAgentResolver implementation');
return $resolved;
}

/**
Expand Down
4 changes: 4 additions & 0 deletions src/Contracts/IpAddressResolver.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@

namespace OwenIt\Auditing\Contracts;

/**
* @deprecated
* @see Resolver
*/
interface IpAddressResolver
{
/**
Expand Down
8 changes: 8 additions & 0 deletions src/Contracts/Resolver.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?php

namespace OwenIt\Auditing\Contracts;

interface Resolver
{
public static function resolve();
}
4 changes: 4 additions & 0 deletions src/Contracts/UrlResolver.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@

namespace OwenIt\Auditing\Contracts;

/**
* @deprecated
* @see Resolver
*/
interface UrlResolver
{
/**
Expand Down
4 changes: 4 additions & 0 deletions src/Contracts/UserAgentResolver.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@

namespace OwenIt\Auditing\Contracts;

/**
* @deprecated
* @see Resolver
*/
interface UserAgentResolver
{
/**
Expand Down
7 changes: 3 additions & 4 deletions src/Resolvers/IpAddressResolver.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,11 @@
namespace OwenIt\Auditing\Resolvers;

use Illuminate\Support\Facades\Request;
use OwenIt\Auditing\Contracts\Resolver;

class IpAddressResolver implements \OwenIt\Auditing\Contracts\IpAddressResolver

class IpAddressResolver implements Resolver
{
/**
* {@inheritdoc}
*/
public static function resolve(): string
{
return Request::ip();
Expand Down
5 changes: 3 additions & 2 deletions src/Resolvers/UrlResolver.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,12 @@

use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Request;
use OwenIt\Auditing\Contracts\Resolver;

class UrlResolver implements \OwenIt\Auditing\Contracts\UrlResolver
class UrlResolver implements Resolver
{
/**
* {@inheritdoc}
* @return string
*/
public static function resolve(): string
{
Expand Down
6 changes: 2 additions & 4 deletions src/Resolvers/UserAgentResolver.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,10 @@
namespace OwenIt\Auditing\Resolvers;

use Illuminate\Support\Facades\Request;
use OwenIt\Auditing\Contracts\Resolver;

class UserAgentResolver implements \OwenIt\Auditing\Contracts\UserAgentResolver
class UserAgentResolver implements Resolver
{
/**
* {@inheritdoc}
*/
public static function resolve()
{
return Request::header('User-Agent');
Expand Down

0 comments on commit c6b06dd

Please sign in to comment.