use of io.kamax.mxisd.http.io.UserDirectorySearchResult in project mxisd by kamax-io.
the class ExecDirectoryStoreTest method byNameSuccessNoOutput.
@Test
public void byNameSuccessNoOutput() {
UserDirectorySearchResult result = getStore(sno).searchByDisplayName("user");
assertFalse(result.isLimited());
assertTrue(result.getResults().isEmpty());
}
use of io.kamax.mxisd.http.io.UserDirectorySearchResult in project mxisd by kamax-io.
the class RestDirectoryProviderTest method byThreepidFound.
@Test
public void byThreepidFound() {
stubFor(post(urlEqualTo(endpoint)).willReturn(aResponse().withHeader("Content-Type", ContentType.APPLICATION_JSON.getMimeType()).withBody(new String(byThreepidResponse.getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8))));
UserDirectorySearchResult result = p.searchBy3pid(byThreepidSearch);
assertTrue(!result.isLimited());
assertEquals(1, result.getResults().size());
UserDirectorySearchResult.Result entry = result.getResults().iterator().next();
assertNotNull(entry);
assertTrue(StringUtils.equals(byThreepidAvatar, entry.getAvatarUrl()));
assertTrue(StringUtils.equals(byThreepidDisplay, entry.getDisplayName()));
assertTrue(StringUtils.equals(MatrixID.asAcceptable(byThreepidId, domain).getId(), entry.getUserId()));
verify(postRequestedFor(urlMatching(endpoint)).withHeader("Content-Type", containing(ContentType.APPLICATION_JSON.getMimeType())).withRequestBody(equalTo(byThreepidRequest)));
}
use of io.kamax.mxisd.http.io.UserDirectorySearchResult in project mxisd by kamax-io.
the class UserDirectorySearchHandler method handleRequest.
@Override
public void handleRequest(HttpServerExchange exchange) {
String accessToken = getAccessToken(exchange);
UserDirectorySearchRequest searchQuery = parseJsonTo(exchange, UserDirectorySearchRequest.class);
URI target = URI.create(exchange.getRequestURL());
UserDirectorySearchResult result = mgr.search(target, accessToken, searchQuery.getSearchTerm());
respondJson(exchange, GsonUtil.get().toJson(result));
}
use of io.kamax.mxisd.http.io.UserDirectorySearchResult in project mxisd by kamax-io.
the class DirectoryManager method search.
public UserDirectorySearchResult search(URI target, String accessToken, String query) {
if (StringUtils.startsWith(query, "@")) {
query = query.substring(1);
}
log.info("Performing search for '{}'", query);
log.info("Original request URL: {}", target);
UserDirectorySearchResult result = new UserDirectorySearchResult();
if (cfg.getExclude().getHomeserver()) {
log.info("Skipping HS directory data, disabled in config");
} else {
URIBuilder builder = dns.transform(target);
log.info("Querying HS at {}", builder);
builder.setParameter("access_token", accessToken);
HttpPost req = RestClientUtils.post(builder.toString(), new UserDirectorySearchRequest(query));
try (CloseableHttpResponse res = client.execute(req)) {
int status = res.getStatusLine().getStatusCode();
Charset charset = ContentType.getOrDefault(res.getEntity()).getCharset();
String body = IOUtils.toString(res.getEntity().getContent(), charset);
if (status != 200) {
MatrixErrorInfo info = GsonUtil.get().fromJson(body, MatrixErrorInfo.class);
if (StringUtils.equals("M_UNRECOGNIZED", info.getErrcode())) {
// FIXME no hardcoding, use Enum
log.warn("Homeserver does not support Directory feature, skipping");
} else {
log.error("Homeserver returned an error while performing directory search");
throw new HttpMatrixException(status, info.getErrcode(), info.getError());
}
}
UserDirectorySearchResult resultHs = GsonUtil.get().fromJson(body, UserDirectorySearchResult.class);
log.info("Found {} match(es) in HS for '{}'", resultHs.getResults().size(), query);
result.getResults().addAll(resultHs.getResults());
if (resultHs.isLimited()) {
result.setLimited(true);
}
} catch (JsonSyntaxException e) {
throw new InternalServerError("Invalid JSON reply from the HS: " + e.getMessage());
} catch (IOException e) {
throw new InternalServerError("Unable to query the HS: I/O error: " + e.getMessage());
}
}
for (DirectoryProvider provider : providers) {
log.info("Using Directory provider {}", provider.getClass().getSimpleName());
UserDirectorySearchResult resultProvider = provider.searchByDisplayName(query);
log.info("Display name: found {} match(es) for '{}'", resultProvider.getResults().size(), query);
result.getResults().addAll(resultProvider.getResults());
if (resultProvider.isLimited()) {
result.setLimited(true);
}
if (cfg.getExclude().getThreepid()) {
log.info("Skipping 3PID data, disabled in config");
} else {
resultProvider = provider.searchBy3pid(query);
log.info("Threepid: found {} match(es) for '{}'", resultProvider.getResults().size(), query);
result.getResults().addAll(resultProvider.getResults());
if (resultProvider.isLimited()) {
result.setLimited(true);
}
}
}
log.info("Total matches: {} - limited? {}", result.getResults().size(), result.isLimited());
return result;
}
use of io.kamax.mxisd.http.io.UserDirectorySearchResult in project mxisd by kamax-io.
the class RestDirectoryProviderTest method byNameFound.
@Test
public void byNameFound() {
stubFor(post(urlEqualTo(endpoint)).willReturn(aResponse().withHeader("Content-Type", ContentType.APPLICATION_JSON.getMimeType()).withBody(byNameResponse)));
UserDirectorySearchResult result = p.searchByDisplayName(byNameSearch);
assertTrue(!result.isLimited());
assertEquals(1, result.getResults().size());
UserDirectorySearchResult.Result entry = result.getResults().iterator().next();
assertNotNull(entry);
assertTrue(StringUtils.equals(byNameAvatar, entry.getAvatarUrl()));
assertTrue(StringUtils.equals(byNameDisplay, entry.getDisplayName()));
assertTrue(StringUtils.equals(MatrixID.asAcceptable(byNameId, domain).getId(), entry.getUserId()));
verify(postRequestedFor(urlMatching(endpoint)).withHeader("Content-Type", containing(ContentType.APPLICATION_JSON.getMimeType())).withRequestBody(equalTo(byNameRequest)));
}
Aggregations