Changeset View
Changeset View
Standalone View
Standalone View
keyserver/src/responders/search-responders.js
// @flow | // @flow | ||||
import t, { type TInterface } from 'tcomb'; | import t, { type TInterface } from 'tcomb'; | ||||
import type { | import type { | ||||
UserSearchRequest, | UserSearchRequest, | ||||
UserSearchResult, | UserSearchResult, | ||||
} from 'lib/types/search-types.js'; | } from 'lib/types/search-types.js'; | ||||
import { globalAccountUserInfoValidator } from 'lib/types/user-types.js'; | import { globalAccountUserInfoValidator } from 'lib/types/user-types.js'; | ||||
import { tShape } from 'lib/utils/validation-utils.js'; | import { tShape } from 'lib/utils/validation-utils.js'; | ||||
import { searchForUsers } from '../search/users.js'; | import { searchForUsers } from '../search/users.js'; | ||||
import type { Viewer } from '../session/viewer.js'; | import type { Viewer } from '../session/viewer.js'; | ||||
import { validateInput } from '../utils/validation-utils.js'; | import { validateInput, validateOutput } from '../utils/validation-utils.js'; | ||||
const userSearchRequestInputValidator = tShape({ | const userSearchRequestInputValidator = tShape({ | ||||
prefix: t.maybe(t.String), | prefix: t.maybe(t.String), | ||||
}); | }); | ||||
export const userSearchResultValidator: TInterface<UserSearchResult> = | export const userSearchResultValidator: TInterface<UserSearchResult> = | ||||
tShape<UserSearchResult>({ | tShape<UserSearchResult>({ | ||||
userInfos: t.list(globalAccountUserInfoValidator), | userInfos: t.list(globalAccountUserInfoValidator), | ||||
}); | }); | ||||
async function userSearchResponder( | async function userSearchResponder( | ||||
viewer: Viewer, | viewer: Viewer, | ||||
input: any, | input: any, | ||||
): Promise<UserSearchResult> { | ): Promise<UserSearchResult> { | ||||
const request: UserSearchRequest = input; | const request: UserSearchRequest = input; | ||||
await validateInput(viewer, userSearchRequestInputValidator, request); | await validateInput(viewer, userSearchRequestInputValidator, request); | ||||
const searchResults = await searchForUsers(request); | const searchResults = await searchForUsers(request); | ||||
return { userInfos: searchResults }; | const result = { userInfos: searchResults }; | ||||
return validateOutput(viewer, userSearchResultValidator, result); | |||||
} | } | ||||
export { userSearchResponder }; | export { userSearchResponder }; |