Browse Source

Add account export

Daniel Supernault 6 years ago
parent
commit
4122bb83cb

+ 19 - 0
app/Http/Controllers/Settings/ExportSettings.php

@@ -9,6 +9,10 @@ use App\UserFilter;
 use Auth, Cookie, DB, Cache, Purify;
 use Carbon\Carbon;
 use Illuminate\Http\Request;
+use App\Transformer\ActivityPub\ProfileTransformer;
+use League\Fractal;
+use League\Fractal\Serializer\ArraySerializer;
+use League\Fractal\Pagination\IlluminatePaginatorAdapter;
 
 trait ExportSettings
 {
@@ -18,6 +22,21 @@ trait ExportSettings
         return view('settings.dataexport');
     }
 
+    public function exportAccount()
+    {
+    	$data = Cache::remember('account:export:profile:actor:'.Auth::user()->profile->id, now()->addMinutes(60), function() {
+			$profile = Auth::user()->profile;
+			$fractal = new Fractal\Manager();
+			$fractal->setSerializer(new ArraySerializer());
+			$resource = new Fractal\Resource\Item($profile, new ProfileTransformer());
+			return $fractal->createData($resource)->toArray();
+    	});
+
+    	return response()->streamDownload(function () use ($data) {
+    		echo json_encode($data, JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE);
+    	}, 'account.json');
+    }
+
     public function exportFollowing()
     {
         $data = Cache::remember('account:export:profile:following:'.Auth::user()->profile->id, now()->addMinutes(60), function() {

+ 5 - 1
resources/views/settings/dataexport.blade.php

@@ -6,6 +6,7 @@
     <h3 class="font-weight-bold">Data Export</h3>
   </div>
   <hr>
+  <div class="alert alert-info font-weight-bold">We generate data exports once per hour, and they may not contain the latest data if you've requested them recently.</div>
   <ul class="list-group">
   	<li class="list-group-item d-flex justify-content-between align-items-center">
   		<div>
@@ -53,7 +54,10 @@
         <span class="font-weight-bold">Account</span>
       </div>
       <div>
-  			<span class="small text-muted">Coming Soon</span>
+  			<form action="/settings/data-export/account" method="post">
+          @csrf
+          <button type="submit" class="font-weight-bold btn btn-outline-primary btn-sm">Download</button>
+        </form>
   		</div>
   	</li>
   </ul>

+ 1 - 0
routes/web.php

@@ -228,6 +228,7 @@ Route::domain(config('pixelfed.domain.app'))->middleware(['validemail', 'twofact
         Route::post('data-export/following', 'SettingsController@exportFollowing')->middleware('dangerzone');
         Route::post('data-export/followers', 'SettingsController@exportFollowers')->middleware('dangerzone');
         Route::post('data-export/mute-block-list', 'SettingsController@exportMuteBlockList')->middleware('dangerzone');
+        Route::post('data-export/account', 'SettingsController@exportAccount')->middleware('dangerzone');
         Route::get('developers', 'SettingsController@developers')->name('settings.developers')->middleware('dangerzone');
     });