2222import org .apache .logging .log4j .LogManager ;
2323import org .apache .logging .log4j .Logger ;
2424
25+ import java .nio .charset .StandardCharsets ;
2526import java .text .MessageFormat ;
27+ import java .util .Base64 ;
2628import java .util .EnumSet ;
2729
2830import cloud .katta .client .ApiException ;
2931import cloud .katta .client .api .VaultResourceApi ;
3032import cloud .katta .client .model .VaultDto ;
3133import cloud .katta .core .DeviceSetupCallback ;
34+ import cloud .katta .crypto .uvf .UvfAccessTokenPayload ;
35+ import cloud .katta .crypto .uvf .UvfJWKCallback ;
3236import cloud .katta .crypto .uvf .UvfMetadataPayload ;
33- import cloud .katta .crypto .uvf .UvfMetadataPayloadPasswordCallback ;
37+ import cloud .katta .crypto .uvf .VaultIdMetadataUVFProvider ;
3438import cloud .katta .protocols .hub .exceptions .HubExceptionMappingService ;
3539import cloud .katta .workflows .VaultServiceImpl ;
3640import cloud .katta .workflows .exceptions .AccessException ;
3741import cloud .katta .workflows .exceptions .SecurityFailure ;
3842import com .fasterxml .jackson .core .JsonProcessingException ;
43+ import com .nimbusds .jose .JOSEException ;
44+ import com .nimbusds .jose .jwk .OctetSequenceKey ;
3945
4046public class HubVaultListService implements ListService {
4147 private static final Logger log = LogManager .getLogger (HubVaultListService .class );
@@ -69,7 +75,12 @@ public AttributedList<Path> list(final Path directory, final ListProgressListene
6975 final Path bucket = new Path (vaultMetadata .storage ().getDefaultPath (), EnumSet .of (Path .Type .directory , Path .Type .volume ),
7076 new PathAttributes ().setDisplayname (vaultMetadata .storage ().getNickname ()));
7177 try {
72- final HubUVFVault vault = new HubUVFVault (storage , bucket , prompt ).load (session , new UvfMetadataPayloadPasswordCallback (vaultMetadata .toJSON ()));
78+ final UvfAccessTokenPayload accessToken = vaultService .getVaultAccessTokenJWE (vaultDto .getId (), session .getUserKeys (setup ));
79+ final OctetSequenceKey rawMemberKey = UvfMetadataPayload .UniversalVaultFormatJWKS .memberKeyFromRawKey (Base64 .getDecoder ().decode (accessToken .key ()));
80+ final HubUVFVault vault = new HubUVFVault (storage , bucket , prompt ).load (session , new UvfJWKCallback (rawMemberKey ), new VaultIdMetadataUVFProvider (
81+ vaultDto .getId (), UvfMetadataPayload .createKeys (), vaultDto .getUvfMetadataFile ().getBytes (StandardCharsets .US_ASCII ),
82+ vaultMetadata .computeRootDirUvf (), vaultMetadata .computeRootDirIdHash ()
83+ ));
7384 log .info ("Loaded vault {}" , vault );
7485 registry .add (vault );
7586 vaults .add (vault .getHome ());
@@ -78,7 +89,7 @@ public AttributedList<Path> list(final Path directory, final ListProgressListene
7889 catch (VaultUnlockCancelException e ) {
7990 log .warn ("Skip vault {} with failure {} loading" , vaultDto , e );
8091 }
81- catch (JsonProcessingException e ) {
92+ catch (JsonProcessingException | JOSEException e ) {
8293 throw new SecurityFailure (e );
8394 }
8495 }
0 commit comments