瀏覽代碼

Merge pull request #3993 from pixelfed/staging

Staging
daniel 2 年之前
父節點
當前提交
092c3ecaca

+ 7 - 0
.ddev/commands/redis/redis-cli

@@ -0,0 +1,7 @@
+#!/bin/bash
+#ddev-generated
+## Description: Run redis-cli inside the redis container
+## Usage: redis-cli [flags] [args]
+## Example: "redis-cli KEYS *" or "ddev redis-cli INFO" or "ddev redis-cli --version"
+
+redis-cli -p 6379 -h redis $@

+ 32 - 0
.ddev/config.yaml

@@ -0,0 +1,32 @@
+type: laravel
+docroot: public
+php_version: "8.1"
+webserver_type: nginx-fpm
+database:
+  type: mariadb
+  version: "10.4"
+disable_settings_management: true
+web_environment:
+  - DB_CONNECTION=mysql
+  - DB_HOST=ddev-pixelfed-db
+  - DB_DATABASE=db
+  - DB_USERNAME=db
+  - DB_PASSWORD=db
+  - REDIS_HOST=ddev-pixelfed-redis
+  - MAIL_DRIVER=smtp
+  - MAIL_HOST=localhost
+  - MAIL_PORT=1025
+  - MAIL_USERNAME=null
+  - MAIL_PASSWORD=null
+  - MAIL_ENCRYPTION=null
+  - APP_KEY=placeholder
+  - APP_NAME=PixelfedTest
+  - APP_ENV=local
+  - APP_KEY=base64:lwX95GbNWX3XsucdMe0XwtOKECta3h/B+p9NbH2jd0E=
+  - APP_DEBUG=true
+  - APP_URL=https://pixelfed.ddev.site
+  - APP_DOMAIN=pixelfed.ddev.site
+  - ADMIN_DOMAIN=pixelfed.ddev.site
+  - SESSION_DOMAIN=pixelfed.ddev.site
+  - "TRUST_PROXIES=*"
+  - LOG_CHANNEL=stack

+ 14 - 0
.ddev/docker-compose.redis.yaml

@@ -0,0 +1,14 @@
+#ddev-generated
+version: '3.6'
+services:
+  redis:
+    container_name: ddev-${DDEV_SITENAME}-redis
+    image: redis:6
+    # These labels ensure this service is discoverable by ddev.
+    labels:
+      com.ddev.site-name: ${DDEV_SITENAME}
+      com.ddev.approot: $DDEV_APPROOT
+    volumes:
+    - ".:/mnt/ddev_config"
+    - "./redis:/usr/local/etc/redis"
+    command: ["redis-server", "/usr/local/etc/redis/redis.conf"]

+ 8 - 0
.ddev/redis/redis.conf

@@ -0,0 +1,8 @@
+# Redis configuration.
+# #ddev-generated
+# Example configuration files for reference:
+# http://download.redis.io/redis-stable/redis.conf
+# http://download.redis.io/redis-stable/sentinel.conf
+
+maxmemory 2048mb
+maxmemory-policy allkeys-lfu

+ 1 - 0
CHANGELOG.md

