You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
pixelfed/app/Providers/AppServiceProvider.php

157 lines
5.0 KiB
PHTML

<?php
namespace App\Providers;
2 years ago
use App\Avatar;
use App\Follower;
use App\HashtagFollow;
use App\Like;
4 months ago
use App\Models\OAuthToken;
2 years ago
use App\ModLog;
use App\Notification;
use App\Observers\AvatarObserver;
use App\Observers\FollowerObserver;
use App\Observers\HashtagFollowObserver;
use App\Observers\LikeObserver;
use App\Observers\ModLogObserver;
use App\Observers\NotificationObserver;
use App\Observers\ProfileObserver;
use App\Observers\StatusHashtagObserver;
use App\Observers\StatusObserver;
use App\Observers\UserFilterObserver;
use App\Observers\UserObserver;
use App\Profile;
2 years ago
use App\Services\AccountService;
use App\Services\UserOidcService;
2 years ago
use App\Status;
use App\StatusHashtag;
use App\User;
use App\UserFilter;
use Auth;
use Horizon;
7 months ago
use Illuminate\Cache\RateLimiting\Limit;
2 years ago
use Illuminate\Database\Eloquent\Model;
7 months ago
use Illuminate\Http\Request;
use Illuminate\Pagination\Paginator;
2 years ago
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\Facades\RateLimiter;
2 years ago
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Facades\Validator;
2 years ago
use Illuminate\Support\ServiceProvider;
4 months ago
use Laravel\Passport\Passport;
2 years ago
use Laravel\Pulse\Facades\Pulse;
2 years ago
use URL;
class AppServiceProvider extends ServiceProvider
{
2 years ago
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
if (config('instance.force_https_urls', true)) {
URL::forceScheme('https');
}
4 months ago
Passport::$clientUuids = false;
Passport::authorizationView('auth.oauth.authorize');
2 years ago
Schema::defaultStringLength(191);
Paginator::useBootstrap();
Avatar::observe(AvatarObserver::class);
Follower::observe(FollowerObserver::class);
HashtagFollow::observe(HashtagFollowObserver::class);
Like::observe(LikeObserver::class);
Notification::observe(NotificationObserver::class);
ModLog::observe(ModLogObserver::class);
Profile::observe(ProfileObserver::class);
StatusHashtag::observe(StatusHashtagObserver::class);
User::observe(UserObserver::class);
Status::observe(StatusObserver::class);
2 years ago
UserFilter::observe(UserFilterObserver::class);
Horizon::auth(function ($request) {
return Auth::check() && $request->user()->is_admin;
});
Validator::includeUnvalidatedArrayKeys();
Gate::define('viewPulse', function (User $user) {
return $user->is_admin === 1;
});
if (config('pulse.enabled', false)) {
Pulse::user(function ($user) {
$acct = AccountService::get($user->profile_id, true);
2 years ago
return $acct ? [
'name' => $acct['username'],
'extra' => $user->email,
'avatar' => $acct['avatar'],
] : [
'name' => $user->username,
'extra' => 'DELETED',
'avatar' => '/storage/avatars/default.jpg',
];
});
}
2 years ago
RateLimiter::for('app-signup', function (Request $request) {
return Limit::perDay(100)->by($request->ip());
});
1 year ago
RateLimiter::for('app-code-verify', function (Request $request) {
return Limit::perHour(20)->by($request->ip());
1 year ago
});
RateLimiter::for('app-code-resend', function (Request $request) {
return Limit::perHour(10)->by($request->ip());
});
RateLimiter::for('account-lookup', function (Request $request) {
return Limit::perDay(50)->by($request->ip());
});
4 months ago
Passport::useTokenModel(OAuthToken::class);
Passport::tokensExpireIn(now()->addDays(config('instance.oauth.token_expiration', 356)));
Passport::refreshTokensExpireIn(now()->addDays(config('instance.oauth.refresh_expiration', 400)));
Passport::enableImplicitGrant();
if (config('instance.oauth.pat.enabled')) {
Passport::personalAccessClientId(config('instance.oauth.pat.id'));
}
Passport::tokensCan([
'read' => 'Full read access to your account',
'write' => 'Full write access to your account',
'follow' => 'Ability to follow other profiles',
'admin:read' => 'Read all data on the server',
'admin:read:domain_blocks' => 'Read sensitive information of all domain blocks',
'admin:write' => 'Modify all data on the server',
'admin:write:domain_blocks' => 'Perform moderation actions on domain blocks',
'push' => 'Receive your push notifications',
]);
Passport::setDefaultScope([
'read',
'write',
'follow',
]);
2 years ago
// Model::preventLazyLoading(true);
}
2 years ago
/**
* Register any application services.
*
* @return void
*/
public function register()
{
Passport::ignoreRoutes();
7 months ago
$this->app->bind(UserOidcService::class, function () {
return UserOidcService::build();
});
2 years ago
}
}