Skip to content

Commit

Permalink
add issuer to sd jwt presentation
Browse files Browse the repository at this point in the history
Signed-off-by: F-Node-Karlsruhe <christian.fries@eecc.de>
  • Loading branch information
F-Node-Karlsruhe committed Apr 24, 2024
1 parent 21ca680 commit 5cd6f35
Showing 1 changed file with 86 additions and 73 deletions.
159 changes: 86 additions & 73 deletions frontend/src/utils.js
Original file line number Diff line number Diff line change
@@ -1,109 +1,122 @@
import jsonld from 'jsonld';
import { demoAuthPresentation } from './store/demoAuth';
import { decodeProtectedHeader } from "jose";
import jsonld from 'jsonld'
import { demoAuthPresentation } from './store/demoAuth'
import { decodeProtectedHeader, decodeJwt } from 'jose'

export const VerifiableType = {
CREDENTIAL: 'VerifiableCredential',
PRESENTATION: 'VerifiablePresentation'
};
CREDENTIAL: 'VerifiableCredential',
PRESENTATION: 'VerifiablePresentation',
}

const IPFS_GATEWAYS = ['ipfs.io', 'ipfs.ssi.eecc.de']

export function isURL(url) {
if (typeof url != 'string') return false;
return url.startsWith('https://');
if (typeof url != 'string') return false
return url.startsWith('https://')
}

export function getCredentialValue(value) {
return typeof value === 'object' ? value.value || value['@value'] || JSON.stringify(value, null, 2) : value;
return typeof value === 'object'
? value.value || value['@value'] || JSON.stringify(value, null, 2)
: value
}

export function getPlainCredential(credential) {
var clean_credential = { ...credential };
delete clean_credential.verified;
delete clean_credential.revoked;
delete clean_credential.suspended;
delete clean_credential.status;
delete clean_credential.presentation;
delete clean_credential.context;
return clean_credential;
var clean_credential = { ...credential }
delete clean_credential.verified
delete clean_credential.revoked
delete clean_credential.suspended
delete clean_credential.status
delete clean_credential.presentation
delete clean_credential.context
return clean_credential
}

export function getVerifiableType(verifiable) {
if (verifiable.type.includes(VerifiableType.PRESENTATION)) return VerifiableType.PRESENTATION;
return VerifiableType.CREDENTIAL;
if (verifiable.type.includes(VerifiableType.PRESENTATION))
return VerifiableType.PRESENTATION
return VerifiableType.CREDENTIAL
}

export function getCredentialType(credential) {
return credential.type.length > 1 ? credential.type.filter((c) => c != 'VerifiableCredential')[0] : credential.type[0];
return credential.type.length > 1
? credential.type.filter((c) => c != 'VerifiableCredential')[0]
: credential.type[0]
}

export function getHolder(presentation) {
if (presentation.holder) return presentation.holder;
const proof = Array.isArray(presentation.proof) ? presentation.proof[0] : presentation.proof
return proof.verificationMethod.split('#')[0];
if (presentation.holder) return presentation.holder
const proof = Array.isArray(presentation.proof)
? presentation.proof[0]
: presentation.proof
return proof.verificationMethod.split('#')[0]
}

export function SDJWTtoVP(jwt) {
console.log(jwt)
const decodedHeader = decodeProtectedHeader(jwt)
//const decodedJWT = decodeJwt(jwt)
console.log(decodedHeader)
//console.log(decodedJWT)
return {
jwt,
type: [VerifiableType.PRESENTATION],
holder: decodedHeader.kid.split('#')[0]
}
console.log(jwt)
const decodedHeader = decodeProtectedHeader(jwt)
const decodedJWT = decodeJwt(jwt)
console.log(decodedHeader)
console.log(decodedJWT)

if (!decodedHeader.kid) {
throw new Error('Missing kid in JWT header')
}

return {
jwt,
type: [VerifiableType.PRESENTATION],
holder: decodedHeader.kid.split('#')[0],
issuer: decodedJWT.iss,
}
}

export async function fetchIPFS(IPFSUrl) {

var document;

await Promise.any(IPFS_GATEWAYS.map(async (gateway) => {

return await fetch(`https://${gateway}/ipfs/${IPFSUrl.split('ipfs://')[1]}`);

}))
.then((result) => {

document = result;

})
.catch((error) => {
console.error(error)
})

if (!document) throw Error('Fetching from IPFS failed');

return document;

var document

await Promise.any(
IPFS_GATEWAYS.map(async (gateway) => {
return await fetch(
`https://${gateway}/ipfs/${IPFSUrl.split('ipfs://')[1]}`,
)
}),
)
.then((result) => {
document = result
})
.catch((error) => {
console.error(error)
})

if (!document) throw Error('Fetching from IPFS failed')

return document
}


const documentLoader = async (url) => {
let document;
if (url.startsWith('ipfs://')) {

document = await fetchIPFS(url)

} else document = await fetch(url);

return {
contextUrl: null,
document: await document.json(),
documentUrl: url
};
};

let document
if (url.startsWith('ipfs://')) {
document = await fetchIPFS(url)
} else document = await fetch(url)

return {
contextUrl: null,
document: await document.json(),
documentUrl: url,
}
}

export async function getContext(credential) {
const resolved = await jsonld.processContext(await jsonld.processContext(null, null), credential, { documentLoader });
return resolved.mappings;
const resolved = await jsonld.processContext(
await jsonld.processContext(null, null),
credential,
{ documentLoader },
)
return resolved.mappings
}

export function isDemoAuth(auth) {
return auth != undefined && JSON.stringify(auth) == JSON.stringify(demoAuthPresentation);
return (
auth != undefined &&
JSON.stringify(auth) == JSON.stringify(demoAuthPresentation)
)
}

0 comments on commit 5cd6f35

Please sign in to comment.