@@ -2,9 +2,12 @@ import { errors } from 'arsenal';
22import crypto from 'crypto' ;
33
44import config from '../../Config' ;
5+ import Index from './index' ;
56
67import { calculateSigningKey , hashSignature } from './vaultUtilities' ;
78
9+ const authIndex = new Index ( config . authData ) ;
10+
811const backend = {
912 /** verifySignatureV2
1013 * @param {string } stringToSign - string to sign built per AWS rules
@@ -16,21 +19,22 @@ const backend = {
1619 */
1720 verifySignatureV2 : ( stringToSign , signatureFromRequest ,
1821 accessKey , options , callback ) => {
19- const account = config . authData . accountsKeyedbyAccessKey [ accessKey ] ;
20- if ( ! account ) {
22+ const entity = authIndex . getByKey ( accessKey ) ;
23+ if ( ! entity ) {
2124 return callback ( errors . InvalidAccessKeyId ) ;
2225 }
23- const secretKey = account . secretKey ;
26+ const secretKey = entity . keys
27+ . filter ( kv => kv . access === accessKey ) [ 0 ] . secret ;
2428 const reconstructedSig =
2529 hashSignature ( stringToSign , secretKey , options . algo ) ;
2630 if ( signatureFromRequest !== reconstructedSig ) {
2731 return callback ( errors . SignatureDoesNotMatch ) ;
2832 }
2933 const userInfoToSend = {
30- accountDisplayName : account . displayName ,
31- canonicalID : account . canonicalID ,
32- arn : account . arn ,
33- IAMdisplayName : account . IAMdisplayName ,
34+ accountDisplayName : entity . accountDisplayName ,
35+ canonicalID : entity . canonicalID ,
36+ arn : entity . arn ,
37+ IAMdisplayName : entity . IAMdisplayName ,
3438 } ;
3539 const vaultReturnObject = {
3640 message : {
@@ -54,22 +58,23 @@ const backend = {
5458 */
5559 verifySignatureV4 : ( stringToSign , signatureFromRequest , accessKey ,
5660 region , scopeDate , options , callback ) => {
57- const account = config . authData . accountsKeyedbyAccessKey [ accessKey ] ;
58- if ( ! account ) {
61+ const entity = authIndex . getByKey ( accessKey ) ;
62+ if ( ! entity ) {
5963 return callback ( errors . InvalidAccessKeyId ) ;
6064 }
61- const secretKey = account . secretKey ;
65+ const secretKey = entity . keys
66+ . filter ( kv => kv . access === accessKey ) [ 0 ] . secret ;
6267 const signingKey = calculateSigningKey ( secretKey , region , scopeDate ) ;
6368 const reconstructedSig = crypto . createHmac ( 'sha256' , signingKey )
6469 . update ( stringToSign ) . digest ( 'hex' ) ;
6570 if ( signatureFromRequest !== reconstructedSig ) {
6671 return callback ( errors . SignatureDoesNotMatch ) ;
6772 }
6873 const userInfoToSend = {
69- accountDisplayName : account . displayName ,
70- canonicalID : account . canonicalID ,
71- arn : account . arn ,
72- IAMdisplayName : account . IAMdisplayName ,
74+ accountDisplayName : entity . accountDisplayName ,
75+ canonicalID : entity . canonicalID ,
76+ arn : entity . arn ,
77+ IAMdisplayName : entity . IAMdisplayName ,
7378 } ;
7479 const vaultReturnObject = {
7580 message : {
@@ -92,13 +97,10 @@ const backend = {
9297 getCanonicalIds : ( emails , log , cb ) => {
9398 const results = { } ;
9499 emails . forEach ( email => {
95- const lowercasedEmail = email . toLowerCase ( ) ;
96- if ( ! config . authData . accountsKeyedbyEmail [ lowercasedEmail ] ) {
100+ if ( ! authIndex . getByEmail ( email ) ) {
97101 results [ email ] = 'NotFound' ;
98102 } else {
99- results [ email ] =
100- config . authData . accountsKeyedbyEmail [ lowercasedEmail ]
101- . canonicalID ;
103+ results [ email ] = authIndex . getByEmail ( email ) . canonicalID ;
102104 }
103105 } ) ;
104106 const vaultReturnObject = {
@@ -123,8 +125,7 @@ const backend = {
123125 getEmailAddresses : ( canonicalIDs , options , cb ) => {
124126 const results = { } ;
125127 canonicalIDs . forEach ( canonicalId => {
126- const foundAccount = config . authData
127- . accountsKeyedbyCanID [ canonicalId ] ;
128+ const foundAccount = authIndex . getByCanId ( canonicalId ) ;
128129 if ( ! foundAccount || ! foundAccount . email ) {
129130 results [ canonicalId ] = 'NotFound' ;
130131 } else {
0 commit comments