135 lines
4.4 KiB
PHP
135 lines
4.4 KiB
PHP
<?php
|
|
|
|
namespace humhub\modules\donations\services\providers;
|
|
|
|
use humhub\modules\donations\models\DonationProviderConfig;
|
|
use humhub\modules\space\models\Space;
|
|
use Yii;
|
|
|
|
class ProviderCredentialResolver
|
|
{
|
|
public static function isSandboxMode(DonationProviderConfig $config): bool
|
|
{
|
|
$settings = self::settingsForConfig($config);
|
|
$value = $settings !== null
|
|
? $settings->get('sandbox_mode', $config->sandbox_mode ?? 1)
|
|
: ($config->sandbox_mode ?? 1);
|
|
|
|
return (int)$value === 1;
|
|
}
|
|
|
|
public static function resolvePayPalClientId(DonationProviderConfig $config): string
|
|
{
|
|
return self::resolveModeValue(
|
|
$config,
|
|
'paypal_sandbox_client_id',
|
|
'paypal_live_client_id',
|
|
(string)$config->paypal_client_id
|
|
);
|
|
}
|
|
|
|
public static function resolvePayPalClientSecret(DonationProviderConfig $config): string
|
|
{
|
|
return self::resolveModeValue(
|
|
$config,
|
|
'paypal_sandbox_client_secret',
|
|
'paypal_live_client_secret',
|
|
(string)$config->paypal_client_secret
|
|
);
|
|
}
|
|
|
|
public static function resolvePayPalWebhookId(DonationProviderConfig $config): string
|
|
{
|
|
return self::resolveModeValue(
|
|
$config,
|
|
'paypal_sandbox_webhook_id',
|
|
'paypal_live_webhook_id',
|
|
(string)$config->paypal_webhook_id
|
|
);
|
|
}
|
|
|
|
public static function resolveStripePublishableKey(DonationProviderConfig $config): string
|
|
{
|
|
return self::resolveModeValue(
|
|
$config,
|
|
'stripe_sandbox_publishable_key',
|
|
'stripe_live_publishable_key',
|
|
(string)$config->stripe_publishable_key
|
|
);
|
|
}
|
|
|
|
public static function resolveStripeSecretKey(DonationProviderConfig $config): string
|
|
{
|
|
return self::resolveModeValue(
|
|
$config,
|
|
'stripe_sandbox_secret_key',
|
|
'stripe_live_secret_key',
|
|
(string)$config->stripe_secret_key
|
|
);
|
|
}
|
|
|
|
public static function resolveStripeWebhookSecret(DonationProviderConfig $config): string
|
|
{
|
|
return self::resolveModeValue(
|
|
$config,
|
|
'stripe_sandbox_webhook_secret',
|
|
'stripe_live_webhook_secret',
|
|
(string)$config->stripe_webhook_secret
|
|
);
|
|
}
|
|
|
|
private static function resolveModeValue(
|
|
DonationProviderConfig $config,
|
|
string $sandboxKey,
|
|
string $liveKey,
|
|
string $legacyFallback
|
|
): string {
|
|
$settings = self::settingsForConfig($config);
|
|
$isSandbox = self::isSandboxMode($config);
|
|
|
|
if ($settings === null) {
|
|
return trim($legacyFallback);
|
|
}
|
|
|
|
$sandboxValue = trim((string)$settings->get($sandboxKey, ''));
|
|
$liveValue = trim((string)$settings->get($liveKey, ''));
|
|
$legacyValue = trim((string)$settings->get(self::legacyKeyFor($sandboxKey, $liveKey), $legacyFallback));
|
|
|
|
if ($isSandbox) {
|
|
return $sandboxValue !== '' ? $sandboxValue : $legacyValue;
|
|
}
|
|
|
|
return $liveValue !== '' ? $liveValue : $legacyValue;
|
|
}
|
|
|
|
private static function legacyKeyFor(string $sandboxKey, string $liveKey): string
|
|
{
|
|
$map = [
|
|
'paypal_sandbox_client_id' => 'paypal_client_id',
|
|
'paypal_live_client_id' => 'paypal_client_id',
|
|
'paypal_sandbox_client_secret' => 'paypal_client_secret',
|
|
'paypal_live_client_secret' => 'paypal_client_secret',
|
|
'paypal_sandbox_webhook_id' => 'paypal_webhook_id',
|
|
'paypal_live_webhook_id' => 'paypal_webhook_id',
|
|
'stripe_sandbox_publishable_key' => 'stripe_publishable_key',
|
|
'stripe_live_publishable_key' => 'stripe_publishable_key',
|
|
'stripe_sandbox_secret_key' => 'stripe_secret_key',
|
|
'stripe_live_secret_key' => 'stripe_secret_key',
|
|
'stripe_sandbox_webhook_secret' => 'stripe_webhook_secret',
|
|
'stripe_live_webhook_secret' => 'stripe_webhook_secret',
|
|
];
|
|
|
|
return $map[$sandboxKey] ?? ($map[$liveKey] ?? '');
|
|
}
|
|
|
|
private static function settingsForConfig(DonationProviderConfig $config)
|
|
{
|
|
$space = Space::findOne(['contentcontainer_id' => (int)$config->contentcontainer_id]);
|
|
if (!$space instanceof Space) {
|
|
return null;
|
|
}
|
|
|
|
return Yii::$app->getModule('donations')->settings->contentContainer($space);
|
|
}
|
|
}
|