pixelfed/pixelfed

View on GitHub
app/Services/MediaPathService.php

Summary

Maintainability
A
1 hr
Test Coverage
<?php

namespace App\Services;

use App\Util\ActivityPub\Helpers;
use Illuminate\Support\Facades\Redis;
use Illuminate\Support\Str;
use App\Media;
use App\Profile;
use App\User;
use App\Services\HashidService;

class MediaPathService {

    public static function get($account, $version = 1)
    {
        $mh = hash('sha256', date('Y').'-.-'.date('m'));
        
        if($account instanceOf User) {
            switch ($version) {
                // deprecated
                case 1:
                    $monthHash = hash('sha1', date('Y').date('m'));
                    $userHash = hash('sha1', $account->id . (string) $account->created_at);
                    $path = "public/m/{$monthHash}/{$userHash}";
                    break;

                case 2:
                    $monthHash = substr($mh, 0, 9).'-'.substr($mh, 9, 6);
                    $userHash = $account->profile_id;
                    $random = Str::random(12);
                    $path = "public/m/_v2/{$userHash}/{$monthHash}/{$random}";
                    break;
                
                default:
                    $monthHash = substr($mh, 0, 9).'-'.substr($mh, 9, 6);
                    $userHash = $account->profile_id;
                    $random = Str::random(12);
                    $path = "public/m/_v2/{$userHash}/{$monthHash}/{$random}";
                    break;
            }
        } 
        if($account instanceOf Profile) {
            $monthHash = substr($mh, 0, 9).'-'.substr($mh, 9, 6);
            $userHash = $account->id;
            $random = Str::random(12);
            $path = "public/m/_v2/{$userHash}/{$monthHash}/{$random}";
        }
        return $path;
    }

    public static function story($account, $version = 1)
    {
        $mh = hash('sha256', date('Y').'-.-'.date('m'));
        $monthHash = HashidService::encode(date('Y').date('m'), false);
        $random = date('d').Str::random(32);

        if($account instanceOf User) {
            switch ($version) {
                case 1:
                    $userHash = HashidService::encode($account->profile_id);
                    $path = "public/_esm.t3/{$monthHash}/{$userHash}/{$random}";
                    break;
                
                default:
                    $userHash = HashidService::encode($account->profile_id);
                    $path = "public/_esm.t3/{$monthHash}/{$userHash}/{$random}";
                    break;
            }
        } 
        if($account instanceOf Profile) {
            $userHash = HashidService::encode($account->id);
            $path = "public/_esm.t3/{$monthHash}/{$userHash}/{$random}";
        }
        return $path;
    }

}