use of net.codestory.http.payload.Payload in project datashare by ICIJ.
the class LocalUserFilterTest method test_adds_custom_user_to_context.
@Test
public void test_adds_custom_user_to_context() throws Exception {
LocalUserFilter localUserFilter = new LocalUserFilter(new PropertiesProvider(new HashMap<String, String>() {
{
put("defaultUserName", "foo");
}
}));
Payload payload = localUserFilter.apply("url", context, nextFilter);
assertThat(payload).isSameAs(next);
verify(context).setCurrentUser(user.capture());
assertThat(user.getValue().login()).isEqualTo("foo");
}
use of net.codestory.http.payload.Payload in project datashare by ICIJ.
the class LocalUserFilterTest method test_adds_local_user_to_context.
@Test
public void test_adds_local_user_to_context() throws Exception {
LocalUserFilter localUserFilter = new LocalUserFilter(new PropertiesProvider());
Payload payload = localUserFilter.apply("url", context, nextFilter);
assertThat(payload).isSameAs(next);
verify(context).setCurrentUser(user.capture());
assertThat(user.getValue().login()).isEqualTo("local");
assertThat(user.getValue().isInRole("local")).isTrue();
}
use of net.codestory.http.payload.Payload in project datashare by ICIJ.
the class BatchSearchResource method search.
/**
* Creates a new batch search. This is a multipart form with 8 fields :
* name, description, csvFile, published, fileTypes, paths, fuzziness, phrase_matches
*
* No matter the order. The name and csv file are mandatory else it will return 400 (bad request)
* Csv file must have under 60 000 lines else it will return 413 (payload too large)
* Queries with less than two characters are filtered
*
* To do so with bash you can create a text file like :
* ```
* --BOUNDARY
* Content-Disposition: form-data; name="name"
*
* my batch search
* --BOUNDARY
* Content-Disposition: form-data; name="description"
*
* search description
* --BOUNDARY
* Content-Disposition: form-data; name="csvFile"; filename="search.csv"
* Content-Type: text/csv
*
* Obama
* skype
* test
* query three
* --BOUNDARY--
* Content-Disposition: form-data; name="published"
*
* true
* --BOUNDARY--
* ```
* Then replace `\n` with `\r\n` with a sed like this:
*
* `sed -i 's/$/^M/g' ~/multipart.txt`
*
* Then make a curl request with this file :
* ```
* curl -i -XPOST localhost:8080/api/batch/search/prj -H 'Content-Type: multipart/form-data; boundary=BOUNDARY' --data-binary @/home/dev/multipart.txt
* ```
* @param projectId
* @param context : the request body
* @return 200 or 400 or 413
*/
@Post("/search/:project")
public Payload search(String projectId, Context context) throws Exception {
List<Part> parts = context.parts();
String name = fieldValue("name", parts);
String csv = fieldValue("csvFile", parts);
if (name == null || csv == null) {
return badRequest();
}
String description = fieldValue("description", parts);
boolean published = "true".equalsIgnoreCase(fieldValue("published", parts)) ? TRUE : FALSE;
List<String> fileTypes = fieldValues("fileTypes", parts);
List<String> paths = fieldValues("paths", parts);
Optional<Part> fuzzinessPart = parts.stream().filter(p -> "fuzziness".equals(p.name())).findAny();
int fuzziness = fuzzinessPart.isPresent() ? parseInt(fuzzinessPart.get().content()) : 0;
Optional<Part> phraseMatchesPart = parts.stream().filter(p -> "phrase_matches".equals(p.name())).findAny();
boolean phraseMatches = phraseMatchesPart.isPresent() ? parseBoolean(phraseMatchesPart.get().content()) : FALSE;
LinkedHashSet<String> queries = getQueries(csv).stream().map(query -> (phraseMatches && query.contains("\"")) ? query : sanitizeDoubleQuotesInQuery(query)).collect(Collectors.toCollection(LinkedHashSet::new));
if (queries.size() >= MAX_BATCH_SIZE)
return new Payload(413);
BatchSearch batchSearch = new BatchSearch(project(projectId), name, description, queries, (User) context.currentUser(), published, fileTypes, paths, fuzziness, phraseMatches);
boolean isSaved = batchSearchRepository.save(batchSearch);
if (isSaved)
batchSearchQueue.put(batchSearch.uuid);
return isSaved ? new Payload("application/json", batchSearch.uuid, 200) : badRequest();
}
use of net.codestory.http.payload.Payload in project datashare by ICIJ.
the class BatchSearchResource method getResultAsCsv.
/**
* Retrieve the results of a batch search as a CSV file.
*
* The search request is by default all results of the batch search.
*
* @param batchId
* @return 200 and the CSV file as attached file
*
* Example :
* $(curl -i localhost:8080/api/batch/search/result/csv/f74432db-9ae8-401d-977c-5c44a124f2c8)
*/
@Get("/search/result/csv/:batchid")
public Payload getResultAsCsv(String batchId, Context context) {
StringBuilder builder = new StringBuilder("\"query\", \"documentUrl\", \"documentId\",\"rootId\",\"contentType\",\"contentLength\",\"documentPath\",\"creationDate\",\"documentNumber\"\n");
BatchSearch batchSearch = batchSearchRepository.get((User) context.currentUser(), batchId);
String url = propertiesProvider.get("rootHost").orElse(context.header("Host"));
getResultsOrThrowUnauthorized(batchId, (User) context.currentUser(), new BatchSearchRepository.WebQuery()).forEach(result -> builder.append("\"").append(result.query).append("\"").append(",").append("\"").append(docUrl(url, batchSearch.project, result.documentId, result.rootId)).append("\"").append(",").append("\"").append(result.documentId).append("\"").append(",").append("\"").append(result.rootId).append("\"").append(",").append("\"").append(result.contentType).append("\"").append(",").append("\"").append(result.contentLength).append("\"").append(",").append("\"").append(result.documentPath).append("\"").append(",").append("\"").append(result.creationDate).append("\"").append(",").append("\"").append(result.documentNumber).append("\"").append("\n"));
return new Payload("text/csv", builder.toString()).withHeader("Content-Disposition", "attachment;filename=\"" + batchId + ".csv\"");
}
use of net.codestory.http.payload.Payload in project datashare by ICIJ.
the class YesCookieAuthFilterTest method test_adds_new_user_to_context.
@Test
public void test_adds_new_user_to_context() throws Exception {
YesCookieAuthFilter filter = new YesCookieAuthFilter(new PropertiesProvider(new HashMap<String, String>() {
{
put("defaultProject", "demo");
put("messageBusAddress", "redis://redis:6379");
}
}));
Payload payload = filter.apply("url", context, nextFilter);
assertThat(payload).isSameAs(next);
verify(context).setCurrentUser(user.capture());
assertThat(user.getValue().login()).isNotEmpty();
assertThat(((DatashareUser) user.getValue()).getProjects()).containsExactly("demo");
assertThat(user.getValue().isInRole("local")).isFalse();
}
Aggregations