123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- <?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 = 500;
- $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()->addHours(1), 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()->addHours(1), 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'
- ]);
- }
- }
|