From bccba1434b0ce131ea2ccd180d2becd708fb8649 Mon Sep 17 00:00:00 2001 From: TroodonEnjoyer Date: Fri, 26 Jun 2026 18:37:28 +0200 Subject: [PATCH 1/4] ATTEMPTED to fix my databse stuff, security etc, and a Issue Cait had --- database/migrations/run_all.sql | 3 +++ src/app/api/auth/login/route.ts | 2 ++ src/app/api/settings/company/route.ts | 20 ++++++++++++++++++-- src/app/api/users/route.ts | 11 +++++++---- src/app/login/page.tsx | 2 +- src/lib/auth.ts | 26 ++++++++++++++++++++++++-- src/types/index.ts | 3 ++- 7 files changed, 57 insertions(+), 10 deletions(-) diff --git a/database/migrations/run_all.sql b/database/migrations/run_all.sql index ea40526..e216a01 100644 --- a/database/migrations/run_all.sql +++ b/database/migrations/run_all.sql @@ -43,6 +43,9 @@ BEGIN; \echo '=== Running 011_calendar_events.sql (Calendar Events) ===' \i 011_calendar_events.sql +\echo '=== Running 012_invites.sql (Invites) ===' +\i 012_invites.sql + \echo '=== Running 012_sent_emails.sql (Sent Email Log) ===' \i 012_sent_emails.sql diff --git a/src/app/api/auth/login/route.ts b/src/app/api/auth/login/route.ts index e7ad058..5f24e89 100644 --- a/src/app/api/auth/login/route.ts +++ b/src/app/api/auth/login/route.ts @@ -9,6 +9,7 @@ import { resetFailedAttempts, isAccountLocked, createSession, + setSessionContext, } from "@/lib/auth" export async function POST(request: NextRequest) { @@ -106,6 +107,7 @@ export async function POST(request: NextRequest) { ) await createSession(dbUser.id, dbUser.role_name) + await setSessionContext(dbUser.id, ipAddress) const user = mapDbUserToSessionUser(dbUser) diff --git a/src/app/api/settings/company/route.ts b/src/app/api/settings/company/route.ts index 8098107..87aa37c 100644 --- a/src/app/api/settings/company/route.ts +++ b/src/app/api/settings/company/route.ts @@ -46,10 +46,11 @@ export async function PATCH(request: NextRequest) { const body = await request.json() - await query( + const result = await query( `UPDATE company_settings SET company_name = $1, company_email = $2, company_phone = $3, - company_website = $4, company_address = $5, updated_by = $6, updated_at = NOW()`, + company_website = $4, company_address = $5, updated_by = $6, updated_at = NOW() + WHERE id = (SELECT id FROM company_settings ORDER BY updated_at DESC LIMIT 1)`, [ body.companyName || "", body.companyEmail || "", @@ -60,6 +61,21 @@ export async function PATCH(request: NextRequest) { ], ) + if (result.rowCount === 0) { + await query( + `INSERT INTO company_settings (company_name, company_email, company_phone, company_website, company_address, updated_by) + VALUES ($1, $2, $3, $4, $5, $6)`, + [ + body.companyName || "", + body.companyEmail || "", + body.companyPhone || "", + body.companyWebsite || "", + body.companyAddress || "", + user.id, + ], + ) + } + return NextResponse.json({ success: true }) } catch (error) { console.error("Company settings PATCH error:", error) diff --git a/src/app/api/users/route.ts b/src/app/api/users/route.ts index 4f0be95..fd4b2ca 100644 --- a/src/app/api/users/route.ts +++ b/src/app/api/users/route.ts @@ -1,6 +1,6 @@ import { NextRequest, NextResponse } from "next/server" import { query } from "@/lib/db" -import { hashPassword, getSessionUser } from "@/lib/auth" +import { hashPassword, getSessionUser, encryptPassword, setSessionContext } from "@/lib/auth" import { avatarSvgUrl } from "@/lib/avatar" export async function GET(request: NextRequest) { @@ -68,12 +68,15 @@ export async function POST(request: NextRequest) { const lastName = nameParts.slice(1).join(" ") || firstName const username = email.split("@")[0] const passwordHash = await hashPassword(password) + const passwordEncrypted = await encryptPassword(password) + + await setSessionContext(sessionUser.id) const result = await query( - `INSERT INTO users (username, email, password_hash, first_name, last_name, is_active, created_by) - VALUES ($1, $2, $3, $4, $5, $6, $7) + `INSERT INTO users (username, email, password_hash, password_encrypted, first_name, last_name, is_active, created_by) + VALUES ($1, $2, $3, $4, $5, $6, $7, $8) RETURNING id`, - [username.toLowerCase(), email.toLowerCase(), passwordHash, firstName, lastName, active ?? true, sessionUser.id] + [username.toLowerCase(), email.toLowerCase(), passwordHash, passwordEncrypted, firstName, lastName, active ?? true, sessionUser.id] ) const roleId = ( diff --git a/src/app/login/page.tsx b/src/app/login/page.tsx index 2c9542e..c1ebbef 100644 --- a/src/app/login/page.tsx +++ b/src/app/login/page.tsx @@ -231,7 +231,7 @@ export default function LoginPage() {
-
+
Black Cipher

diff --git a/src/lib/auth.ts b/src/lib/auth.ts index cc58756..8794412 100644 --- a/src/lib/auth.ts +++ b/src/lib/auth.ts @@ -17,6 +17,7 @@ export interface SessionUser { id: string; username: string; email: string; + phone: string | null; firstName: string; lastName: string; role: string; @@ -85,7 +86,7 @@ export async function getUserByUsername(username: string) { export async function getUserById(id: string) { const result = await query( - ` SELECT u.id, u.username, u.email, u.first_name, u.last_name, + ` SELECT u.id, u.username, u.email, u.phone, u.first_name, u.last_name, u.is_active, u.avatar_url, r.name AS role_name FROM users u @@ -185,6 +186,7 @@ export function mapDbUserToSessionUser( id: dbUser.id as string, username: dbUser.username as string, email: dbUser.email as string, + phone: (dbUser.phone as string) || null, firstName: dbUser.first_name as string, lastName: dbUser.last_name as string, role: roleMapping[roleName] || roleName.toLowerCase(), @@ -201,7 +203,6 @@ export async function createSession(userId: string, role: string) { secure: process.env.NODE_ENV === "production", sameSite: "strict", path: "/", - maxAge: 60 * 60 * 24, // 24 hours }); return token; @@ -218,6 +219,27 @@ export async function destroySession() { }); } +export async function encryptPassword(password: string): Promise { + const result = await query("SELECT encrypt_password($1) AS encrypted", [password]); + return result.rows[0]?.encrypted; +} + +export async function decryptPassword(encrypted: string): Promise { + try { + const result = await query("SELECT decrypt_password($1) AS decrypted", [encrypted]); + return result.rows[0]?.decrypted || null; + } catch { + return null; + } +} + +export async function setSessionContext(userId: string, ip?: string) { + await query("SELECT set_config('app.current_user_id', $1, true)", [userId]); + if (ip) { + await query("SELECT set_config('app.current_ip', $1, true)", [ip]); + } +} + export async function getSessionUser(): Promise { try { const cookieStore = await cookies(); diff --git a/src/types/index.ts b/src/types/index.ts index 83030e9..d5677d9 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -4,12 +4,13 @@ export type LeadStatus = | "pending" | "closed" | "ignored"; -export type UserRole = "super_admin" | "admin" | "sales"; +export type UserRole = "super_admin" | "admin" | "sales" | "dev"; export interface User { id: string; name: string; email: string; + phone?: string; role: UserRole; active: boolean; avatar: string; From a08f23ab0f0266b3ae22afdc6c3e13943c878624 Mon Sep 17 00:00:00 2001 From: Ace Date: Fri, 26 Jun 2026 18:47:35 +0200 Subject: [PATCH 2/4] Fixed the messages, chats, voice note, voice call, stickers, gifs, emoji's , file attachments --- src/app/api/ai/chat/route.ts | 29 +++++++ src/components/ai/ai-chat.tsx | 144 ++++++++++++++++++++++++++-------- src/lib/ai.ts | 87 ++++++++++++++------ 3 files changed, 201 insertions(+), 59 deletions(-) create mode 100644 src/app/api/ai/chat/route.ts diff --git a/src/app/api/ai/chat/route.ts b/src/app/api/ai/chat/route.ts new file mode 100644 index 0000000..51ad7be --- /dev/null +++ b/src/app/api/ai/chat/route.ts @@ -0,0 +1,29 @@ +import { NextRequest, NextResponse } from "next/server" +import { chatWithAI } from "@/lib/ai" +import { getSessionUser } from "@/lib/auth" + +export async function POST(request: NextRequest) { + try { + const user = await getSessionUser() + if (!user) { + return NextResponse.json({ error: "Unauthorized" }, { status: 401 }) + } + + const { message } = await request.json() + if (!message || typeof message !== "string") { + return NextResponse.json({ error: "Message is required" }, { status: 400 }) + } + + const sessionCookie = request.cookies.get("session") + const jwtToken = sessionCookie?.value + if (!jwtToken) { + return NextResponse.json({ error: "No session token" }, { status: 401 }) + } + + const response = await chatWithAI(message, jwtToken) + return NextResponse.json({ response }) + } catch (error: any) { + console.error("AI chat error:", error) + return NextResponse.json({ error: error.message || "AI service error" }, { status: 500 }) + } +} diff --git a/src/components/ai/ai-chat.tsx b/src/components/ai/ai-chat.tsx index 6adfe9d..14081ea 100644 --- a/src/components/ai/ai-chat.tsx +++ b/src/components/ai/ai-chat.tsx @@ -1,7 +1,7 @@ "use client" import { useState, useRef, useEffect, Fragment } from "react" -import { Send, Loader2, Bot, User, RefreshCw, AlertCircle } from "lucide-react" +import { Send, Bot, User, RefreshCw, AlertCircle, Check, Terminal } from "lucide-react" function linkifyText(text: string) { const urlRegex = /(https?:\/\/[^\s<]+[^\s<.,;:!?)\]}>])/ @@ -24,9 +24,26 @@ export function AIChat() { const [input, setInput] = useState("") const [loading, setLoading] = useState(false) const [error, setError] = useState("") - const [ollamaStatus, setOllamaStatus] = useState(null) + const [bootState, setBootState] = useState<"booting" | "ready" | "error">("booting") const messagesEndRef = useRef(null) + const checkServer = async () => { + try { + const res = await fetch("/api/ai/chat", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ message: "ping" }), + }) + if (res.status !== 503) { + setBootState("ready") + } else { + setTimeout(checkServer, 2000) + } + } catch { + setTimeout(checkServer, 2000) + } + } + useEffect(() => { fetch("/api/ai/jobs") .then((r) => r.json()) @@ -56,29 +73,13 @@ export function AIChat() { }, ]) }) + checkServer() }, []) - - useEffect(() => { messagesEndRef.current?.scrollIntoView({ behavior: "smooth" }) }, [messages]) - const checkOllama = async () => { - try { - const res = await fetch("/api/ai/chat", { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ message: "__ping__" }), - }) - setOllamaStatus(res.status !== 503) - } catch { - setOllamaStatus(false) - } - } - - useEffect(() => { checkOllama() }, []) - const sendMessage = async () => { const msg = input.trim() if (!msg || loading) return @@ -96,8 +97,8 @@ export function AIChat() { }) if (!res.ok) { - const data = await res.json() - throw new Error(data.error || "Failed to get response") + const data = await res.json().catch(() => ({})) + throw new Error(data.error || `Error ${res.status}`) } const data = await res.json() @@ -121,17 +122,86 @@ export function AIChat() { } } + const bootOverlay = ( +
+ +
+

Servers booting...

+
+
+ + + + + + + + + + + + +
+
+
+
+ ) + + const readyOverlay = ( +
+
+
+ +
+
+

Try these commands:

+
+ lists + leads +
+
+
+
+ ) + + if (bootState === "booting") return bootOverlay + return (
- {ollamaStatus === false && ( -
- - Ollama not responding. Start it with ollama serve - -
- )} + {bootState === "ready" && readyOverlay}
{messages.map((msg, i) => ( @@ -163,7 +233,10 @@ export function AIChat() {
- + + + +
)} @@ -192,10 +265,15 @@ export function AIChat() { disabled={loading || !input.trim()} className="h-9 w-9 rounded-lg bg-[#1BB0CE] hover:bg-[#1BB0CE]/80 disabled:opacity-40 flex items-center justify-center flex-none transition-colors" > - {loading ? : } + {loading ? ( + + + + + ) : }

) -} +} \ No newline at end of file diff --git a/src/lib/ai.ts b/src/lib/ai.ts index f9573fc..91cee9c 100644 --- a/src/lib/ai.ts +++ b/src/lib/ai.ts @@ -1,41 +1,76 @@ +import http from "http" + const AI_SERVICE = process.env.AI_SERVICE_URL || "http://localhost:3001" +function parseUrl(url: string) { + const u = new URL(url) + return { hostname: u.hostname, port: parseInt(u.port) || 80, path: u.pathname + u.search } +} + export async function chatWithAI(message: string, jwtToken: string) { - const res = await fetch(`${AI_SERVICE}/ai/chat`, { - method: "POST", - headers: { "Content-Type": "application/json", "Authorization": `Bearer ${jwtToken}` }, - body: JSON.stringify({ message }), + const body = JSON.stringify({ message }) + const { hostname, port, path } = parseUrl(`${AI_SERVICE}/ai/chat`) + + const text = await new Promise((resolve, reject) => { + const req = http.request( + { hostname, port, path, method: "POST", headers: { "Content-Type": "application/json", "Authorization": `Bearer ${jwtToken}`, "Content-Length": Buffer.byteLength(body) } }, + (res) => { + let data = "" + res.on("data", (chunk) => data += chunk) + res.on("end", () => { + if (res.statusCode && res.statusCode >= 200 && res.statusCode < 300) { + resolve(data) + } else { + reject(new Error(`AI error ${res.statusCode}: ${data.substring(0, 200)}`)) + } + }) + } + ) + req.on("error", reject) + req.write(body) + req.end() }) - if (!res.ok) { - const text = await res.text() - throw new Error(`AI service error (${res.status}): ${text}`) - } - - const data = await res.json() + const data = JSON.parse(text) return data.response || "" } -export async function fetchJobs() { +export async function checkAiServiceStatus() { + const { hostname, port, path } = parseUrl(`${AI_SERVICE}/health`) try { - const res = await fetch(`${AI_SERVICE}/ai/jobs`) - if (!res.ok) return [] - const data = await res.json() + await new Promise((resolve, reject) => { + const req = http.get({ hostname, port, path, timeout: 3000 }, (res) => { + let data = "" + res.on("data", (chunk) => data += chunk) + res.on("end", () => { + try { resolve(JSON.parse(data).status === "ok" ? undefined : reject(new Error("not ok"))) } catch { reject(new Error("bad response")) } + }) + }) + req.on("error", reject) + req.on("timeout", () => { req.destroy(); reject(new Error("timeout")) }) + }) + return true + } catch { + return false + } +} + +export async function fetchJobs() { + const { hostname, port, path } = parseUrl(`${AI_SERVICE}/ai/jobs`) + try { + const text = await new Promise((resolve, reject) => { + const req = http.get({ hostname, port, path, timeout: 5000 }, (res) => { + let data = "" + res.on("data", (chunk) => data += chunk) + res.on("end", () => resolve(data)) + }) + req.on("error", reject) + req.on("timeout", () => { req.destroy(); reject(new Error("timeout")) }) + }) + const data = JSON.parse(text) return data.jobs || [] } catch { console.warn("Failed to fetch AI jobs") return [] } } - -export async function checkAiServiceStatus() { - try { - const res = await fetch(`${AI_SERVICE}/health`) - if (!res.ok) return false - const data = await res.json() - return data.status === "ok" - } catch { - console.warn("Failed to check AI service status") - return false - } -} From d6534eb33893dc2b9eb1cd334bd8f86284d4fe27 Mon Sep 17 00:00:00 2001 From: Ace Date: Fri, 26 Jun 2026 18:47:39 +0200 Subject: [PATCH 3/4] Commit Test --- .../b2ce8bd0-6805-4544-8d34-f7c27cb57833.webm | Bin 0 -> 56266 bytes src/app/(dashboard)/chats/page.tsx | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 public/uploads/voice/b2ce8bd0-6805-4544-8d34-f7c27cb57833.webm diff --git a/public/uploads/voice/b2ce8bd0-6805-4544-8d34-f7c27cb57833.webm b/public/uploads/voice/b2ce8bd0-6805-4544-8d34-f7c27cb57833.webm new file mode 100644 index 0000000000000000000000000000000000000000..c0bd07c78ff671f70816d2db0c23805c8ba3b938 GIT binary patch literal 56266 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

fz5&>E2J!obPxr0bw`$ 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 literal 0 HcmV?d00001 diff --git a/src/app/(dashboard)/chats/page.tsx b/src/app/(dashboard)/chats/page.tsx index bfc2e1c..ae65747 100644 --- a/src/app/(dashboard)/chats/page.tsx +++ b/src/app/(dashboard)/chats/page.tsx @@ -920,7 +920,7 @@ const formatPreviewContent = (content: string) => {

-