kopia lustrzana https://github.com/pixelfed/pixelfed
				
				
				
			
		
			
				
	
	
		
			144 wiersze
		
	
	
		
			4.7 KiB
		
	
	
	
		
			PHP
		
	
	
			
		
		
	
	
			144 wiersze
		
	
	
		
			4.7 KiB
		
	
	
	
		
			PHP
		
	
	
| <?php
 | |
| 
 | |
| namespace App\Http\Controllers\Settings;
 | |
| 
 | |
| use App\AccountLog;
 | |
| use App\Following;
 | |
| use App\Report;
 | |
| use App\Status;
 | |
| use App\UserFilter;
 | |
| use Auth, Cookie, DB, Cache, Purify;
 | |
| use Carbon\Carbon;
 | |
| use Illuminate\Http\Request;
 | |
| use App\Transformer\ActivityPub\{
 | |
| 	ProfileTransformer,
 | |
| 	StatusTransformer
 | |
| };
 | |
| use App\Transformer\Api\StatusTransformer as StatusApiTransformer;
 | |
| use League\Fractal;
 | |
| use League\Fractal\Serializer\ArraySerializer;
 | |
| use League\Fractal\Pagination\IlluminatePaginatorAdapter;
 | |
| 
 | |
| trait ExportSettings
 | |
| {
 | |
| 	public function __construct()
 | |
| 	{
 | |
| 		$this->middleware('auth');
 | |
| 	}
 | |
| 
 | |
|     public function dataExport()
 | |
|     {
 | |
|         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', [
 | |
|     		'Content-Type' => 'application/json'
 | |
|     	]);
 | |
|     }
 | |
| 
 | |
|     public function exportFollowing()
 | |
|     {
 | |
|         $data = Cache::remember('account:export:profile:following:'.Auth::user()->profile->id, now()->addMinutes(60), function() {
 | |
|             return Auth::user()->profile->following()->get()->map(function($i) {
 | |
|                 return $i->url();
 | |
|             });
 | |
|         });
 | |
|         return response()->streamDownload(function () use($data) {
 | |
|             echo $data;
 | |
|         }, 'following.json', [
 | |
|     		'Content-Type' => 'application/json'
 | |
|     	]);
 | |
|     }
 | |
| 
 | |
|     public function exportFollowers()
 | |
|     {
 | |
|         $data = Cache::remember('account:export:profile:followers:'.Auth::user()->profile->id, now()->addMinutes(60), function() {
 | |
|             return Auth::user()->profile->followers()->get()->map(function($i) {
 | |
|                 return $i->url();
 | |
|             });
 | |
|         });
 | |
|         return response()->streamDownload(function () use($data) {
 | |
|             echo $data;
 | |
|         }, 'followers.json', [
 | |
|     		'Content-Type' => 'application/json'
 | |
|     	]);
 | |
|     }
 | |
| 
 | |
|     public function exportMuteBlockList()
 | |
|     {
 | |
|         $profile = Auth::user()->profile;
 | |
|         $exists = UserFilter::select('id')
 | |
|             ->whereUserId($profile->id)
 | |
|             ->exists();
 | |
|         if(!$exists) {
 | |
|             return redirect()->back();
 | |
|         }
 | |
|         $data = Cache::remember('account:export:profile:muteblocklist:'.Auth::user()->profile->id, now()->addMinutes(60), function() use($profile) {
 | |
|             return json_encode([
 | |
|                 'muted' => $profile->mutedProfileUrls(),
 | |
|                 'blocked' => $profile->blockedProfileUrls()
 | |
|             ], JSON_PRETTY_PRINT);
 | |
|         });
 | |
|         return response()->streamDownload(function () use($data) {
 | |
|             echo $data;
 | |
|         }, 'muted-and-blocked-accounts.json', [
 | |
|     		'Content-Type' => 'application/json'
 | |
|     	]);
 | |
|     }
 | |
| 
 | |
|     public function exportStatuses(Request $request)
 | |
|     {
 | |
|     	$this->validate($request, [
 | |
|     		'type' => 'required|string|in:ap,api'
 | |
|     	]);
 | |
|     	$limit = 300;
 | |
| 
 | |
|     	$profile = Auth::user()->profile;
 | |
|     	$type = 'ap';
 | |
| 
 | |
|     	$count = Status::select('id')->whereProfileId($profile->id)->count();
 | |
|     	if($count > $limit) {
 | |
|     		// fire background job
 | |
|     		return redirect('/settings/data-export')->with(['status' => 'You have more than '.$limit.' statuses, we do not support full account export yet.']);
 | |
|     	}
 | |
| 
 | |
|     	$filename = 'outbox.json';
 | |
| 		if($type == 'ap') {
 | |
| 			$data = Cache::remember('account:export:profile:statuses:ap:'.Auth::user()->profile->id, now()->addDays(7), function() {
 | |
| 				$profile = Auth::user()->profile->statuses;
 | |
| 				$fractal = new Fractal\Manager();
 | |
| 				$fractal->setSerializer(new ArraySerializer());
 | |
| 				$resource = new Fractal\Resource\Collection($profile, new StatusTransformer());
 | |
| 				return $fractal->createData($resource)->toArray();
 | |
| 			});
 | |
| 		} else {
 | |
| 			$filename = 'api-statuses.json';
 | |
| 			$data = Cache::remember('account:export:profile:statuses:api:'.Auth::user()->profile->id, now()->addDays(7), function() {
 | |
| 				$profile = Auth::user()->profile->statuses;
 | |
| 				$fractal = new Fractal\Manager();
 | |
| 				$fractal->setSerializer(new ArraySerializer());
 | |
| 				$resource = new Fractal\Resource\Collection($profile, new StatusApiTransformer());
 | |
| 				return $fractal->createData($resource)->toArray();
 | |
| 			});
 | |
| 		}
 | |
| 
 | |
|     	return response()->streamDownload(function () use ($data, $filename) {
 | |
|     		echo json_encode($data, JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE);
 | |
|     	}, $filename, [
 | |
|     		'Content-Type' => 'application/json'
 | |
|     	]);
 | |
|     }
 | |
| 
 | |
| } |