From 7680e771a77b5cf435055079428594766c6976c4 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Sun, 24 May 2020 21:32:11 -0600 Subject: [PATCH 01/12] Update ProfileController, reduce actor object ttl from 6 hours to 15 minutes --- app/Http/Controllers/ProfileController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/ProfileController.php b/app/Http/Controllers/ProfileController.php index 976898ff..0754efbf 100644 --- a/app/Http/Controllers/ProfileController.php +++ b/app/Http/Controllers/ProfileController.php @@ -172,7 +172,7 @@ class ProfileController extends Controller abort_if(!config('federation.activitypub.enabled'), 404); abort_if($user->domain, 404); $key = 'profile:ap:' . $user->id; - $ttl = now()->addHours(6); + $ttl = now()->addMinutes(15); return Cache::remember($key, $ttl, function() use($user) { $fractal = new Fractal\Manager(); From 6e8e9a2d5eb6a46d310e68fed2ff28670d89e17d Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Sun, 24 May 2020 21:59:09 -0600 Subject: [PATCH 02/12] Update ProfileController, remove actor object caching --- app/Http/Controllers/ProfileController.php | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/app/Http/Controllers/ProfileController.php b/app/Http/Controllers/ProfileController.php index 0754efbf..7d0b4405 100644 --- a/app/Http/Controllers/ProfileController.php +++ b/app/Http/Controllers/ProfileController.php @@ -171,15 +171,11 @@ class ProfileController extends Controller { abort_if(!config('federation.activitypub.enabled'), 404); abort_if($user->domain, 404); - $key = 'profile:ap:' . $user->id; - $ttl = now()->addMinutes(15); - return Cache::remember($key, $ttl, function() use($user) { - $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/activity+json'); - }); + $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/activity+json'); } public function showAtomFeed(Request $request, $user) From 8efe14cc4bcb9233c01f940db8e9ab5c8e286c1e Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Mon, 25 May 2020 20:40:41 -0600 Subject: [PATCH 03/12] Update PublicApiController, order accountStatuses by id --- app/Http/Controllers/PublicApiController.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/Http/Controllers/PublicApiController.php b/app/Http/Controllers/PublicApiController.php index e668abfd..41f6bf99 100644 --- a/app/Http/Controllers/PublicApiController.php +++ b/app/Http/Controllers/PublicApiController.php @@ -567,9 +567,8 @@ class PublicApiController extends Controller ->whereIn('type', $scope) ->where('id', $dir, $id) ->whereIn('visibility', $visibility) - ->latest() ->limit($limit) - ->orderByDesc('created_at') + ->orderByDesc('id') ->get(); $resource = new Fractal\Resource\Collection($timeline, new StatusTransformer()); From 3df3c474b7233b4ba552b93c257a0b8056d68ecf Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Mon, 25 May 2020 20:53:27 -0600 Subject: [PATCH 04/12] Update import views --- resources/views/settings/import/home.blade.php | 9 ++++----- resources/views/settings/import/instagram/home.blade.php | 2 +- resources/views/settings/partial/sidebar.blade.php | 4 ++-- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/resources/views/settings/import/home.blade.php b/resources/views/settings/import/home.blade.php index 9f84f211..beb72623 100644 --- a/resources/views/settings/import/home.blade.php +++ b/resources/views/settings/import/home.blade.php @@ -7,11 +7,10 @@
-

Account Import allows you to import your data from a supported service.

-

Warning: This is an experimental beta feature. Use at your own risk!

+

Account Import allows you to import your data from a supported service. Learn more.

Warning: Imported posts will not appear on timelines or be delivered to followers.

-
+

Supported Services

Import from Instagram @@ -19,10 +18,10 @@


Coming Soon

- Import from Mastodon + Import from Pixelfed

- Import from Tumblr + Import from Mastodon

@endsection \ No newline at end of file diff --git a/resources/views/settings/import/instagram/home.blade.php b/resources/views/settings/import/instagram/home.blade.php index ede74aea..d302effc 100644 --- a/resources/views/settings/import/instagram/home.blade.php +++ b/resources/views/settings/import/instagram/home.blade.php @@ -19,7 +19,7 @@
  1. Upload media.json file
  2. Upload photos directory
  3. -
  4. Confirm each post
  5. + {{--
  6. Confirm each post
  7. --}}
  8. Import Data
diff --git a/resources/views/settings/partial/sidebar.blade.php b/resources/views/settings/partial/sidebar.blade.php index 272e5934..5ede2bee 100644 --- a/resources/views/settings/partial/sidebar.blade.php +++ b/resources/views/settings/partial/sidebar.blade.php @@ -39,9 +39,9 @@ - {{-- --}} + From 776cd4398bd596926604a1415833f45fbee641c6 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Mon, 25 May 2020 21:27:31 -0600 Subject: [PATCH 05/12] Update ImportInstagram pipeline --- app/Jobs/ImportPipeline/ImportInstagram.php | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/app/Jobs/ImportPipeline/ImportInstagram.php b/app/Jobs/ImportPipeline/ImportInstagram.php index 1209ecd8..ecbd557a 100644 --- a/app/Jobs/ImportPipeline/ImportInstagram.php +++ b/app/Jobs/ImportPipeline/ImportInstagram.php @@ -11,7 +11,6 @@ use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; use App\Jobs\ImageOptimizePipeline\ImageOptimize; -use App\Jobs\StatusPipeline\NewStatusPipeline; use App\{ ImportJob, ImportData, @@ -56,11 +55,12 @@ class ImportInstagram implements ShouldQueue $job = ImportJob::findOrFail($this->import->id); $profile = Profile::findOrFail($job->profile_id); + $user = $profile->user; $json = $job->mediaJson(); - $collection = $json['photos']; + $collection = array_reverse($json['photos']); $files = $job->files; $monthHash = hash('sha1', date('Y').date('m')); - $userHash = hash('sha1', $profile->id . (string) $profile->created_at); + $userHash = hash('sha1', $user->id . (string) $user->created_at); $fs = new Filesystem; foreach($collection as $import) @@ -118,7 +118,6 @@ class ImportInstagram implements ShouldQueue $media->order = 1; $media->save(); ImageOptimize::dispatch($media); - NewStatusPipeline::dispatch($status); }); } From 3b7e9e07e188e174ca50dcc4e8b0a0d799bc27fa Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Mon, 25 May 2020 21:30:18 -0600 Subject: [PATCH 06/12] Update ImportController --- app/Http/Controllers/ImportController.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/app/Http/Controllers/ImportController.php b/app/Http/Controllers/ImportController.php index 6598a9e7..37a5ddd7 100644 --- a/app/Http/Controllers/ImportController.php +++ b/app/Http/Controllers/ImportController.php @@ -6,15 +6,15 @@ use Illuminate\Http\Request; class ImportController extends Controller { - use Import\Instagram, Import\Mastodon; + use Import\Instagram, Import\Mastodon; - public function __construct() - { - $this->middleware('auth'); + public function __construct() + { + $this->middleware('auth'); - if(config('pixelfed.import.instagram.enabled') != true) { - abort(404, 'Feature not enabled'); - } - } + if(config('pixelfed.import.instagram.enabled') != true) { + abort(404, 'Feature not enabled'); + } + } } From ef07d174232a1be3e72477d6aa8d76067ac80afe Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Mon, 25 May 2020 21:31:35 -0600 Subject: [PATCH 07/12] Update InstagramImport trait --- app/Http/Controllers/Import/Instagram.php | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/app/Http/Controllers/Import/Instagram.php b/app/Http/Controllers/Import/Instagram.php index 936f10b4..b5d2d38a 100644 --- a/app/Http/Controllers/Import/Instagram.php +++ b/app/Http/Controllers/Import/Instagram.php @@ -27,7 +27,7 @@ trait Instagram ->whereNotNull('completed_at') ->exists(); if($completed == true) { - return redirect(route('settings'))->with(['errors' => ['You can only import from Instagram once.']]); + return redirect(route('settings'))->with(['error' => 'You can only import from Instagram once during the beta. Please report any issues!']); } $job = $this->instagramRedirectOrNew(); return redirect($job->url()); @@ -160,7 +160,6 @@ trait Instagram { $profile = Auth::user()->profile; - try { $import = ImportJob::whereProfileId($profile->id) ->where('uuid', $uuid) @@ -173,8 +172,6 @@ trait Instagram \Log::info($e); } - return redirect(route('settings'))->with(['status' => [ - 'Import successful! It may take a few minutes to finish.' - ]]); + return redirect(route('settings'))->with(['status' => 'Import successful! It may take a few minutes to finish.']); } } From a834b1106e82dafb2f3b3f645ae8c79538b39fbf Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Mon, 25 May 2020 21:32:03 -0600 Subject: [PATCH 08/12] Update settings sidebar partial --- resources/views/settings/partial/sidebar.blade.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/resources/views/settings/partial/sidebar.blade.php b/resources/views/settings/partial/sidebar.blade.php index 5ede2bee..21165e1e 100644 --- a/resources/views/settings/partial/sidebar.blade.php +++ b/resources/views/settings/partial/sidebar.blade.php @@ -39,9 +39,11 @@ + @if(config('pixelfed.import.instagram.enabled')) + @endif From ffccf0fd411783e52773b090c1299596118f2586 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Mon, 25 May 2020 21:33:00 -0600 Subject: [PATCH 09/12] Update SettingsController, add 404 to import when disabled --- app/Http/Controllers/SettingsController.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/Http/Controllers/SettingsController.php b/app/Http/Controllers/SettingsController.php index 89f50407..7b59132f 100644 --- a/app/Http/Controllers/SettingsController.php +++ b/app/Http/Controllers/SettingsController.php @@ -77,11 +77,13 @@ class SettingsController extends Controller public function dataImport() { + abort_if(!config('pixelfed.import.instagram.enabled'), 404); return view('settings.import.home'); } public function dataImportInstagram() { + abort_if(!config('pixelfed.import.instagram.enabled'), 404); return view('settings.import.instagram.home'); } From e2a6bdd0e146da24c8815bfaf4b8444f71da8d21 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Mon, 25 May 2020 21:41:42 -0600 Subject: [PATCH 10/12] Add Instagram Import --- config/pixelfed.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/pixelfed.php b/config/pixelfed.php index 06a45a95..f651a071 100644 --- a/config/pixelfed.php +++ b/config/pixelfed.php @@ -236,7 +236,7 @@ return [ 'import' => [ 'instagram' => [ - 'enabled' => false, + 'enabled' => env('IMPORT_INSTAGRAM', false), 'limits' => [ 'posts' => (int) env('IMPORT_INSTAGRAM_POST_LIMIT', 100), 'size' => (int) env('IMPORT_INSTAGRAM_SIZE_LIMIT', 250) From 1d819216934c3ac786ca59798403c2bb1341a329 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Mon, 25 May 2020 21:42:41 -0600 Subject: [PATCH 11/12] Update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 06efcef1..64597f88 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ - Thai translations ([74cd536](https://github.com/pixelfed/pixelfed/commit/74cd536)) - Added Bookmarks to v1 api ([99cb48c5](https://github.com/pixelfed/pixelfed/commit/99cb48c5)) - Added New Post notification to Timeline ([a0e7c4d5](https://github.com/pixelfed/pixelfed/commit/a0e7c4d5)) +- Add Instagram Import ([e2a6bdd0](https://github.com/pixelfed/pixelfed/commit/e2a6bdd0)) ### Updated - Updated PostComponent, fix remote urls ([42716ccc](https://github.com/pixelfed/pixelfed/commit/42716ccc)) From 193027bdc7012d51b0c843c770c1c3d814805b65 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Mon, 25 May 2020 21:46:30 -0600 Subject: [PATCH 12/12] Update web routes --- routes/web.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/routes/web.php b/routes/web.php index 5ecc4368..79f40a83 100644 --- a/routes/web.php +++ b/routes/web.php @@ -265,6 +265,15 @@ Route::domain(config('pixelfed.domain.app'))->middleware(['validemail', 'twofact Route::get('my/story', 'StoryController@iRedirect'); Route::get('web/profile/_/{id}', 'InternalApiController@remoteProfile'); Route::get('web/post/_/{profileId}/{statusid}', 'InternalApiController@remoteStatus'); + + Route::group(['prefix' => 'import', 'middleware' => 'dangerzone'], function() { + Route::get('job/{uuid}/1', 'ImportController@instagramStepOne'); + Route::post('job/{uuid}/1', 'ImportController@instagramStepOneStore'); + Route::get('job/{uuid}/2', 'ImportController@instagramStepTwo'); + Route::post('job/{uuid}/2', 'ImportController@instagramStepTwoStore'); + Route::get('job/{uuid}/3', 'ImportController@instagramStepThree'); + Route::post('job/{uuid}/3', 'ImportController@instagramStepThreeStore'); + }); }); Route::group(['prefix' => 'account'], function () { @@ -362,6 +371,16 @@ Route::domain(config('pixelfed.domain.app'))->middleware(['validemail', 'twofact Route::get('invites', 'UserInviteController@show')->name('settings.invites'); // Route::get('sponsor', 'SettingsController@sponsor')->name('settings.sponsor'); // Route::post('sponsor', 'SettingsController@sponsorStore'); + Route::prefix('import')->group(function() { + Route::get('/', 'SettingsController@dataImport')->name('settings.import'); + Route::prefix('instagram')->group(function() { + Route::get('/', 'ImportController@instagram')->name('settings.import.ig'); + Route::post('/', 'ImportController@instagramStart'); + }); + Route::prefix('mastodon')->group(function() { + Route::get('/', 'ImportController@mastodon')->name('settings.import.mastodon'); + }); + }); }); Route::group(['prefix' => 'site'], function () {