Textgen: Add permissions check for TabbyAPI keys There's no formal permissions checking in ST's UI, so add a temporary check in the server endpoint before requesting a download. Signed-off-by: kingbri <bdashore3@proton.me>

0672c8422e224896a213c3c210f56fe7b239c76e

kingbri <bdashore3@proton.me>

2 files changed, +21 -1Ignore whitespace
public/scripts/textgen-models.js+4 -1
@@ -526,7 +526,10 @@ async function downloadTabbyModel() {
526 body: JSON.stringify(params),526 body: JSON.stringify(params),
527 });527 });
528528
529 if (!response.ok) {529 if (response.status === 403) {
530 toastr.error("The provided key has invalid permissions. Please use an admin key for downloading.");
531 return;
532 } else if (!response.ok) {
530 throw new Error(response.statusText);533 throw new Error(response.statusText);
531 }534 }
532535
src/endpoints/backends/text-completions.js+17 -0
@@ -602,6 +602,23 @@ tabby.post('/download', jsonParser, async function (request, response) {
602 }602 }
603603
604 setAdditionalHeaders(request, args, baseUrl);604 setAdditionalHeaders(request, args, baseUrl);
605
606 // Check key permissions
607 const permissionResponse = await fetch(`${baseUrl}/v1/auth/permission`, {
608 headers: args.headers
609 });
610
611 if (permissionResponse.ok) {
612 const permissionJson = await permissionResponse.json();
613
614 if (permissionJson['permission'] !== 'admin') {
615 return response.status(403).send({ error: true });
616 }
617 } else {
618 console.log('API Permission error:', permissionResponse.status, permissionResponse.statusText);
619 return response.status(permissionResponse.status).send({ error: true });
620 }
621
605 const fetchResponse = await fetch(`${baseUrl}/v1/download`, args);622 const fetchResponse = await fetch(`${baseUrl}/v1/download`, args);
606623
607 if (!fetchResponse.ok) {624 if (!fetchResponse.ok) {