+17
.env.example
+17
.env.example
···
+2
-1
composer.json
+2
-1
composer.json
+122
-1
composer.lock
+122
-1
composer.lock
······+"url": "https://api.github.com/repos/lcobucci/jwt/zipball/bb3e9f21e4196e8afc41def81ef649c164bca25e",···+"url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d",
+69
config.php.example
+69
config.php.example
···+define('DB_LOCATION', __DIR__.'/data/sbs.db'); # or something like that. not in the same folder! it is ass in source control!!!+define('FRONTPAGE_FEED', "at://did:plc:ffkgesg3jsv2j7aagkzrtcvt/app.bsky.feed.generator/aaagllxbcbsje");+# ideally pick a DEFAULT_PDS that has open registration, since this will be used to allow people to+define('FAVORITE_FEEDS', [ // list of feeds you want to display in the sidebar to users not logged in
+86
-67
index.php
+86
-67
index.php
······+Flight::set('userAuth', array_key_exists('sbs_'.SITE_DOMAIN, $_SESSION) ? $_SESSION['sbs_'.SITE_DOMAIN] : null);+Flight::set('userPds', array_key_exists('sbs_'.SITE_DOMAIN.'_pds', $_SESSION) ? $_SESSION['sbs_'.SITE_DOMAIN.'_pds'] : null);+Flight::set('userInfo', array_key_exists('sbs_'.SITE_DOMAIN.'_userinfo', $_SESSION) ? $_SESSION['sbs_'.SITE_DOMAIN.'_userinfo'] : null);···'setTheme' => array_key_exists('sbs_theme', $_COOKIE) ? $_COOKIE['sbs_theme'] : DEFAULT_THEME,···-// https://shimaenaga.veryroundbird.house/oauth/authorize?client_id=https%3A%2F%2Ftangled.org%2Foauth%2Fclient-metadata.json&request_uri=urn%3Aietf%3Aparams%3Aoauth%3Arequest_uri%3Areq-2399ff42af66498132ebf8de809254b7
+40
-2
lib/bskyProvider.php
+40
-2
lib/bskyProvider.php
···class BskyProvider extends OAuth2Provider implements \chillerlan\OAuth\Core\PAR, \chillerlan\OAuth\Core\PKCE {···+throw new ProviderException(sprintf('PAR error: "%s" (%s)', $json['error'], $json['error_description']));+throw new ProviderException(sprintf('PAR request error: (HTTP/%s)', $status)); // @codeCoverageIgnore+$url = QueryUtil::merge($this->authorizationURL, $this->getParAuthorizationURLRequestParams($json));
+1
lib/bskyToucher.php
+1
lib/bskyToucher.php
+2
pages/privacy.md
+2
pages/privacy.md
···smallbird social is meant to run as lightweight as possible and stores no data on its own server. if you are using a veryroundbird.house pds, your data and activity is on *that* server, but it only stores what's necessary to, you know, interact with the atproto ecosystem. so, user ID information, your posts, follows, likes, etc.+the server also caches publicly-available post and user data to speed up requests. none of this data is kept longer than, like, a few days unless it's requested again.there is some minimal tracking via goatcounter, but your data will never touch advertisers and it doesn't track individual users; i mostly just want to know what the site usage numbers are and where people found it from.
+5
pages/terms.md
+5
pages/terms.md
···+i reserve the right to block any IPs that are hitting the site too hard. i also reserve the right to end service at any time if for some reason it gets too hard to maintain or something like that. some features may be jank, broken, or missing due to the limitations of my approach and time.
-17
public/.env.example
-17
public/.env.example
···
-15
public/client-metadata.json
-15
public/client-metadata.json
···
-69
public/config.php.example
-69
public/config.php.example
···-define('DB_LOCATION', __DIR__.'/data/sbs.db'); # or something like that. not in the same folder! it is ass in source control!!!-define('FRONTPAGE_FEED', "at://did:plc:ffkgesg3jsv2j7aagkzrtcvt/app.bsky.feed.generator/aaagllxbcbsje");-# ideally pick a DEFAULT_PDS that has open registration, since this will be used to allow people to-define('FAVORITE_FEEDS', [ // list of feeds you want to display in the sidebar to users not logged in
+4
templates/layout.latte
+4
templates/layout.latte
+1
-3
vendor/chillerlan/php-oauth/src/Core/PARTrait.php
+1
-3
vendor/chillerlan/php-oauth/src/Core/PARTrait.php
···
+2
vendor/composer/autoload_psr4.php
+2
vendor/composer/autoload_psr4.php
···'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-factory/src', $vendorDir . '/psr/http-message/src'),
+10
vendor/composer/autoload_static.php
+10
vendor/composer/autoload_static.php
············
+127
vendor/composer/installed.json
+127
vendor/composer/installed.json
···+"url": "https://api.github.com/repos/lcobucci/jwt/zipball/bb3e9f21e4196e8afc41def81ef649c164bca25e",···+"url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d",
+20
-2
vendor/composer/installed.php
+20
-2
vendor/composer/installed.php
············
+27
vendor/lcobucci/jwt/LICENSE
+27
vendor/lcobucci/jwt/LICENSE
···
+63
vendor/lcobucci/jwt/composer.json
+63
vendor/lcobucci/jwt/composer.json
···
+85
vendor/lcobucci/jwt/src/Builder.php
+85
vendor/lcobucci/jwt/src/Builder.php
···
+14
vendor/lcobucci/jwt/src/ClaimsFormatter.php
+14
vendor/lcobucci/jwt/src/ClaimsFormatter.php
+213
vendor/lcobucci/jwt/src/Configuration.php
+213
vendor/lcobucci/jwt/src/Configuration.php
···+/** @deprecated Deprecated since v5.5, please use {@see self::withValidationConstraints()} instead */
+29
vendor/lcobucci/jwt/src/Decoder.php
+29
vendor/lcobucci/jwt/src/Decoder.php
···
+27
vendor/lcobucci/jwt/src/Encoder.php
+27
vendor/lcobucci/jwt/src/Encoder.php
···
+21
vendor/lcobucci/jwt/src/Encoding/CannotDecodeContent.php
+21
vendor/lcobucci/jwt/src/Encoding/CannotDecodeContent.php
···
+16
vendor/lcobucci/jwt/src/Encoding/CannotEncodeContent.php
+16
vendor/lcobucci/jwt/src/Encoding/CannotEncodeContent.php
···
+37
vendor/lcobucci/jwt/src/Encoding/ChainedFormatter.php
+37
vendor/lcobucci/jwt/src/Encoding/ChainedFormatter.php
···
+56
vendor/lcobucci/jwt/src/Encoding/JoseEncoder.php
+56
vendor/lcobucci/jwt/src/Encoding/JoseEncoder.php
···+return json_encode($data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_THROW_ON_ERROR);
+36
vendor/lcobucci/jwt/src/Encoding/MicrosecondBasedDateConversion.php
+36
vendor/lcobucci/jwt/src/Encoding/MicrosecondBasedDateConversion.php
···
+29
vendor/lcobucci/jwt/src/Encoding/UnifyAudience.php
+29
vendor/lcobucci/jwt/src/Encoding/UnifyAudience.php
···
+32
vendor/lcobucci/jwt/src/Encoding/UnixTimestampDates.php
+32
vendor/lcobucci/jwt/src/Encoding/UnixTimestampDates.php
···
+10
vendor/lcobucci/jwt/src/Exception.php
+10
vendor/lcobucci/jwt/src/Exception.php
+71
vendor/lcobucci/jwt/src/JwtFacade.php
+71
vendor/lcobucci/jwt/src/JwtFacade.php
···
+22
vendor/lcobucci/jwt/src/Parser.php
+22
vendor/lcobucci/jwt/src/Parser.php
···
+36
vendor/lcobucci/jwt/src/Signer/Blake2b.php
+36
vendor/lcobucci/jwt/src/Signer/Blake2b.php
···
+15
vendor/lcobucci/jwt/src/Signer/CannotSignPayload.php
+15
vendor/lcobucci/jwt/src/Signer/CannotSignPayload.php
···
+25
vendor/lcobucci/jwt/src/Signer/Ecdsa/ConversionFailed.php
+25
vendor/lcobucci/jwt/src/Signer/Ecdsa/ConversionFailed.php
···
+148
vendor/lcobucci/jwt/src/Signer/Ecdsa/MultibyteStringConverter.php
+148
vendor/lcobucci/jwt/src/Signer/Ecdsa/MultibyteStringConverter.php
···+* @link https://github.com/web-token/jwt-framework/blob/v1.2/src/Component/Core/Util/ECSignature.php+if (self::readAsn1Content($message, $position, self::BYTE_SIZE) === self::ASN1_LENGTH_2BYTES) {+$points = hex2bin(str_pad($pointR, $length, '0', STR_PAD_LEFT) . str_pad($pointS, $length, '0', STR_PAD_LEFT));
+31
vendor/lcobucci/jwt/src/Signer/Ecdsa/Sha256.php
+31
vendor/lcobucci/jwt/src/Signer/Ecdsa/Sha256.php
···
+31
vendor/lcobucci/jwt/src/Signer/Ecdsa/Sha384.php
+31
vendor/lcobucci/jwt/src/Signer/Ecdsa/Sha384.php
···
+33
vendor/lcobucci/jwt/src/Signer/Ecdsa/Sha512.php
+33
vendor/lcobucci/jwt/src/Signer/Ecdsa/Sha512.php
···
+40
vendor/lcobucci/jwt/src/Signer/Ecdsa/SignatureConverter.php
+40
vendor/lcobucci/jwt/src/Signer/Ecdsa/SignatureConverter.php
···
+67
vendor/lcobucci/jwt/src/Signer/Ecdsa.php
+67
vendor/lcobucci/jwt/src/Signer/Ecdsa.php
···+* Returns the length of each point in the signature, so that we can calculate and verify R and S points properly
+36
vendor/lcobucci/jwt/src/Signer/Eddsa.php
+36
vendor/lcobucci/jwt/src/Signer/Eddsa.php
···
+24
vendor/lcobucci/jwt/src/Signer/Hmac/Sha256.php
+24
vendor/lcobucci/jwt/src/Signer/Hmac/Sha256.php
···
+24
vendor/lcobucci/jwt/src/Signer/Hmac/Sha384.php
+24
vendor/lcobucci/jwt/src/Signer/Hmac/Sha384.php
···
+24
vendor/lcobucci/jwt/src/Signer/Hmac/Sha512.php
+24
vendor/lcobucci/jwt/src/Signer/Hmac/Sha512.php
···
+44
vendor/lcobucci/jwt/src/Signer/Hmac.php
+44
vendor/lcobucci/jwt/src/Signer/Hmac.php
···
+47
vendor/lcobucci/jwt/src/Signer/InvalidKeyProvided.php
+47
vendor/lcobucci/jwt/src/Signer/InvalidKeyProvided.php
···
+20
vendor/lcobucci/jwt/src/Signer/Key/FileCouldNotBeRead.php
+20
vendor/lcobucci/jwt/src/Signer/Key/FileCouldNotBeRead.php
···
+98
vendor/lcobucci/jwt/src/Signer/Key/InMemory.php
+98
vendor/lcobucci/jwt/src/Signer/Key/InMemory.php
···
+12
vendor/lcobucci/jwt/src/Signer/Key.php
+12
vendor/lcobucci/jwt/src/Signer/Key.php
+133
vendor/lcobucci/jwt/src/Signer/OpenSSL.php
+133
vendor/lcobucci/jwt/src/Signer/OpenSSL.php
···
+21
vendor/lcobucci/jwt/src/Signer/Rsa/Sha256.php
+21
vendor/lcobucci/jwt/src/Signer/Rsa/Sha256.php
···
+21
vendor/lcobucci/jwt/src/Signer/Rsa/Sha384.php
+21
vendor/lcobucci/jwt/src/Signer/Rsa/Sha384.php
···
+21
vendor/lcobucci/jwt/src/Signer/Rsa/Sha512.php
+21
vendor/lcobucci/jwt/src/Signer/Rsa/Sha512.php
···
+35
vendor/lcobucci/jwt/src/Signer/Rsa.php
+35
vendor/lcobucci/jwt/src/Signer/Rsa.php
···
+43
vendor/lcobucci/jwt/src/Signer.php
+43
vendor/lcobucci/jwt/src/Signer.php
···
+98
vendor/lcobucci/jwt/src/SodiumBase64Polyfill.php
+98
vendor/lcobucci/jwt/src/SodiumBase64Polyfill.php
···
+167
vendor/lcobucci/jwt/src/Token/Builder.php
+167
vendor/lcobucci/jwt/src/Token/Builder.php
···+public function __construct(private readonly Encoder $encoder, private readonly ClaimsFormatter $claimFormatter)
+37
vendor/lcobucci/jwt/src/Token/DataSet.php
+37
vendor/lcobucci/jwt/src/Token/DataSet.php
···
+41
vendor/lcobucci/jwt/src/Token/InvalidTokenStructure.php
+41
vendor/lcobucci/jwt/src/Token/InvalidTokenStructure.php
···
+180
vendor/lcobucci/jwt/src/Token/Parser.php
+180
vendor/lcobucci/jwt/src/Token/Parser.php
···+* @throws InvalidTokenStructure When parsed content isn't an array or contains non-parseable dates.+$normalizedTimestamp = number_format((float) $timestamp, self::MICROSECOND_PRECISION, '.', '');
+85
vendor/lcobucci/jwt/src/Token/Plain.php
+85
vendor/lcobucci/jwt/src/Token/Plain.php
···
+21
vendor/lcobucci/jwt/src/Token/RegisteredClaimGiven.php
+21
vendor/lcobucci/jwt/src/Token/RegisteredClaimGiven.php
···+private const DEFAULT_MESSAGE = 'Builder#withClaim() is meant to be used for non-registered claims, '
+77
vendor/lcobucci/jwt/src/Token/RegisteredClaims.php
+77
vendor/lcobucci/jwt/src/Token/RegisteredClaims.php
···
+31
vendor/lcobucci/jwt/src/Token/Signature.php
+31
vendor/lcobucci/jwt/src/Token/Signature.php
···
+15
vendor/lcobucci/jwt/src/Token/UnsupportedHeaderFound.php
+15
vendor/lcobucci/jwt/src/Token/UnsupportedHeaderFound.php
···
+65
vendor/lcobucci/jwt/src/Token.php
+65
vendor/lcobucci/jwt/src/Token.php
···
+27
vendor/lcobucci/jwt/src/UnencryptedToken.php
+27
vendor/lcobucci/jwt/src/UnencryptedToken.php
···
+18
vendor/lcobucci/jwt/src/Validation/Constraint/CannotValidateARegisteredClaim.php
+18
vendor/lcobucci/jwt/src/Validation/Constraint/CannotValidateARegisteredClaim.php
···+final class CannotValidateARegisteredClaim extends InvalidArgumentException implements Exception+'The claim "' . $claim . '" is a registered claim, another constraint must be used to validate its value',
+35
vendor/lcobucci/jwt/src/Validation/Constraint/HasClaim.php
+35
vendor/lcobucci/jwt/src/Validation/Constraint/HasClaim.php
···+throw ConstraintViolation::error('The token does not have the claim "' . $this->claim . '"', $this);
+42
vendor/lcobucci/jwt/src/Validation/Constraint/HasClaimWithValue.php
+42
vendor/lcobucci/jwt/src/Validation/Constraint/HasClaimWithValue.php
···+public function __construct(private readonly string $claim, private readonly mixed $expectedValue)+throw ConstraintViolation::error('The token does not have the claim "' . $this->claim . '"', $this);
+26
vendor/lcobucci/jwt/src/Validation/Constraint/IdentifiedBy.php
+26
vendor/lcobucci/jwt/src/Validation/Constraint/IdentifiedBy.php
···
+30
vendor/lcobucci/jwt/src/Validation/Constraint/IssuedBy.php
+30
vendor/lcobucci/jwt/src/Validation/Constraint/IssuedBy.php
···
+15
vendor/lcobucci/jwt/src/Validation/Constraint/LeewayCannotBeNegative.php
+15
vendor/lcobucci/jwt/src/Validation/Constraint/LeewayCannotBeNegative.php
···
+67
vendor/lcobucci/jwt/src/Validation/Constraint/LooseValidAt.php
+67
vendor/lcobucci/jwt/src/Validation/Constraint/LooseValidAt.php
···
+26
vendor/lcobucci/jwt/src/Validation/Constraint/PermittedFor.php
+26
vendor/lcobucci/jwt/src/Validation/Constraint/PermittedFor.php
···
+26
vendor/lcobucci/jwt/src/Validation/Constraint/RelatedTo.php
+26
vendor/lcobucci/jwt/src/Validation/Constraint/RelatedTo.php
···
+32
vendor/lcobucci/jwt/src/Validation/Constraint/SignedWith.php
+32
vendor/lcobucci/jwt/src/Validation/Constraint/SignedWith.php
···
+38
vendor/lcobucci/jwt/src/Validation/Constraint/SignedWithOneInSet.php
+38
vendor/lcobucci/jwt/src/Validation/Constraint/SignedWithOneInSet.php
···
+47
vendor/lcobucci/jwt/src/Validation/Constraint/SignedWithUntilDate.php
+47
vendor/lcobucci/jwt/src/Validation/Constraint/SignedWithUntilDate.php
···
+84
vendor/lcobucci/jwt/src/Validation/Constraint/StrictValidAt.php
+84
vendor/lcobucci/jwt/src/Validation/Constraint/StrictValidAt.php
···
+12
vendor/lcobucci/jwt/src/Validation/Constraint.php
+12
vendor/lcobucci/jwt/src/Validation/Constraint.php
+24
vendor/lcobucci/jwt/src/Validation/ConstraintViolation.php
+24
vendor/lcobucci/jwt/src/Validation/ConstraintViolation.php
···
+11
vendor/lcobucci/jwt/src/Validation/NoConstraintsGiven.php
+11
vendor/lcobucci/jwt/src/Validation/NoConstraintsGiven.php
+48
vendor/lcobucci/jwt/src/Validation/RequiredConstraintsViolated.php
+48
vendor/lcobucci/jwt/src/Validation/RequiredConstraintsViolated.php
···
+8
vendor/lcobucci/jwt/src/Validation/SignedWith.php
+8
vendor/lcobucci/jwt/src/Validation/SignedWith.php
+8
vendor/lcobucci/jwt/src/Validation/ValidAt.php
+8
vendor/lcobucci/jwt/src/Validation/ValidAt.php
+56
vendor/lcobucci/jwt/src/Validation/Validator.php
+56
vendor/lcobucci/jwt/src/Validation/Validator.php
···
+20
vendor/lcobucci/jwt/src/Validator.php
+20
vendor/lcobucci/jwt/src/Validator.php
···
+11
vendor/psr/clock/CHANGELOG.md
+11
vendor/psr/clock/CHANGELOG.md
+19
vendor/psr/clock/LICENSE
+19
vendor/psr/clock/LICENSE
···
+61
vendor/psr/clock/README.md
+61
vendor/psr/clock/README.md
···+You can then pick one of the [implementations][implementation-url] of the interface to get a clock.+Don't forget to add `psr/clock-implementation` to your `composer.json`s `provides`-section like this:
+21
vendor/psr/clock/composer.json
+21
vendor/psr/clock/composer.json
···
+13
vendor/psr/clock/src/ClockInterface.php
+13
vendor/psr/clock/src/ClockInterface.php