| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- import { eq } from 'drizzle-orm';
- import { getMediaStatus } from '../src/actions/media';
- import { db } from '../src/db';
- import { users } from '../src/db/schema/auth';
- import { media } from '../src/db/schema/media';
- import { resources } from '../src/db/schema/resource';
- import { cleanupMediaRecord } from './helpers/media-cleanup';
- async function upsertUser(email: string, name: string) {
- const [existing] = await db.select().from(users).where(eq(users.email, email)).limit(1);
- if (existing) {
- return existing;
- }
- const [created] = await db.insert(users).values({
- email,
- name,
- passwordHash: 'test_password_hash',
- }).returning();
- return created;
- }
- async function runTest() {
- console.log('🔐 Testing media permission checks...');
- let ownedMediaId: string | null = null;
- const owner = await upsertUser('media-owner@ekb.com', 'Media Owner');
- const outsider = await upsertUser('media-outsider@ekb.com', 'Media Outsider');
- const pathSuffix = `${Date.now()}-permission-test.mp4`;
- const [resource] = await db.insert(resources).values({
- name: 'permission-test.mp4',
- path: `/media/${pathSuffix}`,
- type: 'file',
- ownerId: owner.id,
- }).returning();
- const [ownedMedia] = await db.insert(media).values({
- resourceId: resource.id,
- filename: 'permission-test.mp4',
- storageKey: `uploads/${pathSuffix}`,
- mimeType: 'video/mp4',
- size: BigInt(1),
- status: 'completed',
- metadata: {
- hlsPath: `hls/permission-test-${pathSuffix}/index.m3u8`,
- processedAt: new Date().toISOString(),
- },
- }).returning();
- ownedMediaId = ownedMedia.id;
- try {
- const ownerStatus = await getMediaStatus(ownedMedia.id, {
- auth: { userId: owner.id, groupIds: [] },
- });
- if (!ownerStatus?.hlsUrl) {
- throw new Error('Owner did not receive playback URL.');
- }
- try {
- await getMediaStatus(ownedMedia.id, {
- auth: { userId: outsider.id, groupIds: [] },
- });
- throw new Error('Outsider unexpectedly received media access.');
- } catch (error) {
- const message = error instanceof Error ? error.message : String(error);
- if (!message.includes('No matching permission')) {
- throw error;
- }
- }
- } finally {
- if (ownedMediaId) {
- await cleanupMediaRecord(ownedMediaId);
- }
- }
- console.log('✅ Media permission checks passed.');
- process.exit(0);
- }
- runTest().catch((error) => {
- console.error('❌ Test failed with error:', error);
- process.exit(1);
- });
|