69 lines
1.7 KiB
JavaScript
69 lines
1.7 KiB
JavaScript
'use strict'
|
|
const {
|
|
validateScopes,
|
|
validateServerRole,
|
|
authorizeResolver
|
|
} = require('@/modules/shared')
|
|
|
|
const { getStream } = require('../services/streams')
|
|
|
|
module.exports = {
|
|
async validatePermissionsReadStream(streamId, req) {
|
|
const stream = await getStream({ streamId, userId: req.context.userId })
|
|
if (stream?.isPublic) return { result: true, status: 200 }
|
|
|
|
try {
|
|
await validateServerRole(req.context, 'server:user')
|
|
} catch (err) {
|
|
return { result: false, status: 401 }
|
|
}
|
|
|
|
if (!stream) return { result: false, status: 404 }
|
|
|
|
if (!stream.isPublic && req.context.auth === false) {
|
|
return { result: false, status: 401 }
|
|
}
|
|
|
|
if (!stream.isPublic) {
|
|
try {
|
|
await validateScopes(req.context.scopes, 'streams:read')
|
|
} catch (err) {
|
|
return { result: false, status: 401 }
|
|
}
|
|
|
|
try {
|
|
await authorizeResolver(req.context.userId, streamId, 'stream:reviewer')
|
|
} catch (err) {
|
|
return { result: false, status: 401 }
|
|
}
|
|
}
|
|
return { result: true, status: 200 }
|
|
},
|
|
|
|
async validatePermissionsWriteStream(streamId, req) {
|
|
if (!req.context || !req.context.auth) {
|
|
return { result: false, status: 401 }
|
|
}
|
|
|
|
try {
|
|
await validateServerRole(req.context, 'server:user')
|
|
} catch (err) {
|
|
return { result: false, status: 401 }
|
|
}
|
|
|
|
try {
|
|
await validateScopes(req.context.scopes, 'streams:write')
|
|
} catch (err) {
|
|
return { result: false, status: 401 }
|
|
}
|
|
|
|
try {
|
|
await authorizeResolver(req.context.userId, streamId, 'stream:contributor')
|
|
} catch (err) {
|
|
return { result: false, status: 401 }
|
|
}
|
|
|
|
return { result: true, status: 200 }
|
|
}
|
|
}
|