fix: GET token-auth-token endpoint

This commit is contained in:
Piyush Gupta
2025-11-29 03:24:38 +05:30
parent ee5b3a90fe
commit e54398b856
5 changed files with 42 additions and 26 deletions
-1
View File
@@ -595,7 +595,6 @@ export const TOKEN_AUTH = {
limit: "The number of tokens to return." limit: "The number of tokens to return."
}, },
GET_TOKEN: { GET_TOKEN: {
identityId: "The ID of the machine identity to get the token for.",
tokenId: "The ID of the token to get metadata for." tokenId: "The ID of the token to get metadata for."
}, },
CREATE_TOKEN: { CREATE_TOKEN: {
@@ -410,7 +410,7 @@ export const registerIdentityTokenAuthRouter = async (server: FastifyZodProvider
server.route({ server.route({
method: "GET", method: "GET",
url: "/token-auth/identities/:identityId/tokens/:tokenId", url: "/token-auth/tokens/:tokenId",
config: { config: {
rateLimit: readLimit rateLimit: readLimit
}, },
@@ -425,7 +425,6 @@ export const registerIdentityTokenAuthRouter = async (server: FastifyZodProvider
} }
], ],
params: z.object({ params: z.object({
identityId: z.string().describe(TOKEN_AUTH.GET_TOKEN.identityId),
tokenId: z.string().describe(TOKEN_AUTH.GET_TOKEN.tokenId) tokenId: z.string().describe(TOKEN_AUTH.GET_TOKEN.tokenId)
}), }),
response: { response: {
@@ -436,7 +435,6 @@ export const registerIdentityTokenAuthRouter = async (server: FastifyZodProvider
}, },
handler: async (req) => { handler: async (req) => {
const { token, identityMembershipOrg } = await server.services.identityTokenAuth.getTokenAuthTokenById({ const { token, identityMembershipOrg } = await server.services.identityTokenAuth.getTokenAuthTokenById({
identityId: req.params.identityId,
tokenId: req.params.tokenId, tokenId: req.params.tokenId,
actor: req.permission.type, actor: req.permission.type,
actorId: req.permission.id, actorId: req.permission.id,
@@ -451,7 +449,7 @@ export const registerIdentityTokenAuthRouter = async (server: FastifyZodProvider
event: { event: {
type: EventType.GET_TOKEN_IDENTITY_TOKEN_AUTH, type: EventType.GET_TOKEN_IDENTITY_TOKEN_AUTH,
metadata: { metadata: {
identityId: token.identityId, identityId: identityMembershipOrg.identity.id,
identityName: identityMembershipOrg.identity.name, identityName: identityMembershipOrg.identity.name,
tokenId: token.id tokenId: token.id
} }
@@ -621,48 +621,64 @@ export const identityTokenAuthServiceFactory = ({
const getTokenAuthTokenById = async ({ const getTokenAuthTokenById = async ({
tokenId, tokenId,
identityId,
isActorSuperAdmin, isActorSuperAdmin,
actorId, actorId,
actor, actor,
actorAuthMethod, actorAuthMethod,
actorOrgId actorOrgId
}: TGetTokenAuthTokenByIdDTO) => { }: TGetTokenAuthTokenByIdDTO) => {
await validateIdentityUpdateForSuperAdminPrivileges(identityId, isActorSuperAdmin); const foundToken = await identityAccessTokenDAL.findOne({
[`${TableName.IdentityAccessToken}.id` as "id"]: tokenId,
[`${TableName.IdentityAccessToken}.authMethod` as "authMethod"]: IdentityAuthMethod.TOKEN_AUTH
});
if (!foundToken) throw new NotFoundError({ message: `Token with ID ${tokenId} not found` });
const identityMembershipOrg = await membershipIdentityDAL.getIdentityById({ const identityMembershipOrg = await membershipIdentityDAL.getIdentityById({
scopeData: { scopeData: {
scope: AccessScope.Organization, scope: AccessScope.Organization,
orgId: actorOrgId orgId: actorOrgId
}, },
identityId identityId: foundToken.identityId
}); });
if (!identityMembershipOrg) throw new NotFoundError({ message: `Failed to find identity with ID ${identityId}` }); if (!identityMembershipOrg) {
throw new NotFoundError({ message: `Failed to find identity with ID ${foundToken.identityId}` });
}
await validateIdentityUpdateForSuperAdminPrivileges(foundToken.identityId, isActorSuperAdmin);
if (!identityMembershipOrg.identity.authMethods.includes(IdentityAuthMethod.TOKEN_AUTH)) { if (!identityMembershipOrg.identity.authMethods.includes(IdentityAuthMethod.TOKEN_AUTH)) {
throw new BadRequestError({ throw new BadRequestError({
message: "The identity does not have Token Auth" message: "The identity does not have Token Auth"
}); });
} }
const { permission } = await permissionService.getOrgPermission({
scope: OrganizationActionScope.Any,
actor,
actorId,
orgId: identityMembershipOrg.scopeOrgId,
actorAuthMethod,
actorOrgId
});
ForbiddenError.from(permission).throwUnlessCan(OrgPermissionIdentityActions.Read, OrgPermissionSubjects.Identity);
const token = await identityAccessTokenDAL.findOne({ if (identityMembershipOrg.identity.projectId) {
[`${TableName.IdentityAccessToken}.id` as "id"]: tokenId, const { permission } = await permissionService.getProjectPermission({
[`${TableName.IdentityAccessToken}.authMethod` as "authMethod"]: IdentityAuthMethod.TOKEN_AUTH, actionProjectType: ActionProjectType.Any,
[`${TableName.IdentityAccessToken}.identityId` as "identityId"]: identityId actor,
}); actorId,
projectId: identityMembershipOrg.identity.projectId,
actorAuthMethod,
actorOrgId
});
if (!token) throw new NotFoundError({ message: `Token with ID ${tokenId} not found` }); ForbiddenError.from(permission).throwUnlessCan(
ProjectPermissionIdentityActions.Read,
subject(ProjectPermissionSub.Identity, { identityId: identityMembershipOrg.identity.id })
);
} else {
const { permission } = await permissionService.getOrgPermission({
scope: OrganizationActionScope.Any,
actor,
actorId,
orgId: identityMembershipOrg.scopeOrgId,
actorAuthMethod,
actorOrgId
});
ForbiddenError.from(permission).throwUnlessCan(OrgPermissionIdentityActions.Read, OrgPermissionSubjects.Identity);
}
return { token, identityMembershipOrg }; return { token: foundToken, identityMembershipOrg };
}; };
const updateTokenAuthToken = async ({ const updateTokenAuthToken = async ({
@@ -42,7 +42,6 @@ export type TGetTokenAuthTokensDTO = {
export type TGetTokenAuthTokenByIdDTO = { export type TGetTokenAuthTokenByIdDTO = {
tokenId: string; tokenId: string;
identityId: string;
isActorSuperAdmin?: boolean; isActorSuperAdmin?: boolean;
} & Omit<TProjectPermission, "projectId">; } & Omit<TProjectPermission, "projectId">;
@@ -0,0 +1,4 @@
---
title: "Get Token"
openapi: "GET /api/v1/auth/token-auth/tokens/{tokenId}"
---