Feature flags (#543)

* Re-organize a bit controllers

* Added the featureflagcontroller

* Implement feature flags in the front-end

* Clean env files

* Clean console.log messages

* Fix feature flag test
This commit is contained in:
Julien Nahum
2024-08-27 16:49:43 +02:00
committed by GitHub
parent 1dffd27390
commit 79d3dd7888
40 changed files with 304 additions and 147 deletions

View File

@@ -0,0 +1,41 @@
<?php
namespace App\Http\Controllers\Content;
use App\Http\Controllers\Controller;
class FeatureFlagsController extends Controller
{
public function index()
{
$featureFlags = \Cache::remember('feature_flags', 3600, function () {
return [
'self_hosted' => config('app.self_hosted', true),
'custom_domains' => config('custom_domains.enabled', false),
'ai_features' => !empty(config('services.openai.api_key')),
'billing' => [
'enabled' => !empty(config('cashier.key')) && !empty(config('cashier.secret')),
'appsumo' => !empty(config('services.appsumo.api_key')) && !empty(config('services.appsumo.api_secret')),
],
'storage' => [
'local' => config('filesystems.default') === 'local',
's3' => config('filesystems.default') !== 'local',
],
'services' => [
'unsplash' => !empty(config('services.unsplash.access_key')),
'google' => [
'fonts' => !empty(config('services.google.fonts_api_key')),
'auth' => !empty(config('services.google.client_id')) && !empty(config('services.google.client_secret')),
],
],
'integrations' => [
'zapier' => config('services.zapier.enabled'),
'google_sheets' => !empty(config('services.google.client_id')) && !empty(config('services.google.client_secret')),
],
];
});
return response()->json($featureFlags);
}
}

View File

@@ -0,0 +1,32 @@
<?php
namespace App\Http\Controllers\Content;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Http;
use App\Http\Controllers\Controller;
class FontsController extends Controller
{
public function index(Request $request)
{
if (!config('services.google.fonts_api_key')) {
return response()->json([]);
}
return \Cache::remember('google_fonts', 60 * 60, function () {
$url = "https://www.googleapis.com/webfonts/v1/webfonts?sort=popularity&key=" . config('services.google.fonts_api_key');
$response = Http::get($url);
if ($response->successful()) {
$fonts = collect($response->json()['items'])->filter(function ($font) {
return !in_array($font['category'], ['monospace']);
})->map(function ($font) {
return $font['family'];
})->toArray();
return response()->json($fonts);
}
return [];
});
}
}

View File

@@ -0,0 +1,31 @@
<?php
namespace App\Http\Controllers\Content;
use App\Models\Template;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class SitemapController extends Controller
{
public function index(Request $request)
{
return [
...$this->getTemplatesUrls(),
];
}
private function getTemplatesUrls()
{
$urls = [];
Template::where('publicly_listed', true)->chunk(100, function ($templates) use (&$urls) {
foreach ($templates as $template) {
$urls[] = [
'loc' => '/templates/' . $template->slug,
];
}
});
return $urls;
}
}