Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F120824894
AppServiceProvider.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Authored By
Unknown
Size
10 KB
Referenced Files
None
Subscribers
None
AppServiceProvider.php
View Options
<?php
namespace
App\Providers
;
use
App\Backends\DAV
;
use
App\Backends\IMAP
;
use
App\Backends\LDAP
;
use
App\Backends\OpenExchangeRates
;
use
App\Backends\PGP
;
use
App\Backends\Roundcube
;
use
App\Backends\Storage
;
use
App\Delegation
;
use
App\Domain
;
use
App\Entitlement
;
use
App\EventLog
;
use
App\Group
;
use
App\GroupSetting
;
use
App\Meet\Room
;
use
App\Observers\DelegationObserver
;
use
App\Observers\DomainObserver
;
use
App\Observers\EntitlementObserver
;
use
App\Observers\EventLogObserver
;
use
App\Observers\GroupObserver
;
use
App\Observers\GroupSettingObserver
;
use
App\Observers\Meet\RoomObserver
;
use
App\Observers\PackageSkuObserver
;
use
App\Observers\PlanPackageObserver
;
use
App\Observers\PowerDNS\DomainObserver
as
DNSDomainObserver
;
use
App\Observers\PowerDNS\RecordObserver
as
DNSRecordObserver
;
use
App\Observers\ReferralCodeObserver
;
use
App\Observers\ResourceObserver
;
use
App\Observers\ResourceSettingObserver
;
use
App\Observers\SharedFolderAliasObserver
;
use
App\Observers\SharedFolderObserver
;
use
App\Observers\SharedFolderSettingObserver
;
use
App\Observers\SignupCodeObserver
;
use
App\Observers\SignupInvitationObserver
;
use
App\Observers\SignupTokenObserver
;
use
App\Observers\TransactionObserver
;
use
App\Observers\UserAliasObserver
;
use
App\Observers\UserObserver
;
use
App\Observers\UserSettingObserver
;
use
App\Observers\VerificationCodeObserver
;
use
App\Observers\WalletObserver
;
use
App\PackageSku
;
use
App\PlanPackage
;
use
App\PowerDNS\Domain
as
DNSDomain
;
use
App\PowerDNS\Record
as
DNSRecord
;
use
App\ReferralCode
;
use
App\Resource
;
use
App\ResourceSetting
;
use
App\SharedFolder
;
use
App\SharedFolderAlias
;
use
App\SharedFolderSetting
;
use
App\SignupCode
;
use
App\SignupInvitation
;
use
App\SignupToken
;
use
App\Transaction
;
use
App\User
;
use
App\UserAlias
;
use
App\UserSetting
;
use
App\VerificationCode
;
use
App\Wallet
;
use
Dedoc\Scramble\Scramble
;
use
Dedoc\Scramble\Support\Generator\OpenApi
;
use
Dedoc\Scramble\Support\Generator\SecurityScheme
;
use
GuzzleHttp\TransferStats
;
use
Illuminate\Database\Query\Builder
;
use
Illuminate\Http\Resources\Json\JsonResource
;
use
Illuminate\Routing\Route
;
use
Illuminate\Support\Facades\Blade
;
use
Illuminate\Support\Facades\Http
;
use
Illuminate\Support\Facades\Schema
;
use
Illuminate\Support\ServiceProvider
;
use
Laravel\Passport\Passport
;
class
AppServiceProvider
extends
ServiceProvider
{
/**
* Register any application services.
*/
public
function
register
():
void
{
// This must be here, not in PassportServiceProvider
Passport
::
ignoreRoutes
();
$this
->
app
->
bind
(
'imap'
,
static
function
()
{
return
new
IMAP
();
});
$this
->
app
->
bind
(
'ldap'
,
static
function
()
{
return
new
LDAP
();
});
$this
->
app
->
bind
(
'dav'
,
static
function
()
{
return
new
DAV
();
});
$this
->
app
->
bind
(
'roundcube'
,
static
function
()
{
return
new
Roundcube
();
});
$this
->
app
->
bind
(
'pgp'
,
static
function
()
{
return
new
PGP
();
});
$this
->
app
->
bind
(
'filestorage'
,
static
function
()
{
return
new
Storage
();
});
$this
->
app
->
bind
(
'openexchangerates'
,
static
function
()
{
return
new
OpenExchangeRates
();
});
}
/**
* Load the override config and apply it
*
* Create a config/override.php file with content like this:
* return [
* 'services.imap.uri' => 'overrideValue1',
* 'queue.connections.database.table' => 'overrideValue2',
* ];
*/
private
function
applyOverrideConfig
():
void
{
$overrideConfig
=
(
array
)
\config
(
'override'
);
foreach
(
array_keys
(
$overrideConfig
)
as
$key
)
{
\config
([
$key
=>
$overrideConfig
[
$key
]]);
}
}
/**
* Bootstrap any application services.
*/
public
function
boot
():
void
{
Delegation
::
observe
(
DelegationObserver
::
class
);
DNSDomain
::
observe
(
DNSDomainObserver
::
class
);
DNSRecord
::
observe
(
DNSRecordObserver
::
class
);
Domain
::
observe
(
DomainObserver
::
class
);
Entitlement
::
observe
(
EntitlementObserver
::
class
);
EventLog
::
observe
(
EventLogObserver
::
class
);
Group
::
observe
(
GroupObserver
::
class
);
GroupSetting
::
observe
(
GroupSettingObserver
::
class
);
Room
::
observe
(
RoomObserver
::
class
);
PackageSku
::
observe
(
PackageSkuObserver
::
class
);
PlanPackage
::
observe
(
PlanPackageObserver
::
class
);
ReferralCode
::
observe
(
ReferralCodeObserver
::
class
);
Resource
::
observe
(
ResourceObserver
::
class
);
ResourceSetting
::
observe
(
ResourceSettingObserver
::
class
);
SharedFolder
::
observe
(
SharedFolderObserver
::
class
);
SharedFolderAlias
::
observe
(
SharedFolderAliasObserver
::
class
);
SharedFolderSetting
::
observe
(
SharedFolderSettingObserver
::
class
);
SignupCode
::
observe
(
SignupCodeObserver
::
class
);
SignupInvitation
::
observe
(
SignupInvitationObserver
::
class
);
SignupToken
::
observe
(
SignupTokenObserver
::
class
);
Transaction
::
observe
(
TransactionObserver
::
class
);
User
::
observe
(
UserObserver
::
class
);
UserAlias
::
observe
(
UserAliasObserver
::
class
);
UserSetting
::
observe
(
UserSettingObserver
::
class
);
VerificationCode
::
observe
(
VerificationCodeObserver
::
class
);
Wallet
::
observe
(
WalletObserver
::
class
);
Schema
::
defaultStringLength
(
191
);
Blade
::
precompiler
(
static
function
(
$str
)
{
// For Scramble (API documentation) we replace external js/css resources with locally stored
if
(
str_starts_with
(
\request
()->
path
(),
'docs/api'
))
{
if
(
preg_match_all
(
'~(src|href)="(https://unpkg.com/[^"]+)~'
,
$str
,
$matches
))
{
if
(!
file_exists
(
\public_path
(
'vendor'
)))
{
mkdir
(
\public_path
(
'vendor'
));
}
if
(!
file_exists
(
\public_path
(
'vendor/scramble'
)))
{
mkdir
(
\public_path
(
'vendor/scramble'
));
}
foreach
(
$matches
[
2
]
as
$href
)
{
$file
=
'vendor/scramble/'
.
md5
(
$href
)
.
'.'
.
pathinfo
(
$href
,
\PATHINFO_BASENAME
);
if
(!
file_exists
(
\public_path
(
$file
)))
{
$content
=
\file_get_contents
(
$href
);
if
(!
$content
)
{
break
;
}
\file_put_contents
(
\public_path
(
$file
),
$content
);
}
$str
=
str_replace
(
$href
,
"/{$file}"
,
$str
);
}
}
}
return
$str
;
});
// Register some template helpers
Blade
::
directive
(
'theme_asset'
,
static
function
(
$path
)
{
$path
=
trim
(
$path
,
'/
\'
"'
);
return
"<?php echo secure_asset('themes/' .
\$
env['app.theme'] . '/' . '{$path}'); ?>"
;
}
);
Builder
::
macro
(
'withEnvTenantContext'
,
function
(?
string
$table
=
null
)
{
$tenantId
=
\config
(
'app.tenant_id'
);
if
(
$tenantId
)
{
// @var Builder $this
return
$this
->
where
((
$table
?
"{$table}."
:
""
)
.
"tenant_id"
,
$tenantId
);
}
// @var Builder $this
return
$this
->
whereNull
((
$table
?
"{$table}."
:
""
)
.
"tenant_id"
);
}
);
Builder
::
macro
(
'withObjectTenantContext'
,
function
(
object
$object
,
?
string
$table
=
null
)
{
$tenantId
=
$object
->
tenant_id
;
if
(
$tenantId
)
{
// @var Builder $this
return
$this
->
where
((
$table
?
"{$table}."
:
""
)
.
"tenant_id"
,
$tenantId
);
}
// @var Builder $this
return
$this
->
whereNull
((
$table
?
"{$table}."
:
""
)
.
"tenant_id"
);
}
);
Builder
::
macro
(
'withSubjectTenantContext'
,
function
(?
string
$table
=
null
)
{
if
(
$user
=
auth
()->
user
())
{
$tenantId
=
$user
->
tenant_id
;
}
else
{
$tenantId
=
\config
(
'app.tenant_id'
);
}
if
(
$tenantId
)
{
// @var Builder $this
return
$this
->
where
((
$table
?
"{$table}."
:
""
)
.
"tenant_id"
,
$tenantId
);
}
// @var Builder $this
return
$this
->
whereNull
((
$table
?
"{$table}."
:
""
)
.
"tenant_id"
);
}
);
Http
::
macro
(
'withSlowLog'
,
function
()
{
return
Http
::
withOptions
([
'on_stats'
=>
static
function
(
TransferStats
$stats
)
{
$threshold
=
\config
(
'logging.slow_log'
);
if
(
$threshold
&&
(
$sec
=
$stats
->
getTransferTime
())
>
$threshold
)
{
$url
=
$stats
->
getEffectiveUri
();
$method
=
$stats
->
getRequest
()->
getMethod
();
\Log
::
warning
(
sprintf
(
"[STATS] %s %s: %.4f sec."
,
$method
,
$url
,
$sec
));
}
},
]);
});
Http
::
macro
(
'fakeClear'
,
function
()
{
$reflection
=
new
\ReflectionObject
(
Http
::
getFacadeRoot
());
$property
=
$reflection
->
getProperty
(
'stubCallbacks'
);
$property
->
setAccessible
(
true
);
$property
->
setValue
(
Http
::
getFacadeRoot
(),
collect
());
return
Http
::
getFacadeRoot
();
});
JsonResource
::
withoutWrapping
();
Scramble
::
configure
()
->
routes
(
static
function
(
Route
$route
)
{
// Exclude admin/reseller/webhooks groups for now
// TODO: Find a way to separate or describe access
return
empty
(
$route
->
action
[
'domain'
])
&&
str_starts_with
(
$route
->
uri
,
'api/'
)
&&
$route
->
action
[
'prefix'
]
!=
'api/webhooks'
;
})
->
withDocumentTransformers
(
static
function
(
OpenApi
$openApi
)
{
$openApi
->
secure
(
SecurityScheme
::
http
(
'bearer'
)
);
});
// Use strict RFC compliant redirects which maintain the HTTP Method.
// Otherwise the redirect will always use a GET request.
Http
::
globalOptions
([
'allow_redirects'
=>
[
'strict'
=>
true
],
]);
$this
->
applyOverrideConfig
();
}
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Fri, Apr 24, 10:29 AM (1 d, 17 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
18820717
Default Alt Text
AppServiceProvider.php (10 KB)
Attached To
Mode
rK kolab
Attached
Detach File
Event Timeline