├── .env.example ├── .gitignore ├── Dockerfile ├── README.md ├── app ├── .DS_Store ├── animation-demo │ └── page.tsx ├── api │ ├── .DS_Store │ ├── analytics │ │ └── performance │ │ │ └── route.ts │ ├── auth │ │ ├── change-password │ │ │ └── route.ts │ │ ├── check-users │ │ │ └── route.ts │ │ ├── get-user │ │ │ └── route.ts │ │ ├── login │ │ │ └── route.ts │ │ ├── logout │ │ │ └── route.ts │ │ └── register-first-user │ │ │ └── route.ts │ ├── browser-analysis │ │ └── route.ts │ ├── debug-large-zip │ │ └── route.ts │ ├── device-credentials │ │ └── route.ts │ ├── download-device │ │ └── route.ts │ ├── file-content │ │ └── route.ts │ ├── rss-feeds │ │ └── route.ts │ ├── search │ │ └── route.ts │ ├── software-analysis │ │ └── route.ts │ ├── stats │ │ └── route.ts │ ├── top-tlds │ │ └── route.ts │ ├── upload-logs │ │ └── route.ts │ └── upload │ │ └── route.ts ├── components │ └── logout-button.tsx ├── dashboard │ ├── loading.tsx │ └── page.tsx ├── debug-zip │ └── page.tsx ├── globals.css ├── layout.tsx ├── loading.tsx ├── login │ └── page.tsx ├── page.tsx └── upload │ └── page.tsx ├── components.json ├── components ├── animated-counter.tsx ├── animated-software-list.tsx ├── animated-stat-card.tsx ├── animation-demo.tsx ├── app-header.tsx ├── app-sidebar.tsx ├── auth-guard.tsx ├── browser-vertical-bar-chart.tsx ├── change-password-modal.tsx ├── client-layout-with-sidebar.tsx ├── device │ ├── CredentialsTable.tsx │ └── DeviceDetailsPanel.tsx ├── error-boundary.tsx ├── file │ ├── FileContentDialog.tsx │ └── FileTreeViewer.tsx ├── force-refresh-wrapper.tsx ├── search │ ├── SearchInterface.tsx │ ├── SearchResults.tsx │ └── TypingEffect.tsx ├── theme-provider.tsx ├── ui │ ├── accordion.tsx │ ├── alert-dialog.tsx │ ├── alert.tsx │ ├── aspect-ratio.tsx │ ├── avatar.tsx │ ├── badge.tsx │ ├── breadcrumb.tsx │ ├── button.tsx │ ├── calendar.tsx │ ├── card.tsx │ ├── carousel.tsx │ ├── chart.tsx │ ├── checkbox.tsx │ ├── collapsible.tsx │ ├── command.tsx │ ├── context-menu.tsx │ ├── dialog.tsx │ ├── drawer.tsx │ ├── dropdown-menu.tsx │ ├── form.tsx │ ├── hover-card.tsx │ ├── input-otp.tsx │ ├── input.tsx │ ├── label.tsx │ ├── loading.tsx │ ├── menubar.tsx │ ├── navigation-menu.tsx │ ├── pagination.tsx │ ├── popover.tsx │ ├── progress.tsx │ ├── radio-group.tsx │ ├── resizable.tsx │ ├── scroll-area.tsx │ ├── select.tsx │ ├── separator.tsx │ ├── sheet.tsx │ ├── sidebar.tsx │ ├── skeleton.tsx │ ├── slider.tsx │ ├── sonner.tsx │ ├── switch.tsx │ ├── table.tsx │ ├── tabs.tsx │ ├── textarea.tsx │ ├── toast.tsx │ ├── toaster.tsx │ ├── toggle-group.tsx │ ├── toggle.tsx │ ├── tooltip.tsx │ ├── use-mobile.tsx │ └── use-toast.ts └── user-profile-dropdown.tsx ├── docker-compose.yml ├── hooks ├── use-mobile.tsx ├── use-toast.ts ├── useAuth.ts ├── useSearch.ts └── useStats.ts ├── images ├── Bron-Vault---Search-I.png ├── Bron-Vault---Search-II.png ├── Bron-Vault---Search-III.png └── Bron-Vault-Dashboard.jpeg ├── lib ├── accessibility.ts ├── auth.ts ├── file-tree-utils.tsx ├── logger.ts ├── memory-storage.ts ├── mysql.ts ├── performance.ts ├── rate-limiter.ts ├── software-parser.ts ├── upload-connections.ts ├── utils.ts └── validation.ts ├── middleware.ts ├── next-env.d.ts ├── next.config.mjs ├── package.json ├── postcss.config.mjs ├── public ├── .DS_Store ├── images │ ├── favicon.png │ ├── logo-light.png │ └── logo.png ├── placeholder-logo.png ├── placeholder-logo.svg ├── placeholder-user.jpg ├── placeholder.jpg └── placeholder.svg ├── scripts ├── 001_create_tables.sql ├── 002_create_users_table.sql ├── 004_add_local_file_path.sql ├── analyze-bundle.js └── mysql-setup.sql ├── styles └── globals.css ├── tailwind.config.ts └── tsconfig.json /.env.example: -------------------------------------------------------------------------------- 1 | # Add MYSQL_ROOT_PASSWORD and remove MYSQL_HOST if you're using docker 2 | MYSQL_HOST=localhost 3 | MYSQL_PORT=3306 4 | MYSQL_USER=dbuser 5 | MYSQL_PASSWORD=dbpass 6 | MYSQL_DATABASE=dbname -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .env 2 | .env.local 3 | node_modules/* 4 | .next/* 5 | uploads/* -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | # Install dependencies only when needed 2 | FROM node:20-alpine AS deps 3 | WORKDIR /app 4 | COPY package.json ./ 5 | RUN yarn install --frozen-lockfile 6 | 7 | # Rebuild the source code only when needed 8 | FROM node:20-alpine AS builder 9 | WORKDIR /app 10 | COPY . . 11 | COPY --from=deps /app/node_modules ./node_modules 12 | RUN yarn build 13 | 14 | # Production image, copy all the files and run next 15 | FROM node:20-alpine AS runner 16 | WORKDIR /app 17 | ENV NODE_ENV=production 18 | 19 | # Copy only necessary files 20 | COPY --from=builder /app/.next ./.next 21 | COPY --from=builder /app/public ./public 22 | COPY --from=builder /app/package.json ./package.json 23 | COPY --from=builder /app/node_modules ./node_modules 24 | COPY --from=builder /app/next.config.mjs ./next.config.mjs 25 | COPY --from=builder /app/tailwind.config.ts ./tailwind.config.ts 26 | COPY --from=builder /app/postcss.config.mjs ./postcss.config.mjs 27 | COPY --from=builder /app/app ./app 28 | COPY --from=builder /app/components ./components 29 | COPY --from=builder /app/hooks ./hooks 30 | COPY --from=builder /app/lib ./lib 31 | COPY --from=builder /app/styles ./styles 32 | 33 | EXPOSE 3000 34 | 35 | CMD ["yarn", "start"] -------------------------------------------------------------------------------- /app/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ITSEC-Research/bron-vault/77dabb1534e5232c16e6ddb0345cb663c170facc/app/.DS_Store -------------------------------------------------------------------------------- /app/animation-demo/page.tsx: -------------------------------------------------------------------------------- 1 | "use client" 2 | 3 | import { AnimationDemo } from "@/components/animation-demo" 4 | 5 | export default function AnimationDemoPage() { 6 | return ( 7 |
14 | Animation demonstration that has been added to the broń Vault dashboard 15 |
16 |No software data available
27 |Upload some stealer logs to see software statistics
28 |34 | {label} 35 |
36 |76 | Where stolen data meets structured investigation. 77 |
78 |Checking authentication...
20 |Authentication required
32 |Redirecting to login...
33 |60 | {this.state.error?.message || "An unexpected error occurred"} 61 |
62 | {process.env.NODE_ENV === 'development' && this.state.errorId && ( 63 |64 | Error ID: {this.state.errorId} 65 |
66 | )} 67 | 73 |163 | {body} 164 |
165 | ) 166 | }) 167 | FormMessage.displayName = "FormMessage" 168 | 169 | export { 170 | useFormField, 171 | Form, 172 | FormItem, 173 | FormLabel, 174 | FormControl, 175 | FormDescription, 176 | FormMessage, 177 | FormField, 178 | } 179 | -------------------------------------------------------------------------------- /components/ui/hover-card.tsx: -------------------------------------------------------------------------------- 1 | "use client" 2 | 3 | import * as React from "react" 4 | import * as HoverCardPrimitive from "@radix-ui/react-hover-card" 5 | 6 | import { cn } from "@/lib/utils" 7 | 8 | const HoverCard = HoverCardPrimitive.Root 9 | 10 | const HoverCardTrigger = HoverCardPrimitive.Trigger 11 | 12 | const HoverCardContent = React.forwardRef< 13 | React.ElementRef{user.name}
101 |{user.email}
102 |