Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/Good_First_Issue_Web_App.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

21 changes: 21 additions & 0 deletions .idea/inspectionProfiles/Project_Default.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/inspectionProfiles/profiles_settings.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 7 additions & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 7 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Good_First_Issue_Web_App
Submodule Good_First_Issue_Web_App added at 7e2589
28 changes: 28 additions & 0 deletions frontend/src/App.css
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,34 @@
animation: App-logo-spin infinite 20s linear;
}
}
/* Light Mode (default) */
body {
background-color: #ffffff;
color: #000000;
transition: background-color 0.3s, color 0.3s;
}

/* Dark Mode */
body.dark-mode {
background-color: #121212;
color: #ffffff;
}

/* Toggle Button */
.dark-toggle-btn {
background: transparent;
color: inherit;
border: 1px solid #888;
padding: 6px 12px;
border-radius: 6px;
cursor: pointer;
margin-left: 15px;
}

.dark-toggle-btn:hover {
background: rgba(255, 255, 255, 0.1);
}


.App-header {
background-color: #282c34;
Expand Down
4 changes: 4 additions & 0 deletions frontend/src/App.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
import "./App.css";
import {Hero, About, Repositories, Form, Layout} from './pages'
import { Route, RouterProvider, createBrowserRouter, createRoutesFromElements } from 'react-router-dom'
import IncidentResponse from "./pages/IncidentResponse";

// inside <Routes> or equivalent
<Route path="/incident-response" element={<IncidentResponse />} />

const router = createBrowserRouter(
createRoutesFromElements(
Expand Down
47 changes: 47 additions & 0 deletions frontend/src/pages/Layout.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,53 @@ import {Outlet} from 'react-router-dom'
function Layout() {
return (
<>
import React, { useState, useEffect } from "react";
import { Outlet } from "react-router-dom";
import "./Layout.css";

export default function Layout() {
const [darkMode, setDarkMode] = useState(false);

// Load theme from localStorage on mount
useEffect(() => {
const savedTheme = localStorage.getItem("theme");
if (savedTheme === "dark") {
setDarkMode(true);
document.body.classList.add("dark-mode");
}
}, []);

const toggleTheme = () => {
if (darkMode) {
document.body.classList.remove("dark-mode");
localStorage.setItem("theme", "light");
setDarkMode(false);
} else {
document.body.classList.add("dark-mode");
localStorage.setItem("theme", "dark");
setDarkMode(true);
}
};

return (
<div>
<header>
<h1>Good First Issue Web App</h1>
<nav>
{/* Dark Mode Toggle Button */}
<button onClick={toggleTheme} className="dark-toggle-btn">
{darkMode ? "☀️ Light Mode" : "🌙 Dark Mode"}
</button>
</nav>
</header>

<main>
<Outlet />
</main>
</div>
);
}

<Navbar />
<Outlet />
<Footer />
Expand Down
2 changes: 2 additions & 0 deletions frontend/src/pages/Navbar.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ function Navbar() {
<NavLink to='/form'>Form</NavLink>
</li>
</ul>
<a href="/incident-response">Incident Response Plan</a>

</div>
<div className="social-links">
<ul>
Expand Down
29 changes: 29 additions & 0 deletions frontend/src/pages/incident-response.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Incident Response Plan</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<nav class="navbar">
<a href="index.html">Home</a>
<a href="incident-response.html">Incident Response Plan</a>
</nav>

<main class="container">
<h1>Incident Response Plan</h1>
<p>Creating an incident response plan is crucial for organizations for several reasons:</p>
<ul>
<li><strong>Minimize Impact and Damage:</strong> React quickly and effectively to security incidents.</li>
<li><strong>Clear Roles and Responsibilities:</strong> Everyone knows their role during a crisis.</li>
<li><strong>Enhance Communication:</strong> Ensure accurate and consistent information is shared.</li>
<li><strong>Compliance:</strong> Meet regulatory and legal requirements.</li>
<li><strong>Reputation:</strong> Preserve trust with customers and stakeholders.</li>
<li><strong>Cost Savings:</strong> Prevent unnecessary expenses due to poor response.</li>
<li><strong>Continuous Improvement:</strong> Learn and adapt after incidents.</li>
</ul>
</main>
</body>
</html>
30 changes: 30 additions & 0 deletions frontend/src/pages/incidentResponse.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import React from "react";

const IncidentResponse = () => {
return (
<div style={{ padding: "20px", fontFamily: "Arial, sans-serif", lineHeight: "1.6" }}>
<h1 style={{ color: "#2c3e50" }}>Incident Response Plan</h1>
<p>Creating an incident response plan is crucial for organizations for several reasons:</p>
<ul>
<li><strong>Minimize Impact and Damage:</strong> React quickly and effectively to limit damage and shorten recovery time.</li>
<li><strong>Clear Roles and Responsibilities:</strong> Defines responsibilities for the response team, avoiding confusion.</li>
<li><strong>Enhance Communication:</strong> Provides internal and external communication protocols.</li>
<li><strong>Legal and Regulatory Compliance:</strong> Ensures compliance with laws and avoids fines.</li>
<li><strong>Preserve Organizational Reputation:</strong> A transparent and fast response builds trust.</li>
<li><strong>Reduction in Downtime:</strong> Predetermined steps reduce downtime and business impact.</li>
<li><strong>Cost Savings:</strong> Prevents unnecessary expenses from misinformation or chaos.</li>
<li><strong>Continuous Improvement:</strong> Post-incident reviews refine procedures.</li>
<li><strong>Stakeholder Assurance:</strong> Shows partners and customers the org is prepared.</li>
<li><strong>Enhanced Security Posture:</strong> Regular reviews help identify and fix gaps.</li>
</ul>
<p>
<em>
In essence, an incident response plan is like an insurance policy for cybersecurity incidents.
You hope never to use it, but when the need arises, you’ll be glad you have it.
</em>
</p>
</div>
);
};

export default IncidentResponse;