@@ -64,6 +64,7 @@
 - Update StatusReplyPipeline, remove expensive reply count re-calculation query ([a2f8aad1](https://github.com/pixelfed/pixelfed/commit/a2f8aad1))
 - Update CommentPipeline, remove expensive reply count re-calculation query ([b457a446](https://github.com/pixelfed/pixelfed/commit/b457a446))
 - Update FederationController, improve inbox/sharedInbox delete handling ([2180a2de](https://github.com/pixelfed/pixelfed/commit/2180a2de))
+- Update HashtagController, improve trending hashtag endpoint ([4873c7dd](https://github.com/pixelfed/pixelfed/commit/4873c7dd))
 -  ([](https://github.com/pixelfed/pixelfed/commit/))
 
 ## [v0.11.4 (2022-10-04)](https://github.com/pixelfed/pixelfed/compare/v0.11.3...v0.11.4)

+ 16 - 6
app/Http/Controllers/DiscoverController.php

@@ -181,22 +181,32 @@ class DiscoverController extends Controller
 	{
 		abort_if(!$request->user(), 403);
 
-		$res = Cache::remember('api:discover:v1.1:trending:hashtags', 3600, function() {
+		$res = Cache::remember('api:discover:v1.1:trending:hashtags', 43200, function() {
+			$minId = StatusHashtag::where('created_at', '>', now()->subDays(14))->first();
+			if(!$minId) {
+				return [];
+			}
 			return StatusHashtag::select('hashtag_id', \DB::raw('count(*) as total'))
+				->where('id', '>', $minId->id)
 				->groupBy('hashtag_id')
 				->orderBy('total','desc')
-				->where('created_at', '>', now()->subDays(90))
-				->take(9)
+				->take(20)
 				->get()
 				->map(function($h) {
-					$hashtag = $h->hashtag;
+					$hashtag = Hashtag::find($h->hashtag_id);
+					if(!$hashtag) {
+						return;
+					}
 					return [
-						'id' => $hashtag->id,
+						'id' => $h->hashtag_id,
 						'total' => $h->total,
 						'name' => '#'.$hashtag->name,
+						'hashtag' => $hashtag->name,
 						'url' => $hashtag->url()
 					];
-				});
+				})
+				->filter()
+				->values();
 		});
 		return $res;
 	}

+ 1 - 1
app/Http/Controllers/FederationController.php

@@ -131,7 +131,7 @@ class FederationController extends Controller
 			'orderedItems' => []
 		];
 
-		return response(json_encode($res, JSON_UNESCAPED_SLASHES))->header('Content-Type', 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"');
+		return response(json_encode($res, JSON_UNESCAPED_SLASHES))->header('Content-Type', 'application/activity+json');
 	}
 
 	public function userInbox(Request $request, $username)

+ 2 - 2
app/Http/Controllers/InstanceActorController.php

@@ -14,7 +14,7 @@ class InstanceActorController extends Controller
 			$res = (new InstanceActor())->first()->getActor();
 			return json_encode($res, JSON_UNESCAPED_SLASHES);
 		});
-		return response($res)->header('Content-Type', 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"');
+		return response($res)->header('Content-Type', 'application/activity+json');
 	}
 
 	public function inbox()
@@ -32,6 +32,6 @@ class InstanceActorController extends Controller
 			'first' => config('app.url') . '/i/actor/outbox?page=true',
 			'last' =>  config('app.url') . '/i/actor/outbox?min_id=0page=true'
 		], JSON_UNESCAPED_SLASHES);
-		return response($res)->header('Content-Type', 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"');
+		return response($res)->header('Content-Type', 'application/activity+json');
 	}
 }

+ 1 - 1
app/Http/Controllers/ProfileController.php

@@ -191,7 +191,7 @@ class ProfileController extends Controller
 			$fractal = new Fractal\Manager();
 			$resource = new Fractal\Resource\Item($user, new ProfileTransformer);
 			$res = $fractal->createData($resource)->toArray();
-			return response(json_encode($res['data']))->header('Content-Type', 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"');
+			return response(json_encode($res['data']))->header('Content-Type', 'application/activity+json');
 		});
 	}
 

+ 1 - 1
app/Http/Controllers/StatusController.php

@@ -293,7 +293,7 @@ class StatusController extends Controller
 		$resource = new Fractal\Resource\Item($status, $object);
 		$res = $fractal->createData($resource)->toArray();
 
-		return response()->json($res['data'], 200, ['Content-Type' => 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"'], JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES);
+		return response()->json($res['data'], 200, ['Content-Type' => 'application/activity+json'], JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES);
 	}
 
 	public function edit(Request $request, $username, $id)

+ 1 - 1
app/Services/ActivityPubFetchService.php

@@ -17,7 +17,7 @@ class ActivityPubFetchService
 		}
 
 		$headers = HttpSignature::instanceActorSign($url, false);
-		$headers['Accept'] = 'application/activity+json, application/ld+json; profile="https://www.w3.org/ns/activitystreams"';
+		$headers['Accept'] = 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"';
 		$headers['User-Agent'] = '(Pixelfed/'.config('pixelfed.version').'; +'.config('app.url').')';
 
 		try {

+ 3 - 1
app/Services/WebfingerService.php

@@ -48,9 +48,11 @@ class WebfingerService
 		$link = collect($webfinger['links'])
 			->filter(function($link) {
 				return $link &&
+					isset($link['rel']) &&
 					isset($link['type']) &&
 					isset($link['href']) &&
-					$link['type'] == 'application/activity+json';
+					$link['rel'] == 'self' &&
+					$link['type'] == 'application/activity+json' || $link['type'] == 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"';
 			})
 			->pluck('href')
 			->first();

+ 0 - 1
app/Util/ActivityPub/HttpSignature.php

@@ -132,7 +132,6 @@ class HttpSignature {
       '(request-target)' => 'post '.parse_url($url, PHP_URL_PATH),
       'Date' => $date->format('D, d M Y H:i:s \G\M\T'),
       'Host' => parse_url($url, PHP_URL_HOST),
-      'Accept' => 'application/activity+json, application/ld+json; profile="https://www.w3.org/ns/activitystreams"',
     ];
 
     if($digest) {