Skip to content

Commit

Permalink
fix(secret): improve version history display and decryption handling
Browse files Browse the repository at this point in the history
- Fixed secret value decryption in RollbackSecretSheet
- Updated version number format to use "v" prefix
- Removed unused utility functions and fix TypeScript errors
- Added isDecrypted prop to handle encrypted/decrypted values
- Improved type safety in SecretCard component
  • Loading branch information
hanish-rishen committed Feb 23, 2025
1 parent ee5d67c commit bab418b
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 35 deletions.
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

'use client'
import React, { useEffect, useMemo, useState } from 'react'
import { extend } from 'dayjs'
Expand Down Expand Up @@ -91,8 +90,12 @@ function SecretPage(): React.JSX.Element {
} `}
>
<Accordion className="flex h-fit w-full flex-col gap-4" collapsible type="single">
{secrets.map(({ secret, values }) => (
<SecretCard key={secret.id} secret={secret} values={values} />
{secrets.map((secretData) => (
<SecretCard
isDecrypted={isDecrypted}
key={secretData.secret.id}
secretData={secretData}
/>
))}
</Accordion>
{/* Delete Secret alert dialog */}
Expand All @@ -102,7 +105,7 @@ function SecretPage(): React.JSX.Element {
{isEditSecretOpen && selectedSecret ? <EditSecretSheet /> : null}

{/* Rollback Secret sheet */}
{isRollbackSecretOpen && selectedSecret ? <RollbackSecretSheet /> : null}
{isRollbackSecretOpen && selectedSecret ? <RollbackSecretSheet isDecrypted={isDecrypted} /> : null}
</div>
)}
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { useCallback, useEffect, useState } from 'react'
import { toast } from 'sonner'
import { useAtom, useAtomValue } from 'jotai'
import { History } from 'lucide-react'
import * as dayjs from 'dayjs'
import dayjs from 'dayjs'
import ConfirmRollbackDialog from '../confirmRollbackDialog'
import {
Sheet,
Expand All @@ -24,29 +24,19 @@ import {
} from '@/store'
import ControllerInstance from '@/lib/controller-instance'

/**
* Formats a date into a standardized string representation.
*
* @param date - The date to format
* @returns The formatted date string in "D MMMM, YYYY h:mm A" format
*/
const formatDate = (date: Date | string): string => {
return dayjs(date).format('D MMMM, YYYY h:mm A')
}

interface Revision {
version: number
value: string
createdBy?: { // Make createdBy optional
createdBy?: {
id: string
name: string
profilePictureUrl: string | null
} | null // Allow null
} | null
createdOn: string
id: string
environmentId: string
createdById: string
SecretId: string
createdById: string | null
secretId: string
}

interface EnvironmentRevisions {
Expand All @@ -60,7 +50,11 @@ interface RollbackDetails {
version: number
}

export default function RollbackSecretSheet() {
interface RollbackSheetProps {
isDecrypted?: boolean; // Add isDecrypted prop
}

export default function RollbackSecretSheet({ isDecrypted = false }: RollbackSheetProps) {
const [isRollbackSecretOpen, setIsRollbackSecretOpen] = useAtom(
rollbackSecretOpenAtom
)
Expand All @@ -83,7 +77,6 @@ export default function RollbackSecretSheet() {
environmentName: value.environment.name,
environmentSlug: value.environment.slug,
revisions: data.items

} as EnvironmentRevisions
}
return null
Expand Down Expand Up @@ -190,14 +183,14 @@ export default function RollbackSecretSheet() {
<div className="flex-grow space-y-3 pr-8">
<div className="flex items-center gap-3">
<div className="text-base text-white/80 flex-grow">
{revision.value}
{isDecrypted ? revision.value : revision.value.replace(/./g, '*').substring(0, 20)}
<span className="px-2 py-1 rounded-md bg-blue-500/20 text-blue-400 text-sm font-medium ml-3">
v{revision.version}
</span>
</div>
</div>
<div className="text-sm text-white/40">
{formatDate(revision.createdOn)} by {revision.createdBy?.name ?? 'Unknown'}
{dayjs(revision.createdOn).fromNow()} by {revision.createdBy?.name ?? 'Unknown'}
</div>
</div>
</div>
Expand Down
19 changes: 7 additions & 12 deletions apps/platform/src/components/dashboard/secret/secretCard/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -38,21 +38,24 @@ import { copyToClipboard } from '@/lib/clipboard'

extend(dayjs)


interface SecretCardProps {
secretData: Secret
secretData: Secret | undefined
isDecrypted: boolean
}
export default function SecretCard({
secretData,
isDecrypted
}: SecretCardProps) {
const { secret, values } = secretData

const setSelectedSecret = useSetAtom(selectedSecretAtom)
const setIsEditSecretOpen = useSetAtom(editSecretOpenAtom)
const setIsDeleteSecretOpen = useSetAtom(deleteSecretOpenAtom)
const setIsRollbackSecretOpen = useSetAtom(rollbackSecretOpenAtom)

if (!secretData?.secret) {
return null;
}

const { secret, values } = secretData

const handleCopyToClipboard = () => {
copyToClipboard(secret.slug, 'You copied the slug successfully.', 'Failed to copy the slug.', 'You successfully copied the slug.')
Expand All @@ -69,18 +72,10 @@ export default function SecretCard({
}

const handleVersionHistoryClick = () => {



setSelectedSecret(secretData)


setIsRollbackSecretOpen(true)


}


return (
<ContextMenu>
<AccordionItem
Expand Down

0 comments on commit bab418b

Please sign in to comment.