Skip to content

Commit

Permalink
fix: remove metric and enforce validation
Browse files Browse the repository at this point in the history
  • Loading branch information
Matheus-Aguilar committed Jul 25, 2024
1 parent a05914b commit 5ff91d4
Show file tree
Hide file tree
Showing 6 changed files with 19 additions and 66 deletions.
17 changes: 3 additions & 14 deletions node/directives/checkAdminAccess.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,21 +24,16 @@ export class CheckAdminAccess extends SchemaDirectiveVisitor {
vtex: { adminUserAuthToken, storeUserAuthToken, logger },
} = context

const {
hasAdminToken,
hasValidAdminToken,
hasCurrentValidAdminToken,
hasValidAdminTokenFromStore,
} = await validateAdminToken(context, adminUserAuthToken as string)
const { hasAdminToken, hasValidAdminToken, hasCurrentValidAdminToken } =
await validateAdminToken(context, adminUserAuthToken as string)

const {
hasAdminTokenOnHeader,
hasValidAdminTokenOnHeader,
hasCurrentValidAdminTokenOnHeader,
} = await validateAdminTokenOnHeader(context)

const { hasApiToken, hasValidApiToken, hasValidApiTokenFromStore } =
await validateApiToken(context)
const { hasApiToken, hasValidApiToken } = await validateApiToken(context)

const hasStoreToken = !!storeUserAuthToken // we don't need to validate store token

Expand All @@ -64,8 +59,6 @@ export class CheckAdminAccess extends SchemaDirectiveVisitor {
hasStoreToken,
hasAdminTokenOnHeader,
hasValidAdminTokenOnHeader,
hasValidAdminTokenFromStore,
hasValidApiTokenFromStore,
},
'CheckAdminAccessAudit'
)
Expand All @@ -86,8 +79,6 @@ export class CheckAdminAccess extends SchemaDirectiveVisitor {
hasStoreToken,
hasAdminTokenOnHeader,
hasValidAdminTokenOnHeader,
hasValidAdminTokenFromStore,
hasValidApiTokenFromStore,
})
throw new AuthenticationError('No token was provided')
}
Expand All @@ -110,8 +101,6 @@ export class CheckAdminAccess extends SchemaDirectiveVisitor {
hasStoreToken,
hasAdminTokenOnHeader,
hasValidAdminTokenOnHeader,
hasValidAdminTokenFromStore,
hasValidApiTokenFromStore,
})
throw new ForbiddenError('Unauthorized Access')
}
Expand Down
17 changes: 3 additions & 14 deletions node/directives/checkUserAccess.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,21 +25,16 @@ export class CheckUserAccess extends SchemaDirectiveVisitor {
vtex: { adminUserAuthToken, storeUserAuthToken, logger },
} = context

const {
hasAdminToken,
hasValidAdminToken,
hasCurrentValidAdminToken,
hasValidAdminTokenFromStore,
} = await validateAdminToken(context, adminUserAuthToken as string)
const { hasAdminToken, hasValidAdminToken, hasCurrentValidAdminToken } =
await validateAdminToken(context, adminUserAuthToken as string)

const {
hasAdminTokenOnHeader,
hasValidAdminTokenOnHeader,
hasCurrentValidAdminTokenOnHeader,
} = await validateAdminTokenOnHeader(context)

const { hasApiToken, hasValidApiToken, hasValidApiTokenFromStore } =
await validateApiToken(context)
const { hasApiToken, hasValidApiToken } = await validateApiToken(context)

