user()->role === 'admin', 403); $credentials = EtsyAppCredential::find(1); $storedIntegrations = IntegrationSetting::query()->whereIn('provider', ['parcel2go', 'bambuddy', 'dryer']) ->pluck('provider')->all(); $parcel2go = $settings->for('parcel2go'); $bambuddy = $settings->for('bambuddy'); $dryer = $settings->for('dryer'); return view('settings.index', [ 'storedCredentials' => $credentials !== null, 'configured' => $etsy->configured(), 'redirectUri' => $etsy->redirectUri(), 'shopName' => $credentials?->shop_name ?: config('services.etsy.shop_name', 'HickLab3D'), 'integrations' => [ 'parcel2go' => [ 'stored' => in_array('parcel2go', $storedIntegrations, true), 'configured' => filled($parcel2go['client_id'] ?? null) && filled($parcel2go['client_secret'] ?? null) && filled($parcel2go['auth_url'] ?? null), 'auth_url' => $parcel2go['auth_url'] ?? '', 'base_url' => $parcel2go['base_url'] ?? '', 'scope' => $parcel2go['scope'] ?? 'public-api', 'collection_postcode' => $parcel2go['collection_postcode'] ?? '', ], 'bambuddy' => [ 'stored' => in_array('bambuddy', $storedIntegrations, true), 'configured' => filled($bambuddy['url'] ?? null) && filled($bambuddy['api_key'] ?? null), 'url' => $bambuddy['url'] ?? '', ], 'dryer' => [ 'stored' => in_array('dryer', $storedIntegrations, true), 'configured' => filled($dryer['url'] ?? null) && filled($dryer['api_key'] ?? null), 'url' => $dryer['url'] ?? '', ], ], ]); } public function update(Request $request): RedirectResponse { abort_unless($request->user()->role === 'admin', 403); $credentials = EtsyAppCredential::find(1); $requireKeystring = $credentials === null && blank(config('services.etsy.keystring')) ? 'required' : 'nullable'; $requireSecret = $credentials === null && blank(config('services.etsy.shared_secret')) ? 'required' : 'nullable'; $validated = $request->validate([ 'keystring' => [$requireKeystring, 'string', 'max:255'], 'shared_secret' => [$requireSecret, 'string', 'max:255'], 'shop_name' => ['nullable', 'string', 'max:255'], 'redirect_uri' => ['nullable', 'url:https', 'max:2048'], ]); $previousKeystring = $credentials?->keystring ?: config('services.etsy.keystring'); $credentials ??= new EtsyAppCredential; $credentials->id = 1; if (! $credentials->exists) { $credentials->fill([ 'keystring' => config('services.etsy.keystring'), 'shared_secret' => config('services.etsy.shared_secret'), 'shop_name' => config('services.etsy.shop_name', 'HickLab3D'), 'redirect_uri' => config('services.etsy.redirect_uri'), ]); } $credentials->fill(array_filter($validated, fn (?string $value): bool => filled($value))); $credentials->save(); $keystringChanged = $previousKeystring !== $credentials->keystring; if ($keystringChanged) { EtsyConnection::query()->delete(); } return redirect()->route('settings.index')->with('status', $keystringChanged ? 'Etsy credentials saved. Reconnect your shop with the new app key.' : 'Etsy credentials saved.'); } }