@@ -3,7 +3,7 @@ const Promise = require('bluebird');
33const Errors = require ( 'common-errors' ) ;
44const noop = require ( 'lodash/noop' ) ;
55const identity = require ( 'lodash/identity' ) ;
6- const get = require ( 'lodash/ get' ) ;
6+ const get = require ( '../utils/ get-value ' ) ;
77const getMetadata = require ( '../utils/getMetadata' ) ;
88const { getUserId } = require ( '../utils/userData' ) ;
99const { USERS_ALIAS_FIELD } = require ( '../constants' ) ;
@@ -17,19 +17,15 @@ const { isArray } = Array;
1717 */
1818function isPublic ( audiences ) {
1919 return ( metadata , username ) => {
20- let notFound = true ;
21-
2220 // iterate over passed audiences, generally we only retrieve one audience
2321 // so this check is cheap
24- audiences . forEach ( ( audience ) => {
25- if ( notFound && get ( metadata , [ audience , USERS_ALIAS_FIELD ] ) === username ) {
26- notFound = false ;
22+ for ( const audience of Object . values ( audiences ) ) {
23+ if ( get ( metadata , [ audience , USERS_ALIAS_FIELD ] ) === username ) {
24+ return ;
2725 }
28- } ) ;
29-
30- if ( notFound ) {
31- throw new Errors . HttpStatusError ( 404 , 'username was not found' ) ;
3226 }
27+
28+ throw new Errors . HttpStatusError ( 404 , 'username was not found' ) ;
3329 } ;
3430}
3531
@@ -38,23 +34,23 @@ function isPublic(audiences) {
3834 * @param {String } username
3935 * @return {Promise }
4036 */
41- function retrieveMetadata ( username ) {
42- return Promise
43- . bind ( this . service , username )
44- . then ( getUserId )
45- . then ( userId => [ userId , this . audiences , this . fields ] )
46- . spread ( getMetadata )
47- . tap ( metadata => this . filter ( metadata , username ) ) ;
37+ async function retrieveMetadata ( username ) {
38+ const { service, audiences, fields, verifyBanned } = this ;
39+
40+ const userId = await getUserId . call ( service , username , verifyBanned ) ;
41+ const metadata = await getMetadata . call ( service , userId , audiences , fields ) ;
42+
43+ this . filter ( metadata , username ) ;
44+
45+ return metadata ;
4846}
4947
5048/**
5149 * If we request only 1 user - return unwrapped array
5250 * @param {Array } responses
5351 * @return {Array|Object }
5452 */
55- function extractResponse ( responses ) {
56- return responses [ 0 ] ;
57- }
53+ const extractResponse = responses => responses [ 0 ] ;
5854
5955/**
6056 * @api {amqp } <prefix>.getMetadata Retrieve Public Data
@@ -73,11 +69,12 @@ function extractResponse(responses) {
7369 * @apiParam (Payload) {String[]} fields.* - fields to return from a passed audience
7470 *
7571 */
76- module . exports = function getMetadataAction ( request ) {
72+ async function getMetadataAction ( request ) {
7773 const {
7874 audience : _audience ,
7975 username : _username ,
8076 public : isPublicResponse ,
77+ includingBanned,
8178 fields,
8279 } = request . params ;
8380
@@ -92,13 +89,17 @@ module.exports = function getMetadataAction(request) {
9289 usernames,
9390 filter,
9491 fields,
92+ verifyBanned : includingBanned === false ,
9593 service : this ,
9694 } ;
9795
98- return Promise
96+ const response = await Promise
9997 . bind ( ctx , usernames )
100- . map ( retrieveMetadata )
101- . then ( unnest ) ;
102- } ;
98+ . map ( retrieveMetadata ) ;
99+
100+ return unnest ( response ) ;
101+ }
102+
103+ getMetadataAction . transports = [ ActionTransport . amqp , ActionTransport . internal ] ;
103104
104- module . exports . transports = [ ActionTransport . amqp , ActionTransport . internal ] ;
105+ module . exports = getMetadataAction ;
0 commit comments