123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- <?php
- namespace App\Http\Controllers;
- use Illuminate\Http\Request;
- use Cache;
- use DB;
- use League\CommonMark\CommonMarkConverter;
- use App\Services\AccountService;
- use App\Services\StatusService;
- use App\Services\SnowflakeService;
- use App\Util\Localization\Localization;
- class SpaController extends Controller
- {
- public function index(Request $req)
- {
- abort_unless(config('exp.spa'), 404);
- if(!$req->user()) { return redirect('/login'); }
- return view('layouts.spa');
- }
- public function webPost(Request $request, $id)
- {
- abort_unless(config('exp.spa'), 404);
- if($request->user()) {
- return view('layouts.spa');
- }
- $post = StatusService::get($id, false);
- if($post && !in_array($post['visibility'], ['public', 'unlisted'])) {
- return redirect('/login');
- }
- if(
- $post &&
- isset($post['url']) &&
- isset($post['local']) &&
- $post['local'] === true
- ) {
- return redirect($post['url']);
- }
- return redirect('/login');
- }
- public function webProfile(Request $request, $id)
- {
- abort_unless(config('exp.spa'), 404);
- if($request->user()) {
- if(substr($id, 0, 1) == '@') {
- $id = AccountService::usernameToId(substr($id, 1));
- return redirect("/i/web/profile/{$id}");
- }
- return view('layouts.spa');
- }
- $account = AccountService::get($id);
- if($account && isset($account['url']) && $account['local']) {
- return redirect($account['url']);
- }
- return redirect('/login');
- }
- public function updateLanguage(Request $request)
- {
- abort_unless(config('exp.spa'), 404);
- abort_unless($request->user(), 404);
- $this->validate($request, [
- 'v' => 'required|in:0.1,0.2',
- 'l' => 'required|alpha_dash|max:5'
- ]);
- $lang = $request->input('l');
- $user = $request->user();
- abort_if(!in_array($lang, Localization::languages()), 400);
- $user->language = $lang;
- $user->save();
- session()->put('locale', $lang);
- return ['language' => $lang];
- }
- public function getPrivacy(Request $request)
- {
- abort_unless($request->user(), 404);
- $body = $this->markdownToHtml('views/page/privacy.md');
- return [
- 'body' => $body
- ];
- }
- public function getTerms(Request $request)
- {
- abort_unless($request->user(), 404);
- $body = $this->markdownToHtml('views/page/terms.md');
- return [
- 'body' => $body
- ];
- }
- protected function markdownToHtml($src, $ttl = 600)
- {
- return Cache::remember(
- 'pf:doc_cache:markdown:' . $src,
- $ttl,
- function() use($src) {
- $path = resource_path($src);
- $file = file_get_contents($path);
- $converter = new CommonMarkConverter();
- return (string) $converter->convertToHtml($file);
- });
- }
- public function usernameRedirect(Request $request, $username)
- {
- abort_unless($request->user(), 404);
- $id = AccountService::usernameToId($username);
- if(!$id) {
- return redirect('/i/web/404');
- }
- return redirect('/i/web/profile/' . $id);
- }
- public function hashtagRedirect(Request $request, $tag)
- {
- if(!$request->user()) {
- return redirect('/discover/tags/' . $tag);
- }
- return view('layouts.spa');
- }
- }
|