SpaController.php 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. use Cache;
  5. use DB;
  6. use League\CommonMark\CommonMarkConverter;
  7. use App\Services\AccountService;
  8. use App\Services\StatusService;
  9. use App\Services\SnowflakeService;
  10. class SpaController extends Controller
  11. {
  12. public function __construct()
  13. {
  14. $this->middleware('auth');
  15. }
  16. public function index()
  17. {
  18. abort_unless(config('exp.spa'), 404);
  19. return view('layouts.spa');
  20. }
  21. public function webPost(Request $request, $id)
  22. {
  23. abort_unless(config('exp.spa'), 404);
  24. if($request->user()) {
  25. return view('layouts.spa');
  26. }
  27. if(SnowflakeService::byDate(now()->subDays(30)) > $id) {
  28. abort(404);
  29. }
  30. $post = StatusService::get($id);
  31. if(
  32. $post &&
  33. isset($post['url']) &&
  34. isset($post['local']) &&
  35. $post['local'] === true
  36. ) {
  37. return redirect($post['url']);
  38. }
  39. abort(404);
  40. }
  41. public function webProfile(Request $request, $id)
  42. {
  43. abort_unless(config('exp.spa'), 404);
  44. if($request->user()) {
  45. if(substr($id, 0, 1) == '@') {
  46. $id = AccountService::usernameToId(substr($id, 1));
  47. return redirect("/i/web/profile/{$id}");
  48. }
  49. return view('layouts.spa');
  50. }
  51. $account = AccountService::get($id);
  52. if($account && isset($account['url'])) {
  53. return redirect($account['url']);
  54. }
  55. return redirect('404');
  56. }
  57. public function getPrivacy()
  58. {
  59. $body = $this->markdownToHtml('views/page/privacy.md');
  60. return [
  61. 'body' => $body
  62. ];
  63. }
  64. public function getTerms()
  65. {
  66. $body = $this->markdownToHtml('views/page/terms.md');
  67. return [
  68. 'body' => $body
  69. ];
  70. }
  71. protected function markdownToHtml($src, $ttl = 600)
  72. {
  73. return Cache::remember(
  74. 'pf:doc_cache:markdown:' . $src,
  75. $ttl,
  76. function() use($src) {
  77. $path = resource_path($src);
  78. $file = file_get_contents($path);
  79. $converter = new CommonMarkConverter();
  80. return (string) $converter->convertToHtml($file);
  81. });
  82. }
  83. }