validate([ 'email' => ['required', 'email'], 'password' => ['required'], ]); if (Auth::attempt($credentials)) { $request->session()->regenerate(); return redirect()->intended('writer'); } return back()->withErrors([ 'email' => 'The provided credentials do not match our records.', ])->onlyInput('email'); } public function logout(Request $request): RedirectResponse { Auth::logout(); $request->session()->invalidate(); $request->session()->regenerateToken(); return redirect(route('login')); } public function dashboard(Request $request): View { return view('writer.dashboard'); } public function newArticle(Request $request): View { return view('writer.new-article'); } public function livePreview(Request $request): View { //$validated = $request->validate([ // 'header-image' => [File::types(['png', 'jpg', 'jpeg', 'webp'])->max(2 * 1024)], //]); // Upload the file $header_image_path = $this->storeHeaderImage($request); $article_empty = new Article(); $article_empty->markdown_body = $request->get('markdown-body'); $article_empty->convertMarkdownToMarkup(); $article = [ 'title' => $request->title ?? '[Title]', 'header_image_url' => $header_image_path ? asset("storage/$header_image_path") : null, 'subtitle' => $request->subtitle ?? '[Sub Title]', 'author' => [ 'display_name' => auth()->user()->author?->displayName, ], 'published_at' => $request->get('publication-date') ?? null, 'primary_link' => $request->primary_link ?? null, 'secondary_link' => $request->secondary_link ?? null, 'mastodon_handle' => $request->mastodon_handle ?? null, 'body' => $article_empty->body ?? '[Post Body]', ]; return view('shared.single-article', ['article' => $article]); } public function saveArticle(Request $request): RedirectResponse { $header_image_path = $this->storeHeaderImage($request); $article_empty = new Article(); $article_empty->markdown_body = $request->get('markdown-body'); $article_empty->convertMarkdownToMarkup(); Article::create([ 'title' => $request->title ?? null, 'slug' => $request->slug ?? null, 'author_id' => auth()->user()->id, 'subtitle' => $request->subtitle ?? null, 'body' => $article_empty->body, 'published_at' => $request->get('publication-date') ?? null, 'header_image_url' => $header_image_path ? asset("storage/$header_image_path") : null, 'markdown_body' => $request->get('markdown-body'), ]); return redirect(route('dashboard')); } private function storeHeaderImage(Request $request): ?string { if(! $request->hasFile('header-image')) return null; $header_image = $request->file('header-image'); return $header_image->storeAs('article-header-images', $header_image->getClientOriginalName(), 'public'); } }