OverviewFilesCommitsIssuesDocsReleasesPeers

pear-git / scripts / debug-auth.js

78 lines · javascript ref:
#!/usr/bin/env bare

/**
 * Debug bearer token authentication
 */

import Corestore from 'corestore'
import Hyperbee from 'hyperbee'
import process from 'bare-process'
import { BearerTokenProvider } from '../lib/auth/providers/bearer-token.js'

async function main() {
  const token = process.argv[2]

  if (!token) {
    console.error('Usage: bare debug-auth.js <bearer-token>')
    process.exit(1)
  }

  console.log('🔍 Debugging bearer token authentication...\n')
  console.log('Token:', token)
  console.log('')

  // Initialize storage (same as server)
  const store = new Corestore('./pear-git-storage')
  await store.ready()

  const core = store.get({ name: 'pear-git-db' })
  const db = new Hyperbee(core, { keyEncoding: 'utf-8', valueEncoding: 'json' })
  await db.ready()

  // Create mock registry
  const registry = {
    db,
    isRevoked: async (tokenHash) => {
      // Check if identity is revoked
      const entry = await db.get(`revoked:${tokenHash}`)
      return !!entry
    }
  }

  const provider = new BearerTokenProvider(registry)

  try {
    console.log('Step 1: Extract credentials (simulated)')
    console.log('  Token extracted:', token.substring(0, 16) + '...')
    console.log('')

    console.log('Step 2: Authenticate')
    const result = await provider.authenticate(token)

    console.log('✅ Authentication successful!')
    console.log('')
    console.log('Result:')
    console.log(`  Identity ID: ${result.identityId}`)
    console.log(`  Method: ${result.method}`)
    console.log(`  Verified: ${result.verified}`)
    console.log(`  Username: ${result.credentials.username}`)
    console.log(`  Permissions: ${result.permissions.join(', ')}`)
    console.log(`  Repos: ${result.repos.join(', ')}`)

  } catch (err) {
    console.error('❌ Authentication failed:', err.message)
    console.error('')
    console.error('Full error:')
    console.error(err)
    process.exit(1)
  } finally {
    await db.close()
    await store.close()
  }
}

main().catch(err => {
  console.error('Fatal error:', err)
  process.exit(1)
})