Websocket and auth fixes
This commit is contained in:
+25
-22
@@ -1,12 +1,6 @@
|
||||
import { NextRequest, NextResponse } from "next/server";
|
||||
import { StatusCodes } from "http-status-codes";
|
||||
import { supabase } from "../supa";
|
||||
|
||||
const SERVER_AUTH_TOKENS = new Map<
|
||||
string,
|
||||
{ user_id: string; server_id: string }
|
||||
>();
|
||||
|
||||
/**
|
||||
* GET /api/auth?token=<relayToken>?key=<serverKey>
|
||||
* Called by a (DM node / Server) to verify a temporary relay token.
|
||||
@@ -16,31 +10,36 @@ export async function GET(req: NextRequest) {
|
||||
const token = url.searchParams.get("token");
|
||||
const key = url.searchParams.get("key");
|
||||
|
||||
if (!token || !key) {
|
||||
if (!token || !key)
|
||||
return NextResponse.json(
|
||||
{ message: "There should be a token and a key parameter" },
|
||||
{ status: StatusCodes.BAD_REQUEST }
|
||||
);
|
||||
}
|
||||
|
||||
const { data: server } = await supabase
|
||||
.from("servers")
|
||||
.select("id, created_at, owner, address")
|
||||
.eq("key", key)
|
||||
.maybeSingle();
|
||||
|
||||
if (!server)
|
||||
return NextResponse.json(
|
||||
{ message: "Key unauthorized" },
|
||||
{ status: StatusCodes.UNAUTHORIZED }
|
||||
);
|
||||
|
||||
const auth = SERVER_AUTH_TOKENS.get(token);
|
||||
if (!auth) {
|
||||
const { data: auth } = await supabase
|
||||
.from("server_auth")
|
||||
.delete()
|
||||
.eq("key", token)
|
||||
.select()
|
||||
.maybeSingle();
|
||||
|
||||
if (!auth)
|
||||
return NextResponse.json(
|
||||
{ message: "Invalid or expired token" },
|
||||
{ status: StatusCodes.NOT_FOUND }
|
||||
);
|
||||
}
|
||||
|
||||
if (auth.server_id !== server.id)
|
||||
return NextResponse.json(
|
||||
@@ -48,8 +47,6 @@ export async function GET(req: NextRequest) {
|
||||
{ status: StatusCodes.UNAUTHORIZED }
|
||||
);
|
||||
|
||||
SERVER_AUTH_TOKENS.delete(token);
|
||||
|
||||
return NextResponse.json({ message: "ok", ...auth });
|
||||
}
|
||||
|
||||
@@ -76,12 +73,10 @@ export async function POST(req: NextRequest) {
|
||||
{ status: StatusCodes.BAD_REQUEST }
|
||||
);
|
||||
|
||||
const supabaseToken = authHeader.value;
|
||||
|
||||
const {
|
||||
data: { user },
|
||||
error,
|
||||
} = await supabase.auth.getUser(supabaseToken);
|
||||
} = await supabase.auth.getUser(authHeader.value);
|
||||
|
||||
if (error || !user) {
|
||||
return NextResponse.json(
|
||||
@@ -90,12 +85,20 @@ export async function POST(req: NextRequest) {
|
||||
);
|
||||
}
|
||||
|
||||
const relayToken = crypto.randomUUID();
|
||||
const { data: relayToken, error: errorRelay } = await supabase
|
||||
.from("server_auth")
|
||||
.insert({
|
||||
user_id: user.id,
|
||||
server_id,
|
||||
})
|
||||
.select()
|
||||
.maybeSingle();
|
||||
|
||||
SERVER_AUTH_TOKENS.set(relayToken, {
|
||||
user_id: user.id,
|
||||
server_id,
|
||||
});
|
||||
if (!relayToken || errorRelay)
|
||||
return NextResponse.json(
|
||||
{ message: "Failed to create relay token" },
|
||||
{ status: StatusCodes.INTERNAL_SERVER_ERROR }
|
||||
);
|
||||
|
||||
return NextResponse.json({ message: "ok", token: relayToken });
|
||||
return NextResponse.json({ message: "ok", token: relayToken.key });
|
||||
}
|
||||
|
||||
@@ -84,14 +84,26 @@ export async function GET(req: NextRequest) {
|
||||
if (!user_id)
|
||||
return NextResponse.json(
|
||||
{ message: "Invalid token" },
|
||||
{ status: StatusCodes.NOT_FOUND }
|
||||
{ status: StatusCodes.BAD_REQUEST }
|
||||
);
|
||||
|
||||
const { data: profile } = await supabase
|
||||
const { data: profile, error } = await supabase
|
||||
.from("profiles")
|
||||
.select("id, username, display_name, avatar_url, node_address")
|
||||
.eq("id", user_id)
|
||||
.maybeSingle();
|
||||
|
||||
if (error)
|
||||
return NextResponse.json(
|
||||
{ message: error.message },
|
||||
{ status: StatusCodes.INTERNAL_SERVER_ERROR }
|
||||
);
|
||||
|
||||
if (!profile)
|
||||
return NextResponse.json(
|
||||
{ message: "Profile not found" },
|
||||
{ status: StatusCodes.NOT_FOUND }
|
||||
);
|
||||
|
||||
return NextResponse.json({ message: "ok", ...profile });
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user