use of com.searchcode.app.dao.Repo in project searchcode-server by boyter.
the class CodeRouteService method getCode.
public Map<String, Object> getCode(Request request, Response response) {
Map<String, Object> map = new HashMap<>();
Repo repo = Singleton.getRepo();
Data data = Singleton.getData();
SearchcodeLib scl = Singleton.getSearchcodeLib(data);
OWASPClassifier owaspClassifier = new OWASPClassifier();
Cocomo2 coco = new Cocomo2();
String codeId = request.params(":codeid");
CodeResult codeResult = this.codeSearcher.getByCodeId(codeId);
if (codeResult == null) {
response.redirect("/404/");
halt();
}
List<String> codeLines = codeResult.code;
StringBuilder code = new StringBuilder();
StringBuilder lineNos = new StringBuilder();
String padStr = "";
for (int total = codeLines.size() / 10; total > 0; total = total / 10) {
padStr += " ";
}
for (int i = 1, d = 10, len = codeLines.size(); i <= len; i++) {
if (i / d > 0) {
d *= 10;
// Del last char
padStr = padStr.substring(0, padStr.length() - 1);
}
code.append("<span id=\"").append(i).append("\"></span>").append(StringEscapeUtils.escapeHtml4(codeLines.get(i - 1))).append("\n");
lineNos.append(padStr).append("<a href=\"#").append(i).append("\">").append(i).append("</a>").append("\n");
}
List<OWASPMatchingResult> owaspResults = new ArrayList<OWASPMatchingResult>();
if (CommonRouteService.owaspAdvisoriesEnabled()) {
if (!codeResult.languageName.equals("Text") && !codeResult.languageName.equals("Unknown")) {
owaspResults = owaspClassifier.classifyCode(codeLines, codeResult.languageName);
}
}
int limit = Integer.parseInt(Properties.getProperties().getProperty(Values.HIGHLIGHT_LINE_LIMIT, Values.DEFAULT_HIGHLIGHT_LINE_LIMIT));
boolean highlight = Singleton.getHelpers().tryParseInt(codeResult.codeLines, "0") <= limit;
RepoResult repoResult = repo.getRepoByName(codeResult.repoName);
if (repoResult != null) {
map.put("source", repoResult.getSource());
}
map.put("fileName", codeResult.fileName);
// TODO fix this properly code path includes the repo name and should be removed
String codePath = codeResult.codePath;
if (codeResult.codePath.contains("/")) {
codePath = codeResult.codePath.substring(codeResult.codePath.indexOf('/'), codeResult.codePath.length());
}
if (!codePath.startsWith("/")) {
codePath = "/" + codePath;
}
map.put("codePath", codePath);
map.put("codeLength", codeResult.codeLines);
map.put("linenos", lineNos.toString());
map.put("languageName", codeResult.languageName);
map.put("md5Hash", codeResult.md5hash);
map.put("repoName", codeResult.repoName);
map.put("highlight", highlight);
map.put("repoLocation", codeResult.getRepoLocation());
map.put("codeValue", code.toString());
map.put("highligher", CommonRouteService.getSyntaxHighlighter());
map.put("codeOwner", codeResult.getCodeOwner());
map.put("owaspResults", owaspResults);
double estimatedEffort = coco.estimateEffort(scl.countFilteredLines(codeResult.getCode()));
int estimatedCost = (int) coco.estimateCost(estimatedEffort, CommonRouteService.getAverageSalary());
if (estimatedCost != 0 && !scl.languageCostIgnore(codeResult.getLanguageName())) {
map.put("estimatedCost", estimatedCost);
}
map.put("logoImage", CommonRouteService.getLogo());
map.put("isCommunity", App.ISCOMMUNITY);
map.put(Values.EMBED, Singleton.getData().getDataByName(Values.EMBED, Values.EMPTYSTRING));
return map;
}
use of com.searchcode.app.dao.Repo in project searchcode-server by boyter.
the class CodeRouteService method getRepositoryList.
public Map<String, Object> getRepositoryList(Request request, Response response) {
Map<String, Object> map = new HashMap<>();
Repo repo = Singleton.getRepo();
String offSet = request.queryParams("offset");
int pageSize = 20;
int indexOffset = Singleton.getHelpers().tryParseInt(offSet, "0");
List<RepoResult> pagedRepo = repo.getPagedRepo(pageSize * indexOffset, pageSize + 1);
boolean hasNext = pagedRepo.size() == (pageSize + 1);
boolean hasPrevious = indexOffset != 0;
if (hasNext) {
pagedRepo = pagedRepo.subList(0, pageSize);
}
map.put("hasPrevious", hasPrevious);
map.put("hasNext", hasNext);
map.put("repoList", pagedRepo);
map.put("nextOffset", indexOffset + 1);
map.put("previousOffset", indexOffset - 1);
map.put("logoImage", CommonRouteService.getLogo());
map.put("isCommunity", App.ISCOMMUNITY);
map.put(Values.EMBED, Singleton.getData().getDataByName(Values.EMBED, Values.EMPTYSTRING));
return map;
}
use of com.searchcode.app.dao.Repo in project searchcode-server by boyter.
the class CodeRouteService method html.
public ModelAndView html(Request request, Response response) {
Repo repo = Singleton.getRepo();
Data data = Singleton.getData();
SearchcodeLib scl = Singleton.getSearchcodeLib(data);
CodeSearcher cs = new CodeSearcher();
CodeMatcher cm = new CodeMatcher(data);
Map<String, Object> map = new HashMap<>();
map.put("repoCount", repo.getRepoCount());
if (request.queryParams().contains("q")) {
String query = request.queryParams("q").trim();
String altquery = query.replaceAll("[^A-Za-z0-9 ]", " ").trim().replaceAll(" +", " ");
int page = 0;
if (request.queryParams().contains("p")) {
try {
page = Integer.parseInt(request.queryParams("p"));
page = page > 19 ? 19 : page;
} catch (NumberFormatException ex) {
page = 0;
}
}
String[] repos = new String[0];
String[] langs = new String[0];
String[] owners = new String[0];
String reposFilter = Values.EMPTYSTRING;
String langsFilter = Values.EMPTYSTRING;
String ownersFilter = Values.EMPTYSTRING;
String reposQueryString = Values.EMPTYSTRING;
String langsQueryString = Values.EMPTYSTRING;
String ownsQueryString = Values.EMPTYSTRING;
if (request.queryParams().contains("repo")) {
repos = request.queryParamsValues("repo");
if (repos.length != 0) {
List<String> reposList = Arrays.asList(repos).stream().map((s) -> "reponame:" + QueryParser.escape(s)).collect(Collectors.toList());
reposFilter = " && (" + StringUtils.join(reposList, " || ") + ")";
List<String> reposQueryList = Arrays.asList(repos).stream().map((s) -> "&repo=" + URLEncoder.encode(s)).collect(Collectors.toList());
reposQueryString = StringUtils.join(reposQueryList, "");
}
}
if (request.queryParams().contains("lan")) {
langs = request.queryParamsValues("lan");
if (langs.length != 0) {
List<String> langsList = Arrays.asList(langs).stream().map((s) -> "languagename:" + QueryParser.escape(s)).collect(Collectors.toList());
langsFilter = " && (" + StringUtils.join(langsList, " || ") + ")";
List<String> langsQueryList = Arrays.asList(langs).stream().map((s) -> "&lan=" + URLEncoder.encode(s)).collect(Collectors.toList());
langsQueryString = StringUtils.join(langsQueryList, "");
}
}
if (request.queryParams().contains("own")) {
owners = request.queryParamsValues("own");
if (owners.length != 0) {
List<String> ownersList = Arrays.asList(owners).stream().map((s) -> "codeowner:" + QueryParser.escape(s)).collect(Collectors.toList());
ownersFilter = " && (" + StringUtils.join(ownersList, " || ") + ")";
List<String> ownsQueryList = Arrays.asList(owners).stream().map((s) -> "&own=" + URLEncoder.encode(s)).collect(Collectors.toList());
ownsQueryString = StringUtils.join(ownsQueryList, "");
}
}
// split the query escape it and and it together
String cleanQueryString = scl.formatQueryString(query);
SearchResult searchResult = cs.search(cleanQueryString + reposFilter + langsFilter + ownersFilter, page);
searchResult.setCodeResultList(cm.formatResults(searchResult.getCodeResultList(), query, true));
for (CodeFacetRepo f : searchResult.getRepoFacetResults()) {
if (Arrays.asList(repos).contains(f.getRepoName())) {
f.setSelected(true);
}
}
for (CodeFacetLanguage f : searchResult.getLanguageFacetResults()) {
if (Arrays.asList(langs).contains(f.getLanguageName())) {
f.setSelected(true);
}
}
for (CodeFacetOwner f : searchResult.getOwnerFacetResults()) {
if (Arrays.asList(owners).contains(f.getOwner())) {
f.setSelected(true);
}
}
map.put("searchValue", query);
map.put("searchResult", searchResult);
map.put("reposQueryString", reposQueryString);
map.put("langsQueryString", langsQueryString);
map.put("ownsQueryString", ownsQueryString);
map.put("altQuery", altquery);
map.put("totalPages", searchResult.getPages().size());
map.put("isHtml", true);
map.put("logoImage", CommonRouteService.getLogo());
map.put("isCommunity", App.ISCOMMUNITY);
map.put(Values.EMBED, Singleton.getData().getDataByName(Values.EMBED, Values.EMPTYSTRING));
return new ModelAndView(map, "searchresults.ftl");
}
map.put("photoId", CommonRouteService.getPhotoId());
map.put("numDocs", cs.getTotalNumberDocumentsIndexed());
map.put("logoImage", CommonRouteService.getLogo());
map.put("isCommunity", App.ISCOMMUNITY);
map.put(Values.EMBED, Singleton.getData().getDataByName(Values.EMBED, Values.EMPTYSTRING));
return new ModelAndView(map, "index.ftl");
}
use of com.searchcode.app.dao.Repo in project searchcode-server by boyter.
the class CodeRouteService method literalSearch.
// This is very alpha and just for testing
// TODO improve or remove this
public Map<String, Object> literalSearch(Request request, Response response) {
Repo repo = Singleton.getRepo();
Data data = Singleton.getData();
CodeSearcher cs = new CodeSearcher();
CodeMatcher cm = new CodeMatcher(data);
Map<String, Object> map = new HashMap<>();
map.put("repoCount", repo.getRepoCount());
if (request.queryParams().contains("q")) {
String query = request.queryParams("q").trim();
int page = 0;
if (request.queryParams().contains("p")) {
try {
page = Integer.parseInt(request.queryParams("p"));
page = page > 19 ? 19 : page;
} catch (NumberFormatException ex) {
page = 0;
}
}
String altquery = query.replaceAll("[^A-Za-z0-9 ]", " ").trim().replaceAll(" +", " ");
SearchResult searchResult = cs.search(query, page);
searchResult.setCodeResultList(cm.formatResults(searchResult.getCodeResultList(), altquery, false));
map.put("searchValue", query);
map.put("searchResult", searchResult);
map.put("reposQueryString", "");
map.put("langsQueryString", "");
map.put("altQuery", "");
map.put("logoImage", CommonRouteService.getLogo());
map.put("isCommunity", App.ISCOMMUNITY);
return map;
}
map.put("photoId", 1);
map.put("numDocs", cs.getTotalNumberDocumentsIndexed());
map.put("logoImage", CommonRouteService.getLogo());
map.put("isCommunity", App.ISCOMMUNITY);
map.put(Values.EMBED, Singleton.getData().getDataByName(Values.EMBED, Values.EMPTYSTRING));
return map;
}
use of com.searchcode.app.dao.Repo in project searchcode-server by boyter.
the class AdminRouteService method postBulk.
public List<ValidatorResult> postBulk(Request request, Response response) {
String repos = request.queryParams("repos");
String[] repolines = repos.split("\\r?\\n");
Repo repo = Singleton.getRepo();
List<ValidatorResult> validatorResults = new ArrayList<>();
for (String line : repolines) {
String[] repoparams = line.split(",", -1);
if (repoparams.length == 7) {
String branch = repoparams[6].trim();
if (branch.equals(Values.EMPTYSTRING)) {
branch = "master";
}
String scm = repoparams[1].trim().toLowerCase();
if (scm.equals(Values.EMPTYSTRING)) {
scm = "git";
}
RepoResult repoResult = new RepoResult(-1, repoparams[0], scm, repoparams[2], repoparams[3], repoparams[4], repoparams[5], branch, "{}");
ValidatorResult validate = this.validatorService.validate(repoResult);
if (validate.isValid) {
repo.saveRepo(repoResult);
this.jobService.forceEnqueue(repoResult);
} else {
validate.setLine(line);
validatorResults.add(validate);
}
} else {
ValidatorResult validate = new ValidatorResult(false, "Incorrect number of elements: " + line);
validate.setLine(line);
validatorResults.add(validate);
}
}
return validatorResults;
}
Aggregations