mirror of https://github.com/buster-so/buster.git
lint
This commit is contained in:
parent
6d0a8962b5
commit
310c7362e7
|
@ -101,7 +101,9 @@ export function Auth({ apiKey, host, local, cloud, clear, noSave, show }: AuthPr
|
||||||
} else if (!isTTY) {
|
} else if (!isTTY) {
|
||||||
// Non-TTY environment - require API key from flags or env
|
// Non-TTY environment - require API key from flags or env
|
||||||
console.error('❌ Non-interactive environment detected.');
|
console.error('❌ Non-interactive environment detected.');
|
||||||
console.error(' Please provide API key via --api-key flag or BUSTER_API_KEY environment variable.');
|
console.error(
|
||||||
|
' Please provide API key via --api-key flag or BUSTER_API_KEY environment variable.'
|
||||||
|
);
|
||||||
exit();
|
exit();
|
||||||
} else if (initialHost || host) {
|
} else if (initialHost || host) {
|
||||||
// If we only have host, set it and prompt for API key
|
// If we only have host, set it and prompt for API key
|
||||||
|
|
|
@ -75,7 +75,9 @@ program
|
||||||
// In CI environments, we need to handle auth differently
|
// In CI environments, we need to handle auth differently
|
||||||
if (isCIEnvironment && !options.apiKey && !process.env.BUSTER_API_KEY) {
|
if (isCIEnvironment && !options.apiKey && !process.env.BUSTER_API_KEY) {
|
||||||
console.error('❌ Non-interactive environment detected.');
|
console.error('❌ Non-interactive environment detected.');
|
||||||
console.error(' Please provide API key via --api-key flag or BUSTER_API_KEY environment variable.');
|
console.error(
|
||||||
|
' Please provide API key via --api-key flag or BUSTER_API_KEY environment variable.'
|
||||||
|
);
|
||||||
console.error(' Example: buster auth --api-key YOUR_API_KEY');
|
console.error(' Example: buster auth --api-key YOUR_API_KEY');
|
||||||
console.error(' Or set: export BUSTER_API_KEY=YOUR_API_KEY');
|
console.error(' Or set: export BUSTER_API_KEY=YOUR_API_KEY');
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
|
@ -87,7 +89,13 @@ program
|
||||||
const { saveCredentials } = await import('./utils/credentials');
|
const { saveCredentials } = await import('./utils/credentials');
|
||||||
|
|
||||||
const apiKey = options.apiKey || process.env.BUSTER_API_KEY;
|
const apiKey = options.apiKey || process.env.BUSTER_API_KEY;
|
||||||
const host = options.host || (options.local ? 'http://localhost:3001' : (options.cloud ? 'https://api2.buster.so' : 'https://api2.buster.so'));
|
const host =
|
||||||
|
options.host ||
|
||||||
|
(options.local
|
||||||
|
? 'http://localhost:3001'
|
||||||
|
: options.cloud
|
||||||
|
? 'https://api2.buster.so'
|
||||||
|
: 'https://api2.buster.so');
|
||||||
const normalizedHost = host.startsWith('http') ? host : `https://${host}`;
|
const normalizedHost = host.startsWith('http') ? host : `https://${host}`;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -105,7 +113,9 @@ program
|
||||||
await saveCredentials({ apiKey, apiUrl: normalizedHost });
|
await saveCredentials({ apiKey, apiUrl: normalizedHost });
|
||||||
console.log('✅ Authentication successful and credentials saved.');
|
console.log('✅ Authentication successful and credentials saved.');
|
||||||
} else {
|
} else {
|
||||||
console.log('✅ Authentication successful (credentials not saved due to --no-save flag).');
|
console.log(
|
||||||
|
'✅ Authentication successful (credentials not saved due to --no-save flag).'
|
||||||
|
);
|
||||||
}
|
}
|
||||||
process.exit(0);
|
process.exit(0);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -17,9 +17,9 @@ import { zValidator } from '@hono/zod-validator';
|
||||||
import { Hono } from 'hono';
|
import { Hono } from 'hono';
|
||||||
import { HTTPException } from 'hono/http-exception';
|
import { HTTPException } from 'hono/http-exception';
|
||||||
import yaml from 'js-yaml';
|
import yaml from 'js-yaml';
|
||||||
|
import { throwUnauthorizedError } from '../../../../shared-helpers/asset-public-access';
|
||||||
import { getPubliclyEnabledByUser } from '../../../../shared-helpers/get-publicly-enabled-by-user';
|
import { getPubliclyEnabledByUser } from '../../../../shared-helpers/get-publicly-enabled-by-user';
|
||||||
import { getMetricsInAncestorAssetFromMetricIds } from '../../../../shared-helpers/metric-helpers';
|
import { getMetricsInAncestorAssetFromMetricIds } from '../../../../shared-helpers/metric-helpers';
|
||||||
import { throwUnauthorizedError } from '../../../../shared-helpers/asset-public-access';
|
|
||||||
|
|
||||||
interface GetDashboardHandlerParams {
|
interface GetDashboardHandlerParams {
|
||||||
dashboardId: string;
|
dashboardId: string;
|
||||||
|
|
|
@ -8,9 +8,9 @@ import {
|
||||||
import { zValidator } from '@hono/zod-validator';
|
import { zValidator } from '@hono/zod-validator';
|
||||||
import { Hono } from 'hono';
|
import { Hono } from 'hono';
|
||||||
import { HTTPException } from 'hono/http-exception';
|
import { HTTPException } from 'hono/http-exception';
|
||||||
|
import { throwUnauthorizedError } from '../../../../shared-helpers/asset-public-access';
|
||||||
import { getMetricsInAncestorAssetFromMetricIds } from '../../../../shared-helpers/metric-helpers';
|
import { getMetricsInAncestorAssetFromMetricIds } from '../../../../shared-helpers/metric-helpers';
|
||||||
import { standardErrorHandler } from '../../../../utils/response';
|
import { standardErrorHandler } from '../../../../utils/response';
|
||||||
import { throwUnauthorizedError } from '../../../../shared-helpers/asset-public-access';
|
|
||||||
|
|
||||||
export async function getReportHandler(
|
export async function getReportHandler(
|
||||||
reportId: string,
|
reportId: string,
|
||||||
|
|
|
@ -59,7 +59,6 @@ export const ThrowUnauthorizedErrorSchema = z.object({
|
||||||
|
|
||||||
export type ThrowUnauthorizedErrorParams = z.infer<typeof ThrowUnauthorizedErrorSchema>;
|
export type ThrowUnauthorizedErrorParams = z.infer<typeof ThrowUnauthorizedErrorSchema>;
|
||||||
|
|
||||||
|
|
||||||
// Decides the appropriate error to throw based on the public access settings
|
// Decides the appropriate error to throw based on the public access settings
|
||||||
export function throwUnauthorizedError(params: ThrowUnauthorizedErrorParams): never {
|
export function throwUnauthorizedError(params: ThrowUnauthorizedErrorParams): never {
|
||||||
const { publiclyAccessible, publicExpiryDate, publicPassword, userSuppliedPassword } = params;
|
const { publiclyAccessible, publicExpiryDate, publicPassword, userSuppliedPassword } = params;
|
||||||
|
|
|
@ -19,8 +19,8 @@ import type { AssetPermissionRole, VerificationStatus } from '@buster/server-sha
|
||||||
import { HTTPException } from 'hono/http-exception';
|
import { HTTPException } from 'hono/http-exception';
|
||||||
import yaml from 'js-yaml';
|
import yaml from 'js-yaml';
|
||||||
import { z } from 'zod';
|
import { z } from 'zod';
|
||||||
import { getPubliclyEnabledByUser } from './get-publicly-enabled-by-user';
|
|
||||||
import { throwUnauthorizedError } from './asset-public-access';
|
import { throwUnauthorizedError } from './asset-public-access';
|
||||||
|
import { getPubliclyEnabledByUser } from './get-publicly-enabled-by-user';
|
||||||
|
|
||||||
export const MetricAccessOptionsSchema = z.object({
|
export const MetricAccessOptionsSchema = z.object({
|
||||||
/** If public access has been verified by a parent resource set to true */
|
/** If public access has been verified by a parent resource set to true */
|
||||||
|
|
|
@ -21,9 +21,9 @@ const textAreaVariants = cva('leading-1.3', {
|
||||||
|
|
||||||
export interface InputTextAreaProps
|
export interface InputTextAreaProps
|
||||||
extends React.TextareaHTMLAttributes<HTMLTextAreaElement>,
|
extends React.TextareaHTMLAttributes<HTMLTextAreaElement>,
|
||||||
Omit<TextareaAutosizeProps, 'style'>,
|
Omit<TextareaAutosizeProps, 'style'>,
|
||||||
VariantProps<typeof inputTextAreaVariants>,
|
VariantProps<typeof inputTextAreaVariants>,
|
||||||
VariantProps<typeof textAreaVariants> {
|
VariantProps<typeof textAreaVariants> {
|
||||||
onPressMetaEnter?: (e: React.KeyboardEvent<HTMLTextAreaElement>) => void;
|
onPressMetaEnter?: (e: React.KeyboardEvent<HTMLTextAreaElement>) => void;
|
||||||
onPressEnter?: (e: React.KeyboardEvent<HTMLTextAreaElement>) => void;
|
onPressEnter?: (e: React.KeyboardEvent<HTMLTextAreaElement>) => void;
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,7 +48,13 @@ export async function checkPermission(check: AssetPermissionCheck): Promise<Asse
|
||||||
} = check;
|
} = check;
|
||||||
|
|
||||||
// Check cache first (only for single role checks)
|
// Check cache first (only for single role checks)
|
||||||
const cached = getCachedPermission(userId, assetId, assetType, requiredRole, userSuppliedPassword);
|
const cached = getCachedPermission(
|
||||||
|
userId,
|
||||||
|
assetId,
|
||||||
|
assetType,
|
||||||
|
requiredRole,
|
||||||
|
userSuppliedPassword
|
||||||
|
);
|
||||||
if (cached !== undefined) {
|
if (cached !== undefined) {
|
||||||
return cached;
|
return cached;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue