friendship ended with social-app. php is my new best friend
1<?php 2/** 3 * Class Gitea 4 * 5 * @created 08.04.2024 6 * @author smiley <smiley@chillerlan.net> 7 * @copyright 2024 smiley 8 * @license MIT 9 * 10 * @noinspection PhpUnused 11 */ 12declare(strict_types=1); 13 14namespace chillerlan\OAuth\Providers; 15 16use chillerlan\OAuth\Core\{AuthenticatedUser, CSRFToken, OAuth2Provider, PKCE, PKCETrait, TokenRefresh, UserInfo}; 17use function sprintf; 18 19/** 20 * Gitea OAuth2 21 * 22 * @link https://docs.gitea.com/development/oauth2-provider 23 */ 24class Gitea extends OAuth2Provider implements CSRFToken, PKCE, TokenRefresh, UserInfo{ 25 use PKCETrait; 26 27 public const IDENTIFIER = 'GITEA'; 28 29 public const SCOPE_ACTIVITYPUB = 'activitypub'; 30 public const SCOPE_ACTIVITYPUB_READ = 'read:activitypub'; 31 public const SCOPE_ACTIVITYPUB_WRITE = 'write:activitypub'; 32 public const SCOPE_ADMIN = 'admin'; 33 public const SCOPE_ADMIN_READ = 'read:admin'; 34 public const SCOPE_ADMIN_WRITE = 'write:admin'; 35 public const SCOPE_ISSUE = 'issue'; 36 public const SCOPE_ISSUE_READ = 'read:issue'; 37 public const SCOPE_ISSUE_WRITE = 'write:issue'; 38# public const SCOPE_MISC = 'misc'; 39# public const SCOPE_MISC_READ = 'read:misc'; 40# public const SCOPE_MISC_WRITE = 'write:misc'; 41 public const SCOPE_NOTIFICATION = 'notification'; 42 public const SCOPE_NOTIFICATION_READ = 'read:notification'; 43 public const SCOPE_NOTIFICATION_WRITE = 'write:notification'; 44 public const SCOPE_ORGANIZATION = 'organization'; 45 public const SCOPE_ORGANIZATION_READ = 'read:organization'; 46 public const SCOPE_ORGANIZATION_WRITE = 'write:organization'; 47 public const SCOPE_PACKAGE = 'package'; 48 public const SCOPE_PACKAGE_READ = 'read:package'; 49 public const SCOPE_PACKAGE_WRITE = 'write:package'; 50 public const SCOPE_REPOSITORY = 'repository'; 51 public const SCOPE_REPOSITORY_READ = 'read:repository'; 52 public const SCOPE_REPOSITORY_WRITE = 'write:repository'; 53 public const SCOPE_USER = 'user'; 54 public const SCOPE_USER_READ = 'read:user'; 55 public const SCOPE_USER_WRITE = 'write:user'; 56 57 public const DEFAULT_SCOPES = [ 58 self::SCOPE_REPOSITORY_READ, 59 self::SCOPE_USER_READ, 60 ]; 61 62 protected string $authorizationURL = 'https://gitea.com/login/oauth/authorize'; 63 protected string $accessTokenURL = 'https://gitea.com/login/oauth/access_token'; 64 protected string $apiURL = 'https://gitea.com/api'; 65 protected string|null $apiDocs = 'https://docs.gitea.com/api/1.20/'; 66 protected string|null $applicationURL = 'https://gitea.com/user/settings/applications'; 67 protected string|null $userRevokeURL = 'https://gitea.com/user/settings/applications'; 68 69 /** @codeCoverageIgnore */ 70 public function me():AuthenticatedUser{ 71 $json = $this->getMeResponseData('/v1/user'); 72 73 $userdata = [ 74 'data' => $json, 75 'avatar' => $json['avatar_url'], 76 'handle' => $json['login'], 77 'displayName' => $json['full_name'], 78 'email' => $json['email'], 79 'id' => $json['id'], 80 'url' => sprintf('https://gitea.com/%s', $json['login']), 81 ]; 82 83 return new AuthenticatedUser($userdata); 84 } 85 86}