Compare commits
No commits in common. "4b264c8389d7e3102216c71688071c6decc3fb8d" and "f39333cae6bf09efd4273290fbd957ed4059b30d" have entirely different histories.
4b264c8389
...
f39333cae6
@ -1,16 +1,18 @@
|
|||||||
# Projects
|
# My Projects
|
||||||
|
|
||||||
## Personal Portfolio
|
## Project 1: Personal Portfolio
|
||||||
- **Tech Stack:** React, TypeScript, Tailwind CSS
|
- **Tech Stack:** React, TypeScript, Tailwind CSS
|
||||||
- **Description:** A retro TV-themed portfolio website
|
- **Description:** A retro TV-themed portfolio website
|
||||||
- [View Source](https://git.ivanch.me/ivanch/new-home)
|
- [View Source](https://github.com/username/portfolio)
|
||||||
|
|
||||||
## Kasbot
|
## Project 2: Task Manager
|
||||||
- **Tech Stack:** .NET Core
|
- **Tech Stack:** Node.js, Express, MongoDB
|
||||||
- **Description:** A Discord music bot for playing music from YouTube/Spotify
|
- **Description:** RESTful API for managing tasks and projects
|
||||||
- [View Source](https://github.com/ivanch/kasbot)
|
- [Live Demo](https://demo.example.com)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Published Articles
|
### Currently Working On
|
||||||
(incoming)
|
* Cloud infrastructure optimization
|
||||||
|
* Open source contributions
|
||||||
|
* Machine learning side projects
|
||||||
|
@ -4,8 +4,6 @@ import TerminalButton from './components/TerminalButton';
|
|||||||
import ProfileContent from './components/ProfileContent';
|
import ProfileContent from './components/ProfileContent';
|
||||||
import ProjectsContent from './components/ProjectsContent';
|
import ProjectsContent from './components/ProjectsContent';
|
||||||
import TerminalShell from './components/TerminalShell';
|
import TerminalShell from './components/TerminalShell';
|
||||||
import SkillsContent from './components/SkillsContent';
|
|
||||||
import ResumeContent from './components/ResumeContent';
|
|
||||||
|
|
||||||
function App() {
|
function App() {
|
||||||
const [activeSection, setActiveSection] = React.useState('about');
|
const [activeSection, setActiveSection] = React.useState('about');
|
||||||
@ -22,7 +20,7 @@ function App() {
|
|||||||
<div className="absolute inset-0 tv-screen-convex"></div>
|
<div className="absolute inset-0 tv-screen-convex"></div>
|
||||||
|
|
||||||
{/* Screen Content */}
|
{/* Screen Content */}
|
||||||
<div className="relative h-full w-full bg-[#003300] p-6 font-mono text-[#00FF00] overflow-hidden z-10 screen-content">
|
<div className="relative h-full w-full bg-[#003300] p-6 font-mono text-[#00FF00] overflow-hidden z-10">
|
||||||
<div className="animate-pulse mb-4">
|
<div className="animate-pulse mb-4">
|
||||||
<Terminal className="inline-block mr-2" />
|
<Terminal className="inline-block mr-2" />
|
||||||
<span className="text-sm">echo "Hey there!"</span>
|
<span className="text-sm">echo "Hey there!"</span>
|
||||||
@ -73,8 +71,6 @@ function App() {
|
|||||||
{activeSection === 'projects' && (
|
{activeSection === 'projects' && (
|
||||||
<ProjectsContent markdownPath="/content/projects.md" />
|
<ProjectsContent markdownPath="/content/projects.md" />
|
||||||
)}
|
)}
|
||||||
{activeSection === 'skills' && <SkillsContent />}
|
|
||||||
{activeSection === 'resume' && <ResumeContent />}
|
|
||||||
{activeSection === 'shell' && <TerminalShell />}
|
{activeSection === 'shell' && <TerminalShell />}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,31 +0,0 @@
|
|||||||
import React from 'react';
|
|
||||||
import TerminalButton from './TerminalButton';
|
|
||||||
|
|
||||||
const ResumeContent: React.FC = () => {
|
|
||||||
const resumeUrl = "https://drive.google.com/file/d/1oYf68qKXUnBz7d4qjHX-hTw_-f5EKgeF/view?usp=sharing";
|
|
||||||
const downloadUrl = "https://drive.google.com/file/d/1oYf68qKXUnBz7d4qjHX-hTw_-f5EKgeF/view?usp=sharing";
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div className="flex flex-col h-full">
|
|
||||||
<div className="flex-1 mb-4">
|
|
||||||
<iframe
|
|
||||||
src={resumeUrl}
|
|
||||||
className="w-full h-full rounded-lg"
|
|
||||||
frameBorder="0"
|
|
||||||
allowFullScreen
|
|
||||||
allow="autoplay"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div className="flex justify-center">
|
|
||||||
<TerminalButton
|
|
||||||
onClick={() => window.open(downloadUrl, '_blank')}
|
|
||||||
isSelected={false}
|
|
||||||
>
|
|
||||||
OPEN IN NEW TAB
|
|
||||||
</TerminalButton>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default ResumeContent;
|
|
@ -1,34 +0,0 @@
|
|||||||
import React from 'react';
|
|
||||||
|
|
||||||
const SkillsContent: React.FC = () => {
|
|
||||||
return (
|
|
||||||
<div className="flex flex-col items-center justify-center h-full">
|
|
||||||
<pre className="font-mono text-[#00FF00] whitespace-pre">
|
|
||||||
{`
|
|
||||||
_____ __ _ _ _ _____
|
|
||||||
/ ____|/ /_ (_) | | |/ ____|
|
|
||||||
| (___ | '_ \\| | | | | (___
|
|
||||||
\\___ \\| | | | | | | |\\____ \\
|
|
||||||
____) | | | | | | | | ____) |
|
|
||||||
|_____/|_| |_|_|_| |_||_____/
|
|
||||||
|
|
||||||
Programming:
|
|
||||||
├── Languages: C# (.NET Core, .NET Framework, ASP.NET Core)
|
|
||||||
├── Languages: TypeScript, JavaScript, Python, Golang, Java, C/C++
|
|
||||||
└── Frontend: React
|
|
||||||
|
|
||||||
Infrastructure:
|
|
||||||
├── Cloud: AWS
|
|
||||||
├── CI/CD: GitHub Actions, GitLab CI, Helm/Terraform, Shell Scripting
|
|
||||||
└── Containers: Docker, Kubernetes
|
|
||||||
|
|
||||||
Databases:
|
|
||||||
├── SQL: PostgreSQL, MySQL
|
|
||||||
├── NoSQL: MongoDB
|
|
||||||
└── Caching: Redis
|
|
||||||
`}</pre>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default SkillsContent;
|
|
@ -1,7 +1,6 @@
|
|||||||
import React, { useState, useRef, useEffect } from 'react';
|
import React, { useState, useRef, useEffect } from 'react';
|
||||||
import { Terminal } from 'lucide-react';
|
import { Terminal } from 'lucide-react';
|
||||||
import { System } from '../shell/system';
|
import { System } from '../shell/system';
|
||||||
import '../styles/matrix.css';
|
|
||||||
|
|
||||||
const TerminalShell: React.FC = () => {
|
const TerminalShell: React.FC = () => {
|
||||||
const [history, setHistory] = useState<string[]>(['Welcome to the terminal! Type "help" for commands.']);
|
const [history, setHistory] = useState<string[]>(['Welcome to the terminal! Type "help" for commands.']);
|
||||||
@ -21,13 +20,12 @@ const TerminalShell: React.FC = () => {
|
|||||||
if (system.knowsCommand(cmdName)) {
|
if (system.knowsCommand(cmdName)) {
|
||||||
const output = system.executeCommand(cmdName, args);
|
const output = system.executeCommand(cmdName, args);
|
||||||
|
|
||||||
const newLines = output.split('\n').filter(l => l);
|
const newLines = output.split('\\n').filter(l => l);
|
||||||
|
|
||||||
setHistory(prev => [...prev, `$ ${command}`, ...newLines]);
|
setHistory(prev => [...prev, `$ ${command}`, ...newLines]);
|
||||||
} else {
|
} else {
|
||||||
setHistory(prev => [...prev, `$ ${command}`, `Command not found: ${cmdName}`]);
|
setHistory(prev => [...prev, `$ ${command}`, `Command not found: ${cmdName}`]);
|
||||||
}
|
}
|
||||||
|
|
||||||
setCurrentCommand('');
|
setCurrentCommand('');
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -36,8 +34,8 @@ const TerminalShell: React.FC = () => {
|
|||||||
<div className="h-full flex flex-col">
|
<div className="h-full flex flex-col">
|
||||||
<div className="flex-1 overflow-y-auto mb-4">
|
<div className="flex-1 overflow-y-auto mb-4">
|
||||||
{history.map((line, index) => (
|
{history.map((line, index) => (
|
||||||
<div key={index} className="mb-2" dangerouslySetInnerHTML={{ __html: line }}>
|
<div key={index} className="mb-2">
|
||||||
{/* Dangerously set inner HTML */}
|
{line}
|
||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
<div ref={bottomRef} />
|
<div ref={bottomRef} />
|
||||||
|
@ -189,42 +189,6 @@
|
|||||||
animation: horizontal-glare 4s linear infinite;
|
animation: horizontal-glare 4s linear infinite;
|
||||||
opacity: 0.3;
|
opacity: 0.3;
|
||||||
}
|
}
|
||||||
|
|
||||||
.cyberpunk-theme .terminal-button {
|
|
||||||
border-color: rgba(147, 51, 234, 0.3);
|
|
||||||
background: linear-gradient(180deg,
|
|
||||||
rgba(25, 0, 25, 0.9) 0%,
|
|
||||||
rgba(20, 0, 20, 0.95) 100%
|
|
||||||
);
|
|
||||||
color: #df6cfc;
|
|
||||||
text-shadow: 0 0 8px rgba(147, 51, 234, 0.5);
|
|
||||||
box-shadow:
|
|
||||||
inset 0 0 15px rgba(147, 51, 234, 0.1),
|
|
||||||
0 0 2px rgba(147, 51, 234, 0.5),
|
|
||||||
0 0 5px rgba(147, 51, 234, 0.2);
|
|
||||||
}
|
|
||||||
|
|
||||||
.cyberpunk-theme .terminal-button-selected {
|
|
||||||
color: #FF00FF;
|
|
||||||
text-shadow: 0 0 12px rgba(147, 51, 234, 0.8);
|
|
||||||
box-shadow:
|
|
||||||
inset 0 0 25px rgba(147, 51, 234, 0.2),
|
|
||||||
0 0 4px rgba(147, 51, 234, 0.6),
|
|
||||||
0 0 8px rgba(147, 51, 234, 0.3);
|
|
||||||
}
|
|
||||||
|
|
||||||
.cyberpunk-theme .typing-effect {
|
|
||||||
border-right-color: #df6cfc;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cyberpunk-theme input {
|
|
||||||
color: #df6cfc;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cyberpunk-theme .screen-content {
|
|
||||||
background-color: #1a001a;
|
|
||||||
color: #df6cfc;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes cursor-blink {
|
@keyframes cursor-blink {
|
||||||
|
@ -106,6 +106,4 @@ export class FileSystem {
|
|||||||
current.children!.delete(fileName);
|
current.children!.delete(fileName);
|
||||||
console.log(`[FileSystem] File deleted: ${path}`);
|
console.log(`[FileSystem] File deleted: ${path}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -40,8 +40,4 @@ export class ShellSyscall {
|
|||||||
deleteFile(path: string): void {
|
deleteFile(path: string): void {
|
||||||
this.fs.deleteFile(`${this.cwd}/${path}`);
|
this.fs.deleteFile(`${this.cwd}/${path}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
createDirectory(dirname: string): void {
|
|
||||||
this.fs.createDirectory(`${this.cwd}/${dirname}`);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
export interface IShellCommand {
|
export interface IShellCommand {
|
||||||
getName(): string;
|
getName(): string;
|
||||||
getManPage(): string;
|
|
||||||
execute(input: string | string[]): string;
|
execute(input: string | string[]): string;
|
||||||
}
|
}
|
@ -1,20 +0,0 @@
|
|||||||
import { IShellCommand } from "./IShellCommand";
|
|
||||||
|
|
||||||
export class about implements IShellCommand {
|
|
||||||
getName(): string {
|
|
||||||
return 'about';
|
|
||||||
}
|
|
||||||
|
|
||||||
execute(_: string | string[]): string {
|
|
||||||
let output = 'Really cool terminal ;)';
|
|
||||||
output += '\n\n';
|
|
||||||
output += 'Built by ivanch';
|
|
||||||
output += '\n';
|
|
||||||
|
|
||||||
return output;
|
|
||||||
}
|
|
||||||
|
|
||||||
getManPage(): string {
|
|
||||||
return 'about - about this terminal';
|
|
||||||
}
|
|
||||||
}
|
|
@ -12,8 +12,4 @@ export class cat implements IShellCommand {
|
|||||||
if (args.length === 0) return "cat: missing file operand";
|
if (args.length === 0) return "cat: missing file operand";
|
||||||
return this.syscall.readFile(args[0]);
|
return this.syscall.readFile(args[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
getManPage(): string {
|
|
||||||
return "cat - concatenate files and print on the standard output";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -13,8 +13,4 @@ export class cd implements IShellCommand {
|
|||||||
const success = this.syscall.changeDirectory(path);
|
const success = this.syscall.changeDirectory(path);
|
||||||
return success ? '' : 'Invalid directory';
|
return success ? '' : 'Invalid directory';
|
||||||
}
|
}
|
||||||
|
|
||||||
getManPage(): string {
|
|
||||||
return "cd - change the shell working directory";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,16 +0,0 @@
|
|||||||
import { IShellCommand } from './IShellCommand';
|
|
||||||
|
|
||||||
export class cyberpunk implements IShellCommand {
|
|
||||||
getName(): string {
|
|
||||||
return 'cyberpunk';
|
|
||||||
}
|
|
||||||
|
|
||||||
getManPage(): string {
|
|
||||||
return 'Changes the terminal color scheme to cyberpunk theme (purple)';
|
|
||||||
}
|
|
||||||
|
|
||||||
execute(): string {
|
|
||||||
document.documentElement.classList.toggle('cyberpunk-theme', true);
|
|
||||||
return 'Toggled cyberpunk theme!';
|
|
||||||
}
|
|
||||||
}
|
|
@ -11,8 +11,4 @@ export class echo implements IShellCommand {
|
|||||||
}
|
}
|
||||||
return input.trim();
|
return input.trim();
|
||||||
}
|
}
|
||||||
|
|
||||||
getManPage(): string {
|
|
||||||
return 'echo - echo a line of text';
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -12,8 +12,4 @@ export class ls implements IShellCommand {
|
|||||||
const files = this.syscall.listCurrentDirectory();
|
const files = this.syscall.listCurrentDirectory();
|
||||||
return files.join('\n');
|
return files.join('\n');
|
||||||
}
|
}
|
||||||
|
|
||||||
getManPage(): string {
|
|
||||||
return 'ls - list directory contents';
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,27 +0,0 @@
|
|||||||
import { IShellCommand } from "./IShellCommand";
|
|
||||||
import { System } from "../system";
|
|
||||||
|
|
||||||
export class man implements IShellCommand {
|
|
||||||
getName(): string {
|
|
||||||
return 'man';
|
|
||||||
}
|
|
||||||
|
|
||||||
getManPage(): string {
|
|
||||||
return 'man - display system reference manuals\n\nUsage: man command_name';
|
|
||||||
}
|
|
||||||
|
|
||||||
execute(args: string[]): string {
|
|
||||||
if (args.length !== 1) {
|
|
||||||
return 'Usage: man command_name';
|
|
||||||
}
|
|
||||||
|
|
||||||
const system = System.getInstance();
|
|
||||||
const command = system['commands'].find(c => c.getName() === args[0]);
|
|
||||||
|
|
||||||
if (!command) {
|
|
||||||
return `No manual entry for ${args[0]}`;
|
|
||||||
}
|
|
||||||
|
|
||||||
return command.getManPage();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,33 +0,0 @@
|
|||||||
import { IShellCommand } from "./IShellCommand";
|
|
||||||
|
|
||||||
export class matrix implements IShellCommand {
|
|
||||||
getName(): string {
|
|
||||||
return 'matrix';
|
|
||||||
}
|
|
||||||
|
|
||||||
getManPage(): string {
|
|
||||||
return 'matrix - displays a matrix-style text animation\n\nUsage: matrix';
|
|
||||||
}
|
|
||||||
|
|
||||||
execute(): string {
|
|
||||||
const width = 40;
|
|
||||||
const height = 15;
|
|
||||||
const characters = '日ハミヒーウシナモニサワツオリアホテマケメエカキムユラセネスタヌヘ';
|
|
||||||
|
|
||||||
const matrixHtml = `
|
|
||||||
<div class="matrix-text-animation">
|
|
||||||
${Array(height).fill(0).map(() => `
|
|
||||||
<div class="matrix-line">
|
|
||||||
${Array(width).fill(0).map(() => `
|
|
||||||
<span class="matrix-char" style="animation-delay: ${Math.random() * 5}s">
|
|
||||||
${characters[Math.floor(Math.random() * characters.length)]}
|
|
||||||
</span>
|
|
||||||
`).join('')}
|
|
||||||
</div>
|
|
||||||
`).join('')}
|
|
||||||
</div>
|
|
||||||
`;
|
|
||||||
|
|
||||||
return matrixHtml;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,23 +0,0 @@
|
|||||||
import { IShellCommand } from "./IShellCommand";
|
|
||||||
import { ShellSyscall } from "../ShellSyscall";
|
|
||||||
|
|
||||||
export class mkdir implements IShellCommand {
|
|
||||||
constructor(private syscall: ShellSyscall) {}
|
|
||||||
|
|
||||||
getName(): string {
|
|
||||||
return 'mkdir';
|
|
||||||
}
|
|
||||||
|
|
||||||
getManPage(): string {
|
|
||||||
return 'mkdir - make directories\n\nUsage: mkdir directory_name';
|
|
||||||
}
|
|
||||||
|
|
||||||
execute(args: string[]): string {
|
|
||||||
if (args.length !== 1) {
|
|
||||||
return 'Usage: mkdir directory_name';
|
|
||||||
}
|
|
||||||
|
|
||||||
this.syscall.createDirectory(args[0]);
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,31 +0,0 @@
|
|||||||
import { IShellCommand } from "./IShellCommand";
|
|
||||||
|
|
||||||
export class ping implements IShellCommand {
|
|
||||||
getName(): string {
|
|
||||||
return 'ping';
|
|
||||||
}
|
|
||||||
|
|
||||||
getManPage(): string {
|
|
||||||
return 'ping - send ICMP ECHO_REQUEST to network hosts\n\nUsage: ping [ip-address]';
|
|
||||||
}
|
|
||||||
|
|
||||||
execute(args: string[]): string {
|
|
||||||
if (args.length !== 1) {
|
|
||||||
return 'Usage: ping [ip-address]';
|
|
||||||
}
|
|
||||||
|
|
||||||
const ip = args[0];
|
|
||||||
let output = `PING ${ip} (${ip}) 56(84) bytes of data.\n`;
|
|
||||||
|
|
||||||
for (let i = 0; i < 4; i++) {
|
|
||||||
const time = Math.random() * 50 + 20;
|
|
||||||
output += `64 bytes from ${ip}: icmp_seq=${i + 1} ttl=64 time=${time.toFixed(1)} ms\n`;
|
|
||||||
}
|
|
||||||
|
|
||||||
output += '\n--- ping statistics ---\n';
|
|
||||||
output += `4 packets transmitted, 4 received, 0% packet loss, time 3000ms\n`;
|
|
||||||
output += `rtt min/avg/max/mdev = 20.0/30.0/40.0/5.0 ms\n`;
|
|
||||||
|
|
||||||
return output;
|
|
||||||
}
|
|
||||||
}
|
|
@ -11,8 +11,4 @@ export class pwd implements IShellCommand {
|
|||||||
execute(_: string[]): string {
|
execute(_: string[]): string {
|
||||||
return this.syscall.getCurrentDirectory();
|
return this.syscall.getCurrentDirectory();
|
||||||
}
|
}
|
||||||
|
|
||||||
getManPage(): string {
|
|
||||||
return "pwd - print name of current/working directory";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -21,8 +21,4 @@ export class rm implements IShellCommand {
|
|||||||
this.syscall.deleteFile(filename);
|
this.syscall.deleteFile(filename);
|
||||||
return `Removed ${filename}`;
|
return `Removed ${filename}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
getManPage(): string {
|
|
||||||
return "rm - remove files or directories";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,15 +0,0 @@
|
|||||||
import { IShellCommand } from "./IShellCommand";
|
|
||||||
|
|
||||||
export class sudo implements IShellCommand {
|
|
||||||
getName(): string {
|
|
||||||
return 'sudo';
|
|
||||||
}
|
|
||||||
|
|
||||||
getManPage(): string {
|
|
||||||
return 'sudo - execute a command as another user\n\nUsage: sudo command';
|
|
||||||
}
|
|
||||||
|
|
||||||
execute(args: string[]): string {
|
|
||||||
return 'Permission denied';
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,16 +0,0 @@
|
|||||||
import { IShellCommand } from './IShellCommand';
|
|
||||||
|
|
||||||
export class terminal implements IShellCommand {
|
|
||||||
getName(): string {
|
|
||||||
return 'terminal';
|
|
||||||
}
|
|
||||||
|
|
||||||
getManPage(): string {
|
|
||||||
return 'Changes the terminal color scheme to terminal theme (green)';
|
|
||||||
}
|
|
||||||
|
|
||||||
execute(): string {
|
|
||||||
document.documentElement.classList.toggle('cyberpunk-theme', false);
|
|
||||||
return 'Toggled terminal theme!';
|
|
||||||
}
|
|
||||||
}
|
|
@ -13,8 +13,4 @@ export class touch implements IShellCommand {
|
|||||||
this.syscall.createFile(args[0]);
|
this.syscall.createFile(args[0]);
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
getManPage(): string {
|
|
||||||
return "touch - create an empty file";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,37 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
echo "[*] Initializing system breach protocol..."
|
|
||||||
sleep 1
|
|
||||||
echo "[+] Establishing secure connection to target..."
|
|
||||||
sleep 0.5
|
|
||||||
echo "[*] Running port scan on target system..."
|
|
||||||
sleep 1
|
|
||||||
echo "[+] Found vulnerable ports: 22, 80, 443"
|
|
||||||
sleep 0.5
|
|
||||||
echo "[*] Attempting SSH vulnerability exploit..."
|
|
||||||
sleep 1
|
|
||||||
echo "[+] Access granted to remote system"
|
|
||||||
sleep 0.5
|
|
||||||
echo "[*] Bypassing firewall rules..."
|
|
||||||
sleep 1
|
|
||||||
echo "[+] Firewall successfully circumvented"
|
|
||||||
sleep 0.5
|
|
||||||
echo "[*] Extracting system information..."
|
|
||||||
sleep 1
|
|
||||||
echo "[+] OS Version: Linux 5.15.0-generic"
|
|
||||||
sleep 0.5
|
|
||||||
echo "[*] Escalating privileges..."
|
|
||||||
sleep 1
|
|
||||||
echo "[+] Root access achieved"
|
|
||||||
sleep 0.5
|
|
||||||
echo "[*] Downloading sensitive data..."
|
|
||||||
sleep 5
|
|
||||||
echo "[+] Download complete: 1.2GB transferred"
|
|
||||||
sleep 0.5
|
|
||||||
echo "[*] Covering tracks..."
|
|
||||||
sleep 1
|
|
||||||
echo "[+] Logs cleared"
|
|
||||||
sleep 0.5
|
|
||||||
echo "[*] Disconnecting from target system..."
|
|
||||||
sleep 1
|
|
||||||
echo "[+] Operation completed successfully"
|
|
@ -5,17 +5,9 @@ import { cd } from "./commands/cd";
|
|||||||
import { touch } from "./commands/touch";
|
import { touch } from "./commands/touch";
|
||||||
import { cat } from "./commands/cat";
|
import { cat } from "./commands/cat";
|
||||||
import { rm } from "./commands/rm";
|
import { rm } from "./commands/rm";
|
||||||
import { ping } from "./commands/ping";
|
|
||||||
import { mkdir } from "./commands/mkdir";
|
|
||||||
import { man } from "./commands/man";
|
|
||||||
import { sudo } from "./commands/sudo";
|
|
||||||
import { IShellCommand } from "./commands/IShellCommand";
|
import { IShellCommand } from "./commands/IShellCommand";
|
||||||
import { FileSystem } from "./FileSystem";
|
import { FileSystem } from "./FileSystem";
|
||||||
import { ShellSyscall } from "./ShellSyscall";
|
import { ShellSyscall } from "./ShellSyscall";
|
||||||
import { about } from "./commands/about";
|
|
||||||
import { matrix } from "./commands/matrix";
|
|
||||||
import { cyberpunk } from './commands/cyberpunk';
|
|
||||||
import { terminal } from './commands/terminal';
|
|
||||||
|
|
||||||
// System class to manage commands
|
// System class to manage commands
|
||||||
class System {
|
class System {
|
||||||
@ -40,14 +32,6 @@ class System {
|
|||||||
this.commands.push(new touch(syscall));
|
this.commands.push(new touch(syscall));
|
||||||
this.commands.push(new cat(syscall));
|
this.commands.push(new cat(syscall));
|
||||||
this.commands.push(new rm(syscall));
|
this.commands.push(new rm(syscall));
|
||||||
this.commands.push(new ping());
|
|
||||||
this.commands.push(new mkdir(syscall));
|
|
||||||
this.commands.push(new man());
|
|
||||||
this.commands.push(new sudo());
|
|
||||||
this.commands.push(new about());
|
|
||||||
// this.commands.push(new matrix());
|
|
||||||
this.commands.push(new cyberpunk());
|
|
||||||
this.commands.push(new terminal());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static getInstance(): System {
|
public static getInstance(): System {
|
||||||
@ -58,14 +42,10 @@ class System {
|
|||||||
}
|
}
|
||||||
|
|
||||||
knowsCommand(commandName: string): boolean {
|
knowsCommand(commandName: string): boolean {
|
||||||
return commandName === 'help' || this.commands.some(c => c.getName() === commandName);
|
return this.commands.some(c => c.getName() === commandName);
|
||||||
}
|
}
|
||||||
|
|
||||||
executeCommand(commandName: string, args: string[]): string {
|
executeCommand(commandName: string, args: string[]): string {
|
||||||
if (commandName === 'help') {
|
|
||||||
return this.commands.map(c => c.getName()).join('\n');
|
|
||||||
}
|
|
||||||
|
|
||||||
const command = this.commands.find(c => c.getName() === commandName);
|
const command = this.commands.find(c => c.getName() === commandName);
|
||||||
if (command) {
|
if (command) {
|
||||||
return command.execute(args);
|
return command.execute(args);
|
||||||
|
@ -1,30 +0,0 @@
|
|||||||
.matrix-text-animation {
|
|
||||||
color: #0F0;
|
|
||||||
font-family: monospace;
|
|
||||||
line-height: 1;
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
.matrix-line {
|
|
||||||
white-space: pre;
|
|
||||||
}
|
|
||||||
.matrix-char {
|
|
||||||
opacity: 0;
|
|
||||||
display: inline-block;
|
|
||||||
animation: matrix-fade 3s infinite;
|
|
||||||
}
|
|
||||||
@keyframes matrix-fade {
|
|
||||||
0%, 100% { opacity: 0; }
|
|
||||||
50% { opacity: 1; }
|
|
||||||
}
|
|
||||||
.matrix-text-animation::after {
|
|
||||||
content: "Wake up, Neo...";
|
|
||||||
display: block;
|
|
||||||
color: #0F0;
|
|
||||||
font-weight: bold;
|
|
||||||
margin-top: 1em;
|
|
||||||
animation: text-fade 4s infinite;
|
|
||||||
}
|
|
||||||
@keyframes text-fade {
|
|
||||||
0%, 100% { opacity: 0; }
|
|
||||||
50% { opacity: 1; }
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user