const { hasStoreToken, hasValidStoreToken, hasCurrentValidStoreToken } =
await validateStoreToken(context, storeUserAuthToken as string)
Expand Down Expand Up @@ -67,8 +62,6 @@ export class CheckUserAccess extends SchemaDirectiveVisitor {
hasValidStoreToken,
hasAdminTokenOnHeader,
hasValidAdminTokenOnHeader,
hasValidAdminTokenFromStore,
hasValidApiTokenFromStore,
},
'CheckUserAccessAudit'
)
Expand All @@ -94,8 +87,6 @@ export class CheckUserAccess extends SchemaDirectiveVisitor {
hasStoreToken,
hasAdminTokenOnHeader,
hasValidAdminTokenOnHeader,
hasValidAdminTokenFromStore,
hasValidApiTokenFromStore,
})
throw new AuthenticationError('No token was provided')
}
Expand All @@ -120,8 +111,6 @@ export class CheckUserAccess extends SchemaDirectiveVisitor {
hasValidStoreToken,
hasAdminTokenOnHeader,
hasValidAdminTokenOnHeader,
hasValidAdminTokenFromStore,
hasValidApiTokenFromStore,
})
throw new ForbiddenError('Unauthorized Access')
}
Expand Down
27 changes: 3 additions & 24 deletions node/directives/helper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ export const validateAdminToken = async (
hasAdminToken: boolean
hasValidAdminToken: boolean
hasCurrentValidAdminToken: boolean
hasValidAdminTokenFromStore: boolean
}> => {
const {
clients: { identity, lm },
Expand All @@ -19,8 +18,6 @@ export const validateAdminToken = async (
let hasValidAdminToken = false
// this is used to check if the token is valid by current standards
let hasCurrentValidAdminToken = false
// this is used to check if the token is valid and from this store
let hasValidAdminTokenFromStore = false

if (hasAdminToken) {
try {
Expand All @@ -32,17 +29,8 @@ export const validateAdminToken = async (
// in the future we should remove this line
hasCurrentValidAdminToken = true

if (authUser?.audience === 'admin') {
hasValidAdminToken = await lm.getUserAdminPermissions(
authUser.account,
authUser.id
)
}

// check if the token is from this store. Currently used for metrics
// in future we should merge this with the previous check
if (authUser?.audience === 'admin' && authUser?.account === account) {
hasValidAdminTokenFromStore = await lm.getUserAdminPermissions(
hasValidAdminToken = await lm.getUserAdminPermissions(
account,
authUser.id
)
Expand All @@ -60,7 +48,6 @@ export const validateAdminToken = async (
hasAdminToken,
hasValidAdminToken,
hasCurrentValidAdminToken,
hasValidAdminTokenFromStore,
}
}

Expand All @@ -69,7 +56,6 @@ export const validateApiToken = async (
): Promise<{
hasApiToken: boolean
hasValidApiToken: boolean
hasValidApiTokenFromStore: boolean
}> => {
const {
clients: { identity, lm },
Expand All @@ -81,7 +67,6 @@ export const validateApiToken = async (
const appKey = context?.headers['vtex-api-appkey'] as string
const hasApiToken = !!(apiToken?.length && appKey?.length)
let hasValidApiToken = false
let hasValidApiTokenFromStore = false

if (hasApiToken) {
try {
Expand All @@ -94,14 +79,8 @@ export const validateApiToken = async (
token,
})

if (authUser?.audience === 'admin') {
hasValidApiToken = true
}

// check if the token is from this store. Currently used for metrics
// in future we should merge this with the previous check
if (authUser?.audience === 'admin' && authUser?.account === account) {
hasValidApiTokenFromStore = await lm.getUserAdminPermissions(
hasValidApiToken = await lm.getUserAdminPermissions(
account,
authUser.id
)
Expand All @@ -115,7 +94,7 @@ export const validateApiToken = async (
}
}

return { hasApiToken, hasValidApiToken, hasValidApiTokenFromStore }
return { hasApiToken, hasValidApiToken }
}

export const validateStoreToken = async (
Expand Down
11 changes: 5 additions & 6 deletions node/directives/validateAdminUserAccess.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,15 +41,16 @@ export class ValidateAdminUserAccess extends SchemaDirectiveVisitor {
userAgent,
}

const { hasAdminToken, hasValidAdminToken, hasValidAdminTokenFromStore } =
await validateAdminToken(context, adminUserAuthToken as string)
const { hasAdminToken, hasValidAdminToken } = await validateAdminToken(
context,
adminUserAuthToken as string
)

// add admin token metrics
metricFields = {
...metricFields,
hasAdminToken,
hasValidAdminToken,
hasValidAdminTokenFromStore,
}

// allow access if has valid admin token
Expand Down Expand Up @@ -91,15 +92,13 @@ export class ValidateAdminUserAccess extends SchemaDirectiveVisitor {
return resolve(root, args, context, info)
}

const { hasApiToken, hasValidApiToken, hasValidApiTokenFromStore } =
await validateApiToken(context)
const { hasApiToken, hasValidApiToken } = await validateApiToken(context)

// add API token metrics
metricFields = {
...metricFields,
hasApiToken,
hasValidApiToken,
hasValidApiTokenFromStore,
}

// allow access if has valid API token
Expand Down
11 changes: 5 additions & 6 deletions node/directives/validateStoreUserAccess.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,15 +42,16 @@ export class ValidateStoreUserAccess extends SchemaDirectiveVisitor {
userAgent,
}

const { hasAdminToken, hasValidAdminToken, hasValidAdminTokenFromStore } =
await validateAdminToken(context, adminUserAuthToken as string)
const { hasAdminToken, hasValidAdminToken } = await validateAdminToken(
context,
adminUserAuthToken as string
)

// add admin token metrics
metricFields = {
...metricFields,
hasAdminToken,
hasValidAdminToken,
hasValidAdminTokenFromStore,
}

// allow access if has valid admin token
Expand Down Expand Up @@ -92,15 +93,13 @@ export class ValidateStoreUserAccess extends SchemaDirectiveVisitor {
return resolve(root, args, context, info)
}

const { hasApiToken, hasValidApiToken, hasValidApiTokenFromStore } =
await validateApiToken(context)
const { hasApiToken, hasValidApiToken } = await validateApiToken(context)

// add API token metrics
metricFields = {
...metricFields,
hasApiToken,
hasValidApiToken,
hasValidApiTokenFromStore,
}

// allow access if has valid API token
Expand Down
2 changes: 0 additions & 2 deletions node/metrics/auth.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,6 @@ export interface AuthAuditMetric {
hasValidApiToken?: boolean
hasAdminTokenOnHeader?: boolean
hasValidAdminTokenOnHeader?: boolean
hasValidAdminTokenFromStore?: boolean
hasValidApiTokenFromStore?: boolean
}

export class AuthMetric implements Metric {
Expand Down

0 comments on commit 5ff91d4

Please sign in to comment.