diff --git a/app/controllers/api/avatars.php b/app/controllers/api/avatars.php index 64b7051a60..4801d87b7a 100644 --- a/app/controllers/api/avatars.php +++ b/app/controllers/api/avatars.php @@ -7,6 +7,7 @@ use Appwrite\Utopia\Response; use chillerlan\QRCode\QRCode; use chillerlan\QRCode\QROptions; use Utopia\App; +use Utopia\CLI\Console; use Utopia\Config\Config; use Utopia\Database\Database; use Utopia\Database\DateTime; @@ -14,6 +15,8 @@ use Utopia\Database\Document; use Utopia\Database\Validator\Authorization; use Utopia\Database\Validator\UID; use Utopia\Image\Image; +use Utopia\Logger\Log; +use Utopia\Logger\Logger; use Utopia\Validator\Boolean; use Utopia\Validator\HexColor; use Utopia\Validator\Range; @@ -57,17 +60,28 @@ $avatarCallback = function (string $type, string $code, int $width, int $height, unset($image); }; -$getUserGitHub = function (string $userId, Document $project, Database $dbForProject, Database $dbForConsole) { +$getUserGitHub = function (string $userId, Document $project, Database $dbForProject, Database $dbForConsole, ?Logger $logger) { try { $user = Authorization::skip(fn () => $dbForConsole->getDocument('users', $userId)); $sessions = $user->getAttribute('sessions', []); - $session = $sessions[0] ?? new Document(); - $provider = $session->getAttribute('provider'); - $accessToken = $session->getAttribute('providerAccessToken'); - $accessTokenExpiry = $session->getAttribute('providerAccessTokenExpiry'); - $refreshToken = $session->getAttribute('providerRefreshToken'); + $gitHubSession = null; + foreach ($sessions as $session) { + if ($session->getAttribute('provider', '') === 'github') { + $gitHubSession = $session; + break; + } + } + + if (empty($gitHubSession)) { + throw new Exception(Exception::GENERAL_UNKNOWN, 'GitHub session not found.'); + } + + $provider = $gitHubSession->getAttribute('provider', ''); + $accessToken = $gitHubSession->getAttribute('providerAccessToken'); + $accessTokenExpiry = $gitHubSession->getAttribute('providerAccessTokenExpiry'); + $refreshToken = $gitHubSession->getAttribute('providerRefreshToken'); $appId = $project->getAttribute('authProviders', [])[$provider . 'Appid'] ?? ''; $appSecret = $project->getAttribute('authProviders', [])[$provider . 'Secret'] ?? '{}'; @@ -94,23 +108,31 @@ $getUserGitHub = function (string $userId, Document $project, Database $dbForPro throw new \Exception("Locked tokens."); // Race codition, handeled in catch } - $session + $gitHubSession ->setAttribute('providerAccessToken', $accessToken) ->setAttribute('providerRefreshToken', $refreshToken) ->setAttribute('providerAccessTokenExpiry', DateTime::addSeconds(new \DateTime(), (int)$oauth2->getAccessTokenExpiry(''))); - Authorization::skip(fn () => $dbForProject->updateDocument('sessions', $session->getId(), $session)); + Authorization::skip(fn () => $dbForProject->updateDocument('sessions', $gitHubSession->getId(), $gitHubSession)); $dbForProject->deleteCachedDocument('users', $user->getId()); } catch (Throwable $err) { $index = 0; do { - $previousAccessToken = $session->getAttribute('providerAccessToken'); + $previousAccessToken = $gitHubSession->getAttribute('providerAccessToken'); $user = Authorization::skip(fn () => $dbForConsole->getDocument('users', $userId)); $sessions = $user->getAttribute('sessions', []); - $session = $sessions[0] ?? new Document(); - $accessToken = $session->getAttribute('providerAccessToken'); + + $gitHubSession = new Document(); + foreach ($sessions as $session) { + if ($session->getAttribute('provider', '') === 'github') { + $gitHubSession = $session; + break; + } + } + + $accessToken = $gitHubSession->getAttribute('providerAccessToken'); if ($accessToken !== $previousAccessToken) { break; @@ -130,13 +152,41 @@ $getUserGitHub = function (string $userId, Document $project, Database $dbForPro 'name' => $githubUser, 'id' => $githubId ]; - } catch (Exception $err) { - \var_dump($err->getMessage()); - \var_dump($err->getTraceAsString()); - \var_dump($err->getLine()); - \var_dump($err->getFile()); + } catch (Exception $error) { + if ($logger) { + $version = App::getEnv('_APP_VERSION', 'UNKNOWN'); + + $log = new Log(); + $log->setNamespace('console'); + $log->setServer(\gethostname()); + $log->setVersion($version); + $log->setType(Log::TYPE_ERROR); + $log->setMessage($error->getMessage()); + + $log->addTag('code', $error->getCode()); + $log->addTag('verboseType', get_class($error)); + + $log->addExtra('file', $error->getFile()); + $log->addExtra('line', $error->getLine()); + $log->addExtra('trace', $error->getTraceAsString()); + $log->addExtra('detailedTrace', $error->getTrace()); + + $log->setAction('avatarsGetGitHub'); + + $isProduction = App::getEnv('_APP_ENV', 'development') === 'production'; + $log->setEnvironment($isProduction ? Log::ENVIRONMENT_PRODUCTION : Log::ENVIRONMENT_STAGING); + + $responseCode = $logger->addLog($log); + Console::info('GitHub error log pushed with status code: ' . $responseCode); + } + + Console::warning("Failed: {$error->getMessage()}"); + Console::warning($error->getTraceAsString()); + return []; } + + return []; }; App::get('/v1/avatars/credit-cards/:code') @@ -514,8 +564,8 @@ App::get('/v1/cards/cloud') ->label('origin', '*') ->param('userId', '', new UID(), 'User ID.', true) ->param('mock', '', new WhiteList(['employee', 'employee-2digit', 'hero', 'contributor', 'normal', 'platinum', 'normal-no-github', 'normal-long']), 'Mocking behaviour.', true) - ->param('width', 0, new Range(0, 1024), 'Resize image card width, Pass an integer between 0 to 1024.', true) - ->param('height', 0, new Range(0, 1024), 'Resize image card height, Pass an integer between 0 to 1024.', true) + ->param('width', 0, new Range(0, 2048), 'Resize image card width, Pass an integer between 0 to 2048.', true) + ->param('height', 0, new Range(0, 2048), 'Resize image card height, Pass an integer between 0 to 2048.', true) ->inject('user') ->inject('project') ->inject('dbForProject') @@ -524,7 +574,8 @@ App::get('/v1/cards/cloud') ->inject('heroes') ->inject('contributors') ->inject('employees') - ->action(function (string $userId, string $mock, int $width, int $height, Document $user, Document $project, Database $dbForProject, Database $dbForConsole, Response $response, array $heroes, array $contributors, array $employees) use ($getUserGitHub) { + ->inject('logger') + ->action(function (string $userId, string $mock, int $width, int $height, Document $user, Document $project, Database $dbForProject, Database $dbForConsole, Response $response, array $heroes, array $contributors, array $employees, ?Logger $logger) use ($getUserGitHub) { $user = Authorization::skip(fn () => $dbForConsole->getDocument('users', $userId)); if ($user->isEmpty() && empty($mock)) { @@ -536,7 +587,7 @@ App::get('/v1/cards/cloud') $email = $user->getAttribute('email', ''); $createdAt = new \DateTime($user->getCreatedAt()); - $gitHub = $getUserGitHub($user->getId(), $project, $dbForProject, $dbForConsole); + $gitHub = $getUserGitHub($user->getId(), $project, $dbForProject, $dbForConsole, $logger); $githubName = $gitHub['name'] ?? ''; $githubId = $gitHub['id'] ?? ''; @@ -598,34 +649,34 @@ App::get('/v1/cards/cloud') $imagePath = $isGolden ? 'front-golden.png' : ($isPlatinum ? 'front-platinum.png' : 'front.png'); - $baseImage = new \Imagick("public/images/cards/cloud/" . $imagePath); + $baseImage = new \Imagick(__DIR__ . '/../../../public/images/cards/cloud/' . $imagePath); if ($isEmployee) { - $image = new Imagick('public/images/cards/cloud/employee.png'); + $image = new Imagick(__DIR__ . '/../../../public/images/cards/cloud/employee.png'); $image->setGravity(Imagick::GRAVITY_CENTER); - $baseImage->compositeImage($image, Imagick::COMPOSITE_OVER, 793, 35); + $baseImage->compositeImage($image, Imagick::COMPOSITE_OVER, 1586, 70); $text = new \ImagickDraw(); $text->setTextAlignment(Imagick::ALIGN_CENTER); - $text->setFont("public/fonts/Inter-Bold.ttf"); + $text->setFont(__DIR__ . '/../../../public/fonts/Inter-Bold.ttf'); $text->setFillColor(new \ImagickPixel('#FFFADF')); - $text->setFontSize(\strlen($employeeNumber) <= 2 ? 54 : 48); + $text->setFontSize(\strlen($employeeNumber) <= 2 ? 108 : 96); $text->setFontWeight(700); $metricsText = $baseImage->queryFontMetrics($text, $employeeNumber); $hashtag = new \ImagickDraw(); $hashtag->setTextAlignment(Imagick::ALIGN_CENTER); - $hashtag->setFont("public/fonts/Inter-Bold.ttf"); + $hashtag->setFont(__DIR__ . '/../../../public/fonts/Inter-Bold.ttf'); $hashtag->setFillColor(new \ImagickPixel('#FFFADF')); - $hashtag->setFontSize(28); + $hashtag->setFontSize(56); $hashtag->setFontWeight(700); $metricsHashtag = $baseImage->queryFontMetrics($hashtag, '#'); - $startX = 898; - $totalWidth = $metricsHashtag['textWidth'] + 12 + $metricsText['textWidth']; + $startX = 1796; + $totalWidth = $metricsHashtag['textWidth'] + 24 + $metricsText['textWidth']; $hashtagX = ($metricsHashtag['textWidth'] / 2); - $textX = $hashtagX + 12 + ($metricsText['textWidth'] / 2); + $textX = $hashtagX + 24 + ($metricsText['textWidth'] / 2); $hashtagX -= $totalWidth / 2; $textX -= $totalWidth / 2; @@ -633,20 +684,20 @@ App::get('/v1/cards/cloud') $hashtagX += $startX; $textX += $startX; - $baseImage->annotateImage($hashtag, $hashtagX, 150, 0, '#'); - $baseImage->annotateImage($text, $textX, 150, 0, $employeeNumber); + $baseImage->annotateImage($hashtag, $hashtagX, 300, 0, '#'); + $baseImage->annotateImage($text, $textX, 300, 0, $employeeNumber); } if ($isContributor) { - $image = new Imagick('public/images/cards/cloud/contributor.png'); + $image = new Imagick(__DIR__ . '/../../../public/images/cards/cloud/contributor.png'); $image->setGravity(Imagick::GRAVITY_CENTER); - $baseImage->compositeImage($image, Imagick::COMPOSITE_OVER, 793, 34); + $baseImage->compositeImage($image, Imagick::COMPOSITE_OVER, 1586, 68); } if ($isHero) { - $image = new Imagick('public/images/cards/cloud/hero.png'); + $image = new Imagick(__DIR__ . '/../../../public/images/cards/cloud/hero.png'); $image->setGravity(Imagick::GRAVITY_CENTER); - $baseImage->compositeImage($image, Imagick::COMPOSITE_OVER, 793, 34); + $baseImage->compositeImage($image, Imagick::COMPOSITE_OVER, 1586, 68); } setlocale(LC_ALL, "en_US.utf8"); @@ -656,7 +707,7 @@ App::get('/v1/cards/cloud') $text = new \ImagickDraw(); $text->setTextAlignment(Imagick::ALIGN_CENTER); - $text->setFont("public/fonts/Poppins-Bold.ttf"); + $text->setFont(__DIR__ . '/../../../public/fonts/Poppins-Bold.ttf'); $text->setFillColor(new \ImagickPixel('#FFFFFF')); if (\strlen($name) > 33) { @@ -664,39 +715,39 @@ App::get('/v1/cards/cloud') } if (\strlen($name) <= 23) { - $text->setFontSize(80); + $text->setFontSize(160); $scalingDown = false; } else { - $text->setFontSize(54); + $text->setFontSize(108); $scalingDown = true; } $text->setFontWeight(700); - $baseImage->annotateImage($text, 512, 477, 0, $name); + $baseImage->annotateImage($text, 1024, 954, 0, $name); $text = new \ImagickDraw(); $text->setTextAlignment(Imagick::ALIGN_CENTER); - $text->setFont("public/fonts/Inter-SemiBold.ttf"); + $text->setFont(__DIR__ . '/../../../public/fonts/Inter-SemiBold.ttf'); $text->setFillColor(new \ImagickPixel($isGolden || $isPlatinum ? '#FFFFFF' : '#FFB9CC')); - $text->setFontSize(27); + $text->setFontSize(54); $text->setFontWeight(600); $text->setTextKerning(1.08); - $baseImage->annotateImage($text, 512, 541, 0, \strtoupper($memberSince)); + $baseImage->annotateImage($text, 1024, 1082, 0, \strtoupper($memberSince)); if (!empty($githubName)) { $text = new \ImagickDraw(); $text->setTextAlignment(Imagick::ALIGN_CENTER); - $text->setFont("public/fonts/Inter-Regular.ttf"); + $text->setFont(__DIR__ . '/../../../public/fonts/Inter-Regular.ttf'); $text->setFillColor(new \ImagickPixel('#FFFFFF')); - $text->setFontSize($scalingDown ? 28 : 32); + $text->setFontSize($scalingDown ? 56 : 64); $text->setFontWeight(400); $metrics = $baseImage->queryFontMetrics($text, $githubName); - $baseImage->annotateImage($text, 512 + 20 + 4, 373 + ($scalingDown ? 2 : 0), 0, $githubName); + $baseImage->annotateImage($text, 1024 + 40 + 8, 746 + ($scalingDown ? 4 : 0), 0, $githubName); - $image = new Imagick('public/images/cards/cloud/github.png'); + $image = new Imagick(__DIR__ . '/../../../public/images/cards/cloud/github.png'); $image->setGravity(Imagick::GRAVITY_CENTER); - $precisionFix = 5; - $baseImage->compositeImage($image, Imagick::COMPOSITE_OVER, 512 - ($metrics['textWidth'] / 2) - 20 - 4, 373 - ($metrics['textHeight'] - $precisionFix)); + $precisionFix = 10; + $baseImage->compositeImage($image, Imagick::COMPOSITE_OVER, 1024 - ($metrics['textWidth'] / 2) - 40 - 8, 746 - ($metrics['textHeight'] - $precisionFix)); } if (!empty($width) || !empty($height)) { @@ -720,8 +771,8 @@ App::get('/v1/cards/cloud-back') ->label('origin', '*') ->param('userId', '', new UID(), 'User ID.', true) ->param('mock', '', new WhiteList(['golden', 'normal', 'platinum']), 'Mocking behaviour.', true) - ->param('width', 0, new Range(0, 1024), 'Resize image card width, Pass an integer between 0 to 1024.', true) - ->param('height', 0, new Range(0, 1024), 'Resize image card height, Pass an integer between 0 to 1024.', true) + ->param('width', 0, new Range(0, 2048), 'Resize image card width, Pass an integer between 0 to 2048.', true) + ->param('height', 0, new Range(0, 2048), 'Resize image card height, Pass an integer between 0 to 2048.', true) ->inject('user') ->inject('project') ->inject('dbForProject') @@ -730,7 +781,8 @@ App::get('/v1/cards/cloud-back') ->inject('heroes') ->inject('contributors') ->inject('employees') - ->action(function (string $userId, string $mock, int $width, int $height, Document $user, Document $project, Database $dbForProject, Database $dbForConsole, Response $response, array $heroes, array $contributors, array $employees) use ($getUserGitHub) { + ->inject('logger') + ->action(function (string $userId, string $mock, int $width, int $height, Document $user, Document $project, Database $dbForProject, Database $dbForConsole, Response $response, array $heroes, array $contributors, array $employees, ?Logger $logger) use ($getUserGitHub) { $user = Authorization::skip(fn () => $dbForConsole->getDocument('users', $userId)); if ($user->isEmpty() && empty($mock)) { @@ -741,7 +793,7 @@ App::get('/v1/cards/cloud-back') $userId = $user->getId(); $email = $user->getAttribute('email', ''); - $gitHub = $getUserGitHub($user->getId(), $project, $dbForProject, $dbForConsole); + $gitHub = $getUserGitHub($user->getId(), $project, $dbForProject, $dbForConsole, $logger); $githubId = $gitHub['id'] ?? ''; $isHero = \array_key_exists($email, $heroes); @@ -763,18 +815,18 @@ App::get('/v1/cards/cloud-back') $imagePath = $isGolden ? 'back-golden.png' : ($isPlatinum ? 'back-platinum.png' : 'back.png'); - $baseImage = new \Imagick("public/images/cards/cloud/" . $imagePath); + $baseImage = new \Imagick(__DIR__ . '/../../../public/images/cards/cloud/' . $imagePath); setlocale(LC_ALL, "en_US.utf8"); $userId = \iconv("utf-8", "ascii//TRANSLIT", $userId); $text = new \ImagickDraw(); $text->setTextAlignment(Imagick::ALIGN_CENTER); - $text->setFont("public/fonts/SourceCodePro-Regular.ttf"); + $text->setFont(__DIR__ . '/../../../public/fonts/SourceCodePro-Regular.ttf'); $text->setFillColor(new \ImagickPixel($isGolden ? '#664A1E' : ($isPlatinum ? '#555555' : '#E8E9F0'))); - $text->setFontSize(28); + $text->setFontSize(56); $text->setFontWeight(400); - $baseImage->annotateImage($text, 512, 596, 0, $userId); + $baseImage->annotateImage($text, 1024, 1192, 0, $userId); if (!empty($width) || !empty($height)) { $baseImage->resizeImage($width, $height, Imagick::FILTER_LANCZOS, 1); @@ -807,7 +859,8 @@ App::get('/v1/cards/cloud-og') ->inject('heroes') ->inject('contributors') ->inject('employees') - ->action(function (string $userId, string $mock, int $width, int $height, Document $user, Document $project, Database $dbForProject, Database $dbForConsole, Response $response, array $heroes, array $contributors, array $employees) use ($getUserGitHub) { + ->inject('logger') + ->action(function (string $userId, string $mock, int $width, int $height, Document $user, Document $project, Database $dbForProject, Database $dbForConsole, Response $response, array $heroes, array $contributors, array $employees, ?Logger $logger) use ($getUserGitHub) { $user = Authorization::skip(fn () => $dbForConsole->getDocument('users', $userId)); if ($user->isEmpty() && empty($mock)) { @@ -823,7 +876,7 @@ App::get('/v1/cards/cloud-og') $email = $user->getAttribute('email', ''); $createdAt = new \DateTime($user->getCreatedAt()); - $gitHub = $getUserGitHub($user->getId(), $project, $dbForProject, $dbForConsole); + $gitHub = $getUserGitHub($user->getId(), $project, $dbForProject, $dbForConsole, $logger); $githubName = $gitHub['name'] ?? ''; $githubId = $gitHub['id'] ?? ''; @@ -889,15 +942,15 @@ App::get('/v1/cards/cloud-og') $isPlatinum = $isGolden ? false : $isPlatinum; $memberSince = \strtoupper('Member since ' . $createdAt->format('M') . ' ' . $createdAt->format('d') . ', ' . $createdAt->format('o')); - $baseImage = new \Imagick("public/images/cards/cloud/og-background{$bgVariation}.png"); + $baseImage = new \Imagick(__DIR__ . "/../../../public/images/cards/cloud/og-background{$bgVariation}.png"); $cardType = $isGolden ? '-golden' : ($isPlatinum ? '-platinum' : ''); - $image = new Imagick("public/images/cards/cloud/og-card{$cardType}{$cardVariation}.png"); + $image = new Imagick(__DIR__ . "/../../../public/images/cards/cloud/og-card{$cardType}{$cardVariation}.png"); $baseImage->compositeImage($image, Imagick::COMPOSITE_OVER, 1008 / 2 - $image->getImageWidth() / 2, 1008 / 2 - $image->getImageHeight() / 2); - $imageLogo = new Imagick("public/images/cards/cloud/og-background-logo.png"); - $imageShadow = new Imagick("public/images/cards/cloud/og-shadow{$cardType}.png"); + $imageLogo = new Imagick(__DIR__ . '/../../../public/images/cards/cloud/og-background-logo.png'); + $imageShadow = new Imagick(__DIR__ . "/../../../public/images/cards/cloud/og-shadow{$cardType}.png"); if ($cardVariation === '1') { $baseImage->compositeImage($imageLogo, Imagick::COMPOSITE_OVER, 32, 1008 - $imageLogo->getImageHeight() - 32); $baseImage->compositeImage($imageShadow, Imagick::COMPOSITE_OVER, -450, 700); @@ -911,19 +964,19 @@ App::get('/v1/cards/cloud-og') if ($isEmployee) { $file = $cardVariation === '3' ? 'employee-skew.png' : 'employee.png'; - $image = new Imagick('public/images/cards/cloud/' . $file); + $image = new Imagick(__DIR__ . '/../../../public/images/cards/cloud/' . $file); $image->setGravity(Imagick::GRAVITY_CENTER); $hashtag = new \ImagickDraw(); $hashtag->setTextAlignment(Imagick::ALIGN_LEFT); - $hashtag->setFont("public/fonts/Inter-Bold.ttf"); + $hashtag->setFont(__DIR__ . '/../../../public/fonts/Inter-Bold.ttf'); $hashtag->setFillColor(new \ImagickPixel('#FFFADF')); $hashtag->setFontSize(20); $hashtag->setFontWeight(700); $text = new \ImagickDraw(); $text->setTextAlignment(Imagick::ALIGN_LEFT); - $text->setFont("public/fonts/Inter-Bold.ttf"); + $text->setFont(__DIR__ . '/../../../public/fonts/Inter-Bold.ttf'); $text->setFillColor(new \ImagickPixel('#FFFADF')); $text->setFontSize(\strlen($employeeNumber) <= 1 ? 36 : 28); $text->setFontWeight(700); @@ -995,7 +1048,7 @@ App::get('/v1/cards/cloud-og') if ($isContributor) { $file = $cardVariation === '3' ? 'contributor-skew.png' : 'contributor.png'; - $image = new Imagick('public/images/cards/cloud/' . $file); + $image = new Imagick(__DIR__ . '/../../../public/images/cards/cloud/' . $file); $image->setGravity(Imagick::GRAVITY_CENTER); if ($cardVariation === '1') { @@ -1013,13 +1066,13 @@ App::get('/v1/cards/cloud-og') if ($isHero) { $file = $cardVariation === '3' ? 'hero-skew.png' : 'hero.png'; - $image = new Imagick('public/images/cards/cloud/' . $file); + $image = new Imagick(__DIR__ . '/../../../public/images/cards/cloud/' . $file); $image->setGravity(Imagick::GRAVITY_CENTER); if ($cardVariation === '1') { $image->resizeImage(120, 120, Imagick::FILTER_LANCZOS, 1); $image->rotateImage(new ImagickPixel('#00000000'), -20); - $baseImage->compositeImage($image, Imagick::COMPOSITE_OVER, 615, 190); + $baseImage->compositeImage($image, Imagick::COMPOSITE_OVER, 612, 203); } elseif ($cardVariation === '2') { $image->resizeImage(120, 120, Imagick::FILTER_LANCZOS, 1); $image->rotateImage(new ImagickPixel('#00000000'), 30); @@ -1036,7 +1089,7 @@ App::get('/v1/cards/cloud-og') $textName = new \ImagickDraw(); $textName->setTextAlignment(Imagick::ALIGN_CENTER); - $textName->setFont("public/fonts/Poppins-Bold.ttf"); + $textName->setFont(__DIR__ . '/../../../public/fonts/Poppins-Bold.ttf'); $textName->setFillColor(new \ImagickPixel('#FFFFFF')); if (\strlen($name) > 33) { @@ -1073,7 +1126,7 @@ App::get('/v1/cards/cloud-og') $textMember = new \ImagickDraw(); $textMember->setTextAlignment(Imagick::ALIGN_CENTER); - $textMember->setFont("public/fonts/Inter-Medium.ttf"); + $textMember->setFont(__DIR__ . '/../../../public/fonts/Inter-Medium.ttf'); $textMember->setFillColor(new \ImagickPixel($isGolden || $isPlatinum ? '#FFFFFF' : '#FFB9CC')); $textMember->setFontWeight(500); $textMember->setTextKerning(1.12); @@ -1106,7 +1159,7 @@ App::get('/v1/cards/cloud-og') if (!empty($githubName)) { $text = new \ImagickDraw(); $text->setTextAlignment(Imagick::ALIGN_LEFT); - $text->setFont("public/fonts/Inter-Regular.ttf"); + $text->setFont(__DIR__ . '/../../../public/fonts/Inter-Regular.ttf'); $text->setFillColor(new \ImagickPixel('#FFFFFF')); $text->setFontSize($scalingDown ? 22 : 26); $text->setFontWeight(400); @@ -1117,7 +1170,7 @@ App::get('/v1/cards/cloud-og') $group = new Imagick(); $groupWidth = $metrics['textWidth'] + 32 + 4; $group->newImage($groupWidth, $metrics['textHeight'] + ($scalingDown ? 10 : 0), '#00000000'); - $image = new Imagick('public/images/cards/cloud/github.png'); + $image = new Imagick(__DIR__ . '/../../../public/images/cards/cloud/github.png'); $image->setGravity(Imagick::GRAVITY_CENTER); $image->resizeImage(32, 32, Imagick::FILTER_LANCZOS, 1); $precisionFix = 5; @@ -1135,7 +1188,7 @@ App::get('/v1/cards/cloud-og') $group = new Imagick(); $groupWidth = $metrics['textWidth'] + 32 + 4; $group->newImage($groupWidth, $metrics['textHeight'] + ($scalingDown ? 10 : 0), '#00000000'); - $image = new Imagick('public/images/cards/cloud/github.png'); + $image = new Imagick(__DIR__ . '/../../../public/images/cards/cloud/github.png'); $image->setGravity(Imagick::GRAVITY_CENTER); $image->resizeImage(32, 32, Imagick::FILTER_LANCZOS, 1); $precisionFix = 5; @@ -1155,7 +1208,7 @@ App::get('/v1/cards/cloud-og') $text->annotation(325 + 15 + 2, 630, $githubName); $metrics = $baseImage->queryFontMetrics($text, $githubName); - $image = new Imagick('public/images/cards/cloud/github-skew.png'); + $image = new Imagick(__DIR__ . '/../../../public/images/cards/cloud/github-skew.png'); $image->setGravity(Imagick::GRAVITY_CENTER); $baseImage->compositeImage($image, Imagick::COMPOSITE_OVER, 512 - ($metrics['textWidth'] / 2), 510 + \strlen($githubName) * 1.3); diff --git a/public/images/cards/cloud/back-golden.png b/public/images/cards/cloud/back-golden.png index 68f1114c45..4a1076fa30 100644 Binary files a/public/images/cards/cloud/back-golden.png and b/public/images/cards/cloud/back-golden.png differ diff --git a/public/images/cards/cloud/back-platinum.png b/public/images/cards/cloud/back-platinum.png index cd56d227a2..16e09e80aa 100644 Binary files a/public/images/cards/cloud/back-platinum.png and b/public/images/cards/cloud/back-platinum.png differ diff --git a/public/images/cards/cloud/back.png b/public/images/cards/cloud/back.png index bb8e5b0b29..9e3cc84d8e 100644 Binary files a/public/images/cards/cloud/back.png and b/public/images/cards/cloud/back.png differ diff --git a/public/images/cards/cloud/contributor.png b/public/images/cards/cloud/contributor.png index 203f0f18e8..8a1649f0d5 100644 Binary files a/public/images/cards/cloud/contributor.png and b/public/images/cards/cloud/contributor.png differ diff --git a/public/images/cards/cloud/employee.png b/public/images/cards/cloud/employee.png index 587c1feb84..45e9cfb1f4 100644 Binary files a/public/images/cards/cloud/employee.png and b/public/images/cards/cloud/employee.png differ diff --git a/public/images/cards/cloud/front-golden.png b/public/images/cards/cloud/front-golden.png index 6f7c251de4..b66f628bb3 100644 Binary files a/public/images/cards/cloud/front-golden.png and b/public/images/cards/cloud/front-golden.png differ diff --git a/public/images/cards/cloud/front-platinum.png b/public/images/cards/cloud/front-platinum.png index 0bea38e9f3..e3c4843c0f 100644 Binary files a/public/images/cards/cloud/front-platinum.png and b/public/images/cards/cloud/front-platinum.png differ diff --git a/public/images/cards/cloud/front.png b/public/images/cards/cloud/front.png index 19dcad74b7..e427279dae 100644 Binary files a/public/images/cards/cloud/front.png and b/public/images/cards/cloud/front.png differ diff --git a/public/images/cards/cloud/github.png b/public/images/cards/cloud/github.png index c05c9b8f32..deb0a759d3 100644 Binary files a/public/images/cards/cloud/github.png and b/public/images/cards/cloud/github.png differ diff --git a/public/images/cards/cloud/hero.png b/public/images/cards/cloud/hero.png index 811df0f8cd..da36cac250 100644 Binary files a/public/images/cards/cloud/hero.png and b/public/images/cards/cloud/hero.png differ