import {
  getOpaqueConfig,
  OpaqueID,
  RegistrationRecord,
  CredentialFile
} from '../lib/opaque.mjs'


const cfg = getOpaqueConfig(
  OpaqueID.OPAQUE_P256,
  'OPAQUE demo'
)

    
async function register_finish( request, env ) {

  const requestJSON = await request.json()

  const recordSerialized = requestJSON[ 'record' ]
  const client_identity = requestJSON[ 'username' ].trim()

  // username is also being used for this demo as server-side credential_identifier
  const credential_identifier = client_identity

  const record = RegistrationRecord.deserialize( cfg, recordSerialized )

  const credential_file = new CredentialFile( credential_identifier, record, client_identity )

  // store in DB
  let result
  if ( env.PERMANENT == 'true' ) {
    result = await env.KV.put( credential_identifier, new Uint8Array( credential_file.serialize() ) )
  }
  else {
    result = await env.KV.put( credential_identifier, new Uint8Array( credential_file.serialize() ), { expirationTtl: 3600 } )
  }

  let retrieve = await env.KV.get( credential_identifier )

  return new Response( JSON.stringify( { username: client_identity, message: "'" + client_identity + "' registered" } ), {
    headers: { 'Content-Type': 'application/json' }
  } )
}

export { register_finish }