diff --git a/app/Http/Controllers/RemoteAuthController.php b/app/Http/Controllers/RemoteAuthController.php index d48e5b982..72a2a08d5 100644 --- a/app/Http/Controllers/RemoteAuthController.php +++ b/app/Http/Controllers/RemoteAuthController.php @@ -7,6 +7,7 @@ use Illuminate\Http\Request; use App\Services\Account\RemoteAuthService; use App\Models\RemoteAuth; use App\Profile; +use App\Instance; use App\User; use Purify; use Illuminate\Support\Facades\Auth; @@ -36,6 +37,8 @@ class RemoteAuthController extends Controller public function getAuthDomains(Request $request) { + abort_unless(config_cache('pixelfed.open_registration') && config('remote-auth.mastodon.enabled'), 404); + if(config('remote-auth.mastodon.domains.only_custom')) { $res = config('remote-auth.mastodon.domains.custom'); if(!$res || !strlen($res)) { @@ -45,6 +48,19 @@ class RemoteAuthController extends Controller return response()->json($res); } + if( config('remote-auth.mastodon.domains.custom') && + !config('remote-auth.mastodon.domains.only_default') && + strlen(config('remote-auth.mastodon.domains.custom')) > 3 && + strpos(config('remote-auth.mastodon.domains.custom'), '.') > -1 + ) { + $res = config('remote-auth.mastodon.domains.custom'); + if(!$res || !strlen($res)) { + return []; + } + $res = explode(',', $res); + return response()->json($res); + } + $res = config('remote-auth.mastodon.domains.default'); $res = explode(',', $res); @@ -57,6 +73,27 @@ class RemoteAuthController extends Controller $this->validate($request, ['domain' => 'required']); $domain = $request->input('domain'); + + if(str_starts_with(strtolower($domain), 'http')) { + $res = [ + 'domain' => $domain, + 'ready' => false, + 'action' => 'incompatible_domain' + ]; + return response()->json($res); + } + + $validateInstance = Helpers::validateUrl('https://' . $domain . '/?block-check=' . time()); + + if(!$validateInstance) { + $res = [ + 'domain' => $domain, + 'ready' => false, + 'action' => 'blocked_domain' + ]; + return response()->json($res); + } + $compatible = RemoteAuthService::isDomainCompatible($domain); if(!$compatible) { diff --git a/app/Services/Account/RemoteAuthService.php b/app/Services/Account/RemoteAuthService.php index b9936b7be..4412352a5 100644 --- a/app/Services/Account/RemoteAuthService.php +++ b/app/Services/Account/RemoteAuthService.php @@ -12,6 +12,14 @@ class RemoteAuthService { const CACHE_KEY = 'pf:services:remoteauth:'; + public static function getConfig() + { + return json_encode([ + 'default_only' => config('remote-auth.mastodon.domains.only_default'), + 'custom_only' => config('remote-auth.mastodon.domains.only_custom'), + ]); + } + public static function getMastodonClient($domain) { if(RemoteAuthInstance::whereDomain($domain)->exists()) { diff --git a/resources/assets/components/remote-auth/StartComponent.vue b/resources/assets/components/remote-auth/StartComponent.vue index b8b096e1d..c93fc8f71 100644 --- a/resources/assets/components/remote-auth/StartComponent.vue +++ b/resources/assets/components/remote-auth/StartComponent.vue @@ -24,8 +24,8 @@ @click="handleRedirect(domain)"> {{ domain }} -
+